Klik HIER om een account aan te maken, zodat je alle scripts en posts kunt bekijken!

Toon bijdragen

Deze sectie stelt je in staat om alle bijdragen van dit lid te bekijken. Je kunt alleen de bijdragen zien waar je op dit moment toegang toe hebt.


Topics - Joost

Pagina's: [1] 2 3 ... 7
1
PHP / Maak van je Raspberry Pi een weerstation (PHP-versie)
« Gepost op: 01 mei 2020, 20:53:07 »
Helaas kun je sinds kort op Darksky geen API-sleutel meer (gratis) krijgen, tijd dus voor een nieuw script dat gegevens gebruikt van Buienradar. Aangezien ik vrijwel geen kennis van PHP heb leek het me leuk om eens te kijken hoe ver ik met PHP zou komen.... Voor zover ik tot nu toe heb kunnen testen werkt alles naar behoren. Ongetwijfeld kunnen veel dingen anders en/of beter, maar dit is de eerste keer dat ik met PHP aan de slag ben gegaan. Mocht er iets niet werken, laat dan een berichtje achter!


Voorbereidingen:
  • Installeer PHP op je Raspberry Pi (bij voorkeur versie 7.4)
  • 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!
  • Maak in Domoticz de benodigde devices aan zoals in het script staat (onder // IDX van devices).De namen van de devices kun je naar eigen wens kiezen, het type device moet wel overeenkomen, zoals in het script staat.
  • Wijzig in het script de gegevens onder Settings en onder IDX van devices.
  • Maak een bestand met de naam weer.php aan en kopieer het script erin. Sla het bestand op in de folder /home/pi/domoticz/scripts/php/.
  • Maak een cronjob aan met commando sudo crontab -e en voeg de volgende regel toe: */10 * * * * sudo sh /home/pi/domoticz/scripts/php/weer.php. */10 betekent dat het script iedere 10 minuten uitgevoerd wordt. Uiteraard kun je dat naar wens wijzigen. Ook de locatie en bestandsnaam kun je naar eigen keuze instellen, maar doe dat dan bij beide stappen!
Onderstaande gegevens zal je in Domoticz krijgen:
  • Temperatuur buiten
  • Temperatuur gevoel
  • Temperatuur grond
  • Luchtvochtigheid
  • Windrichting
  • Windkracht
  • Windstoten
  • Luchtdruk
  • Zicht
  • Zonkracht
  • Regen (laatste uur)
  • Regen (laatste 24 uur)
  • Weersverwachting kort
  • Weersverwachting uitgebreid
  • Weersverwachting komende 24 uur
  • Weersverwachting 1-5 dagen vooruit
  • Weersverwachting 6-10 dagen vooruit
  • Weer-waarschuwing vandaag (code geel/oranje/rood met tekst)
  • Weer-waarschuwing morgen (code geel/oranje/rood met tekst)
  • Weersverwachting komende 5 dagen ('teletekst-style')
  • Automatische notificatie bij code geel/oranje/rood

<?php


/*
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


Note: Sommige weerstations bevatten niet alle benodigde gegevens, waardoor er fouten kunnen ontstaan in het script. Om te testen kun je weerstation 45 gebruiken.


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
$webserver_ip '192.168.2.63'// Alleen IP
$domoticz_url='http://192.168.2.63:8080/'//URL met poortnummer
$weerstation 45// Zie weerstations
$alerts_country 'NL'// Niet wijzigen
$alerts_region '013'// Zie 'Regio's voor alerts'


// IDX van devices
// Maak in Domoticz de juiste type virtuele sensoren aan en zet hieronder het IDX-nummer neer. De namen van de devices kun je naar eigen keuze kiezen.
$idx1  '25'// Alerts vandaag - Alert sensor
$idx2  '26'// Alerts morgen - Alert sensor
$idx3  '8'// Temperatuur buiten - Temperature sensor
$idx4  '9'// Temperatuur gevoel - Temperature sensor
$idx5  '20'// Temperatuur grond - Temperature sensor
$idx6  '12'// Zicht - Visibility sensor
$idx7  '24'// Zonkracht - Solar Radiation sensor
$idx8  '21'// Weer nu - Text sensor
$idx9  '18'// Weer uitgebreid - Text sensor
$idx10 '22'// Verwachting 1-5 dagen - Text sensor
$idx11 '23'// Verwachting 6-10 dagen - Text sensor
$idx12 '71'// Verwachting week - Text sensor
$idx13 '19'// Komende 24 uur - Text sensor
$idx14 '13'// Wind - Wind sensor
$idx15 '11'// Luchtdruk - Barometer sensor
$idx16 '87'// Regen (afgelopen 24 uur) - Rain sensor
$idx17 '88'// Regen (afgelopen uur) - Rain sensor
$idx18 '10'// Luchtvochtigheid - Humidity sensor




// *** HIERONDER NIETS WIJZIGEN!!!! *** //


$url_1 'https://data.buienradar.nl/2.0/feed/json';
$url_2 'http://'.$webserver_ip.'/meteo-alarm-weather-warnings-1.1/src/warnings.php?country='.$alerts_country.'&region='.$alerts_region.'&time_zone=Europe/Amsterdam';


// Functions


function Weather($idx,$temp) {
   global 
$domoticz_url;
   
$reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=udevice&idx='.$idx.'&nvalue=0&svalue='.$temp),true);
   if(
$reply['status']=='OK'$reply='OK';else $reply='ERROR';
   return 
$reply;
}


function 
Barometer($idx,$bar,$bar_for) {
   global 
$domoticz_url;
   
$reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=udevice&idx='.$idx.'&nvalue=0&svalue='.$bar.';'.$bar_for),true);
   if(
$reply['status']=='OK'$reply='OK';else $reply='ERROR';
   return 
$reply;
}


function 
Wind($idx,$winddirectiondegrees_now,$winddirection_now,$windspeed_now,$windgusts_now,$temp_now,$tempfeel_now) {
   global 
$domoticz_url;
   
$reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=udevice&idx='.$idx.'&nvalue=0&svalue='.$winddirectiondegrees_now.';'.$winddirection_now.';'.$windspeed_now.';'.$windgusts_now.';'.$temp_now.';'.$tempfeel_now),true);
   if(
$reply['status']=='OK'$reply='OK';else $reply='ERROR';
   return 
$reply;
}


function 
Humidity($idx,$hum,$hum_stat) {
   global 
$domoticz_url;
   
$reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=udevice&idx='.$idx.'&nvalue='.$hum.'&svalue='.$hum_stat),true);
   if(
$reply['status']=='OK'$reply='OK';else $reply='ERROR';
   return 
$reply;
}


function 
Text($idx,$text) {
   global 
$domoticz_url;
    
$reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=udevice&idx='.$idx.'&nvalue=0&svalue='.$text),true);
   if(
$reply['status']=='OK'$reply='OK';else $reply='ERROR';
   return 
$reply;
}


function 
Notification($subject,$thebody) {
   global 
$domoticz_url;
    
$reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=sendnotification&subject='.$subject.'&body='.$thebody),true);
   if(
$reply['status']=='OK'$reply='OK';else $reply='ERROR';
   return 
$reply;
}


function 
Rain($idx,$rainrate,$raincounter) {
   global 
$domoticz_url;
    
$reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=udevice&idx='.$idx.'&nvalue=0&svalue='.$rainrate.';'.$raincounter),true);
   if(
$reply['status']=='OK'$reply='OK';else $reply='ERROR';
   return 
$reply;
}


function 
Alert($idx,$level,$text) {
   global 
$domoticz_url;
    
$reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=udevice&idx='.$idx.'&nvalue='.$level.'&svalue='.$text),true);
   if(
$reply['status']=='OK'$reply='OK';else $reply='ERROR';
   return 
$reply;
}


function 
TempHum($idx,$temp,$hum,$hum_stat) {
   global 
$domoticz_url;
    
$reply=json_decode(file_get_contents($domoticz_url.'json.htm?type=command&param=udevice&idx='.$idx.'&nvalue=0&svalue='.$temp.';'.$hum.';'.$hum_stat),true);
   if(
$reply['status']=='OK'$reply='OK';else $reply='ERROR';
   return 
$reply;
}
// Ophalen gegevens Buienradar
$contents file_get_contents(($url_1),true);
$clima=json_decode($contents);


foreach (
$clima->actual->stationmeasurements as $item) {
if ($item->stationid == $weerstation) {
$airpressure_now=$item->airpressure;
$humidity_now=$item->humidity;
$temp_now=$item->temperature;
$tempground_now=$item->groundtemperature;
$tempfeel_now=$item->feeltemperature;
$precipitation_now=$item->precipitation;
$rainFallLast24Hour=$item->rainFallLast24Hour;
$rainFallLastHour=$item->rainFallLastHour;
$sunpower_now=$item->sunpower;
$visibility_now=$item->visibility/1000;
$weather_now=$item->weatherdescription;
$winddirection_now=$item->winddirection;
$windgusts_now=$item->windgusts*10;
$windspeed_now=$item->windspeed*10;
$windspeedBft_now=$item->windspeedBft;
$winddirectiondegrees_now=$item->winddirectiondegrees;
}
}


$weatherreport_summary=$clima->forecast->weatherreport->summary;
$weatherreport_title=$clima->forecast->weatherreport->title;
$weatherreport_text=$clima->forecast->weatherreport->text;
$weatherreport_shortterm=$clima->forecast->shortterm->forecast;
$weatherreport_shortterm_startdate=substr($clima->forecast->shortterm->startdate010);
$weatherreport_shortterm_enddate=substr($clima->forecast->shortterm->enddate010);
$weatherreport_longterm=$clima->forecast->longterm->forecast;
$weatherreport_longterm_startdate=substr($clima->forecast->longterm->startdate010);
$weatherreport_longterm_enddate=substr($clima->forecast->longterm->enddate010);


$temp_min_day1=$clima->forecast->fivedayforecast[0]->mintemperatureMin;
$temp_min_day2=$clima->forecast->fivedayforecast[1]->mintemperatureMin;
$temp_min_day3=$clima->forecast->fivedayforecast[2]->mintemperatureMin;
$temp_min_day4=$clima->forecast->fivedayforecast[3]->mintemperatureMin;
$temp_min_day5=$clima->forecast->fivedayforecast[4]->mintemperatureMin;
$temp_max_day1=$clima->forecast->fivedayforecast[0]->maxtemperatureMax;
$temp_max_day2=$clima->forecast->fivedayforecast[1]->maxtemperatureMax;
$temp_max_day3=$clima->forecast->fivedayforecast[2]->maxtemperatureMax;
$temp_max_day4=$clima->forecast->fivedayforecast[3]->maxtemperatureMax;
$temp_max_day5=$clima->forecast->fivedayforecast[4]->maxtemperatureMax;
$sunchance_day1=$clima->forecast->fivedayforecast[0]->sunChance;
$sunchance_day2=$clima->forecast->fivedayforecast[1]->sunChance;
$sunchance_day3=$clima->forecast->fivedayforecast[2]->sunChance;
$sunchance_day4=$clima->forecast->fivedayforecast[3]->sunChance;
$sunchance_day5=$clima->forecast->fivedayforecast[4]->sunChance;
$rainchance_day1=$clima->forecast->fivedayforecast[0]->rainChance;
$rainchance_day2=$clima->forecast->fivedayforecast[1]->rainChance;
$rainchance_day3=$clima->forecast->fivedayforecast[2]->rainChance;
$rainchance_day4=$clima->forecast->fivedayforecast[3]->rainChance;
$rainchance_day5=$clima->forecast->fivedayforecast[4]->rainChance;
$rainmin_day1=$clima->forecast->fivedayforecast[0]->mmRainMin;
$rainmin_day2=$clima->forecast->fivedayforecast[1]->mmRainMin;
$rainmin_day3=$clima->forecast->fivedayforecast[2]->mmRainMin;
$rainmin_day4=$clima->forecast->fivedayforecast[3]->mmRainMin;
$rainmin_day5=$clima->forecast->fivedayforecast[4]->mmRainMin;
$rainmax_day1=$clima->forecast->fivedayforecast[0]->mmRainMax;
$rainmax_day2=$clima->forecast->fivedayforecast[1]->mmRainMax;
$rainmax_day3=$clima->forecast->fivedayforecast[2]->mmRainMax;
$rainmax_day4=$clima->forecast->fivedayforecast[3]->mmRainMax;
$rainmax_day5=$clima->forecast->fivedayforecast[4]->mmRainMax;
$winddirection_day1=strtoupper($clima->forecast->fivedayforecast[0]->windDirection);
$winddirection_day2=strtoupper($clima->forecast->fivedayforecast[1]->windDirection);
$winddirection_day3=strtoupper($clima->forecast->fivedayforecast[2]->windDirection);
$winddirection_day4=strtoupper($clima->forecast->fivedayforecast[3]->windDirection);
$winddirection_day5=strtoupper($clima->forecast->fivedayforecast[4]->windDirection);
$wind_day1=$clima->forecast->fivedayforecast[0]->wind;
$wind_day2=$clima->forecast->fivedayforecast[1]->wind;
$wind_day3=$clima->forecast->fivedayforecast[2]->wind;
$wind_day4=$clima->forecast->fivedayforecast[3]->wind;
$wind_day5=$clima->forecast->fivedayforecast[4]->wind;


$forecast_day1=date('D',strtotime($clima->forecast->fivedayforecast[0]->day));
$forecast_day1 str_replace(array('Mon''Tue''Wed''Thu''Fri''Sat''Sun'), array('Ma''Di''Wo''Do''Vr''Za''Zo'), $forecast_day1);
$forecast_day2=date('D',strtotime($clima->forecast->fivedayforecast[1]->day));
$forecast_day2 str_replace(array('Mon''Tue''Wed''Thu''Fri''Sat''Sun'), array('Ma''Di''Wo''Do''Vr''Za''Zo'), $forecast_day2);
$forecast_day3=date('D',strtotime($clima->forecast->fivedayforecast[2]->day));
$forecast_day3 str_replace(array('Mon''Tue''Wed''Thu''Fri''Sat''Sun'), array('Ma''Di''Wo''Do''Vr''Za''Zo'), $forecast_day3);
$forecast_day4=date('D',strtotime($clima->forecast->fivedayforecast[3]->day));
$forecast_day4 str_replace(array('Mon''Tue''Wed''Thu''Fri''Sat''Sun'), array('Ma''Di''Wo''Do''Vr''Za''Zo'), $forecast_day4);
$forecast_day5=date('D',strtotime($clima->forecast->fivedayforecast[4]->day));
$forecast_day5 str_replace(array('Mon''Tue''Wed''Thu''Fri''Sat''Sun'), array('Ma''Di''Wo''Do''Vr''Za''Zo'), $forecast_day5);


$weatherdescription_tomorrow=$clima->forecast->fivedayforecast[0]->weatherdescription;


//Barometer
//if ($airpressure_now = nil) {$bar_for = 5;} // 5 = unknow
if ($airpressure_now 966) {$bar_for 4;} // 4 = thunderstorm
if (($airpressure_now 966) && ($airpressure_now 993)) {$bar_for 6;} // 6 = cloudy/rain
if (($airpressure_now 993) && ($airpressure_now 1007)) {$bar_for 2;} // 2 = cloudy
if (($airpressure_now 1007) && ($airpressure_now 1013)) {$bar_for 3;} // 3 = unstable
if (($airpressure_now 1013) && ($airpressure_now 1033)) {$bar_for 0;} // 0 = stable
if (($airpressure_now 1033) && ($airpressure_now 1050)) {$bar_for 1;} // 1= sunny


// Windrichting van Engels naar Nederlands
$winddirection_now str_replace(array('N''O''Z''W'), array('N''E''S''W'), $winddirection_now);


// Weer komende 24 uur
$weather_tomorrow $weatherdescription_tomorrow.'<br><br>Komende nacht daalt de temperatuur naar '.$temp_min_day1.' C. Morgen overdag wordt morgen maximaal '.$temp_max_day1'C. Er is morgen '.$sunchance_day1.'% kans op zon en '.$rainchance_day1.'% kans op neerslag ('.$rainmin_day1.'-'.$rainmax_day1.' mm). De wind komt uit het '.$winddirection_day1.' en zal kracht '.$wind_day1.' Bft hebben.<br><br>';


// Vervangen 'vreemde' tekens
$weather_now str_replace(array(">""<""\"""&""%"" "), array("&gt;""&lt;""&quot;""&amp;""%25""%20"), $weather_now);
$weatherreport_title str_replace(array(">""<""\"""&""%"" "), array("&gt;""&lt;""&quot;""&amp;""%25""%20"), $weatherreport_title);
$weatherreport_shortterm str_replace(array(">""<""\"""&""%"" "), array("&gt;""&lt;""&quot;""&amp;""%25""%20"), $weatherreport_shortterm);
$weatherreport_longterm str_replace(array(">""<""\"""&""%"" "), array("&gt;""&lt;""&quot;""&amp;""%25""%20"), $weatherreport_longterm);
$weatherreport_text str_replace(array("&nbsp;"" "), array("%20""%20"), $weatherreport_text);
$weather_tomorrow str_replace(array("\"""&""%"" "), array("&quot;""&amp;""%25""%20"), $weather_tomorrow);


// Week komende 5 dagen
$dag1=$forecast_day1.':%20'.$temp_min_day1.'/'.$temp_max_day1.'C,%20'.$winddirection_day1.$wind_day1.',%20&#9728;&#65039;'.$sunchance_day1.'%25,%20&#65039;'.$rainchance_day1.'%25%20('.$rainmin_day1.'-'.$rainmax_day1.'%20mm)<br>';
$dag2=$forecast_day2.':%20'.$temp_min_day2.'/'.$temp_max_day2.'C,%20'.$winddirection_day2.$wind_day2.',%20&#9728;&#65039;'.$sunchance_day2.'%25,%20&#65039;'.$rainchance_day2.'%25%20('.$rainmin_day2.'-'.$rainmax_day2.'%20mm)<br>';
$dag3=$forecast_day3.':%20'.$temp_min_day3.'/'.$temp_max_day3.'C,%20'.$winddirection_day3.$wind_day3.',%20&#9728;&#65039;'.$sunchance_day3.'%25,%20&#65039;'.$rainchance_day3.'%25%20('.$rainmin_day3.'-'.$rainmax_day3.'%20mm)<br>'
$dag4=$forecast_day4.':%20'.$temp_min_day4.'/'.$temp_max_day4.'C,%20'.$winddirection_day4.$wind_day4.',%20&#9728;&#65039;'.$sunchance_day4.'%25,%20&#65039;'.$rainchance_day4.'%25%20('.$rainmin_day4.'-'.$rainmax_day4.'%20mm)<br>';
$dag5=$forecast_day5.':%20'.$temp_min_day5.'/'.$temp_max_day5.'C,%20'.$winddirection_day5.$wind_day5.',%20&#9728;&#65039;'.$sunchance_day5.'%25,%20&#65039;'.$rainchance_day5.'%25%20('.$rainmin_day5.'-'.$rainmax_day5.'%20mm)';


$weer=$dag1.$dag2.$dag3.$dag4.$dag5;
$weer='<font%20face="courier%20new">'.$weer.'</font>';


// WEERALERTS


// Ophalen gegevens
$contents2 file_get_contents(($url_2),true);
$clima2=json_decode($contents2);


// Alert vandaag
$alerttype_today1=$clima2->warnings->regions[0]->today[0]->awareness->awareness_type->type;
$alertlevel_today1=$clima2->warnings->regions[0]->today[0]->awareness->awareness_level->level;
$alertcolour_today1=$clima2->warnings->regions[0]->today[0]->awareness->awareness_level->colour// 0=White/Unknown, 1=Green/No Warnings, 2=Yellow, 3=Amber, 4=Red
$alertcolour_today1=str_replace(array('Yellow''Amber''Red''Green''White'), array('GEEL''ORANJE!''ROOD!!!''groen''onbekend'), $alertcolour_today1);
//if ($alertlevel_today1 != 1) { 
   
$alertstarttime_today1 str_replace('CEST'''$clima2->warnings->regions[0]->today[0]->period->starttime);
   
$alertstart_today1 str_replace(array('Monday''Tuesday''Wednesday''Thursday''Friday''Saturday''Sunday'), array('maandag''dinsdag''woensdag''donderdag''vrijdag''zaterdag''zondag'), $alertstarttime_today1);
   
$alertendtime_today1 =str_replace('CEST'''$clima2->warnings->regions[0]->today[0]->period->endtime);
   
$alertend_today1 str_replace(array('Monday''Tuesday''Wednesday''Thursday''Friday''Saturday''Sunday'), array('maandag''dinsdag''woensdag''donderdag''vrijdag''zaterdag''zondag'), $alertendtime_today1);
   
$alerttext_today1 str_replace('nederlands:  '''$clima2->warnings->regions[0]->today[0]->description);
//}


// Alert morgen
$alerttype_tomorrow1=$clima2->warnings->regions[0]->tomorrow[0]->awareness->awareness_type->type;
$alertlevel_tomorrow1=$clima2->warnings->regions[0]->tomorrow[0]->awareness->awareness_level->level;
$alertcolour_tomorrow1=$clima2->warnings->regions[0]->tomorrow[0]->awareness->awareness_level->colour// 0=White/Unknown, 1=Green/No Warnings, 2=Yellow, 3=Amber, 4=Red
$alertcolour_tomorrow1=str_replace(array('Yellow''Amber''Red''Green''White'), array('GEEL''ORANJE!''ROOD!!!''groen''onbekend'), $alertcolour_tomorrow1);
//if ($alertlevel_tomorrow1 != 1) { 
   
$alertstarttime_tomorrow1 str_replace('CEST'''$clima2->warnings->regions[0]->tomorrow[0]->period->starttime);
   
$alertstart_tomorrow1 str_replace(array('Monday''Tuesday''Wednesday''Thursday''Friday''Saturday''Sunday'), array('maandag''dinsdag''woensdag''donderdag''vrijdag''zaterdag''zondag'), $alertstarttime_tomorrow1);
   
$alertendtime_tomorrow1 =str_replace('CEST'''$clima2->warnings->regions[0]->tomorrow[0]->period->endtime);
   
$alertend_tomorrow1 str_replace(array('Monday''Tuesday''Wednesday''Thursday''Friday''Saturday''Sunday'), array('maandag''dinsdag''woensdag''donderdag''vrijdag''zaterdag''zondag'), $alertendtime_tomorrow1);
   
$alerttext_tomorrow1 str_replace('nederlands:  '''$clima2->warnings->regions[0]->tomorrow[0]->description);
//}


if ($alertlevel_today1 !=1) {
   
$alerttext_today1 explode('english:'$alerttext_today1);
//   echo $alerttext_today1[0]; // engels
//   echo $alerttext_today1[1]; // nederlands
}


if (
$alertlevel_tomorrow1 !=1) {
   
$alerttext_tomorrow1 explode('english:'$alerttext_tomorrow1);
//   echo $alerttext_tomorrow1[0]; // engels
//   echo $alerttext_tomorrow1[1]; // nederlands
}


if (
$alerttype_today1 == 0) {
   
$alerttitle_today1 'Geen waarschuwingen';
} elseif (
$alerttype_today1 == 1) {
   
$alerttitle_today1 'Wind waarschuwing';
} elseif (
$alerttype_today1 == 2) {
   
$alerttitle_today1 'Sneeuw/IJzel waarschuwing';
} elseif (
$alerttype_today1 == 3) {
   
$alerttitle_today1 'Onweer waarschuwing';
} elseif (
$alerttype_today1 == 4) {
   
$alerttitle_today1 'Mist waarschuwing';
} elseif (
$alerttype_today1 == 5) {
   
$alerttitle_today1 'Extreem hoge temperatuur waarschuwing';
} elseif (
$alerttype_today1 == 6) {
   
$alerttitle_today1 'Extreem lage temperatuur waarschuwing';
} elseif (
$alerttype_today1 == 7) {
   
$alerttitle_today1 'Kust waarschuwing';
} elseif (
$alerttype_today1 == {
   
$alerttitle_today1 'Bosbrand waarschuwing';
} elseif (
$alerttype_today1 == 9) {
   
$alerttitle_today1 'Lawine waarschuwing';
} elseif (
$alerttype_today1 == 10) {
   
$alerttitle_today1 'Regen waarschuwing';
} elseif (
$alerttype_today1 == 11) {
   
$alerttitle_today1 'Niet beschikbaar';
} elseif (
$alerttype_today1 == 12) {
   
$alerttitle_today1 'Overstroming waarschuwing';
} elseif (
$alerttype_today1 == 13) {
   
$alerttitle_today1 'Regen/Overstroming waarschuwing';
}


if (
$alerttype_tomorrow1 == 0) {
   
$alerttitle_tomorrow1 'Geen waarschuwingen';
} elseif (
$alerttype_tomorrow1 == 1) {
   
$alerttitle_tomorrow1 'Wind waarschuwing';
} elseif (
$alerttype_tomorrow1 == 2) {
   
$alerttitle_tomorrow1 'Sneeuw/IJzel waarschuwing';
} elseif (
$alerttype_tomorrow1 == 3) {
   
$alerttitle_tomorrow1 'Onweer waarschuwing';
} elseif (
$alerttype_tomorrow1 == 4) {
   
$alerttitle_tomorrow1 'Mist waarschuwing';
} elseif (
$alerttype_tomorrow1 == 5) {
   
$alerttitle_tomorrow1 'Extreem hoge temperatuur waarschuwing';
} elseif (
$alerttype_tomorrow1 == 6) {
   
$alerttitle_tomorrow1 'Extreem lage temperatuur waarschuwing';
} elseif (
$alerttype_tomorrow1 == 7) {
   
$alerttitle_tomorrow1 'Kust waarschuwing';
} elseif (
$alerttype_tomorrow1 == {
   
$alerttitle_tomorrow1 'Bosbrand waarschuwing';
} elseif (
$alerttype_tomorrow1 == 9) {
   
$alerttitle_tomorrow1 'Lawine waarschuwing';
} elseif (
$alerttype_tomorrow1 == 10) {
   
$alerttitle_tomorrow1 'Regen waarschuwing';
} elseif (
$alerttype_tomorrow1 == 11) {
   
$alerttitle_tomorrow1 'Niet beschikbaar';
} elseif (
$alerttype_tomorrow1 == 12) {
   
$alerttitle_tomorrow1 'Overstroming waarschuwing';
} elseif (
$alerttype_tomorrow1 == 13) {
   
$alerttitle_tomorrow1 'Regen/Overstroming waarschuwing';
}


if (
$alertlevel_today1 != 1) {
$alert_today1 urlencode($alerttitle_today1.PHP_EOL.PHP_EOL.$alertstart_today1.' uur t/m '.$alertend_today1.' uur'.PHP_EOL.PHP_EOL.$alerttext_today1[0].PHP_EOL.PHP_EOL);
} else 
$alert_today1 urlencode($alerttitle_today1.PHP_EOL.PHP_EOL.'Er zijn geen waarschuwingen'.PHP_EOL.PHP_EOL.PHP_EOL);


if (
$alertlevel_tomorrow1 != 1) {
$alert_tommorow1 urlencode($alerttitle_tomorrow1.PHP_EOL.PHP_EOL.$alertstart_tomorrow1.' uur t/m '.$alertend_tomorrow1.' uur'.PHP_EOL.PHP_EOL.$alerttext_tomorrow1[0].PHP_EOL.PHP_EOL);
} else 
$alert_tommorow1 urlencode($alerttitle_tomorrow1.PHP_EOL.PHP_EOL.'Er zijn geen waarschuwingen'.PHP_EOL.PHP_EOL.PHP_EOL);


// Devices updaten
TempHum($idx3,$temp_now,$humidity_now,0);
Weather($idx4,$tempfeel_now);
Weather($idx5,$tempground_now);
Weather($idx6,$visibility_now);
Weather($idx7,$sunpower_now);


Text($idx8,$weather_now);
Text($idx9,($weatherreport_title'<br><br>' $weatherreport_text));
Text($idx10,(date('l%20d%20F'strtotime($weatherreport_shortterm_startdate))). '%20t/m%20' . (date('l%20d%20F'strtotime($weatherreport_shortterm_enddate))). '<br><br>' $weatherreport_shortterm);
Text($idx11,(date('l%20d%20F'strtotime($weatherreport_longterm_startdate))). '%20t/m%20' . (date('l%20d%20F'strtotime($weatherreport_longterm_enddate))). '<br><br>' $weatherreport_longterm);
Text($idx12,$weer);
Text($idx13,$weather_tomorrow);


Wind($idx14,$winddirectiondegrees_now,$winddirection_now,$windspeed_now,$windgusts_now,$temp_now,$tempfeel_now);
Barometer($idx15,$airpressure_now,$bar_for);
Rain($idx16,0,$rainFallLastHour); // Todo: nog vervangen door mm/u op dat moment
Rain($idx17,0,$rainFallLastHour); // Todo: nog vervangen door mm/u op dat moment
Humidity($idx18,$humidity_now,0); // Todo: nog vervangen https://www.domoticz.com/wiki/Domoticz_API/JSON_URL's#Humidity


// Notifications versturen
$subject 'WEER-ALERT!';
if (
$alertlevel_today1 != 1) {
   
$thebody urlencode('Code '.$alertcolour_today1.PHP_EOL.PHP_EOL.$alerttitle_today1.PHP_EOL.PHP_EOL.$alertstart_today1.' uur t/m '.$alertend_today1.' uur'.PHP_EOL.PHP_EOL.$alerttext_today1[0]);
} else 
$thebody urlencode('Code '.$alertcolour_today1.PHP_EOL.PHP_EOL.'Er zijn geen waarschuwingen');


$url_3$domoticz_url.'json.htm?type=devices&rid='.$idx1;
$contents3 file_get_contents(($url_3),true);
$clima3=json_decode($contents3);
$alert_now1=urlencode($clima3->result[0]->Data);


if ((
$alert_now1 != urlencode($alerttitle_today1.PHP_EOL.PHP_EOL.$alertstart_today1.' uur t/m '.$alertend_today1.' uur'.PHP_EOL.PHP_EOL.$alerttext_today1[0].PHP_EOL.PHP_EOL)) && ($alert_now1 != urlencode($alerttitle_today1.PHP_EOL.PHP_EOL.'Er zijn geen waarschuwingen'.PHP_EOL.PHP_EOL.PHP_EOL))) {
   
Notification($subject,$thebody);
}


// Devices updaten (alerts)
Alert($idx1,$alertlevel_today1,$alert_today1);
Alert($idx2,$alertlevel_tomorrow1,$alert_tommorow1);


?>

2
dzVents / Tuinlampen aan indien schuurdeur geopend wordt
« Gepost op: 29 maart 2020, 10:36:38 »
Onderstaand dzVents-script zorgt ervoor dat de tuinlampen aan gaan, indien de schuurdeur 's avonds geopend wordt:

return
{
    on =
    {
        devices =
        {
            Schuurdeur =
            {
                'at nighttime',
            },
        },
    },

    logging =
    {
        level = domoticz.LOG_DEBUG,
        marker = 'Group switch',
    },

    execute = function(dz, item)
        local tuin = dz.groups('Tuin') -- Change to name of your group
       
        if item.state == 'Alarm' then
            tuin.cancelQueuedCommands()
            tuin.switchOn()
            tuin.switchOff().afterSec(120)
        end
    end
}

Auteur: waaren

3
Domoticz (ARM 64-bit) / Domoticz 4.11803 (Arm 64-bit) BETA
« Gepost op: 22 maart 2020, 08:57:27 »
Software om Domoticz 4.11803 (beta) op een ARM 64-bit machine te installeren, zoals een Cubie or ODroid.


Domoticz 4.11803 (ARM 64-bit) - 21-03-2020

4
Domoticz (ARM 32-bit) / Domoticz 4.11803 (Arm 32-bit) BETA
« Gepost op: 22 maart 2020, 08:56:30 »
Software om Domoticz 4.11803 (beta) op een ARM 32-bit machine te installeren, zoals een Raspberry of Cubie.


Domoticz 4.11803 (ARM 32-bit) - 21-03-2020

5
Domoticz (Windows) / Domoticz 4.11084 (Windows) BETA
« Gepost op: 22 maart 2020, 08:53:28 »
Software om Domoticz 4.11804 (beta) op een Windows-machine te installeren.


Domoticz 4.11804 (Windows) - 21-03-2020

6
Domoticz (Linux) / Domoticz 4.11804 (Linux) BETA
« Gepost op: 22 maart 2020, 08:52:18 »
Software om Domoticz 4.11804 (beta) op een Linux-machine te installeren.


Domoticz 4.11804 (Linux) - 21-03-2020

7
dzVents / Dagelijkse automatische database-check van Domoticz
« Gepost op: 12 januari 2020, 11:14:28 »
Onderstaand dzVents-script geeft je een waarschuwing als er iets fout is met de (Domoticz) sqlite database. Je ontvangt een push-notificatie en/of een email.

--[[ -- DB check
       
        Will give you a warning when something is wrong with the (domoticz) sqlite database
        requires sqlite3
            install command on linux:    sudo apt install sqlite3
            install command on openwrt:  opkg install sqlite3-cli
            install command on synology: sudo /opt/bin/opkg install sqlite3-cli
           
            History:
            20190125: first public release 
            20190228: Include official sqlite3 error messages on failure
            20190808: Include optional trigger of follow up OS command
            20191005: add Telegram as notification option
            20191005: Include optional set of an Alert device with result of check         
            20191019: Include RC message in alert device
            20200108; Fixed bug(ss) in aftersucces / afterSuccess (case matters and double s also ! )

]]--
return {
            on =    { 
                        timer   =   {
                                        "at 20:07",             -- change to a time that suits you
                                        "at 10:07",
                                    },           
                    },
   
        logging =   { 
                        level     =   domoticz.LOG_DEBUG,       -- change to LOG_ERROR after you tested  the script
                        marker    =   "DB check"
                    },

    execute = function(dz)
        -- =======================  Settings below this line =================
        local email               = true                        -- set to false if you don't want an Email when something wrong with database
        local notify              = true                        -- set to false if you don't want a notification when something wrong with database
        local afterSuccessCommand = '/bashdir/copyDB.sh'        -- set to full qualified path of your followUp script or false if you don't need a followUp after success
        local afterFailCommand    = false                       -- set to full qualified path of your followUp script or false if you don't need a followUp after fail
     
        local followUpAfterFail   = false                       -- set to false if you don't need a followUpAfterFail
       
        local alert = {
                        active   = false,                             -- set to false if you don't want an Alert device set.
                        device   = "dbCheck result",                 -- Name of your alert device (only needed when you set active = true )
                        failText = "Problem in database",
                        OKText   = "Database OK",   
                      }
                     
        local subject             = "Domoticz database check"   -- Free text
        local emailaddress        = "yourName@gmail.com"        -- Your Email address
        local path                = "/home/pi/domoticz/"            -- full qualified path to your database
        local database            = "domoticz.db"               -- database filename + extension
        -- local database         = "corrupt.db"                -- test database filename + extension
                                                                    -- you can corrupt a test database by just load it in an editor
                                                                    -- and remove a couple of bytes
        local sqlite              = "/usr/bin/sqlite3"          -- location of your sqlite3 tool (use the command 'which sqlite3' to find location)
 
        local myNotificationTable     =     {
                                             -- table with one or more notification systems.
                                             -- uncomment the notification systems that you want to be used
                                             -- Can be one or more of
                                             
                                             dz.NSS_GOOGLE_CLOUD_MESSAGING,
                                             -- dz.NSS_HTTP,
                                             -- dz.NSS_KODI,
                                             -- dz.NSS_LOGITECH_MEDIASERVER,
                                             -- dz.NSS_NMA,
                                             -- dz.NSS_PROWL,
                                             -- dz.NSS_PUSHALOT,
                                             -- dz.NSS_PUSHBULLET,
                                             dz.NSS_PUSHOVER,
                                             -- dz.NSS_PUSHSAFER,
                                             dz.NSS_TELEGRAM,
                                            }
        -- =======================  No modification needed below this line ==================

         local function logWrite(str,level)             -- Support function for shorthand debug log statements
            dz.log(tostring(str),level or dz.LOG_DEBUG)
        end
   
        local space                   = " "
        local baseCommand             = "sudo" .. space .. sqlite .. space .. path .. database .. space
        local checks                  = {}
              checks                  = {
                                                  "\'select count(id) from deviceStatus;\'",
                                                   "\'.schema\'",
                                                  "\'pragma integrity_check;\'",
                                                  "\'pragma foreign_key_check;\'",
                                        }

        local function rc2Text(rc)
            local errorMessages =   {
                                          [0] = "Database OK",
                                          [1] = "Generic error",
                                          [2] = "Internal logic error in SQLite",
                                          [3] = "Access permission denied",
                                          [4] = "Callback routine requested an abort",
                                          [5] = "The database file is locked",
                                          [6] = "A table in the database is locked",
                                          [7] = "Memory allocation failed",
                                          [8] = "Attempt to write a readonly database",
                                          [9] = "Operation terminated by sqlite3_interrupt",
                                         [10] = "Some kind of disk I/O error occurred",
                                         [11] = "The database disk image is malformed",
                                         [12] = "Unknown opcode in sqlite3_file_control",
                                         [13] = "Insertion failed because database is full",
                                         [14] = "Unable to open the database file",
                                         [15] = "Database lock protocol error",
                                         [16] = "Internal use only",
                                         [17] = "The database schema changed",
                                         [18] = "String or BLOB exceeds size limit",
                                         [19] = "Abort due to constraint violation",
                                         [20] = "Data type mismatch",
                                         [21] = "Library used incorrectly",
                                         [22] = "Uses OS features not supported on host",
                                         [23] = "Authorization denied",
                                         [24] = "Not used",
                                         [25] = "2nd parameter to sqlite3_bind out of range",
                                         [26] = "File opened that is not a database file",
                                     }
            return(errorMessages[rc] or "Unknown error")
        end

        local function followUp(cmd)
            os.execute('sudo ' .. cmd ..' &')
        end

        local function osExecute(base,check)
            local fileHandle     = assert(io.popen(base .. check, 'r'))
            local commandOutput  = assert(fileHandle:read('*a'))
            local returnTable    = {fileHandle:close()}
            check = check:gsub("'","") .." result ==>> " ..  ( returnTable[3] ~= 0 and "Failed: " .. rc2Text(returnTable[3]) .. commandOutput .. " (".. returnTable[3] .. ")" or true and "OK" )
            logWrite("Command " .. check )
            return check,returnTable[3]            -- rc[3] contains returnCode
        end

        local function checkDatabase()
            if dz.utils.fileExists(path .. database) then
                if dz.utils.fileExists(sqlite) then
                    for _,check in ipairs (checks) do
                        local result,rc = osExecute(baseCommand,check)
                        if rc ~= 0 then
                            return rc, result 
                        end
                    end
                else
                    return -1,"sqlite3 not installed"
                end
            else
                return -1,"Wrong path to database"
            end
            return 0
        end

        local function updateAlert(rc)
            if alert and alert.active then
                local now = dz.time.rawDate .. ', ' .. dz.time.rawTime .. ': '
                local alertLevel = dz.ALERTLEVEL_RED
                if rc == 0 then  alertLevel = dz.ALERTLEVEL_GREEN end
                dz.devices(alert.device).updateAlertSensor(alertLevel, now .. rc2Text(rc))
            end
        end

        -- main program
        local rc, result = checkDatabase()
        if rc ~= 0 then
            logWrite(result,dz.LOG_ERROR)
            if email then dz.email(subject,result,emailaddress) end
            if notify then
                dz.notify(subject, result or "Dbase check encountered unknown error", dz.PRIORITY_NORMAL, dz.SOUND_INTERMISSION,"",  myNotificationTable )
            end
            if afterFailCommand and ( rc > 0 ) then followUp(afterFailCommand) end
        else
            if afterSuccessCommand then followUp(afterSuccessCommand) end
        end
        updateAlert(rc)
    end
}

Auteur: leecollings

8
Domoticz (ARM 64-bit) / Domoticz 4.11590 (Arm 64-bit) BETA
« Gepost op: 21 december 2019, 15:19:44 »
Software om Domoticz 4.11590 (beta) op een ARM 64-bit machine te installeren, zoals een Cubie or ODroid.


Domoticz 4.11590 (ARM 64-bit) - 21-12-2019

9
Domoticz (ARM 32-bit) / Domoticz 4.11590 (Arm 32-bit) BETA
« Gepost op: 21 december 2019, 15:19:00 »
Software om Domoticz 4.11590 (beta) op een ARM 32-bit machine te installeren, zoals een Raspberry of Cubie.


Domoticz 4.11590 (ARM 32-bit) - 21-12-2019

10
Domoticz (Windows) / Domoticz 4.11590 (Windows) BETA
« Gepost op: 21 december 2019, 15:18:24 »
Software om Domoticz 4.11590 (beta) op een Windows-machine te installeren.


Domoticz 4.11590 (Windows) - 21-12-2019

11
Domoticz (Linux) / Domoticz 4.11587 (Linux) BETA
« Gepost op: 21 december 2019, 15:17:21 »
Software om Domoticz 4.11587 (beta) op een Linux-machine te installeren.


Domoticz 4.11587 (Linux) - 21-12-2019

12
Domoticz (ARM 64-bit) / Domoticz 4.11579 (Arm 64-bit) BETA
« Gepost op: 19 december 2019, 19:40:38 »
Software om Domoticz 4.11579 (beta) op een ARM 64-bit machine te installeren, zoals een Cubie or ODroid.


Domoticz 4.11579 (ARM 64-bit) - 19-12-2019

13
Domoticz (ARM 32-bit) / Domoticz 4.11579 (Arm 32-bit) BETA
« Gepost op: 19 december 2019, 19:40:00 »
Software om Domoticz 4.11579 (beta) op een ARM 32-bit machine te installeren, zoals een Raspberry of Cubie.


Domoticz 4.11579 (ARM 32-bit) - 19-12-2019

14
Domoticz (Linux) / Domoticz 4.11579 (Linux) BETA
« Gepost op: 19 december 2019, 19:39:12 »
Software om Domoticz 4.11579 (beta) op een Linux-machine te installeren.


Domoticz 4.11579 (Linux) - 19-12-2019

15
Domoticz (Linux) / Domoticz 4.11564 (Linux) BETA
« Gepost op: 15 december 2019, 08:58:47 »
Software om Domoticz 4.11564 (beta) op een Linux-machine te installeren.


Domoticz 4.11564 (Linux) - 13-12-2019

Pagina's: [1] 2 3 ... 7