Copitano schreef op zondag 3 september 2023 @ 13:51:
Heeft iemand enig idee waar ik het euvel moet zoeken?
Hoe kan ik forseren dat de dzVents scripts de widgets weer gaan updaten?
De buienradar plugin zou ik er eventueel vanaf kunnen gooien en verder werken met alleen de build-in versie. Moet dan wel een aantal scripts aanpassen.
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
| 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(320) -- Create as virtual managed counter (energy) and change yyyy to the ID of the new device
-- ****************************** 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
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)
end
end
} |
Deze lijkt helemaal niets te doen, althans in het log van domoticz is niets te zien.
Probeer eerst elke variabele te loggen zoals usageDevice en monthTotal van resp regels 16 en 17 door toevoeging van regels 18 en 19:
code:
1
2
| dz.log (usageDevice)
dz.log (monthTotal) |
Daarnaast lijkt het declareren van beide variabelen te ontbreken.
code:
1
2
| local usageDevice
local monthTotal |
Klopt mijn gedachte?
Dat zou dan te zien zijn wanneer de resp logregels nil weergeven.
Deze 2 declaraties zou ik op resp regels 2 en 3 plaatsen
Of zie ik zit ze over het hoofd?
Alle andere declaraties zou ik overigens ook boven de return. {...} zetten.
De declaratie op regel 1 (local httpResponses....): Ik zou een variabele niet zo snel de naam van een native keyword geven.
En ik zou beide triggers (timer en httpResponses) uit elkaar trekken en er twee aparte scripts van maken: één voor de timer en één voor de httpResponses.
Alles voor de leerbaarheid, logging en daarmee de analyse.
en:
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
| return {
active = true,
--on = {
--['timer'] = { "every 1 minutes" } -- Change to your liking to 1,2,3,4,5,6,10,12,15 or 20
--},
on = {
devices = {
'Power_SM',
}
},
execute = function(domoticz, device)
local YoulessVandaagX =domoticz.devices("Elektra WP").counterDeliveredToday
local YoulessVandaag =YoulessVandaagX/1000
local Teruggeleverd_Meter =domoticz.devices("Power_SM").counterDeliveredToday*1000
local Verbruikt_Meter =domoticz.devices("Power_SM").counterToday*1000
local Netto_Verbruikt_Meter =domoticz.devices("Power_SM").counterToday*1000-Teruggeleverd_Meter
local Verbruikt_Direkt =domoticz.devices("S0").WhToday-Teruggeleverd_Meter
local Verbruikt_Totaal =(Verbruikt_Direkt+Verbruikt_Meter)/1000
local Verbruikt_ex_WP =((Verbruikt_Direkt+Verbruikt_Meter)/1000-YoulessVandaag)
--local NetLaag =domoticz.devices("Power_SM").
--local NetHoog =domoticz.devices("Power_SM").
--local ZonLaag =domoticz.devices("Power_SM").
--local ZonHoog =domoticz.devices("Power_SM").
--local ZonnestroomVandaag =
domoticz.openURL('http://192.168.xxx.xxx:8080/json.htm?type=command¶m=udevice&idx='..domoticz.devices('Teruggeleverd Meter').idx..'&nvalue=0&svalue='..Teruggeleverd_Meter)
domoticz.openURL('http://192.168.xxx.xxx:8080/json.htm?type=command¶m=udevice&idx='..domoticz.devices('Verbruikt Meter').idx..'&nvalue=0&svalue='..Verbruikt_Meter)
domoticz.openURL('http://192.168.xxx.xxx:8080/json.htm?type=command¶m=udevice&idx='..domoticz.devices('Netto Verbruikt Meter').idx..'&nvalue=0&svalue='..Netto_Verbruikt_Meter)
domoticz.openURL('http://192.168.xxx.xxx:8080/json.htm?type=command¶m=udevice&idx='..domoticz.devices('Verbruikt Direkt').idx..'&nvalue=0&svalue='..Verbruikt_Direkt)
domoticz.openURL('http://192.168.xxx.xxx:8080/json.htm?type=command¶m=udevice&idx='..domoticz.devices('Verbruikt Totaal').idx..'&nvalue=0&svalue='..Verbruikt_Totaal)
domoticz.openURL('http://192.168.xxx.xxx:8080/json.htm?type=command¶m=udevice&idx='..domoticz.devices('Verbruikt excl. WP').idx..'&nvalue=0&svalue='..Verbruikt_ex_WP)
domoticz.log('YoulessVandaagX: '..YoulessVandaagX)
domoticz.log('YoulessVandaag: '..YoulessVandaag)
domoticz.log('Teruggeleverd_Meter: '..Teruggeleverd_Meter)
domoticz.log('Verbruikt_Meter: '..Verbruikt_Meter)
domoticz.log('Netto_Verbruikt_Meter: '..Netto_Verbruikt_Meter)
domoticz.log('Verbruikt_Direkt: '..Verbruikt_Direkt)
domoticz.log('Verbruikt_Totaal: '..Verbruikt_Totaal)
domoticz.log('Verbruikt_ex_WP: '..Verbruikt_ex_WP)
end
} |
Bij deze laatste zie ik wel waardes wijzigen in het log van domoticz. Het script lijkt dus wel te worden getriggerd. Lijkt dus iets met de widgets te zijn. Waardes worden niet doorgezet naar influxdb en grafana.
In het log staan geen foutmeldingen.
Wat de plugin van buienradar betreft krijg ik na verloop van tijd wel een foutmelding dat de verbinding onverwacht is verbroken.
Ook hier: Loggen, loggen, loggen. In dit geval de opbouw van de url:
code:
1
2
3
4
5
6
| domoticz.log ('http://192.168.xxx.xxx:8080/json.htm?type=command¶m=udevice&idx='..domoticz.devices ('Teruggeleverd Meter') .idx .. '&nvalue=0&svalue=' .. Teruggeleverd_Meter)
domoticz.log ('http://192.168.xxx.xxx:8080/json.htm?type=command¶m=udevice&idx='..domoticz.devices ('Verbruikt Meter') .idx .. '&nvalue=0&svalue=' .. Verbruikt_Meter)
domoticz.log ('http://192.168.xxx.xxx:8080/json.htm?type=command¶m=udevice&idx='..domoticz.devices ('Netto Verbruikt Meter').idx .. '&nvalue=0&svalue=' .. Netto_Verbruikt_Meter)
domoticz.log ('http://192.168.xxx.xxx:8080/json.htm?type=command¶m=udevice&idx='..domoticz.devices ('Verbruikt Direkt') .idx .. '&nvalue=0&svalue=' .. Verbruikt_Direkt)
domoticz.log ('http://192.168.xxx.xxx:8080/json.htm?type=command¶m=udevice&idx='..domoticz.devices ('Verbruikt Totaal') .idx .. '&nvalue=0&svalue=' .. Verbruikt_Totaal)
domoticz.log ('http://192.168.xxx.xxx:8080/json.htm?type=command¶m=udevice&idx='..domoticz.devices ('Verbruikt excl. WP') .idx .. '&nvalue=0&svalue=' .. Verbruikt_ex_WP) |
Je ziet dan de opbouw van de url.en kan de fouten analyseren.
En als het Ok lijkt en de url doet niets dan kan je altijd een copy/pase doen van de url.
Maar waarom maak je geen gebruik van de standaard opbouw met
code:
1
2
3
4
5
| domoticz.openURL ({
url = mijnUurl,
callback = 'mijnCallback',
timeout = 20,
}) |
Vwb Buienradar:
Dat heb ik ook regelmatig ri Buienradar, maar denk dat dit hickups zijn in het path naar de buienradar site.
Of deze hickups lokale netwerk zijn, in de router of bij buienradar zelf dat kan ik niet nagaan.
En heb dit soort errors ook regelmatig bij mijn ventilatiebox, en die hangt (logisch) in het lokale netwerk.