Copitano schreef op zondag 24 augustus 2025 @ 17:38:
Na enig treuzelen vorige week toch maar eens geüpdatet naar de laatste stabiele versie van Domoticz. Nu spijt van.
De volgende zaken werken sinds de update niet meer
[Afbeelding]
Heb al van alles geprobeerd, zoals updaten en upgraden van het besturingssysteem op mijn Pi (bullseye).
Ik krijg deze foutmelding in het log
code:
1
2
3
4
5
| 2025-08-24 15:13:00.815 Error: Error opening url: http://127.0.0.1:8080/json.htm?type=graph&sensor=counter&range=month&idx=305
2025-08-24 15:13:00.948 Error: dzVents: HTTP/1.1 response: 404 ==>> Not Found
2025-08-24 15:13:00.959 Error: dzVents: Could not get (good) data from domoticz. Error (404)
2025-08-24 15:13:00.959 Error: dzVents: An error occurred when calling event handler YoulessMaand
2025-08-24 15:13:00.959 Error: dzVents: /home/pi/domoticz/scripts/dzVents/scripts/YoulessMaand.lua:53: attempt to index a nil value (global 'domoticz') |
Alles draait nu op:
Version: 2025.1
Build Hash: 89d5c900d
Compile Date: 2025-05-05 09:02:49
dzVents Version: 3.1.8
Python Version: 3.9.2 (default, Mar 20 2025, 02:07:39) [GCC 10.2.1 20210110]
Voor wat betreft de dag- en maand COP zeg de eerste log regel eigenlijk alles. De rest is een doorwerkfout. Als een basisgegeven niet kan worden opgehaald kan dzVents daar natuurlijk ook niet mee rekenen. idx 305 (stroomverbruik van de warmtepomp afkomstig van een Youless) wordt wel gewoon geüpdatet.
Zodra ik een systeembackup van enkele minuten voor de update terug zet werkt het wel weer gewoon. Maar ik wil gewoon steeds updaten als er een nieuwe stabiele versie uitkomt.
Hieronder nog het script voor het maandtotaal dat ik overigens niet zelf heb geschreven.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| local httpResponses = "monthTotal"
return {
on = {
timer = { "every 1 minutes" },
httpResponses = { httpResponses .. "*" }
},
logging = {
level = domoticz.LOG_DEBUG, -- set to LOG_ERROR when script works as expected
marker = httpResponse
},
execute = function(dz, item)
-- ****************************** Your settings below this line ***************************************************
usageDevice = dz.devices(305) -- Replace xxxx with ID of energyDevice you want to track
monthTotal = dz.devices(834) -- Create as virtual managed counter (energy) and change yyyy to the ID of the new device idx was 320
-- ****************************** No changes required below this line *********************************************
local function logWrite(str,level)
dz.log(tostring(str),level or dz.LOG_DEBUG)
end
local function triggerJSON(id, period, delay)
local delay = delay or 0
local URLString = dz.settings['Domoticz url'] .. "/json.htm?type=graph&sensor=counter&range=" ..
period .. "&idx=" .. id
dz.openURL({ url = URLString,
method = "GET",
callback = httpResponses .. "_" .. period}).afterSec(delay)
end
local function calculateMonthTotal(rt)
local monthTotal = 0
local currentMonth = dz.time.rawDate:sub(1,7)
for id, result in ipairs(rt) do
if rt[id].d:sub(1,7) == currentMonth then
logWrite(rt[id].d .. " ==>> " .. rt[id].v)
monthTotal = monthTotal + rt[id].v
end
end
return monthTotal --* 1000 oorspronkelijk script
end
if not item.isHTTPResponse then
triggerJSON(usageDevice.id, "month")
elseif item.ok then -- statusCode == 2xx
monthTotal.update(0,calculateMonthTotal(item.json.result))
else
logWrite("Could not get (good) data from domoticz. Error (" .. (item.statusCode or 999) .. ")" ,dz.LOG_ERROR)
logWrite(item.data)
domoticz.log('montTotal: '..monthTotal)
domoticz.log('currentMonth: '..currentMonth)
end
end
} |
Iemand ideeën hoe ik de irritante probleem kan oplossen zonder een verse installatie van de hele zooi?
Ik ben al een geruime tijd voorstander om de triggers en de reponses te scheiden.
Dit maakt de code compacter en beter te analyseren.
Aan het eind van het script met de trigger log ik de scriptnaam dat hierna de response gaat verwerken.
Andersom, in het script dat de response verwerkt geef ik aan door welke scriptnaam de response is afgetrapt.
De markers geef ik dezelfde naam als de scriptnaam, (ondanks dat dit default is).
Dit vanwege de herkenning in de logging.
https://wiki.domoticz.com..._{_%E2%80%A6_}_(optional)
Wat ik nu als marker zie lijkt mij een niet gedeclareerde variabele httpResponse en geen string.
Dit interpreteer ik zo omdat de quotes rondom ontbreken.
De error op r53 lijkt te komen doordat in het script dz wordt gebruikt ipv domoticz.
Op r26 wordt de URLString obv een paar variabelen samengesteld. Zelf zou ik de uitkomst van de samenstelling altijd loggen en igv een url eerst handmatig uitproberen.
Mijn vraag: Werkt de URLString buiten dz om ook zoals in de browser en bij voorkeur dmv een http request vanaf de cli op de RPi?
Eigenlijk geldt het loggen ook voor de berekening op r39.
Het nut van de functie logWrite ontgaat me eerlijk gezegd.
Een functie met één regel code en de aanroep ervan lijkt me onnodig complex en de code meer vervuilen dan goed doen.
Bij de verwerking van item.json.result op r48 zou ik deze waarde ook eerst loggen.
De declaratie van de variabelen doe ik altijd als eerste, dus boven het begin met de return op r3.
Dit houdt de code compacter, overzichtelijker en makkelijker te analyseren.
Wat me in functie calculateMonthTotal opvalt is dat op r34 de monthTotal op 0 wordt gezet terwijl op r17 de monthTotal op dz.devices(834) wordt gezet. Gaat dit wel werken?
Om dit te controleren zou ik achter beide regels een logregel toevoegen met monthTotal.
Detail: van montTotal op r53 zou ik aanpassen in monthTotal.
Succes verder met je script(s) en upgrade van Dz.