Maak van je Raspberry Pi een weerstation

Gestart door Joost, 26 oktober 2019, 09:14:57

Vorige topic - Volgende topic

Joost

Onderstaand LUA-script maakt van je Raspberry Pi een weerstation. Iedere vijf minuten worden de weer-sensoren geüpdatet, behalve de weer-alerts (deze worden iedere 3 uur ververst). Indien er een weer-waarschuwing (code geel/oranje/rood) is dan zal je op jouw smartphone hier een notificatie van ontvangen.

Voorbereidingen:

       
  • Installeer PHP op je Raspberry Pi (bij voorkeur versie 7.3)
  • Installeer nl_NL-UTF-8 op je Raspiberry Pi met commando raspi-config
  • Vul in Domoticz bij Setup > Settings > Location de gps van jouw locatie in.
  • Download Meteo Alarm Weather Warnings en upload alle .php and .json bestanden in de map meteo-alarm-weather-warnings/src naar de map /var/www/html/meteo-alarm-weather-warnings-1.1/src/ op de Raspberry Pi. Wijzig vervolgens de naam van het warnings.json bestand naar warnings.php (je hebt nu dus 2 bestanden met dezelfde naam, 1x beginnend met een kleine letter en 1x beginnend met een hoofdletter). Open nu het bestand Period.php (in de subfolder /src). Op regel 31 wijzig je 'from' naar 'starttime' en wijzig je 'until' naar 'endtime'. Vergeet niet om de wijziging op te slaan!
  • Onder Settings vul je jouw gegevens in.
  • Op regel 408 zie je 013 staan. Dit cijfer is Noord-Brabant voor weer-waarschuwingen. Het cijfer kun je wijzigen naar jouw eigen provincie/kustgebied.
  • Op regel 537 moet je het getal 25 vervangen door het IDX van device "Waarschuwing vandaag".
  • Maak in Domoticz virtuele devices aan met de namen, zoals ze op regel 47 t/m 69 staan

--[[

WEERSTATIONS:

Amsterdam   = 36   Groningen           = 13   Oost-Groninigen = 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-Groninigen    = 24   Uden            = 45   Woensdrecht     = 50
Gorinchem   = 16   Noordoostpolder     = 30   Venlo           = 1      Zwolle          = 15

REGIO'S VOOR ALERTS:

007=Groningen      011=Noord-Holland   015=Utrecht
008=Flevoland      012=Limburg         016=Overijssel
009=Zuid-Holland   013=Noord-Brabant   017=Friesland
010=Zeeland         014=Gelderland      018=Drenthe

801=Vlissingen         805=Rottum
802=Hoek van Holland   806=Waddenzee
803=IJmuiden         807=IJsselmeer
804=Texel
--]]

----------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------ SETTINGS ------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------
local domo_ip          = "192.168.2.63:8080"               -- IP adres van Domoticz, inclusief poort
local webserver_ip      = "192.168.2.63"                  -- IP adres van webserver
local weerstation      = 7                                    -- Kies je weerstation naar keuze
local api_key          = "153854f6c0a1bd5237a2f28464ca8de5"   -- Darksky secret key
local debug            = 0                                     -- 0=geen debug, 1=debug Darksy, 2=debug Buienradar 3=debug Alerts, 4=debug functies, 5=debug alles
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 DayOfWeek = {"Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"}
--Darksky API
local dev_CloudCover_Now            = "Bewolkingsgraad"         -- Percentage sensor
local dev_UV_Now                  = "UV"                  -- UV sensor
local dev_Ozone_Now                  = "Ozone"               -- Custom sensor (DU)
local dev_DewPoint_Now               = "Temperatuur Dauwpunt"   -- Temperature sensor
local dev_TempOutside_Now            = "Temperatuur Buiten"      -- Temperature sensor
local dev_TempApparent_Now            = "Temperatuur Gevoel"      -- Temperature sensor
local dev_Humidity_Now               = "Luchtvochtigheid"      -- Humidity sensor
local dev_Pressure_Now               = "Luchtdruk"            -- Barometer sensor
local dev_Visibility_Now            = "Zicht"               -- Visibility sensor
local dev_Wind_Now                  = "Wind"               -- Wind sensor
local dev_PrecipIntensity_Now         = "Neerslag hoeveelheid nu" -- Custom sensor (mm/u)
local dev_PrecipProbability_Now         = "Kans op neerslag nu"      -- Percentage sensor
local dev_WeatherPredictionWeekShort   = "Weerbericht week kort"   -- Text sensor
--Buienradar 2.0 API
local dev_WeatherPredictionLong         = "Verwachting uitgebreid"   -- Text sensor
local dev_WeatherPredictionShort      = "Verwachting kort"      -- Text sensor
local dev_WeatherPrediction24H         = "Komende 24 uur"         -- Text sensor
local dev_WeatherPrediction1_5D         = "Verwachting 1-5 dagen"   -- Text sensor
local dev_WeatherPrediction6_10D      = "Verwachting 6-10 dagen"   -- Text sensor
local dev_TempGround               = "Temperatuur Grond"      -- Temperature sensor
local dev_SolarRadiation            = "Zonkracht"            -- Solar Radiation sensor
local dev_AlertToday               = "Waarschuwing vandaag"   -- Alert sensor
local dev_AlertToday1               = "Waarschuwing morgen"      -- Alert sensor

commandArray = {}
----------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------######## FUNCTIES ######## ----------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------
print("Weer script is afgetrapt")
--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
-- Get System Time/Date
time = os.date("*t")
weekday = os.date("%A")
minutes = time.min + time.hour * 60
daynumber = os.date("*t").wday
DayOfWeek = {"Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za"}

vandaag = daynumber      -- vandaag
vandaag1 = daynumber+1   -- morgen
vandaag2 = daynumber+2   -- overmorgen
vandaag3 = daynumber+3   -- etc.
vandaag4 = daynumber+4
vandaag5 = daynumber+5
vandaag6 = daynumber+6

if vandaag1 > 7 then vandaag1 = vandaag1 - 7 end
if vandaag2 > 7 then vandaag2 = vandaag2 - 7 end
if vandaag3 > 7 then vandaag3 = vandaag3 - 7 end
if vandaag4 > 7 then vandaag4 = vandaag4 - 7 end
if vandaag5 > 7 then vandaag5 = vandaag5 - 7 end
if vandaag6 > 7 then vandaag6 = vandaag6 - 7 end

if debug==4 or debug==5 then
print ("Vandaag :"..DayOfWeek[ (vandaag)+0 ] )
print ("Morgen :"..DayOfWeek[ (vandaag1)+0 ] )
print ("Overmorgen :"..DayOfWeek[ (vandaag2)+0 ] )
print ("Vandaag+3 :"..DayOfWeek[ (vandaag3)+0 ] )
print ("Vandaag+4 :"..DayOfWeek[ (vandaag4)+0 ] )
print ("Vandaag+5 :"..DayOfWeek[ (vandaag5)+0 ] )
end

-- Script draait iedere zoveel minuten:
if  ((time.min-0)%5)==0  then -- Script loopt iedere 5 minuten (bv. 11.05, 11.10, 11.15, 11.15, etc.
----------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------ ######## Darksy API call ######## -----------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------

    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)
-- Coördinaten locatie
    lat   = jsonData.Location.Latitude
    lon   = jsonData.Location.Longitude
   local coord = lat..","..lon

-- JSON omzetten naar een LUA table
    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)

      if jsonData ~= nil then  -- dit gebeurt soms rond middernacht
         val_UV_Now               = jsonData.currently.uvIndex
         val_Ozone_Now            = jsonData.currently.ozone
         val_DewPoint_Now         = round(jsonData.currently.dewPoint,1)
         val_CloudCover_Now         = jsonData.currently.cloudCover*100
         val_TempOutside_Now         = round(jsonData.currently.temperature,1)
         val_TempApparent_Now      = round(jsonData.currently.apparentTemperature,1)
         val_Humidity_Now         = jsonData.currently.humidity*100
         val_Pressure_Now         = jsonData.currently.pressure
         val_Visibility_Now         = round(jsonData.currently.visibility,1)
         val_WindBearing_Now         = jsonData.currently.windBearing
         val_WindGust_Now         = jsonData.currently.windGust*10
         val_WindSpeed_Now         = jsonData.currently.windSpeed*10
         val_PrecipIntensity_Now      = round(jsonData.currently.precipIntensity,1)
         val_PrecipProbability_Now    = round((jsonData.currently.precipProbability*100),1)
         val_TempOutsideMax_Today   = round(jsonData.daily.data[1].temperatureMax,0)
         val_TempOutsideMax_Today1   = round(jsonData.daily.data[2].temperatureMax,0)
         val_TempOutsideMax_Today2   = round(jsonData.daily.data[3].temperatureMax,0)
         val_TempOutsideMax_Today3   = round(jsonData.daily.data[4].temperatureMax,0)
         val_TempOutsideMax_Today4   = round(jsonData.daily.data[5].temperatureMax,0)
         val_TempOutsideMax_Today5   = round(jsonData.daily.data[6].temperatureMax,0)
         val_TempOutsideMin_Today   = round(jsonData.daily.data[1].temperatureMin,0)
         val_TempOutsideMin_Today1   = round(jsonData.daily.data[2].temperatureMin,0)
         val_TempOutsideMin_Today2   = round(jsonData.daily.data[3].temperatureMin,0)
         val_TempOutsideMin_Today3   = round(jsonData.daily.data[4].temperatureMin,0)
         val_TempOutsideMin_Today4   = round(jsonData.daily.data[5].temperatureMin,0)
         val_TempOutsideMin_Today5   = round(jsonData.daily.data[6].temperatureMin,0)
end

--hum_stat can be one of 0=Normal , 1=Comfortable, 2=Dry, 3=Wet
  if val_DewPoint_Now >= 20     then val_HS_Now = "3"     -- wet
  elseif val_DewPoint_Now >= 10 then val_HS_Now = "1"     -- confortable
  else val_HS_Now = "2"     -- dry
  end

--function BarometerForecast
    if val_Pressure_Now == nil          then BaroVS_Now = 5          -- 5 = unknown
        elseif val_Pressure_Now < 966   then BaroVS_Now = 4          -- 4 = thunderstorm
        elseif val_Pressure_Now < 993   then BaroVS_Now = 6          -- 6 = cloudy/rain
        elseif val_Pressure_Now < 1007  then BaroVS_Now = 2          -- 2 = cloudy
        elseif val_Pressure_Now < 1013  then BaroVS_Now = 3          -- 3 = unstable
        elseif val_Pressure_Now < 1033  then BaroVS_Now = 0          -- 0 = stable
        elseif val_Pressure_Now < 1050  then BaroVS_Now = 1          -- 1 = sunny
    end

-- Wind direction calculation
-- local function windDirection_calc(val_WindBearing_Now)
      if (val_WindBearing_Now < 11.25) then val_WindDirection_Now = 'N'
         elseif (val_WindBearing_Now >= 11.25 and val_WindBearing_Now < 33.75) then val_WindDirection_Now = 'NNE'
         elseif (val_WindBearing_Now >= 33.75 and val_WindBearing_Now < 56.25) then val_WindDirection_Now = 'NE'
         elseif (val_WindBearing_Now >= 56.25 and val_WindBearing_Now < 78.75) then val_WindDirection_Now = 'ENE'
         elseif (val_WindBearing_Now >= 78.75 and val_WindBearing_Now < 101.25) then val_WindDirection_Now = 'E'
         elseif (val_WindBearing_Now >= 101.25 and val_WindBearing_Now < 123.75) then val_WindDirection_Now = 'ESE'
         elseif (val_WindBearing_Now >= 123.75 and val_WindBearing_Now < 146.25) then val_WindDirection_Now = 'SE'
         elseif (val_WindBearing_Now >= 146.25 and val_WindBearing_Now < 168.75) then val_WindDirection_Now = 'SSE'
         elseif (val_WindBearing_Now >= 168.75 and val_WindBearing_Now < 191.25) then val_WindDirection_Now = 'S'
         elseif (val_WindBearing_Now >= 191.25 and val_WindBearing_Now < 213.75) then val_WindDirection_Now = 'SSW'
         elseif (val_WindBearing_Now >= 213.75 and val_WindBearing_Now < 236.25) then val_WindDirection_Now = 'SW'
         elseif (val_WindBearing_Now >= 236.25 and val_WindBearing_Now < 258.75) then val_WindDirection_Now = 'WSW'
         elseif (val_WindBearing_Now >= 258.75 and val_WindBearing_Now < 281.25) then val_WindDirection_Now = 'W'
         elseif (val_WindBearing_Now >= 281.25 and val_WindBearing_Now < 303.75) then val_WindDirection_Now = 'WNW'
         elseif (val_WindBearing_Now >= 303.75 and val_WindBearing_Now < 326.25) then val_WindDirection_Now = 'NW'
         elseif (val_WindBearing_Now >= 326.25 and val_WindBearing_Now < 348.75) then val_WindDirection_Now = 'NNW'
         else val_WindDirection_Now = 'N'
      end


      if debug==1 or debug==5 then
         print ("Dauwpunt nu: "..val_DewPoint_Now.." °C")
         print ("Temperatuur buiten nu: "..val_TempOutside_Now.." °C")
         print ("Temperatuur gevoel nu: "..val_TempApparent_Now.." °C")
         print ("Bewolkingsgraad nu: "..val_CloudCover_Now.." %")
         print ("UV-Index nu: "..val_UV_Now)
         print ("Ozone nu: "..val_Ozone_Now)
         print ("Luchtvochtigheid nu: "..val_Humidity_Now.." %")
         print ("Luchtdruk nu: "..val_Pressure_Now.." hPa")
         print ("Zicht nu: "..val_Visibility_Now.." km")
         print ("Windkracht nu: "..(val_WindSpeed_Now/10).. " m/s")
         print ("Windstoten nu: "..(val_WindGust_Now/10).. " m/s")
         print ("Windgraden nu: "..val_WindBearing_Now.. " graden")
         print ("Windrichting nu: "..val_WindDirection_Now)
         print ("Neerslaghoeveelheid nu: "..val_PrecipIntensity_Now.. " mm/u")
         print ("Neerslagkans nu: "..val_PrecipProbability_Now.. " %")
         print ("Temperatuur Max "..DayOfWeek[ (vandaag)+0 ].." : "..val_TempOutsideMax_Today.." °C")
         print ("Temperatuur Max "..DayOfWeek[ (vandaag1) ].." : "..val_TempOutsideMax_Today1.." °C")
         print ("Temperatuur Max "..DayOfWeek[ (vandaag2) ].." : "..val_TempOutsideMax_Today2.." °C")
         print ("Temperatuur Max "..DayOfWeek[ (vandaag3) ].." : "..val_TempOutsideMax_Today3.." °C")
         print ("Temperatuur Max "..DayOfWeek[ (vandaag4) ].." : "..val_TempOutsideMax_Today4.." °C")
         print ("Temperatuur Max "..DayOfWeek[ (vandaag5) ].." : "..val_TempOutsideMax_Today5.." °C")
         print ("Temperatuur Min "..DayOfWeek[ (vandaag)+0 ].." : "..val_TempOutsideMin_Today.." °C")
         print ("Temperatuur Min "..DayOfWeek[ (vandaag1) ].." : "..val_TempOutsideMin_Today1.." °C")
         print ("Temperatuur Min "..DayOfWeek[ (vandaag2) ].." : "..val_TempOutsideMin_Today2.." °C")
         print ("Temperatuur Min "..DayOfWeek[ (vandaag3) ].." : "..val_TempOutsideMin_Today3.." °C")
         print ("Temperatuur Min "..DayOfWeek[ (vandaag4) ].." : "..val_TempOutsideMin_Today4.." °C")
         print ("Temperatuur Min "..DayOfWeek[ (vandaag5) ].." : "..val_TempOutsideMin_Today5.." °C")
      end

----------------------------------------------------------------------------------------------------------------------------------------------
-- ######## Buienradar Verwachting API call (Lang weerbericht ######## --
----------------------------------------------------------------------------------------------------------------------------------------------
    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
   val_WeatherPrediction1_5D   = jsonData.forecast.shortterm.forecast
   val_WeatherPrediction1_5D1   = string.sub(jsonData.forecast.shortterm.startdate,1,10)
   val_WeatherPrediction1_5D2   = string.sub(jsonData.forecast.shortterm.enddate,1,10)
   val_WeatherPrediction6_10D   = jsonData.forecast.longterm.forecast
   val_WeatherPrediction6_10D1   = string.sub(jsonData.forecast.longterm.startdate,1,10)
   val_WeatherPrediction6_10D2   = string.sub(jsonData.forecast.longterm.enddate,1,10)
   val_WeatherPredictionShort   = jsonData.forecast.weatherreport.title .."\n " .."\n ".. jsonData.forecast.weatherreport.summary .."\n " .."\n"
    val_WeatherPredictionLong   = jsonData.forecast.weatherreport.title .."\n " .."\n ".. jsonData.forecast.weatherreport.text .."\n " .."\n"
   val_WeatherPredictionLong   = string.gsub(val_WeatherPredictionLong, "&nbsp;", " ")
   val_WeatherPredictionLong   = string.gsub(val_WeatherPredictionLong, "&rsquo;", "'")
   val_WeatherPredictionLong   = string.gsub(val_WeatherPredictionLong, "&lsquo;", "'")
   val_WeatherPredictionLong   = string.gsub(val_WeatherPredictionLong, "&euml;", "ë")
    val_WeatherPredictionLong   = string.gsub(val_WeatherPredictionLong, "&egrave;", "è")
    val_WeatherPredictionLong   = string.gsub(val_WeatherPredictionLong, "&eacute;", "é")
    val_WeatherPredictionLong   = string.gsub(val_WeatherPredictionLong, "&ecirc;", "ê")
    val_WeatherPredictionLong   = string.gsub(val_WeatherPredictionLong, "&semi;", ";")
    val_WeatherPredictionLong   = string.gsub(val_WeatherPredictionLong, "&ordm;", "º")
   val_WeatherPredictionLong   = string.gsub(val_WeatherPredictionLong, "&iuml;", "ï")
   val_RainChance_Today1      = jsonData.forecast.fivedayforecast[1].rainChance
   val_RainChance_Today2      = jsonData.forecast.fivedayforecast[2].rainChance
   val_RainChance_Today3      = jsonData.forecast.fivedayforecast[3].rainChance
   val_RainChance_Today4      = jsonData.forecast.fivedayforecast[4].rainChance
   val_RainChance_Today5      = jsonData.forecast.fivedayforecast[5].rainChance     
   val_RainIntensityMin_Today1   = jsonData.forecast.fivedayforecast[1].mmRainMin
   val_RainIntensityMin_Today2   = jsonData.forecast.fivedayforecast[2].mmRainMin
   val_RainIntensityMin_Today3   = jsonData.forecast.fivedayforecast[3].mmRainMin
   val_RainIntensityMin_Today4   = jsonData.forecast.fivedayforecast[4].mmRainMin
   val_RainIntensityMin_Today5   = jsonData.forecast.fivedayforecast[5].mmRainMin
   val_RainIntensityMax_Today1   = jsonData.forecast.fivedayforecast[1].mmRainMax
   val_RainIntensityMax_Today2   = jsonData.forecast.fivedayforecast[2].mmRainMax
   val_RainIntensityMax_Today3   = jsonData.forecast.fivedayforecast[3].mmRainMax
   val_RainIntensityMax_Today4   = jsonData.forecast.fivedayforecast[4].mmRainMax
   val_RainIntensityMax_Today5   = jsonData.forecast.fivedayforecast[5].mmRainMax

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_RainMinimumTomorrow     = jsonData.forecast.fivedayforecast[1].mmRainMin
    val_RainMaximumTomorrow     = jsonData.forecast.fivedayforecast[1].mmRainMax
    val_WindDirectionToday      = jsonData.actual.stationmeasurements[ weerstation ].winddirection
    val_WindDirectionToday1      = string.upper(jsonData.forecast.fivedayforecast[1].windDirection)
    val_WindDirectionToday2      = string.upper(jsonData.forecast.fivedayforecast[3].windDirection)
    val_WindDirectionToday3      = string.upper(jsonData.forecast.fivedayforecast[3].windDirection)
    val_WindDirectionToday4      = string.upper(jsonData.forecast.fivedayforecast[4].windDirection)
    val_WindDirectionToday5      = string.upper(jsonData.forecast.fivedayforecast[5].windDirection)
   val_SolarRadiation         = jsonData.actual.stationmeasurements[ weerstation ].sunpower
    val_WindSpeedToday         = jsonData.actual.stationmeasurements[ weerstation ].windspeedBft       
   val_WindSpeedToday1         = jsonData.forecast.fivedayforecast[1].wind
   val_WindSpeedToday2         = jsonData.forecast.fivedayforecast[2].wind
   val_WindSpeedToday3         = jsonData.forecast.fivedayforecast[3].wind
   val_WindSpeedToday4         = jsonData.forecast.fivedayforecast[4].wind
   val_WindSpeedToday5         = jsonData.forecast.fivedayforecast[5].wind
   val_SunChanceToday1         = jsonData.forecast.fivedayforecast[1].sunChance
   val_SunChanceToday2         = jsonData.forecast.fivedayforecast[2].sunChance
   val_SunChanceToday3         = jsonData.forecast.fivedayforecast[3].sunChance
   val_SunChanceToday4         = jsonData.forecast.fivedayforecast[4].sunChance
   val_SunChanceToday5         = jsonData.forecast.fivedayforecast[5].sunChance
end

--Regenhoeveeldheid bepalen
if val_RainIntensityMin_Today1 == val_RainIntensityMax_Today1 then val_RainIntensity_Today1 = val_RainIntensityMin_Today1
    else val_RainIntensity_Today1 = val_RainIntensityMin_Today1.."-"..val_RainIntensityMax_Today1
end

if val_RainIntensityMin_Today2 == val_RainIntensityMax_Today2 then val_RainIntensity_Today2 = val_RainIntensityMin_Today2
    else val_RainIntensity_Today2 = val_RainIntensityMin_Today2.."-"..val_RainIntensityMax_Today2
end

if val_RainIntensityMin_Today3 == val_RainIntensityMax_Today3 then val_RainIntensity_Today3 = val_RainIntensityMin_Today3
    else val_RainIntensity_Today3 = val_RainIntensityMin_Today3.."-"..val_RainIntensityMax_Today3
end

if val_RainIntensityMin_Today4 == val_RainIntensityMax_Today4 then val_RainIntensity_Today4 = val_RainIntensityMin_Today4
    else val_RainIntensity_Today4 = val_RainIntensityMin_Today4.."-"..val_RainIntensityMax_Today4
end

if val_RainIntensityMin_Today5 == val_RainIntensityMax_Today5 then val_RainIntensity_Today5 = val_RainIntensityMin_Today5
    else val_RainIntensity_Today5 = val_RainIntensityMin_Today5.."-"..val_RainIntensityMax_Today5
end

   if debug==2 or debug==5 then
      print ("Uitgebreid weerbericht: "..val_WeatherPredictionLong)
   end

   if debug==2 or debug==5 then
      print ("Temperatuur grond :"..val_TempGround.." °C")
      print ("Weer morgen :"..val_WeatherTomorrow)
      print ("Kans op zon morgen :"..val_SunChanceToday1.." %")
      print ("Kans op regen morgen :"..val_RainChance_Today1.." %")
      print ("Minimum hoeveelheid regen morgen :"..val_RainMinimumTomorrow.." mm")
      print ("Maximum hoeveelheid regen morgen :"..val_RainMaximumTomorrow.." mm")
   end   

-- Windrichting tekst bepalen
if val_WindDirectionToday == "Z" then val_WindDirection_Today = " het zuiden"
    elseif val_WindDirectionToday == "ZW" then val_WindDirection_Today = "het zuidwesten"
    elseif val_WindDirectionToday == "ZO" then val_WindDirection_Today = "het zuidoosten"
    elseif val_WindDirectionToday == "W" then val_WindDirection_Today = "het westen"
    elseif val_WindDirectionToday == "NW" then val_WindDirection_Today = "het noordwesten"
    elseif val_WindDirectionToday == "N" then val_WindDirection_Today = "het noorden"
    elseif val_WindDirectionToday == "NO" then val_WindDirection_Today = " het noordoosten"
    elseif val_WindDirectionToday == "O" then val_WindDirection_Today = "het oosten"
    else val_WindDirection_Today = "variabele richtingen" end

if val_WindDirectionToday1 == "Z" then val_WindDirection_Today1 = " het zuiden"
    elseif val_WindDirectionToday1 == "ZW" then val_WindDirection_Today1 = "het zuidwesten"
    elseif val_WindDirectionToday1 == "ZO" then val_WindDirection_Today1 = "het zuidoosten"
    elseif val_WindDirectionToday1 == "W" then val_WindDirection_Today1 = "het westen"
    elseif val_WindDirectionToday1 == "NW" then val_WindDirection_Today1 = "het noordwesten"
    elseif val_WindDirectionToday1 == "N" then val_WindDirection_Today1 = "het noorden"
    elseif val_WindDirectionToday1 == "NO" then val_WindDirection_Today1 = " het noordoosten"
    elseif val_WindDirectionToday1 == "O" then val_WindDirection_Today1 = "het oosten"
    else val_WindDirection_Today1 = "variabele richtingen" end

if val_WindDirectionToday2 == "Z" then val_WindDirection_Today2 = " het zuiden"
    elseif val_WindDirectionToday2 == "ZW" then val_WindDirection_Today2 = "het zuidwesten"
    elseif val_WindDirectionToday2 == "ZO" then val_WindDirection_Today2 = "het zuidoosten"
    elseif val_WindDirectionToday2 == "W" then val_WindDirection_Today2 = "het westen"
    elseif val_WindDirectionToday2 == "NW" then val_WindDirection_Today2 = "het noordwesten"
    elseif val_WindDirectionToday2 == "N" then val_WindDirection_Today2 = "het noorden"
    elseif val_WindDirectionToday2 == "NO" then val_WindDirection_Today2 = " het noordoosten"
    elseif val_WindDirectionToday2 == "O" then val_WindDirection_Today2 = "het oosten"
    else val_WindDirection_Today2 = "variabele richtingen" end

if val_WindDirectionToday3 == "Z" then val_WindDirection_Today3 = " het zuiden"
    elseif val_WindDirectionToday3 == "ZW" then val_WindDirection_Today3 = "het zuidwesten"
    elseif val_WindDirectionToday3 == "ZO" then val_WindDirection_Today3 = "het zuidoosten"
    elseif val_WindDirectionToday3 == "W" then val_WindDirection_Today3 = "het westen"
    elseif val_WindDirectionToday3 == "NW" then val_WindDirection_Today3 = "het noordwesten"
    elseif val_WindDirectionToday3 == "N" then val_WindDirection_Today3 = "het noorden"
    elseif val_WindDirectionToday3 == "NO" then val_WindDirection_Today3 = " het noordoosten"
    elseif val_WindDirectionToday3 == "O" then val_WindDirection_Today3 = "het oosten"
    else val_WindDirection_Today3 = "variabele richtingen" end

if val_WindDirectionToday4 == "Z" then val_WindDirection_Today4 = " het zuiden"
    elseif val_WindDirectionToday4 == "ZW" then val_WindDirection_Today4 = "het zuidwesten"
    elseif val_WindDirectionToday4 == "ZO" then val_WindDirection_Today4 = "het zuidoosten"
    elseif val_WindDirectionToday4 == "W" then val_WindDirection_Today4 = "het westen"
    elseif val_WindDirectionToday4 == "NW" then val_WindDirection_Today4 = "het noordwesten"
    elseif val_WindDirectionToday4 == "N" then val_WindDirection_Today4 = "het noorden"
    elseif val_WindDirectionToday4 == "NO" then val_WindDirection_Today4 = " het noordoosten"
    elseif val_WindDirectionToday4 == "O" then val_WindDirection_Today4 = "het oosten"
    else val_WindDirection_Today4 = "variabele richtingen" end

if val_WindDirectionToday5 == "Z" then val_WindDirection_Today5 = " het zuiden"
    elseif val_WindDirectionToday5 == "ZW" then val_WindDirection_Today5 = "het zuidwesten"
    elseif val_WindDirectionToday5 == "ZO" then val_WindDirection_Today5 = "het zuidoosten"
    elseif val_WindDirectionToday5 == "W" then val_WindDirection_Today5 = "het westen"
    elseif val_WindDirectionToday5 == "NW" then val_WindDirection_Today5 = "het noordwesten"
    elseif val_WindDirectionToday5 == "N" then val_WindDirection_Today5 = "het noorden"
    elseif val_WindDirectionToday5 == "NO" then val_WindDirection_Today5 = " het noordoosten"
    elseif val_WindDirectionToday5 == "O" then val_WindDirection_Today5 = "het oosten"
    else val_WindDirection_Today5 = "variabele richtingen" end

----------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------ ######## WEER ALERTS ######## -----------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------
if time.min == 0 then  -- script draait ieder uur
    json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()  -- For Linux
    local config=assert(io.popen('curl "http://'..webserver_ip..'/meteo-alarm-weather-warnings-1.1/src/warnings.php?country=NL&region=013&time_zone=Europe/Amsterdam"'))
    local Stringjson = config:read('*all')
    config:close()
    local jsonData1 = json:decode(Stringjson)


   if jsonData1.warnings ~= nil then
   -- Convert the json to a LUA table
      val_AlertType_Today            = jsonData1.warnings.regions[1].today[1].awareness.awareness_type.type
      val_AlertLevel_Today         = jsonData1.warnings.regions[1].today[1].awareness.awareness_level.level
      val_AlertColour_Today         = jsonData1.warnings.regions[1].today[1].awareness.awareness_level.colour
      val_AlertColour_Today         = val_AlertColour_Today:gsub("%S+", {["Yellow"] = "GEEL", ["Amber"] = "ORANJE!", ["Red"] = "ROOD!!!", ["Green"] = "groen", ["White"] = "onbekend"})

      if val_AlertLevel_Today ~= 1 then
         val_AlertStarttime_Today   = string.gsub(jsonData1.warnings.regions[1].today[1].period.starttime, "CET", "")
         val_AlertStart_Today      = val_AlertStarttime_Today:gsub("%S+", {["Sunday"] = "zondag", ["Monday"] = "maandag", ["Tuesday"] = "dinsdag", ["Wednesday"] = "woensdag", ["Thursday"] = "donderdag", ["Friday"] = "vrijdag", ["Saturday"] = "zaterdag"})
         val_AlertEndtime_Today      = string.gsub(jsonData1.warnings.regions[1].today[1].period.endtime, "CET", "")
         val_AlertEnd_Today         = val_AlertEndtime_Today:gsub("%S+", {["Sunday"] = "zondag", ["Monday"] = "maandag", ["Tuesday"] = "dinsdag", ["Wednesday"] = "woensdag", ["Thursday"] = "donderdag", ["Friday"] = "vrijdag", ["Saturday"] = "zaterdag"})
         val_AlertText_Today         = string.gsub(jsonData1.warnings.regions[1].today[1].description, "nederlands: ", "")
          val_AlertText_Today         = string.gsub(val_AlertText_Today, "&deg;", "°")
      end

      val_AlertType_Today1         = jsonData1.warnings.regions[1].tomorrow[1].awareness.awareness_type.type
      val_AlertLevel_Today1         = jsonData1.warnings.regions[1].tomorrow[1].awareness.awareness_level.level
      val_AlertColour_Today1         = jsonData1.warnings.regions[1].tomorrow[1].awareness.awareness_level.colour
      val_AlertColour_Today1         = val_AlertColour_Today1:gsub("%S+", {["Yellow"] = "GEEL", ["Amber"] = "ORANJE!", ["Red"] = "ROOD!!!", ["Green"] = "groen", ["White"] = "onbekend"})
      if val_AlertLevel_Today1 ~= 1 then
         val_AlertStarttime_Today1   = string.gsub(jsonData1.warnings.regions[1].tomorrow[1].period.starttime, "CET", "")
         val_AlertStart_Today1       = val_AlertStarttime_Today1:gsub("%S+", {["Sunday"] = "zondag", ["Monday"] = "maandag", ["Tuesday"] = "dinsdag", ["Wednesday"] = "woensdag", ["Thursday"] = "donderdag", ["Friday"] = "vrijdag", ["Saturday"] = "zaterdag"})
         val_AlertEndtime_Today1      = string.gsub(jsonData1.warnings.regions[1].tomorrow[1].period.endtime, "CET", "")
         val_AlertEnd_Today1       = val_AlertEndtime_Today1:gsub("%S+", {["Sunday"] = "zondag", ["Monday"] = "maandag", ["Tuesday"] = "dinsdag", ["Wednesday"] = "woensdag", ["Thursday"] = "donderdag", ["Friday"] = "vrijdag", ["Saturday"] = "zaterdag"})
         val_AlertText_Today1      = string.gsub(jsonData1.warnings.regions[1].tomorrow[1].description, "nederlands: ", "")
          val_AlertText_Today1      = string.gsub(val_AlertText_Today1, "&deg;", "°")
      end
   
      function split(string, delimiter)
         local result = { }
         local from = 1
         local delim_from, delim_to = string.find( string, delimiter, from )
         while delim_from do
         table.insert( result, string.sub( string, from , delim_from-1 ) )
            from = delim_to + 1
            delim_from, delim_to = string.find( string, delimiter, from )
         end
      table.insert( result, string.sub( string, from ) )
      return result
      end

      if val_AlertLevel_Today ~= 1 then
         local myStr = val_AlertText_Today
         val_AlertText_Today = split(myStr, "english")
      end

      if val_AlertLevel_Today1 ~= 1 then
         local myStr = val_AlertText_Today1
         val_AlertText_Today1 = split(myStr, "english")
      end

      if debug==3 or debug==5 then
         print("Alert type vandaag :"..val_AlertType_Today)
         print("Alert level vandaag :"..val_AlertLevel_Today)
         print("Alert kleur vandaag :"..val_AlertColour_Today)
         print("Alert starttijd vandaag :"..val_AlertStart_Today)
         print("Alert eindtijd vandaag :"..val_AlertEnd_Today)
         print("Alert type morgen :"..val_AlertType_Today1)
         print("Alert level morgen :"..val_AlertLevel_Today1)
         print("Alert kleur morgen :"..val_AlertColour_Today1)
         print("Alert starttijd morgen :"..val_AlertStart_Today1)
         print("Alert eindtijd morgen :"..val_AlertEnd_Today1)
      end

      if val_AlertType_Today == 0 then val_AlertTitle_Today = "Geen waarschuwingen"
         elseif val_AlertType_Today == 1 then val_AlertTitle_Today = "Wind waarschuwing"
         elseif val_AlertType_Today == 2 then val_AlertTitle_Today = "Sneeuw/IJzel waarschuwing"
         elseif val_AlertType_Today == 3 then val_AlertTitle_Today = "Onweer waarschuwing"
         elseif val_AlertType_Today == 4 then val_AlertTitle_Today = "Mist waarschuwing"
         elseif val_AlertType_Today == 5 then val_AlertTitle_Today = "Extreem hoge temperatuur waarschuwing"
         elseif val_AlertType_Today == 6 then val_AlertTitle_Today = "Extreem lage temperatuur waarschuwing"
         elseif val_AlertType_Today == 7 then val_AlertTitle_Today = "Kust waarschuwing"
         elseif val_AlertType_Today == 8 then val_AlertTitle_Today = "Bosbrand waarschuwing"
         elseif val_AlertType_Today == 9 then val_AlertTitle_Today = "Lawine waarschuwing"
         elseif val_AlertType_Today == 10 then val_AlertTitle_Today = "Regen waarschuwing"
         elseif val_AlertType_Today == 11 then val_AlertTitle_Today = "Niet beschikbaar"
         elseif val_AlertType_Today == 12 then val_AlertTitle_Today = "Overstroming waarschuwing"
         elseif val_AlertType_Today == 13 then val_AlertTitle_Today = "Regen/Overstroming waarschuwing"   
      end

      if val_AlertType_Today1 == 0 then val_AlertTitle_Today1 = "Geen waarschuwingen"
         elseif val_AlertType_Today1 == 1 then val_AlertTitle_Today1 = "Wind waarschuwing"
         elseif val_AlertType_Today1 == 2 then val_AlertTitle_Today1 = "Sneeuw/IJzel waarschuwing"
         elseif val_AlertType_Today1 == 3 then val_AlertTitle_Today1 = "Onweer waarschuwing"
         elseif val_AlertType_Today1 == 4 then val_AlertTitle_Today1 = "Mist waarschuwing"
         elseif val_AlertType_Today1 == 5 then val_AlertTitle_Today1 = "Extreem hoge temperatuur waarschuwing"
         elseif val_AlertType_Today1 == 6 then val_AlertTitle_Today1 = "Extreem lage temperatuur waarschuwing"
         elseif val_AlertType_Today1 == 7 then val_AlertTitle_Today1 = "Kust waarschuwing"
         elseif val_AlertType_Today1 == 8 then val_AlertTitle_Today1 = "Bosbrand waarschuwing"
         elseif val_AlertType_Today1 == 9 then val_AlertTitle_Today1 = "Lawine waarschuwing"
         elseif val_AlertType_Today1 == 10 then val_AlertTitle_Today1 = "Regen waarschuwing"
         elseif val_AlertType_Today1 == 11 then val_AlertTitle_Today1 = "Niet beschikbaar"
         elseif val_AlertType_Today1 == 12 then val_AlertTitle_Today1 = "Overstroming waarschuwing"
         elseif val_AlertType_Today1 == 13 then val_AlertTitle_Today1 = "Regen/Overstroming waarschuwing"   
      -- 0=White/Unknown, 1=Green/No Warnings, 2=Yellow, 3=Amber, 4=Red
      end
   
   --Weerswaarschuwing
      if val_AlertLevel_Today ~= 1 then
         val_AlertToday = val_AlertTitle_Today.."\n " .."\n"..val_AlertStart_Today.." uur t/m "..val_AlertEnd_Today.." uur \n " .."\n"..val_AlertText_Today[1].."\n "
      else
         val_AlertToday = val_AlertTitle_Today.."\n " .."\nEr zijn vandaag geen waarschuwingen \n\n\n "
      end

      if val_AlertLevel_Today1 ~= 1 then
         val_AlertToday1 = val_AlertTitle_Today1.."\n " .."\n"..val_AlertStart_Today1.." uur t/m "..val_AlertEnd_Today1.." uur \n " .."\n"..val_AlertText_Today1[1].."\n "
      else
         val_AlertToday1 = val_AlertTitle_Today1.."\n " .."\nEr zijn morgen geen waarschuwingen \n\n\n "
      end

      if otherdevices_svalues[dev_AlertToday] ~= val_AlertToday then
         UpdateDev(dev_AlertToday,val_AlertLevel_Today,val_AlertToday)
      end
      if otherdevices_svalues[dev_AlertToday1] ~= val_AlertToday1 then
         UpdateDev(dev_AlertToday1,val_AlertLevel_Today1,val_AlertToday1)
      end
      if debug == 3 or debug==5 then
         print ("Alert volledig vandaag :"..val_AlertToday)
         print ("Alert volledig morgen :"..val_AlertToday1)
      end     

      json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()  -- For Linux
      local config=assert(io.popen('curl "http://'..domo_ip..'/json.htm?type=devices&rid=25"'))
      local Stringjson = config:read('*all')
      config:close()
      local jsonData = json:decode(Stringjson)

      val_AlertLevelNow = jsonData.result[1].Level
      print(val_AlertLevelNow)

      if val_AlertLevelNow ~= val_AlertLevel_Today then
         commandArray['SendNotification'] = "Code "..val_AlertColour_Today.."\n " .."\n"..val_AlertToday
      end
   
   else print('METEO-ALARM is NIET BEREIKBAAR!!!')
   end
end
----------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------ ######## DOMOTICZ DEVICES UPDATEN ######## -----------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------

-- Komende 24 uur
val_WeatherPrediction24H = val_WeatherTomorrow..  "\n " .."\n".. "Komende nacht daalt de temperatuur naar "..val_TempOutsideMin_Today1.." °C. Morgen overdag wordt morgen maximaal "..val_TempOutsideMax_Today1.. " °C. Er is morgen "..val_SunChanceToday1.." % kans op zon en "..val_RainChance_Today1.." % kans op neerslag ("..val_RainIntensity_Today1.." mm). De wind komt uit "..val_WindDirection_Today1.." en zal kracht "..val_WindSpeedToday1.." Bft hebben." .."\n " .."\n "

stamp1 = val_WeatherPrediction1_5D1
stamp2 = val_WeatherPrediction1_5D2
stamp3 = val_WeatherPrediction6_10D1
stamp4 = val_WeatherPrediction6_10D2
local y1,m1,d1=stamp1:match("(%d+)%-(%d+)%-(%d+)")
local y2,m2,d2=stamp2:match("(%d+)%-(%d+)%-(%d+)")
local y3,m3,d3=stamp3:match("(%d+)%-(%d+)%-(%d+)")
local y4,m4,d4=stamp4:match("(%d+)%-(%d+)%-(%d+)")
local t1={year=y1, month=m1, day=d1}
local t2={year=y2, month=m2, day=d2}
local t3={year=y3, month=m3, day=d3}
local t4={year=y4, month=m4, day=d4}
assert(os.setlocale('nl_NL.UTF-8'))

val_WeatherPrediction1_5D = os.date("%A %d %B",os.time(t1)).." t/m "..os.date("%A %d %B",os.time(t2)).."\n " .."\n"..val_WeatherPrediction1_5D
val_WeatherPrediction6_10D = os.date("%A %d %B",os.time(t3)).." t/m "..os.date("%A %d %B",os.time(t4)).."\n " .."\n"..val_WeatherPrediction6_10D
assert(os.setlocale('en_GB.UTF-8'))

-- 5 Dagen overzicht
val_WeatherPredictionWeekShort1 = DayOfWeek[ (vandaag1) ]..": "..val_TempOutsideMin_Today1.."/"..val_TempOutsideMax_Today1.."°C, "..val_WindDirectionToday1..val_WindSpeedToday1..", ☀️:"..val_SunChanceToday1.."%, ️:"..val_RainChance_Today1.."% ("..val_RainIntensity_Today1.." mm)"
val_WeatherPredictionWeekShort2 = DayOfWeek[ (vandaag2) ]..": "..val_TempOutsideMin_Today2.."/"..val_TempOutsideMax_Today2.."°C, "..val_WindDirectionToday2..val_WindSpeedToday2..", ☀️:"..val_SunChanceToday2.."%, ️:"..val_RainChance_Today2.."% ("..val_RainIntensity_Today2.." mm)"
val_WeatherPredictionWeekShort3 = DayOfWeek[ (vandaag3) ]..": "..val_TempOutsideMin_Today3.."/"..val_TempOutsideMax_Today3.."°C, "..val_WindDirectionToday3..val_WindSpeedToday3..", ☀️:"..val_SunChanceToday3.."%, ️:"..val_RainChance_Today3.."% ("..val_RainIntensity_Today3.." mm)"
val_WeatherPredictionWeekShort4 = DayOfWeek[ (vandaag4) ]..": "..val_TempOutsideMin_Today4.."/"..val_TempOutsideMax_Today4.."°C, "..val_WindDirectionToday4..val_WindSpeedToday4..", ☀️:"..val_SunChanceToday4.."%, ️:"..val_RainChance_Today4.."% ("..val_RainIntensity_Today4.." mm)"
val_WeatherPredictionWeekShort5 = DayOfWeek[ (vandaag5) ]..": "..val_TempOutsideMin_Today5.."/"..val_TempOutsideMax_Today5.."°C, "..val_WindDirectionToday5..val_WindSpeedToday5..", ☀️:"..val_SunChanceToday5.."%, ️:"..val_RainChance_Today5.."% ("..val_RainIntensity_Today5.." mm)"

-- Domoticz devices updaten
    UpdateDev(dev_TempGround,0,val_TempGround)
    UpdateDev(dev_CloudCover_Now,0,val_CloudCover_Now)
    UpdateDev(dev_DewPoint_Now,0,val_DewPoint_Now)
    UpdateDev(dev_UV_Now,0,val_UV_Now..";0")
    UpdateDev(dev_Ozone_Now,0,val_Ozone_Now)
    UpdateDev(dev_TempOutside_Now,0,val_TempOutside_Now)
    UpdateDev(dev_TempApparent_Now,0,val_TempApparent_Now)
    UpdateDev(dev_Humidity_Now,val_Humidity_Now.."|"..val_HS_Now)
   UpdateDev(dev_Pressure_Now,0,val_Pressure_Now..";"..BaroVS_Now)
   UpdateDev(dev_Visibility_Now,0,val_Visibility_Now)
   UpdateDev(dev_SolarRadiation,0,val_SolarRadiation)
   UpdateDev(dev_Wind_Now,0,val_WindBearing_Now..";"..val_WindDirection_Now..";"..val_WindSpeed_Now..";"..val_WindGust_Now..";"..val_TempOutside_Now..";"..val_TempApparent_Now)
   UpdateDev(dev_PrecipIntensity_Now,0,val_PrecipIntensity_Now)
   UpdateDev(dev_PrecipProbability_Now,0,val_PrecipProbability_Now)
   UpdateDev(dev_WeatherPredictionWeekShort,0,'<font face="courier new">'..val_WeatherPredictionWeekShort1.."\n "..val_WeatherPredictionWeekShort2.."\n "..val_WeatherPredictionWeekShort3.."\n "..val_WeatherPredictionWeekShort4.."\n "..val_WeatherPredictionWeekShort5.."</font>")

   if otherdevices_svalues[dev_WeatherPredictionLong] ~= val_WeatherPredictionLong then
      UpdateDev(dev_WeatherPredictionLong,0,val_WeatherPredictionLong)
   end
   if otherdevices_svalues[dev_WeatherPredictionShort] ~= val_WeatherPredictionShort then
      UpdateDev(dev_WeatherPredictionShort,0,val_WeatherPredictionShort)
   end   
   if otherdevices_svalues[dev_WeatherPrediction24H] ~= val_WeatherPrediction24H then
      UpdateDev(dev_WeatherPrediction24H,0,val_WeatherPrediction24H)
   end
   if otherdevices_svalues[dev_WeatherPrediction1_5D] ~= val_WeatherPrediction1_5D then
      UpdateDev(dev_WeatherPrediction1_5D,0,val_WeatherPrediction1_5D)
   end
   if otherdevices_svalues[dev_WeatherPrediction6_10D] ~= val_WeatherPrediction6_10D then
      UpdateDev(dev_WeatherPrediction6_10D,0,val_WeatherPrediction6_10D)
   end
print("Devices zijn geüpdatet")
end
return commandArray

Harald777

Hi Joost,

Mooi forum ben je hier begonnen, top.

Kort twee vraagjes over dit weer script:

- Woon zelf in Hilversum, is dat ook als weerstation op te nemen?
- Wat wordt er precies bedoeld met "local webserver_ip".

Mvrg Harald

Joost

Citaat van: Harald777 op 29 oktober 2019, 18:31:04
- Woon zelf in Hilversum, is dat ook als weerstation op te nemen?
- Wat wordt er precies bedoeld met "local webserver_ip".

Als je in Hilversum woont dan kan je het beste weerstation Utrecht (=5) pakken.

"webserver ip" is het IP-adres waar je PHP op geïnstalleerd hebt, in de praktijk zal dat meestal gelijk zijn aan het IP-adres van Domoticz.

Harald777

Joost,

Ik heb het script toegevoegd als Lua - Time maar krijg de volgende error msg:

Error: EventSystem: Lua script Weer updated did not return a commandArray

Enig idee waar dit aan kan liggen.

Harald

Joost

Het script moet nog tussen tags gezet worden. Onder de regel local dev_AlertToday1= "Waarschuwing morgen"      -- Alert sensor moet je commandArray = {} zetten en onder de allerlaatste regel moet je return commandArray zetten.

MarcT

Hallo Joost,

Ik wil je script graag gaan gebruiken.
Na aanmaak van de virtuele sensoren heb ik het script geplaatst. In de log zie ik onderstaande foutmelding verschijnen:
EventSystem: in Weerupdate_domoticaboard_LUA: [string "--[[ WEERSTATIONS: ..."]:554: assertion failed!

Weet jij waar de melding door wordt veroorzaakt?

M.vr.gr.
Marc

Joost

Citaat van: MarcT op 03 november 2019, 10:30:58
Na aanmaak van de virtuele sensoren heb ik het script geplaatst. In de log zie ik onderstaande foutmelding verschijnen:
EventSystem: in Weerupdate_domoticaboard_LUA: [string "--[[ WEERSTATIONS: ..."]:554: assertion failed!

Weet jij waar de melding door wordt veroorzaakt?

nl_NL.UTF-8 is niet (of niet juist) geïnstalleerd.

Geef commando sudo raspi-config in
Vervolgens optie 4 (Localisation Options) > T1 (Change locale). Hier moet je en_GB.UTF-8 én nl_NL.UTF-8 installeren.
Vervolgens nog even de Raspberry Pi rebooten.

MarcT

Hi Joost,

Na uitvoeren van het commando zijn de meldingen uiteindelijk na een paarminuten verdwenen. De aangemaakte sensors worden bijgewerkt. Dank voor je hulp en het mooie script.

M.vr.gr.
Marc

Nvbgm

Als eerste wil Joost bedanken voor het plaatsen van een mooi en overzichtelijk script.
Echter na het starten kwam ik hier en daar wel wat problemen tegen.
De meesten kon ik oplossen door het script goed door te nemen echter niet allemaal.

In ieder geval lijkt het mij handig voor anderen om te vermelden dat het script ook het php script nodig heeft voor de MeteoAlarm meldingen.
Dit python script vind je hier:  https://github.com/waynedgrant/meteo-alarm-weather-warnings
Op deze pagina staat ook hoe je deze moet installeren.

Ik ben tot nu toe zeer tevreden zoals het script loopt al was er vanmorgen toch wel weer een melding waar ik tot op heden niet uit ben gekomen.
Als er geen meldingen zijn van MeteoAlarm dan loopt alles prime. Beide driehoekjes ook mooi groen en No warnings.
Zodra er voor vandaag of morgen een waarschuwing is komt de volgende foutmelding.

Als er geen waarschuwingen zijn:


2019-12-01 10:00:06.753 Status: EventSystem: Script event triggered: 1-WeerData
2019-12-01 10:00:06.767 Status: Notification: Code groen
2019-12-01 10:00:06.767
2019-12-01 10:00:06.767 Geen waarschuwingen
2019-12-01 10:00:06.767
2019-12-01 10:00:06.767 Er zijn vandaag geen waarschuwingen
2019-12-01 10:00:06.767
2019-12-01 10:00:06.767
2019-12-01 10:00:06.767



Is er verandering in waarschuwing:


2019-12-01 09:00:06.427  Error: EventSystem: in 1-WeerData: [string "--[[ WEERSTATIONS:
..."]:417: bad argument #1 to 'gsub' (string expected, got nil)



Aan de hand van een ander MeteoAlarm script wat wel de veranderingen in waarschuwingen aangeeft kom ik tot de conclusie dat er niet geupdate wordt.

Enig idee waarom niet ????

Ray_308

Bedankt voor het mooie script, werkt als een zonnetje ;-)
Wat nog niet werkt zijn de meldingen naar mijn mobiel. (Die deden het met de vorige scripts ook niet oveirgens)

Ik kan wel een test bericht sturen naar telegram 'Domoticz test message!" Deze komt vrijwel meteen aan. Ik heb ook 127.0.0.* toegevoegd in de instellingen. Enig idee?

Joost

Citaat van: Nvbgm op 01 december 2019, 09:31:10
Ik ben tot nu toe zeer tevreden zoals het script loopt al was er vanmorgen toch wel weer een melding waar ik tot op heden niet uit ben gekomen.
Als er geen meldingen zijn van MeteoAlarm dan loopt alles prime. Beide driehoekjes ook mooi groen en No warnings.
Zodra er voor vandaag of morgen een waarschuwing is komt de volgende foutmelding.

Als er geen waarschuwingen zijn:


2019-12-01 10:00:06.753 Status: EventSystem: Script event triggered: 1-WeerData
2019-12-01 10:00:06.767 Status: Notification: Code groen
2019-12-01 10:00:06.767
2019-12-01 10:00:06.767 Geen waarschuwingen
2019-12-01 10:00:06.767
2019-12-01 10:00:06.767 Er zijn vandaag geen waarschuwingen
2019-12-01 10:00:06.767
2019-12-01 10:00:06.767
2019-12-01 10:00:06.767



Is er verandering in waarschuwing:


2019-12-01 09:00:06.427  Error: EventSystem: in 1-WeerData: [string "--[[ WEERSTATIONS:
..."]:417: bad argument #1 to 'gsub' (string expected, got nil)



Aan de hand van een ander MeteoAlarm script wat wel de veranderingen in waarschuwingen aangeeft kom ik tot de conclusie dat er niet geupdate wordt.

Enig idee waarom niet ????

Ja, ik heb de 1e post (onder het kopje Voorbereidingen) wat extra informatie gezet, als je dat toepast zou alles goed moeten werken.

Joost

Citaat van: Ray_308 op 01 december 2019, 10:10:00
Bedankt voor het mooie script, werkt als een zonnetje ;-)
Wat nog niet werkt zijn de meldingen naar mijn mobiel. (Die deden het met de vorige scripts ook niet oveirgens)

Ik kan wel een test bericht sturen naar telegram 'Domoticz test message!" Deze komt vrijwel meteen aan. Ik heb ook 127.0.0.* toegevoegd in de instellingen. Enig idee?

Wat voor meldingen krijg je in het log?

Nvbgm

CiteerOp regel 31 wijzig je 'from' naar 'starttime' en wijzig je 'until' naar 'endtime'.

public function serialize() {
        return [
            'starttime' => $this->from,
            'endtime' => $this->until
        ];

Zo werkt hij

Nvbgm

Nu het script werkt met de aanvullingen in de eerste post zit er bij mij toch iets fout.

Ik krijg nu om de 5 minuten de melding van het weeralarm in de mailbox terwijl het script aangeeft 1x in de drie uur te draaien..

if ((time.hour-0)%3)==0 then

Waar kan ik de meldingen verminderen zodat ik die ook 1 maal per drie uur krijg ?

Verder in het script vind ik deze regel.

local config=assert(io.popen('curl "http://'..domo_ip..'/json.htm?type=devices&rid=25"'))

Maar ik kan de json.htm niet vinden daar.


Joost

Citaat van: Nvbgm op 05 december 2019, 11:39:21
Ik krijg nu om de 5 minuten de melding van het weeralarm in de mailbox terwijl het script aangeeft 1x in de drie uur te draaien..

if ((time.hour-0)%3)==0 then

Waar kan ik de meldingen verminderen zodat ik die ook 1 maal per drie uur krijg ?

Ik zie dat time.hour op deze manier inderdaad niet werkt. Je kunt het vervangen door if time.min == 0 then dan wordt ieder uur gekeken of er weer-alerts zijn. Overigens wel vreemd dat je iedere 5 minuten een melding krijgt. Ik krijg alleen een melding indien er iets gewijzigd is.

Citaat van: Nvbgm op 05 december 2019, 11:39:21
Verder in het script vind ik deze regel.

local config=assert(io.popen('curl "http://'..domo_ip..'/json.htm?type=devices&rid=25"'))

Maar ik kan de json.htm niet vinden daar.

Ah...de reden dat je iedere 5 minuten een melding krijgt komt door bovenstaande regel. Je moet 25 veranderen naar het IDX van device "Waarschuwing vandaag".