Maak van Domoticz een weerstation – Deel 2
In Maak van Domoticz een weerstation – Deel 1 hebben we al 18 sensoren/switches werkend gekregen om van Domoticz een weerstation te maken. Helaas ontbreken we nog enkele gegevens om een weerbericht voor de volgende dag te kunnen maken. In dit artikel leggen we uit hoe we de ontbrekende gegevens kunnen toevoegen. Het gaat om:
- Grondtemperatuur
- Verwachting morgen
- Verwachting uitgebreid
- Temperatuur dauwpunt
- Bewolkingsgraad
- UV-waarde
- Ozon-waarde
Benodigdheden
Virtuele sensoren aanmaken
De volgende stap is om een virtuele sensor aan te maken. Ga naar Setup -> Hardware en kies bij Type voor Dummy. Je mag zeg een herkenbare naam kiezen:
Zodra de Dummy Hardware toegevoegd is kunnen de virtuele sensoren gaan aanmaken. Klik hiervoor op Create Virtual Sensors (in het donkerblauw).
Maak nu de virtuele sensor aan van het type “Temperature” en geef “Temperatuur Grond” als naam van de sensor in:
Maak op dezelfde wijze onderstaande virtuele sensoren aan (hou dezelfde namen aan, anders moet je ze ook wijzigen in het script op regel 25 t/m 31):
Verwachting morgen — Text sensor
Verwachting uitgebreid — Text sensor
Temperatuur Dauwpunt — Temperature sensor
Bewolkingsgraad — Percentage sensor
UV — UV sensor
Ozone — Custom sensor met axis “DU”
DarkSky API-key
Tot slot moeten we nog een API-key aanmaken op de website van DarkSky. Deze API-key heb je nodig om via het script informatie van DarkSky naar Domoticz te halen. Volg de instructies op de DarkSky website.
Script
De laatste stap is het script. Ga naar Setup > More Options > Events en kies voor een LUA event (van het type Time). Kopieer onderstaand script naar Domoticz. Vul op regel 14 het IP + poortnummer van Domoticz in. Vul op regel 15 het nummer van een weerstation bij jou in de buurt in. Op regel 16 vul het de API-key van DarkSky in. Debugging kun je op regel 17 aan- of uitzetten. Tot slot kun je op regel 18 de taal voor de weersverwachtingen instellen. Activeer het event en sla het op.
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
--[[ WEERSTATIONS: Amsterdam = 36 Groningen = 13 Oost-Groningen = 31 Vlissingen = 44 Arnhem = 2 Hoek van Holland = 17 Oost-Overijssel = 12 Voorschoten = 46 Berkhout = 3 Hoogeveen = 18 Rotterdam = 33 Wadden = 19 Den Helder = 6 Leeuwarden = 26 Utrecht = 5 Weert = 8 Eindhoven = 7 Lelystad = 27 Terneuzen = 47 West-Friesland = 38 Gilze Rijen = 10 Maastricht = 29 Twente = 41 West-Utrecht = 28 Goes = 11 Noord-Groningen = 24 Uden = 45 Woensdrecht = 50 Gorinchem = 16 Noordoostpolder = 30 Venlo = 1 Zwolle = 15 --]] -------------------------------- ---------- SETTINGS ------------ -------------------------------- local domo_ip = "192.168.2.62:8080" -- IP adres van Domoticz, inclusief poort local weerstation = 33 -- Kies je weerstation naar keuze local api_key = "126387d6c1a1bd4731a2f366854ab8ed5" -- Darksky secret key local debug = 1 -- 0 = no debug, 1 = debug local language = "nl" -- ar: Arabic, az: Azerbaijani, be: Belarusian, bg: Bulgarian, bs: Bosnian, ca: Catalan, cs: Czech, da: Danish, -- de: German, el: Greek, en: English, es: Spanish, et: Estonian, fi: Finnish, fr: French, he: Hebrew, hr: Croatian, -- hu: Hungarian, id: Indonesian, is: Icelandic, it: Italian, ja: Japanese, ka: Georgian, ko: Korean, kw: Cornish, -- lv: Latvian, nb: Norwegian Bokmål, nl: Dutch, no: Norwegian Bokmål (alias for nb), pl: Polish, pt: Portuguese, -- ro: Romanian, ru: Russian, sk: Slovak, sl: Slovenian, sr: Serbian, sv: Swedish, tet: Tetum, tr: Turkish, -- uk: Ukrainian, x-pig-latin: Igpay Atinlay, zh: simplified Chinese, zh-tw: traditional Chinese local dev_TempGround = "Temperatuur Grond" -- Temperature sensor local dev_TextTomorrow = "Verwachting morgen" -- Text sensor local dev_LongText = "Verwachting uitgebreid" -- Text sensor local dev_DewPoint = "Temperatuur Dauwpunt" -- Temperature sensor local dev_CloudCover = "Bewolkingsgraad" -- Percentage sensor local dev_UV = "UV" -- UV sensor local dev_Ozone = "Ozone" -- Custom sensor with axis "DU" commandArray={} --Functie devices updaten function UpdateDev(device,nvalue,svalues) commandArray[#commandArray+1] = {['UpdateDevice'] = otherdevices_idx[device]..'|'..tostring(nvalue)..'|'..tostring(svalues)} end -- Functie afronding function round(num, dec) if num == 0 then return 0 else local mult = 10^(dec or 0) return math.floor(num * mult + 0.5) / mult end end -------------------------------------------------- ----- ######## Buienradar API Data call ######## ----- -------------------------------------------------- time = os.date("*t") if ((time.min+2)%5)==0 then -- Script loopt iedere 5 minuten (bv. 11.03, 11.08, 11.13, 11.18, etc. json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux local config=assert(io.popen('curl "https://data.buienradar.nl/2.0/feed/json"')) local Stringjson = config:read('*all') config:close() local jsonData = json:decode(Stringjson) -- Convert the json to a LUA table if jsonData.actual.stationmeasurements[ weerstation ] ~= nil then -- this sometimes happens around midnight val_TempGround = jsonData.actual.stationmeasurements[ weerstation ].groundtemperature val_WeatherTomorrow = jsonData.forecast.fivedayforecast[1].weatherdescription val_SunChanceTomorrow = jsonData.forecast.fivedayforecast[1].sunChance val_RainChanceTomorrow = jsonData.forecast.fivedayforecast[1].rainChance val_RainMinimum = jsonData.forecast.fivedayforecast[1].mmRainMin val_RainMaximum = jsonData.forecast.fivedayforecast[1].mmRainMax val_WindDirectionTomorrow = jsonData.forecast.fivedayforecast[1].windDirection val_WindSpeedTomorrow = jsonData.forecast.fivedayforecast[1].wind val_TempTomorrowMinMin = jsonData.forecast.fivedayforecast[1].mintemperatureMin --minimale minimumtemperatuur val_TempTomorrowMaxMin = jsonData.forecast.fivedayforecast[1].mintemperatureMax --maximale minimumtemperatuur val_TempTomorrowMinMax = jsonData.forecast.fivedayforecast[1].maxtemperatureMin --minimale maximumtemperatuur val_TempTomorrowMaxMax = jsonData.forecast.fivedayforecast[1].maxtemperatureMax --maximale maximumtemperatuur end --Min/Max. temperatuur bepalen if val_TempTomorrowMinMin == val_TempTomorrowMaxMin then TempMinimum = val_TempTomorrowMinMin else TempMinimum = val_TempTomorrowMinMin.." - "..val_TempTomorrowMaxMin end if val_TempTomorrowMinMax == val_TempTomorrowMaxMax then TempMaximum = val_TempTomorrowMinMax else TempMaximum = val_TempTomorrowMinMax.." - "..val_TempTomorrowMaxMax end --Regenhoeveeldheid bepalen if val_RainMinimum == val_RainMaximum then RainIntensity = val_RainMinimum else RainIntensity = val_RainMinimum.." - "..val_RainMaximum end -- Windrichting tekst bepalen if val_WindDirectionTomorrow == "z" or val_WindDirectionTomorrow == "Z" then WindDirectionTomorrow = " het zuiden" elseif val_WindDirectionTomorrow == "zw" or val_WindDirectionTomorrow == "ZW" then WindDirectionTomorrow = "het zuidwesten" elseif val_WindDirectionTomorrow == "zo" or val_WindDirectionTomorrow == "ZO" then WindDirectionTomorrow = "het zuidoosten" elseif val_WindDirectionTomorrow == "w" or val_WindDirectionTomorrow == "W" then WindDirectionTomorrow = "het westen" elseif val_WindDirectionTomorrow == "nw" or val_WindDirectionTomorrow == "NW" then WindDirectionTomorrow = "het noordwesten" elseif val_WindDirectionTomorrow == "n" or val_WindDirectionTomorrow == "N" then WindDirectionTomorrow = "het noorden" elseif val_WindDirectionTomorrow == "no" or val_WindDirectionTomorrow == "NO" then WindDirectionTomorrow = " het noordoosten" elseif val_WindDirectionTomorrow == "o" or val_WindDirectionTomorrow == "O" then WindDirectionTomorrow = "het oosten" else WindDirectionTomorrow = "variabele richtingen" end --Voorspellingen forecast=val_WeatherTomorrow.. "\n " .."\n".. "Komende nacht daalt de temperatuur naar "..TempMinimum.." °C. Morgen overdag wordt morgen maximaal "..TempMaximum.. " °C. Er is morgen "..val_SunChanceTomorrow.." % kans op zon en "..val_RainChanceTomorrow.." % kans op neerslag ("..RainIntensity.." mm). De wind komt uit "..WindDirectionTomorrow.." en zal kracht "..val_WindSpeedTomorrow.." Bft hebben." .."\n " .."\n " if otherdevices_svalues[dev_TextTomorrow] ~= forecast then UpdateDev(dev_TextTomorrow,0,forecast) end -- Updating domoticz devices UpdateDev(dev_TempGround,0,val_TempGround) if debug==1 then print ("Temperatuur Grond: "..val_TempGround.." °C") end end --------------------------------------- -- ######## Darksy API call ######## -- --------------------------------------- if ((time.min+2)%5)==0 then -- Script loopt iedere 5 minuten (bv. 11.03, 11.08, 11.13, 11.18, etc. json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux local config=assert(io.popen('curl "http://'..domo_ip..'/json.htm?type=settings"')) local Stringjson = config:read('*all') config:close() local jsonData = json:decode(Stringjson) -- Convert the json to a LUA table lat = jsonData.Location.Latitude lon = jsonData.Location.Longitude local coord = lat..","..lon json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux local config=assert(io.popen('curl "https://api.darksky.net/forecast/'..api_key..'/'..coord..'?lang='..language..'&units=si&exclude=hourly,flags"')) local Stringjson = config:read('*all') config:close() local jsonData = json:decode(Stringjson) -- Convert the json to a LUA table if jsonData ~= nil then -- this sometimes happens around midnight val_UV = jsonData.currently.uvIndex val_Ozone = jsonData.currently.ozone val_DewPoint = round(jsonData.currently.dewPoint,1) val_CloudCover = jsonData.currently.cloudCover*100 end if debug==1 then print("Bewolkingsgraad : "..val_CloudCover.. " %") print("UV-kracht :"..val_UV) print("Ozone : De ozone-waarde is "..val_Ozone) print("Dauwpunt : "..val_DewPoint.. " °C") end -- Domoticz devices updaten UpdateDev(dev_CloudCover,0,val_CloudCover) UpdateDev(dev_DewPoint,0,val_DewPoint) UpdateDev(dev_UV,0,val_UV..";0") UpdateDev(dev_Ozone,0,val_Ozone) if debug==1 then print ("Dauwpunt: "..val_DewPoint.." °C") print ("Bewolkingsgraad: "..val_CloudCover.." %") print ("UV-Index: "..val_UV) print ("Ozone: "..val_Ozone) end end ------------------------------------------------------- -- ######## Buienradar Verwachting API call ######## -- ------------------------------------------------------- if ((time.min+2)%30)==0 then -- Script loopt iedere 30 minuten (bv. 11.28, 11.58, 12.28, 12.58, etc. json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")() -- For Linux local config=assert(io.popen('curl "https://data.buienradar.nl/1.1/feed/json"')) local Stringjson = config:read('*all') config:close() local jsonData = json:decode(Stringjson) -- Convert the json to a LUA table val_LongText = jsonData.buienradarnl.weergegevens.verwachting_vandaag.titel .."\n " .."\n ".. jsonData.buienradarnl.weergegevens.verwachting_vandaag.tekst .."\n " .."\n" val_LongText = string.gsub(val_LongText, " ", " ") val_LongText = string.gsub(val_LongText, "’", "'") val_LongText = string.gsub(val_LongText, "‘", "'") val_LongText = string.gsub(val_LongText, "ë", "ë") val_LongText = string.gsub(val_LongText, "è", "è") val_LongText = string.gsub(val_LongText, "é", "é") val_LongText = string.gsub(val_LongText, "ê", "ê") val_LongText = string.gsub(val_LongText, ";", ";") if debug==1 then print ("Uitgebreid: "..val_LongText) end if otherdevices_svalues[dev_LongText] ~= val_LongText then UpdateDev(dev_LongText,0,val_LongText) end end return commandArray |
Hoi Joost,
Ik heb je script geprobeerd maar ik loop tegen deze error aan.
2018-11-25 13:00:00.649 Error: EventSystem: in weer: [string “–[[ WEERSTATIONS:
…”]:49: attempt to concatenate local ‘lat’ (a nil value)
Weet jij zo de oplossing?
Dat betreft een fout in de user variable LatitudeThuis.
Heb je als type ‘String’ en bij value een punt i.p.v. een komma gebruikt? Ook de naam van de user variable moet exact overeenkomen.
Het kan zijn dat CloudCover in jouw regio (tijdelijk) niet beschikbaar is, dan krijg je een foutmelding in de log te zien. De regel is verder gewoon goed, alleen de fout-afhandeling is nog niet optimaal in het script. Kijk het eens een paar uurtjes aan…
Hoi Joost,
Ik had ook nog een typefout in de sensors :), nu werkt alles behalve de bevolkingsgraad maar die kan ik wel missen.
Dank voor jouw support!
Inmiddels het speedtest script van jou ook al draaien.
Gr. Tinus
Hoi Joost,
(Bijna) alles werkt, behalve bewolkingsgraad (en dauwpunt, voor mij niet belangrijk). Krijg alleen onderstaande foutmelding:
2018-12-14 13:28:01.174 Error: EventSystem: in buienradar: [string “–[[ WEERSTATIONS:
…”]:185: attempt to index field ‘alerts’ (a nil value) ….maar er is geen waarschuwing geweest, zou kunnen kloppen..
Groet, Ben
De kabouters hebben hun werk gedaan: vannacht heeft het script e.e.a. opgepakt en alle ontbrekende units, waaronder bewolkingsgraad en nog een paar dingen, zichtbaar gemaakt. Heb er niks aan veranderd. Update werkt nu ook voor alles. Resume: laat het eerst een paar dagen zijn gang gaan…
Dank voor je handleiding. Deel 1 werkt perfect. Bij deel 2 krijg ik toch errors nav mijn script ‘Weerstation’:
18-12-26 12:54:00.648 Error: EventSystem: Lua script Weerstation did not return a commandArray
Ik heb meerdere weerstations in de buurt gebruikt maar bij allemaal krijg ik deze error. Wat kan dit zijn?
Krijg je de foutmelding incidenteel een keer? Of iedere 5 minuten? Kun je de volledige foutmelding eens posten. Er wordt bij de melding een regelnummer aangegeven.
Ik kreeg deze melding ook elke minuut:
“Error: EventSystem: Lua script dummyWeatherStationUpdate did not return a commandArray”
Ik heb dat opgelost door voor de definitie van de UpdateDev function deze 3 regels toe te voegen:
if commandArray == nil then
commandArray = {}
end
Dit zorgt er voor dat als de variabele commandArray nog niet bestaat deze als lege array wordt gedefinieerd.
Wat ik heb begrepen zou dit niet nodig moeten zijn als je je script als Event in Domoticz hebt aangemaakt als intepreter ‘LUA’ en eventType ‘time’.
@Joost: Leuke serie artikelen. Daarmee heb ik wat handige functies aan m’n Domoticz kunnen toevoegen. En voor een beginner met Domoticz laat het zien wat kan met LUA en dzVentz event scripts, en een plugin gedaan kan worden.
@Anne: Bedankt voor het oplossen voor foutmelding.
Goedemorgen,
Vreemd genoeg krijg ik onderstaande melding:
2019-01-04 11:18:00.759 Error: EventSystem: in Darksky weerstation: [string ” –[[ WEERSTATIONS: …”]:36: attempt to concatenate field ‘?’ (a nil value)
Enig idee waar het hem daar in kan zitten?
De opmerking van Anne van 2 januari heb ik al in het script toegevoegd.
Alvast dank!
Hoi Steef,
Kun je even laten zien wat er bij jou op regel 36 staat?
(Door de aanpassing komen de regelnummers niet meer overeen met het script zoals het hierboven staat)
Zou het kunnen zijn dat de naamgeving van de sensor zoals die in het script wordt gebruikt niet overeen komt met hoe je het in Domoticz hebt ingevoerd? (Zie regel 25 t/m 31 in het bovenstaande script)
Anne.
Hoi Anne,
Natuurlijk, onderstaand mijn regel 36:
commandArray[#commandArray+1] = {[‘UpdateDevice’] = otherdevices_idx[device]..’|’..tostring(nvalue)..’|’..tostring(svalues)}
De namen heb ik hetzelfde gehouden, vanwege de waarschuwing in de handleiding dat het dan ook op andere plekken aangepast moest worden. Zo bedreven ben ik nog niet met .lua scripts ?
Hoi Steef,
Ik denk toch dat het in de naamgeving zit.
Ik had namelijk datzelfde probleem. (De post waar ik dat in uitleg wil echter om de 1 of andere reden niet verschijnen)
Bij mij waren er 3 sensoren waarbij de namen in de aanmaak instructie en in de code niet overeen kwamen:
‘Temperatuur Grond’ – heet als sensor ‘GrondTemperatuur’
‘Verwachting uitgebreid’ – heet als sensor ‘Uitgebreide verwachting’
en
‘Temperatuur Dauwpunt’ – heet als sensor ‘Dauwpunt’
Ik heb dus deze regels aangepast:
local dev_TempGround = “GrondTemperatuur” — Temperature sensor
local dev_LongText = “Uitgebreide verwachting” — Text sensor
local dev_DewPoint = “Dauwpunt” — Temperature sensor
Daarna werkte dat ook weer.
Anne.
Er waren inderdaad 3 sensoren van naam veranderd, dit is nu aangepast in het script.
Hoi Steef,
Wil dat zeggen dat na de aanpassingen van de 3 namen het nu wel goed werkt bij jou?
Anne.
Goedenavond, nee, ik krijg helaas nog steeds dezelfde melding ?
Wanneer ik het stukje code uit Anne’s tekst weghaal krijg ik weer de ‘dit not return a command array’ foutmelding.
Dus er gaat iets nog niet goed, alleen lastig te bepalen waar.
Hoi Steef,
Om te kunnen bepalen wat er waar fout gaat moeten er (nogal) wat debug statements worden toegevoegd. Als eenmaal is bepaald waar het probleem zit kun je die weer weghalen.
Vervang de functie updateDev met onderstaande code.
Na een tijdje zul je dan in de log de informatie zien en dan waarschijnlijk ook kunnen bepalen bij welk device het mis gaat.
Anne.
–Functie devices updaten
function UpdateDev(device,nvalue,svalues)
print(“UpdateDev(device,nvalue,svalues) check”)
if (device == nil) then
print(“device parameter is nil”)
end
if (device ~= nil) then
print(“device”)
print(device)
end
if (otherdevices_idx == nil) then
print(“otherdevices_idx array is nil”)
end
if (otherdevices_idx ~= nil) then
if (otherdevices_idx[device] == nil) then
print(“otherdevices_idx[device] is nil”)
end
if (otherdevices_idx[device] ~= nil) then
print(“otherdevices_idx[“..device..”]”)
print(otherdevices_idx[device])
end
end
if (nvalue == nil) then
print(“nvalue parameter is nil”)
end
if (nvalue ~= nil) then
print(“nvalue”)
print(nvalue)
end
if (svalues == nil) then
print(“svalues parameter is nil”)
end
if (svalues ~= nil) then
print(“svalues”)
print(nvalue)
end
commandArray[#commandArray+1] = {[‘UpdateDevice’] = otherdevices_idx[device]..’|’..tostring(nvalue)..’|’..tostring(svalues)}
end
Goedemiddag,
Volgens mij doe ik gewoon iets grandioos verkeerd, ik krijg namelijk onderstaande foutmelding:
2019-01-06 14:21:00.565 Error: EventSystem: in Darksky weerstation: [string ” –[[ WEERSTATIONS: …”]:38: unexpected symbol near char(226)
Regel 38 is na toevoegen van het script de onderstaande regel:
print(“UpdateDev(device,nvalue,svalues) check”)
Als ik bovenstaande handeling uitvoer, krijg ik het volgende:
2019-01-06 15:42:00.628 Error: EventSystem: in Buienradar: [string “–[[ WEERSTATIONS:
…”]:34: unexpected symbol near char(226)
Kun je/jullie je script (met domo_ip en api_key leeg gemaakt) eens ergens uploaden, dan kan ik kijken of ik er achter kan komen wat er mis is.
Anne.
Het is hier te vinden:
https://www.dropbox.com/s/djg98nd6o3gbyy4/buienradarscript.txt?dl=0
Kan het ermee te maken hebben dat ik poort 443 gebruik?
Bij voorbaat dank voor het kijken.
René
Goedemorgen Anne,
https://docs.google.com/spreadsheets/d/1K87Gmbzpnm34s3ROpjJ_kCt3_9n6fxCu_kXIVA_sYJA/edit#gid=0
In dit document staat de code zoals ik hem in Domoticz heb staan. De debug heb ik hier niet (meer) in staan, omdat ie daar al een melding gaf.
Hoi Steef,
Ik zie niet direct een probleem met dit script.
Welk foutmelding geeft deze versie?
Anne.
Hoi Anne,
Hij blijft de melding Error: EventSystem: in Darksky weerstation: [string ” –[[ WEERSTATIONS: …”]:36: attempt to concatenate field ‘?’ (a nil value) geven bij mij. Terwijl ik wel een paar waarden (cloud cover en weersverwachting voor morgen) doorkrijg.
Gisteren gaf hij nog een authentificatie error, maar die is opgelost.
Het bijzondere is wel, hij geeft nu elk half uur de melding, terwijl de updates voor zover ik kan zien nog steeds elke 5 minuten binnen komen.
Hoi Steef,
Dat het maar eens in de 30 minuten is ipv eens in de 5 minuten is al weer een goede indicatie waar het probleem zou kunnen zitten.
Er zijn 2 delen van het script die elke 5 minuten draaien.
Onderaan staat de buienradar verwachting, die elk half uur wordt uitgevoerd.
Ik heb het script dat je deelde aangepast zodat hij wat meer informatie geeft bij het updaten
Zie de functie
function UpdateDev(device,nvalue,svalues)
en ook de buienradar verwachting elke keer dat het script wordt aangeroepen uitvoert
Zie de regel met
if (true) then —
Samen zou je dat een idee moeten geven waar het probleem zou moeten zitten.
Het aangepaste script:
https://drive.google.com/open?id=1kE2yXL7C63hASCnW2VdKH8Kt_0Bi3Wga
Anne.
Alles weer terug naar zoals het was, nu dus weer dit iedere 5 minuten:
2019-01-07 15:33:00.777 Error: EventSystem: in Buienradar: [string “–[[ WEERSTATIONS:
…”]:33: attempt to get length of global ‘commandArray’ (a nil value)
2019-01-07 15:34:00.492 Error: EventSystem: Lua script Buienradar did not return a commandArray
2019-01-07 15:35:00.644 Error: EventSystem: Lua script Buienradar did not return a commandArray
2019-01-07 15:36:00.771 Error: EventSystem: Lua script Buienradar did not return a commandArray
2019-01-07 15:37:00.803 Error: EventSystem: Lua script Buienradar did not return a commandArray
Hoi René,
De foutmelding over het missende commandArray kun je zoals gezegd oplossen door _voor_ de UpdateDev() functie de onderstaand regels toe te voegen. Die controleren of commandArray niet gedefinieerd is (nil is) en zo ja maken het aan als lege array/table/sequence.
if commandArray == nil then
commandArray = {}
end
Ik heb je script bekeken en zie daar verder niet direct fouten in.
Het enige dat ik nog als suggestie zou kunnen doen is om de namen (en typen) van de sensoren die je hebt aangemaakt nog eens goed te controleren dat er geen typeouten in zitten.
Als je dus de commandArray regels hebt toegevoegd om de melding over missend commandArray op te lossen dan zou het moeten werken.
Ik neem aan dat je het als lua script van het type Time hebt aangemaakt?
Als je in je browser je domoticz kunt benaderen via poort 443, dan zou dat eigenlijk moeten werken, maar het kan wel tot vreemd gedrag leiden. 443 is normaal gezien namelijk de https poort, en het zou kunnen zijn dat je dan een (signed) certificate moet gebruiken om het geheel vlekkeloos te laten verlopen.
Anne.
Goede morgen Anne, dit werkt, maar er komt nu een volgend probleem:
Onderstaand deel is het deel van het script wat DarkSky aanroept, en daar komt op de regel die de latitude aanroept de volgende fout:
2019-01-08 10:23:00.919 Error: EventSystem: in Buienradar: [string “–[[ WEERSTATIONS:
…”]:110: attempt to index local ‘jsonData’ (a nil value)
(Dat is deze regel: lat = jsonData.Location.Latitude )
Hier het gedeelte van het script:
—————————————
— ######## Darksy API call ######## —
—————————————
if ((time.min+2)%5)==0 then — Script loopt iedere 5 minuten (bv. 11.03, 11.08, 11.13, 11.18, etc.
json = (loadfile “/home/pi/domoticz/scripts/lua/JSON.lua”)() — For Linux
local config=assert(io.popen(‘curl “http://’..domo_ip..’/json.htm?type=settings”‘))
local Stringjson = config:read(‘*all’)
config:close()
local jsonData = json:decode(Stringjson)
— Convert the json to a LUA table
lat = jsonData.Location.Latitude
lon = jsonData.Location.Longitude
local coord = lat..”,”..lon
json = (loadfile “/home/pi/domoticz/scripts/lua/JSON.lua”)() — For Linux
local config=assert(io.popen(‘curl “https://api.darksky.net/forecast/’..api_key..’/’..coord..’?lang=’..language..’&units=si&exclude=hourly,flags”‘))
local Stringjson = config:read(‘*all’)
config:close()
local jsonData = json:decode(Stringjson)
— Convert the json to a LUA table
if jsonData ~= nil then — this sometimes happens around midnight
val_UV = jsonData.currently.uvIndex
val_Ozone = jsonData.currently.ozone
val_DewPoint = round(jsonData.currently.dewPoint,1)
val_CloudCover = jsonData.currently.cloudCover*100
end
if debug==1 then
print(“Bewolkingsgraad : “..val_CloudCover.. ” %”)
print(“UV-kracht :”..val_UV)
print(“Ozone : De ozone-waarde is “..val_Ozone)
print(“Dauwpunt : “..val_DewPoint.. ” °C”)
end
— Domoticz devices updaten
UpdateDev(dev_CloudCover,0,val_CloudCover)
UpdateDev(dev_DewPoint,0,val_DewPoint)
UpdateDev(dev_UV,0,val_UV..”;0″)
UpdateDev(dev_Ozone,0,val_Ozone)
if debug==1 then
print (“Dauwpunt: “..val_DewPoint..” °C”)
print (“Bewolkingsgraad: “..val_CloudCover..” %”)
print (“UV-Index: “..val_UV)
print (“Ozone: “..val_Ozone)
end
end
Goedemiddag, dank voor het aangepaste script!
Ik krijg het onderstaande uit de log:
2019-01-09 15:40:00.497 Status: dzVents: Info: WUS: —— Finished updateWeatherSensors.lua
2019-01-09 15:40:01.363 Status: LUA: Uitgebreid: Meer zon, vannacht lichte vorst!
2019-01-09 15:40:01.363
2019-01-09 15:40:01.363 Vandaag zien we in het hele land de zon weer eens tevoorschijn komen. Ook doet de temperatuur een stapje terug. Het frissere, drogere weer is echter van korte duur.Vanmiddag zijn er flinke zonnige perioden en het blijft droog. De temperatuur komt uit op een graad of 7 en de noordenwind is matig tot krachtig. Vanavond verdwijnt de laatste bewolking waarna de nacht vrij helder verloopt. Daardoor koelt het flink af met in het binnenland lichte vorst! De minima liggen tussen + 1 graad langs de kust en -1 tot -3 graden in het binnenland. In de loop van de nacht raakt het vanuit het noordwesten opnieuw bewolkt. Daarnaast zwakt de noordenwind af. Morgen (na het krabben van de autoruiten) begint de dag in het binnenland met een glimp van de zon. Verder is het bewolkt en in de loop van de middag gaat het vanuit het noordwesten licht regenen. Het is een stuk frisser dan de afgelopen dagen met de middagtemperatuur tussen 2 graden langs de oostgrens en een graad of 6 aan zee. Er staat een zwakke tot matige noordenwind.De dagen daarna is het tamelijk wisselvallig en vrij zacht. De bewolking heeft duidelijk de overhand en er valt soms regen, vooral op zaterdag. In de middag wordt het een graad of 8 en de nachten verlopen vorstvrij.
2019-01-09 15:40:01.363
2019-01-09 15:40:01.363
2019-01-09 15:40:01.363 Status: LUA: UpdateDev(device,nvalue,svalues) check
2019-01-09 15:40:01.363 Status: LUA: otherdevices_idx[device] is nil
2019-01-09 15:40:01.363 Error: EventSystem: in Darksky weerstation: [string ” –[[ WEERSTATIONS:
…”]:54: attempt to concatenate field ‘?’ (a nil value)
2019-01-09 15:40:03.539 Status: Notification sent (Email)
Hij lijkt dus vast te zitten op de otherdevices_idx[device] op een of andere manier.
Wat ook bijzonder is, is dat ik nu opeens de uitgebreide omschrijving ontvang (in de log, niet in de switch). Die kreeg ik daarvoor niet, dus ik heb het vermoeden dat het daar ergens zit.
Om nog even op mijn eigen reactie terug te komen, op wonderbaarlijke wijze werkt het nu zonder foutmeldingen. De debug in het UpdateDev gedeelte heb ik teruggezet naar het oude, in het Buienradar deel staat het nog vanuit jouw stuk code. Dat laat ik ook maar zo, want zo werkt het, haha!
Hoi Steef,
De regel
if (true) then — if ((time.min+2)%30)==0 then — Script loopt iedere 30 minuten (bv. 11.28, 11.58, 12.28, 12.58, etc.
kun je het beste weer
if ((time.min+2)%30)==0 then — Script loopt iedere 30 minuten (bv. 11.28, 11.58, 12.28, 12.58, etc.
van maken, anders belast je het systeem denk ik te veel.
Als je nog wil weten met welke waar het (wrs soms) mis gaat zou je dit nog in de dev update functie kunnen opnemen:
if (otherdevices_idx ~= nil) then
if (otherdevices_idx[device] == nil) then
print(“otherdevices_idx[device] is nil”)
print(“device”)
print(device)
end
end
Die laat dan ook de naam van het device zien waarvan de otherdevices_idx array/table niet gevonden wordt. (Dat moet eigenlijk haast wel een naamgeving issue zijn)
Beide veel plezier er mee.
Anne.
Goede moergen Anne,
Hier een beetje hetzelfde verhaal, af en toe komt er foutmelding langs, en dan een dag niet meer.
Gaat verder wl goed zo, bedankt voor het meedenken.
Hoi Anne,
Dank voor de input, ik heb de regel even aangepast.
Zo af en toe geeft hij nog een foutmelding, maar dat lijkt compleet random te zijn (afgelopen nacht iets na 00:00 4x op val_WindSpeedTomorrow, daarna niet meer)
Hartelijk dank voor alle geboden ondersteuning!
Beste Anne, ik heb ook gisteren alles geinstalleerd op mijn domoticz.
Eerst kreeg ik vanuit dit script de error:
2019-01-11 08:37:00.659 Error: EventSystem: Lua script wusScript did not return a commandArray
2019-01-11 08:38:01.000 Error: EventSystem: in wusScript: [string “–[[ WEERSTATIONS:
…”]:33: attempt to get length of global ‘commandArray’ (a nil value)
Ik heb dat opgelost door, zoals hierboven omschreven, voor de definitie van de UpdateDev function deze 3 regels toe te voegen:
if commandArray == nil then
commandArray = {}
end
Nu krijg ik iedere 5 minuten de volgende error, en ik weet niet hoe ik dit moet oplossen
2019-01-11 08:53:01.171 Error: EventSystem: in wusScript: /home/pi/domoticz/scripts/lua/JSON.lua:660: html passed to JSON:decode(): Unauthorized401 Unauthorized
Misschien kun je me helpen
Rudi
Ondertussen zijn alle issues opgelost.
Ik heb de UpdateDev functie overgenomen.
Verder had ik een typefout in een device gemaakt (Temperatuur Dauwpunt i.p.v. Dauwpunt)
Als laatste had ik in mijn Domoticz>Settings>local networks het IP-adres van mijn RPI niet staan. Deze toegevoegd en ik heb geen errors meer, ook alle devices worden gevuld.
Hoi Rudi,
Altijd mooi als problemen zich ‘vanzelf’ oplossen ?
Ik heb al 2 keer gepoogd een stukje te posten met uitleg hoe ik het bij mij aan de praat heb gekregen (onder Windows), maar om de een of andere reden komt dat stukje hier niet terecht.
Het belangrijkste dat daar in stond is inderdaad dat je de gebruikte namen goed controleert. Dat wat in het script staat ook precies overeen komt met wat je in Domoticz hebt aangemaakt.
De namen zijn volgens mij ook ‘hoofdletter gevoelig’, dus ook het gebruik van hoofdletters en kleine letters moet precies overeen komen. Zelfs als je de instructie goed volgt kan het zijn dat er een (klein) verschil in zit en dan werkt het niet.
Ik denk overigens dat het toevoegen van je RPI aan de local networks er voor gezorgd heeft dat je de ‘unauthorized access’ fout niet meer krijgt.
Anne.
Hallo
Sinds gisteren krijg ik de volgende foutmelding:
Error: EventSystem: in Weerstation: [string “…”]:60: attempt to index local ‘jsonData’ (a nil value)
En verschillene switches worden dan niet meer geupdated (zoals Lux Calulated en Lux Solar Powertime)
Is er iets veranderd?
gr.
Cor
Hoi Cor,
Dit zijn volgens mij 2 verschillende dingen.
Het regelnummer 60 komt niet helemaal overeen met het bovenstaande script, maar ik denk dat het een gevolg is van het niet goed kunnen inlezen van
https://api.buienradar.nl/data/public/2.0/jsonfeed
Is dit een fout die elke 5 minuten optreed, of alleen zo nu en dan?
Dat laatste kan voor komen.
De Lux devices worden in de script van Deel 1 geupdate maar staan dus los van de jsonData melding: de variabele jsonData wordt in die scripts niet gebruikt.
Het was idd een probleem van mijn dns-server. Dns-probleem opgelost en backup teruggezet.
Nu is de foutmelding weg en mijn Lux Calculated wordt weer netjes bijgewerkt.
Dank voor de tip.
Buienradar heeft de URL van de API gewijzigd. Hierdoor dient regel 52 en 154 van het script aangepast te worden. De wijzigingen staan reeds in bovenstaand script.
Hoi Joost,
In regel 52 staat “2.0” in de URL, en in regel 154 “1.1”, klopt dat?
Groet, Steef
Hoi Steef, ja dat klopt! Zijn 2 verschillende API’s.
Goeden dag
Is een api van Darksky gratis of moet je er voor betalen.
Ik heb mijn account gratis in een paar minuten kunnen aanmaken.
En het werkt ook ik krijg de onderstaande fout, ik weet ook niet goed waar ik de 3 regels van de post hier boven op 2 januari moet toevoegen.
Kan jij mij helpen
Goeden dag ik ben nog onbekend met domoticz, maar heb de sensors aan gemaakt. Het schript in luna gezet onder time. Ip en poort ingevuld stationscode en mijn persoonlijke api van Darksky. Nu krijg ik in mijn log onderstaande fout melding.
2019-02-06 12:17:01.442 Error: EventSystem: Lua script Weer station Darksky did not return a commandArray
Kan iemend mij AUB helpen, alvast bedankt
Alles werkend gekregen. Ik heb nog een vraag is het ook mogelijk om de barometer druk in domoticz te krijgen
Hoi Rene,
Bij mij staat de luchtdruk er gewoon bij…
http://mibv.com/Archive/dbe/baro.png
Anne.
Dag Anne heb jij deel 1 ook er bij zitten jij hebt veel meer gegevens denk ik.
Ik ben pas begonnen met de raspberry en domoticz ben nog er nog aardig mee aan het stoeien.
Jazeker ben ik bij 1 begonnen ?
Bij mij wil deel 1 maar niet lukken , krijg zoveel foutmeldingen in mijn log, ben er maar weer mee gestopt. Jammer hoor dat het niet lukt.
Hoi Rene,
Vaak hebben foutmeldingen te maken met 1 of 2 dingen die mis gaan.
Bij mij wilde bijvoorbeeld de api calls met curl eerst niet werken.
Als je je aangepast scripts (met je ip en api key verwijderd) en de logs ergens kunt neerzetten dan wil ik er wel eens naar kijken of mij iets op valt.
Anne.
Nu ben ik ook hiermee bezig, echter met het verkrijgen van een API zoals genoemd in het script(regel 37 googleAPIkey) moet ik op het eind creditcard gegevens vermelden. Klopt dit? Heb al gecontroleerd of ik zo’n ding heb, blijkt niet het geval.
Hoi Ben,
Ik heb zelf mijn lattitude en longitude ingevuld en daarnaast
useDomoticzLocation = false;
googleAPIkey = false;
en
myWeatherStation = “Voorschoten”;
ingesteld. Dan hoeft hij helemaal niets met de google api te doen.
Is wel makkelijk dat het script het allemaal zelf uit kan zoeken, maar eigenlijk ook een beetje zonde van de verwerkingskracht om steeds een gegeven op te halen dat nooit meer verandert.
Anne.
Bedankt, alles werkt nu prima!
Hallo allemaal,
Ik heb zojuist deel 1 en 2 gevolgd van deze toffe handleiding.
ik krijg alleen 3 meldingen die ik zelf niet opgelost krijg (ben ook niet erg ervaren)
zie onderstaande:
2019-02-08 15:21:00.741 Error: EventSystem: Lua script Weer did not return a commandArray
2019-02-08 15:21:00.748 Error: Error opening url: http://127.0.0.1:8080/json.htm?type=settings
2019-02-08 15:21:00.995 Error: dzVents: Error (2.4.6): WUS: [0006] Er is een probleem met inlezen van de data; controleer wat er fout is gegaan. in:WUS_locationResponse, Error: 401
Voor de array melding heb ik al geprobeerd de drie regels toe te voegen welke hier boven waren aangegeven maar dit werkt bij mij niet, of zit ik er naast en is dit niet de zelfde melding als hier boven.
Ik hoop dat iemand weet wat er mis gaat ?
Hoi Bas,
Http error 401 is een ‘unauthorized’ error.
De aanroep naar http://127.0.0.1:8080/json.htm?type=settings
wordt dus niet toegestaan omdat je niet voldoende rechten daarvoor hebt.
Ik denk dat je 127.0.0.1 mss moet vervangen met het ipadres waar je domticz ook opvraagt?
Anne.
Hoi Anne,
Bedankt voor je reactie, ik heb gezocht waar deze code word opgeroepen.
onder de darksky api (regel 107) kom ik deze tegen.
local config=assert(io.popen(‘curl “http://’..domo_ip..’/json.htm?type=settings”‘))
Het vreemde is dat ik bovenin op regel 14 het juiste adres van mijn Rasberry (uiteraard geen x) incl poort heb staan dus ik snap niet goed waaron hij naar de localhost zoekt.
local domo_ip = “192.168.x.x:8080”
enig idee hier over?
Bas
Hoi Bas,
Ik denk dat het hem in het updateWeatherSensors.lua script zit.
Of beter gezegd, in de instelling die daar gebruikt wordt.
Dit vanwege de vermelding van ‘WUS_locationResponse’ in jouw foutmelding.
De aanroep URL voor de aan roep van json.htm?type=settings wordt daar op regel 304 gedaan:
const.LOCATIONURL = dz.settings[‘Domoticz url’] .. “/json.htm?type=settings”
waarbij dus de Domoticz url uit de settings van domoticz zelf uitgelezen lijkt te worden.
Domoticz_url lijkt te worden ingesteld in de Domiticz code in dzEvents/runtime/EventHelpers.lua op regel 29 (in de versie die ik heb)
Dat lijkt niet instelbaar te zijn. Alleen de poort waarop Domoticz te benaderen is is instelbaar.
Waarom je dus ene 401 krijgt op iets dat je niet kunt aanpassen is mij niet echt duidelijk.
Als je erg avontuurlijk bent zou je de 127.0.0.1 op die regel kunnen vervangen met jou 192.1168.x.x en dan de boel eens herstarten.
Maar eigenlijk moet er iets anders mis zijn, dus de kans dat je 1 probleem gaat omzeilen en dan tegen een volgende aan loopt is wel groot.
Anne
Hoi Anne,
ik heb twee keer een bericht gestuurd, maar vind het niet terug. Ben bezig met deel 1 en 2.
Bij mij doet alleen de verwachting voor morgen het als ik bij events vraag naar de “Current states”. Dan werkt hij die sensor bij.
Alle andere sensoren worden niet bijgewerkt.
Ik krijg wel een foutmelding: [string “…”]:40: attempt to concatenate field ‘?’ (a nil value)
In het script van de weersverwachting.
Van deel 1 wordt geen enkele sensor bijgewerkt.
Enig idee hoe ik verder kom?
Hoi Albert,
Ja soms kopen reacties niet goed door, heb ik ook al een keer gehad.
Ik heb toch iets meer informatie nodig om je te kunnen helpen.
Bijvoorbeeld wat meer van de foutmelding die je in de log tegen komt.
En als je de scripts hebt aangepast ook een kopie daarvan, omdat de regelnummers in de logging dan gematched kunnen worden.
Anne.
Anne,
is mijn script nog doorgekomen?
En heb je idee waarom deel 1 niet werkt. Heb alles weer opnieuw geupload. Geen resultaat.
Albert
Goedemiddag,
allereerst dank voor deze mooie scripts. Heb Domoticz draaien in combinatie met Dashticz en nu een zeer mooi weerstation aan de muur hangen dankzij dit ?
Ik loop met het script van deel 2 echter tegen een probleem aan dat ik maar niet opgelost krijg.
Ik draai Domoticz op een Synology, dus de json loadfile van regel 51 werkt voor mij niet.
json = (loadfile “/home/pi/domoticz/scripts/lua/JSON.lua”)() — For Linux
Ik heb het path aangepast naar mijn situatie (/domoticz/var/scripts/lua/JSON.lua) maar ik krijg iedere 5 minuten de volgende foutmelding:
2019-02-12 15:28:00.757 Error: EventSystem: in Weerstation: [string “–[[ WEERSTATIONS:
…”]:51: attempt to call a nil value
Heeft iemand enig idee hoe ik dit kan oplossen en of het überhaupt wel werkzaam te krijgen is op een Synology?
Alvast bedankt!
Hoi Ronald,
De vraag is dan wat er op regel 51 staat.
Want die melding past niet echt bij het uitvoeren van
json = (loadfile “/domoticz/var/scripts/lua/JSON.lua”)() — For Synology
De vraag is of je op je Synology het curl command beschikbaar hebt om dit uit te voeren:
curl “https://data.buienradar.nl/2.0/feed/json”
Als dat kan, dan zou het mogelijk moeten zijn dit op een Synology te runnen.
Anne.
Hi Anne,
Dank voor je antwoord. Ik zag dat ik een fout had gemaakt in het path naar de lua file. Die is gecorrigeerd en sinds gisterenavond werken 2 sensoren nu (grond temp en verwachting morgen).
De – voor mij belangrijkste – sensor, verwachting uitgebreid werkt helaas niet. De foutmelding die ik nu krijg is:
2019-02-13 11:38:01.007 Error: EventSystem: in Weerstation: [string “–[[ WEERSTATIONS:
…”]:116: attempt to index local ‘jsonData’ (a nil value)
Regel 116 is:
lat = jsonData.Location.Latitude
Het lijkt me dat ik het curl command wel beschikbaar heb want anders zouden de twee sensoren toch niet geüpdatet kunnen worden? Verder heeft de lua folder root rechten op de NAS.
Ik zie het even niet meer ?
Groet,
Ronald
Issue solved!
Voor de mensen die dit op een Synology willen laten draaien:
Bij mij liep het script vast op het deel waar geprobeerd wordt de locatie (lon en lat) te achterhalen via de jsonData:
lat = jsonData.Location.Latitude
lon = jsonData.Location.Longitude
Ik heb dit opgelost door de lat en lon bovenin het script te definiëren en vervolgens de bovenstaande twee regels script te verwijderen. Na dit gedaan te hebben werden alle ‘sensoren’ actief.
local weerstation = XX
local lat = “XXXXX”
local lon = “XXXXX”
local api_key = “XXXXXX”
Ter info: de nummers van de steden/regio’s zijn in de API gewijzigd en doorgevoerd in bovenstaand script.
Hallo Joost,
Dat hoeft toch alleen maar in het bovenstaande script van deel 2?
Ik heb daar op regel 46 vervangen voor 35 — Voorschoten
en het lijkt nu weer te werken.
Anne.
Hoi Anne,
Ja, klopt helemaal!
Kloppen de station nummers nog wel?
Volgens mij is Leeuwarden niet nummer 20 bijv?
vr.gr. John
Hallo John,
Buienradar heeft weer de oude indeling in de API gezet. Is nu weer aangepast in bovenstaand script.
Misschien beter om op basis van stationnaam ipv id in te stellen. Die veranderen denk ik minder vaak.
Nu krijg je zonder dat je het in de gaten hebt de gegevens van een ander station.
Overigens mooi gedaan allemaal.
John
Hoi allemaal,
Deel 1 en Deel 2 werken bij mij nu goed TOP hoor !!!
Alleen waar ik nog wel mee zit deel 2 plot de gegevens om de 5 minuten en Deel 1 om de minuut. Dat om de minuut vind ik een beetje te veel en zou dat ook graag om de 5 minuten willen hebben, wat moet ik daar voor aanpassen in Deel 1
Alvast bedankt voor de medewerking.
Met vriendelijk,
Rene
Hallo allemaal,
Ik heb bovenstaande gevolgd en alles uitgeprobeerd, echter ik blijf zitten met de volgende error:
Error: EventSystem: in Dark Sky: [string “–[[ WEERSTATIONS:
…”]:146: attempt to concatenate local ‘api_key’ (a nil value)
Het gevolg is dat alle waarden uit deel2 NIET worden bijgewerkt behalve “verwachting morgen”.
Dus:
niet: Grondtemperatuur
wel: Verwachting morgen
niet: Verwachting uitgebreid
niet: Temperatuur dauwpunt
niet: Bewolkingsgraad
niet: UV-waarde
niet: Ozon-waarde
Ook kreeg ik ineens:
Error: Error opening url: https://gadgets.buienradar.nl/data/raintext?lat=52.44&lon=7.50
en
Error: dzVents: Error (2.4.6): WUS: [0006] Er is een probleem met inlezen van de data; controleer wat er fout is gegaan. in:WUS_rainForecastResponse, Error: 11855324
Wie kan me op weg helpen dit op te lossen?
Met vriendelijke groet,
Jan Walhof
Hallo Jan,
De melding ‘attempt to concatenate local ‘api_key’ (a nil value)’ wil zeggen dat de variabele api_key leeg is.
Deze wordt boven in het script (rond regel 16, afhankelijk van de aanpassingen die je hebt gedaan) ingesteld. Dat lijkt bij jou niet goed te gaan.
Deze variabele wordt voor zover ik kan zien maar op 1 plaats gebruikt en wel in de regel waar het bij jou mis lijkt te gaan:
local config=assert(io.popen(‘curl “https://api.darksky.net/forecast/’..api_key..’/’..coord..’?lang=’..language..’&units=si&exclude=hourly,flags”‘))
daar is de variabele api_key dus leeg (nil).
Anne.
Hallo allemaal,
Na een nacht niets doen blijken deze beide errors verdwenen:
– Error: Error opening url: https://gadgets.buienradar.nl/data/raintext?lat=52.44&lon=7.50
en
– Error: dzVents: Error (2.4.6): WUS: [0006] Er is een probleem met inlezen van de data; controleer wat er fout is gegaan. in:WUS_rainForecastResponse, Error: 11855324
Deze error blijft:
Error: EventSystem: in Dark Sky: [string “–[[ WEERSTATIONS:
…”]:146: attempt to concatenate local ‘api_key’ (a nil value)
Ik heb van alles uitgeprobeerd, maar kom niet tot een oplossing.
Mogelijk een nieuwe api-key aanvragen bij Dark Sky?
Wie helpt me op weg naar de oplossing?
Met vriendelijke groet,
Jan Walhof
Krijg je deze melding iedere keer dat het script draait? Of slechts incidenteel?
Hallo Joost,
Ik krijg zojuist geen errors meer en alle sensors en berichten worden nu bijgewerkt.
De reden dat het nu wel werkt:
In mijn script stond: local dev_TempGround = “Temperatuur grond” — Temperature sensor
Dit moest zijn: local dev_TempGround = “Temperatuur Grond” — Temperature sensor
Verschil: kleine letter/grote letter
Het zijn vaak de kleine dingen die het (niet) doen…..
Dank voor je reactie en uiteraard voor het gehele script.
Met vriendelijke groet,
Jan Walhof
Hallo allemaal,
Bovenstaande errors opgelost!
In het script had ik staan: local dev_TempGround = “Temperatuur grond” — Temperature sensor
Dit moest zijn: local dev_TempGround = “Temperatuur Grond” — Temperature sensor
Alles werkt nu, ook alle sensoren en berichten worden nu bijgewerkt.
Zelf opgelost, maar misschien hebben voorgaande berichten van me nut voor iemand anders.
Met vriendelijke groet,
Jan Walhof
Joost/Anne
ik ben nog maar een beginner dus hier een voor jullie makkelijke vraag:
na de registratie bij Dark Sky (deel 2) staat het woord script als aanduiding voor een nieuw hoofdstuk en dan:
ga naar setup>more options etc……
ik kan dat nergens vinden……..
welke app/appl?
ik hoor graag van jullie
gr
jan dahmen
Jan, dat is in Domoticz
Dankjewel, ik heb het gevonden. Script opslaan als?
ik heb nog de volgende probleempjes:
2019-03-13 18:15:00.537 Error: EventSystem: Lua script script_device_sensorDS did not return a commandArray
2019-03-13 18:15:00.567 Error: Error opening url: http://127.0.0.1:8043/json.htm?type=settings
2019-03-13 18:15:00.950 Error: dzVents: Error (2.4.6): WUS: [0006] Er is een probleem met inlezen van de data; controleer wat er fout is gegaan. in:WUS_locationResponse, Error: 401
ik heb het lua script gesaved met de naam : script_device_sensorDS; ik weet niet of dit wel goed is
Hoi Jan,
401 is de unauthorized code.
Zie hierboven voor een aantal mogelijkheden hoe anderen dat hebben opgelost.
Je zult mogelijk het IP nummer van de Domoticz machine eregens moeten invullen.
Anne.
Bedankt alvast voor je bijdrage, Joost!
Bestaat de mogelijkheid om ook Belgische stations op te nemen?
Luc
Luc, helaas is dat niet mogelijk, er zijn alleen Nederlandse stations beschikbaar.
Hallo,
Net een poging gedaan om de scripts aan de praat te krijgen.
Ik krijg de volgende 2 error meldingen:
2019-03-25 19:06:00.420 Error: dzVents: local netWork not open for dzVents openURL call !
2019-03-25 19:06:00.442 Error: EventSystem: Lua script WeerSation did not return a commandArray
ip adres van mijn rpi is goed ingevuld als domo_ip
Iemand een idee wat er mis is?
Arthur
Hoi Arthur,
Volgens de code
https://github.com/domoticz/domoticz/blob/414a3ca625cbb9defddd605b9a487dfd3416ea4e/main/dzVents.cpp
zou dat iets te maken kunnen hebben met de instelling van WebLocalNetworks
// Handle situation where WebLocalNetworks is not open without password for dzVents
mogelijk dat de localhost 127.0.0.1 niet in die lijst staat?
of het ipadres van je Domoticz machine.
Anne.
Hallo Anne,
Bedankt voor je bericht. Zal binnenkort eens kijken of ik er wat mee kan.
Gr Arthur
Hoi, ik heb het aan het werk gekregen maar heb problemen met al mijn sensoren van specifiek dit hoofdstuk van de handleiding. Deze worden niet ververst. Geen foutmelding of zo. Namen komen overeen in het script met de sensoren. Wat gaat hier mis?
Hoi Joost,
De logging staat wel aan? Zonder foutmeldingen wordt het heel erg lastig na te gaan wat er mis is.
De sensoren uit Deel 1 werken wel goed?
Anne.
Ik krijg het script niet aan de praat, ik heb de ook de volgende fout melding.
2019-04-02 09:57:01.034 Error: EventSystem: Lua script Darksky did not return a commandArray
2019-04-02 09:58:01.581 Error: EventSystem: in Darksky: [string “–[[ WEERSTATIONS:…”]:35: attempt to get length of global ‘commandArray’ (a nil value)
Als ik deze regel toevoeg;
if commandArray == nil then
commandArray = {}
end
is de foutmelding wel weg maar mijn sensors worden niet geüpdatet.
Ik heb alle namen gecontroleerd en ook het stukje voor de extra foutmelding toegevoegd maar daar komt geen extra data uit.
wat gaat hier mis en wie kan mij verder helpen?
Hoi Machielj,
Welke melding zie/krijg je nog wel?
Zonder foutmeldingen is het lastig te bepalen wat er waar mis gaat.
Anne.
Hi Anne,
Dit is de melding die ik krijg;
2019-04-02 16:42:01.872 Error: EventSystem: Lua script Darksky did not return a commandArray
2019-04-02 16:43:01.734 Error: EventSystem: in Darksky: [string “–[[ WEERSTATIONS:…”]:35: attempt to get length of global ‘commandArray’ (a nil value)
De eerste elke minuut, de tweede elke 5 minuten.
De eerste kan ik omzeilen met de code die hierboven genoemd staat maar de aangemaakte sensoren worden niet geüpdatet.
Ik heb deze post al goed doorgelezen maar ik kom er niet uit.
Er zit in de debug code van jou ook een fout, ik denk dat je het met word hebt gemaakt maar de aanhalingstekens kloppen niet als je hem 1 op 1 kopieert.
Hoi machielj,
Kun je jouw versie eens ergens uploaden, evt met je het laatste stuk ip en darsky key verwijderd?
Ik weet niet over welke debug code je het hebt.
Ik gebruik eigenlijk nooit Word voor iets anders dan brieven te sturen (heeeeeeel weinig dus ;)).
Mijn editor of choice is Eclipse of MultiEdit (erg old skool).
Typevouten maak ik dan wel weer bij de vleet, dus mss dat het daar in zat ?
Of mss had je het over code die door Joost is gemaakt, maar ik durf denk ik er ook wel geld op te zetten dat hij voor het maken van de scripts niet Word gebruikt.
Anne.
Hoi, ja de sensoren uit deel 1 gaan goed. Dit haal ik uit de logs
2019-04-02 18:38:01.605 Error: EventSystem: in Weer: [string “–[[ WEERSTATIONS: …”]:36: attempt to concatenate field ‘?’ (a nil value)
2019-04-02 18:40:00.398 Error: dzVents: local netWork not open for dzVents openURL call !
Hoi Joost,
Volgens de dzVents.cpp code van Domoticz (heeft dus niet direct iets met deze scripts te maken) komt dat omdat 127.0.0.1 (ook wel localhost genoemd) niet in de lijst staat van URL’s die zonder password mogen worden benaderd.
Dat is een Domoticz instelling (ik kan ff niet bij mijn systeem dus kan je niet zeggen welke precies).
Anne.
Hoi Anne,
Deze melding is nu inderdaad weg. Ik blijf echter het probleem houden dat mijn sensoren niet updaten. Het gaat dus om de sensoren: Verwachting uitgebreid, Temperatuur dauwpunt, Bewolkingsgraad, UV en Ozone .
Hoi Joost,
Er is blijkbaar een nwe versie van het script (zie bericht van Joost hieronder).
Het probleem met het parsen van het uitgebreide weerbericht zou zo maar eens iets met jouw issue te maken kunnen hebben.
Overigens is het vrij lastig iets zinnigs te zeggen zonder op zijn minst een paar debug regels die laten zien wat er waar fout gaat. Dan kom je vaak niet verder dan platitudes als ‘controleer de gebruikte namen nog eens goed’.
Anne.
Op regel 160 van het script zijn nu drie regels toegevoegd, waardoor het uitgebreide weerbericht niet meer afgekapt wordt (door ‘verkeerde’ apostrofs in de API van Buienradar).
Vanochtend ging het weer mis met het uitgebreide weerbericht door een “verkeerde” è in de API. Het script is hierop nu aangepast.
Goedemiddag,
Het ging hier een hele tijd goed, maar nu krijg ik constant de volgende error:
2019-04-15 16:46:00.289 Error: EventSystem: in /home/pi/domoticz/dzVents/runtime/dzVents.lua: /home/pi/domoticz/dzVents/runtime/EventHelpers.lua:99: attempt to index local ‘fileStorage’ (a boolean value)
Hierdoor werken (volgens mij) de sensoren als zicht en zonnestraling niet meer. Die zijn in ieder geval met rood aangegeven in het tabblad ‘weer’. Iemand enig idee waar het hem in kan zitten?
Hoi Steef,
Nee, maar…
gebruik je de laatste versie van zowel Domoticz als de scripts?
En heeft Domoticz nog voldoende ruimte zowel kwa HD als geheugen?
Anne.
Ja, Domoticz draait op versie V4.10619
Geheugen zit rond de 4%, en de HD heeft 16% vrij, dus dat lijkt me genoeg.
Het komt op mij over alsof ik ‘fileStorage’ ergens moet definiëren, maar ik ben verre van een dzVents expert 🙂
De melding komt overigens elke minuut, en komt ook tevoorschijn als ik het script bovenaan deze pagina pauzeer. Verder zijn het volgens mij net de sensoren die Buienradar gebruikt, de Darksky data komt wel door.
Schrijfrechten voor diverse mappen staat ook op ‘anyone’, dus daar zijn ook geen restricties (meer) in.
Ik heb alleen geen idee waar ik verder moet zoeken, dus alle hulp is welkom 🙂
Ik ben bang dat ik je niet heel veel verder kan helpen, anders dan dat je mss de variabelen die niet werken een keer moet verwijderen en opnieuw aanmaken.
Als je naar het commentaar in de buurt van de code waar de foutmelding vandaan komt kijkt
https://github.com/domoticz/domoticz/blob/development/dzVents/runtime/EventHelpers.lua
staat daar
“– obviously this is a var that was added later
— initialize it”
Maar daar stopt mijn inzicht in dzVents / lua scripts / domoticz code 😉
Anne.
Ik heb nu dat niet alleen de sensoren uit het tweede deel maar ook het weerbericht van 22:00 niet ververst wordt. Waar kan dat in zitten? Welk script moet ik dit zoeken?
Opmaak van het weerbericht van 22:00 is regel 92 van Deel 2. Het versturen (naar bv. Telegram) is Deel 4.
Het weerbericht wordt keurig opgemaakt. Echter de sensor wordt niet ververst waardoor ik steeds hetzelfde bericht krijg.
Goedemorgen, Het ging een tijd goed en ik ben heel tevreden met mijn weerstation. Alleen krijg ik nu regelmatig de volgende melding in de logging:
2019-05-01 11:58:52.136 Error: EventSystem: in Weer: /home/pi/domoticz/scripts/lua/JSON.lua:1009: /home/pi/domoticz/scripts/lua/JSON.lua:660: can’t parse JSON at char 1 of: daily usage limit exceeded
Waar kan dit aan liggen?
Fantastisch projectje, maar ik loop tegen een foutje aan waardoor ik niet verder kom.
Error: EventSystem: in Script #2: [string “–…”]:59: attempt to get length of global ‘commandArray’ (a nil value)
Error: EventSystem: Lua script Script #2 did not return a commandArray
Weet iemand hiervoor een oplossing wat ik fout doe ?
Erik
Voor degenen die een foutmelding als “did not return a commandArray” kregen: waarschijnlijk stond jullie script niet tussen return commandArray={} en commandArray.
Dit is nu aangepast (op regel 33 en 172).
2019-09-17 21:22:28.690 Status: dzVents: Error (2.4.19): /home/pi/domoticz/scripts/dzVents/scripts/wusErrors.lua:6: attempt to index global ‘TRIGGERERROR’ (a nil value)
2019-09-17 21:22:28.705 Status: dzVents: Error (2.4.19): /home/pi/domoticz/scripts/dzVents/scripts/wusSettings.lua:61: attempt to index global ‘dzW’ (a nil value)
wat kan ik hier aan doen?
Goedemorgen,
Ik heb je fantastische script ook geïmplementeerd in mijn Domoticz.
In principe krijg ik voor nagenoeg alle switches netjes data binnen, behalve voor de volgende:
Temperature:
———————
Grondtemperatuur –> Wel data, maar rode balk
Temperatuur dauwpunt –> Geen data + rode balk
Weather:
—————
Kracht van de zon –> Geen data + rode balk
Regen –> Wel data, maar rode balk
UV –> Geen data + rode balk
Utility:
———-
Bewolkingsgraad –> Wel data, maar rode balk
Ozon –> Geen data + rode balk
In het log van Domoticz zie ik iedere minuut de volgende foutmelding langskomen:
2019-10-18 08:16:00.452 Error: EventSystem: in Weerstation: [string “– [[ WEERSTATIONS:…”]:2: syntax error near ‘-‘
Verder is er vanmorgen 1x de volgende foutmelding binnen gekomen:
2019-10-18 07:08:10.140 Error: Error opening url: https://gadgets.buienradar.nl/data/raintext?lat=51.67&lon=5.64
Ik denk dat je het script niet goed gekopieerd hebt (of bewerkt hebt). De foutmelding heeft met een koppelstreepje (-) te maken die je ergens neergezet hebt.
Ik krijg nu de volgende melding.
2019-11-09 10:03:02.341 Status: dzVents: !Info: WUS: Function math.pow(x, y) has been deprecated in Lua 5.3. Please consider changing code to x^y
Je moet eigenlijk precies doen wat er staat: math.pow(x, y) vervangen door x^y (dus zonder math.pow).
Hier staat overigens een nieuw script: https://domoticaboard.nl/index.php?topic=42.0
ik heb deel 1 en 2 geïnstalleerd
Van deel 1 krijg ik geen waardes binnen en van deel 2 krijg ik tot nu toe alleen de verwachting van morgen binnen
ik krijg de volgende meldingen
wat betreft het lokal netwerk kom ik wat wisselende reactie tegen,in eerste instantie had ik hier niets ingevuld later heb ik hier 192.168.2.* ingevuld.
maar hier lees ik ook veer over dat je dit vooral niet moet doen aangezien je dan je netwerk van buiten af open zet
2019-12-27 14:27:00.229 Error: dzVents: local netWork not open for dzVents openURL call !
2019-12-27 14:27:00.229 Error: dzVents: check dzVents wiki (look for ‘Using dzVents with Domoticz’)
2019-12-27 14:27:29.694 Error: EventSystem: Warning!, lua script /home/pi/domoticz/dzVents/runtime/dzVents.lua has been running for more than 10 seconds
2019-12-27 14:28:00.375 Error: dzVents: local netWork not open for dzVents openURL call !
2019-12-27 14:28:00.375 Error: dzVents: check dzVents wiki (look for ‘Using dzVents with Domoticz’)
2019-12-27 14:28:00.547 Error: EventSystem: in Buieneradar: [string “–[[ WEERSTATIONS: …”]:34: attempt to concatenate field ‘?’ (a nil value)
2019-12-27 14:29:00.585 Error: dzVents: local netWork not open for dzVents openURL call !
2019-12-27 14:29:00.585 Error: dzVents: check dzVents wiki (look for ‘Using dzVents with Domoticz’
Je kunt beter de nieuwe versie gaan gebruiken: https://domoticaboard.nl/index.php?topic=42.0
Deze is bedoeld voor gebruik op een raspberry-pi omgeving?
Hij staat op de TODO lijst, maar mijn Domoticz draait op Windhoos dus ik ga er van uit dat er mogelijk wat truucjes nodig zijn om het (weer) aan de praat te krijgen.
Het oude script lijkt overigens nog wel (deels) te werken.
Ja is bedoeld voor de Pi, maar zal (met wat kleine aanpassingen) ook wel op Windows werkend te kregen zijn.
@Joost
Kunnen de oude scripts updateWeatherSensors.lua, wusErrors.lua, wusFunctions.lua, wusSettings.lua weg na update naar de nieuwe versie?
En ook de oude senoren die niet meer worden gevuld, zoals ‘Regengegevens’ (rainRate)?
Anne.
Ja klopt, die kun je allemaal verwijderen.
Hallo allemaal,
Zijn er ook weerstation id’s van België? Bv provincie Antwerpen?
Bedankt!
Nee, dit script is helaas niet voor België te gebruiken..
Van de website blog.darksky.net:
API
Our API service for existing customers is not changing today, but we will no longer accept new signups. The API will continue to function through the end of 2021.
Ik zal het met alleen deel 1 moeten doen…. 🙁
Nieuw (PHP-)script is reeds gemaakt! https://domoticaboard.nl/index.php?topic=143.0
Beste Joost,
Ik heb indertijd dankbaar gebruik van je script gemaakt en heb Darsky data eruit gehaald en vul mijn devices in Domoticz vanuit Buienradar en Regenradar. Dat werkt allemaal prima op mijn RPI4.
Nu ben ik bezig eenzelfde configuratie voor mijn broer op te zetten. Heb het eerst geprobeerd op een ODROID en ben nu bezig op een oude RPI3. Ik heb alles gekopieerd van de werkende versie maar krijg steeds foutmeldingen bij het updaten van de devices in Domoticz:
“DzVents: Error: (3.1.8) … attempt to index a nil value global ‘otherdevices_idx’)
Dit in de regel waar commandArray gevuld wordt.:
commandArray={}
–Functie devices updaten
function UpdateDev(device,nvalue,svalues)
commandArray[#commandArray+1] = {[‘UpdateDevice’] = otherdevices_idx[device]..’|’..tostring(nvalue)..’|’..tostring(svalues)}
end
Heb jij enig idee wat er fout kan zijn cq hoe ik het op zou kunnen lossen?