Notificaties van buienradar op Raspberry Pi

Vandaag gaan we onze Raspberry Pi weer een stukje slimmer maken. Laat je nooit meer verrassen door regen stel notificaties van buienradar op Raspberry Pi in. Met behulp van twee dummy sensoren zie je in één oogopslag hoe groot de kans is dat het gaat regenen en hoeveel neerslag er gaat vallen.

Benodigdheden
Dummy Hardware

Mocht je nog niet eerder Dummy Hardware toegevoegd hebben dan moeten we dat eerst gaan doen. 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).

De eerste sensor die we aanmaken is een percentage-sensor. Als naam heb ik de sensor Regenpercentage gegeven, aangezien deze sensor aan gaat geven hoeveel kans op regen we de komende 30 minuten hebben:

De tweede sensor wordt een een regensensor, deze sensor zal aangeven hoeveel mm regen er gaat vallen:

 

Script

Nadat de sensoren zijn aangemaakt is het tijd voor het script dat je hier kunt downloaden.  Pak het script eerst uit met een extracter als WinRar en op het vervolgens in een editor (bij voorkeur Notepad++). Onderstaande regels moet je naar eigen wens configureren:

lat=’5?.??’

: Latitude  van je woonplaats in 

lon=’4.??

': Longitude van je woonplaats in 

minutesinfuture=30

: Aantal minuten dat je vooruit wilt kijken 

domoticzurl=”http://192.168.??.??:8080″

: IP adres en poort van de Domoticz URL 

PDEVIDX=???

: Het idx van de percentage sensor 

DEVIDX=???

: Het van de regensensor 

debug=true

: Debug staat standaard aan. Indien alles goed werkt kun je het uitzetten door true te veranderen in false 

tempfilename = ‘/var/tmp/rain.tmp’

: Locatie van het tijdelijke bestand. Dit kan iedere beschrijfbare folder zijn. Zorg er wel voor dat het bestand rain.tmp de rechten 666 heeft.

Nadat je alles naar wens hebt ingesteld sla je het bestand op en kopieer je het naar
/home/pi/domoticz/scripts/. Uiteraard kan je ook voor een andere folder kiezen, maar daar dien je dan wel rekening mee te houden met het aanmaken van de cron job.

Cron job

Uiteraard willen we het script automatisch laten lopen. Dit doen we door een regel toe te voegen aan de cron tabel. Open de tabel met commando:

sudo crontab -e

Voeg onderstaande regels toe en sla de tabel op met CTRL-X:

*/5 * * * * sudo lua /home/pi/domoticz/scripts/buienradar_rainprediction.lua >> /var/tmp/BRP.log

Het script wordt nu iedere 5 minuten van ieder uur uitgevoerd. Debug informatie wordt weggeschreven naar het BRP.log bestand.

Notificaties

Uiteraard willen we graag weten wanneer het gaat regen. Dit doen we door het instellen van een notificatie op de smartphone. Ga eerste naar de gewenste sensor (de percentage sensor staat onder Utility, de regensensor onder Weather) en klik op Notifications. De voorwaarden voor een notificatie kun je vervolgens zelfs samenstellen en opslaan door op Add te klikken. In onderstaand voorbeeld heb ik ervoor gekozen dat ik een notificatie wil ontvangen indien er 0,2 mm of meer regen gaat vallen de komende 30 minuten en dat deze notificatie door Google Cloud Messaging gestuurd moet worden:

3 gedachten over “Notificaties van buienradar op Raspberry Pi

  • 24 augustus 2018 om 03:33
    Permalink

    Leuke toevoeging! Ik krijg het helaas niet aan het werk.
    In de BRP.log staat dan dit:
    UnauthorizedUnauthorized401 Unauthorized

    Wat kan ik hieraan doen? Ik zou het graag werkend willen krijgen 🙂

    Beantwoorden
    • 12 maart 2019 om 21:36
      Permalink

      Hoi Domenique,

      Ik ben er vandaag ook mee bezig geweest en liep tegen het zelfde probleem aan.

      Waarschijnlijk heb jij je domoticz ook beveiligd met een gebruikersnaam en wachtwoord..

      je zult de volgende regel in het script moeten aanpassen: domoticzurl=”http://192.168.x.x:8080″
      Naar: domoticzurl=”http://GEBRUIKERSNAAM:WACHTWOORD@192.168.x.x:8080″

      Succes!

      @Joost wederom dank voor de mooie handleiding !

      Beantwoorden
  • 15 augustus 2019 om 10:17
    Permalink

    @Joost, leuke ideeën, ik ga er zeker een aantal van je overnemen.

    Ik heb je buienradar script omgebouwd naar DzVents, de breedte en lengtegraad haal ik nu op uit de Domoticz parameters. Het is één script geworden en met DzVents kan je makkelijker met tijden rekenen en je devices updaten.
    Er zit nog wel een onvolkomenheid in, zodra buienradar tijden geeft van de volgende dag, dan ziet het script het als ’s morgens vroeg, dus in het verleden, ik heb nog geen manier gevonden om heel eenvoudig de datum van morgen te bepalen, zonder een formule te bouwen die rekening houdt met maanden van 30 en 31 dagen en schrikkeljaren. De simpelste oplossing is denk door alleen bij de eerste regel in de toekomst het verschil in tijd te bepalen en daarna en elke keer 5 minuten bij op te tellen. Voor dit moment even geen probleem, alleen rapporteert het script nu altijd even voor middernacht een droge periode.
    ik heb hem nu 1 op 1 omgebouwd maar waarschijnlijk ga ik het script wel verder aanpassen, waarom b.v. de “Neerslag komende 30 min” een percentage is, is me niet helemaal duidelijk.

    return {
    on = {timer = { ‘every 5 minutes’ },
    httpResponses = { ‘httpoutbr’ }
    },
    execute = function(domoticz, item)
    debug=false
    local regenkans = domoticz.devices(‘Kans op regen’)
    local neerslag = domoticz.devices(‘Neerslag (komende 30 min.)’)
    if (item.isTimer) then
    lengtegraad = domoticz.settings.location.longitude
    breedtegraad = domoticz.settings.location.latitude
    if debug then
    domoticz.log(‘lengtegraad ‘ .. lengtegraad,domoticz.LOG_INFO)
    domoticz.log(‘breedtegraad ‘ .. breedtegraad,domoticz.LOG_INFO)
    end
    domoticz.openURL({
    url = ‘https://gadgets.buienradar.nl/data/raintext?lat=’..breedtegraad..’&lon=’..lengtegraad,
    callback = ‘httpoutbr’
    })
    end
    if (item.isHTTPResponse) then
    — domoticz.log(item.data,domoticz.LOG_INFO)
    local minutesinfuture=30
    local totalrain=0
    local rainlines=0
    local lines = {}
    for s in item.data:gmatch(“[^\r\n]+”) do — use “[^\r\n]+” (‘+’ is for skipping over empty lines)
    table.insert(lines, s)
    end
    local Time = require(‘Time’)
    local now = Time() — current time
    if debug then print (now.raw) end
    for i,line in ipairs(lines) do
    rain=tonumber(string.sub(tostring(line), 0, 3))
    brtime=now.rawDate..’ ‘..string.sub(tostring(line), 5, 9)..’:00′
    local brt=Time(brtime)
    local test=now.compare(brt).compare — 0 = both are equal, 1 = time is in the future, -1 = time is in the past.
    — sometimes the first line is just in the past
    — arround midnight the times are always in the past, because the script uses now.rawDate togheter with HH:MM from the Buienradar output.
    if (test == 1 and brt.compare(now).minutes <= minutesinfuture) then
    totalrain=totalrain+rain
    rainlines=rainlines+1
    end
    if debug then print('Rain:'..rain..' brtime:'..brtime..' '..brt.compare(now).minutes..' '..test..' '..totalrain..' '..rainlines) end
    end
    — Returned value is average rain fall for next time
    — 0 is no rain, 255 is very heavy rain
    — When needed, mm/h is calculated by 10^((value -109)/32) (example: 77 = 0.1 mm/hour)
    if rainlines == 0 then
    averagerain=0
    else
    averagerain=math.ceil(totalrain/rainlines)
    end
    — Calculate the mm/h
    local calcmmh = domoticz.utils.round(10^((averagerain -109)/32),2)
    if debug then print(now.raw.." averagerain:"..averagerain.." calcmmh:"..calcmmh) end
    neerslag.updatePercentage(calcmmh)
    — Update percentage regenkans Domotics Device —————
    local result = domoticz.utils.round(averagerain*0.392156862745098,2)
    regenkans.updatePercentage(result)
    end
    end
    }

    Beantwoorden

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *