LUA Pass2PHP v2.2 complete script
Another update for my Pass2PHP script.
This time a great difference in setup. The $events array isn’t used anymore. Instead each update instantly executes the function with his name, if the function exists of course.
Spaces can’t be used in function names, therefor they need to be replaced by underscores. In the $s, $i and $t arrays they can be used:
function script_test() { global $s; lg('test='.$s['script test']); }
Please be sure to read all Domoticz related posts so you’ll understand the setup and history: https://egregius.be/tag/domoticz/
JSON=loadfile('/volume1/@appstore/domoticz/var/scripts/JSON.lua')() base64=loadfile('/volume1/@appstore/domoticz/var/scripts/base64.lua')() c=base64.encode(JSON:encode(devicechanged)) s=base64.encode(JSON:encode(otherdevices)) i=base64.encode(JSON:encode(otherdevices_idx)) t=base64.encode(JSON:encode(otherdevices_lastupdate)) os.execute('curl -s --data "c='..c..'&s='..s..'&i='..i..'&t='..t..'" http://127.0.0.1/secure/pass2php.php &') commandArray={} return commandArray
<?php error_reporting(E_ALL); ini_set("display_errors","on"); date_default_timezone_set('Europe/Brussels'); define('time',$_SERVER['REQUEST_TIME']); $c=json_decode(base64_decode($_REQUEST['c']),true); $s=json_decode(base64_decode($_REQUEST['s']),true); $i=json_decode(base64_decode($_REQUEST['i']),true); $t=json_decode(base64_decode($_REQUEST['t']),true); $r=str_replace(" ","_",key($c)); if(function_exists(key($c))) key($c)(); elseif(function_exists($r)) $r(); function achterdeur() { global $s,$i,$t; if($s['achterdeur']!="Open") { if(($s['weg']=='On'||$s['slapen']=='On')&&$s['meldingen']=='On') { if(cget('timealertachterdeur')<time-57) { sw($i['sirene'],'On'); $msg='Achterdeur open om '.$t['achterdeur']; cset('timealertachterdeur',time); telegram($msg,false); ios($msg); } } } } function alex_set() { verwarming(); } function alex_temp() { verwarming(); } function alles($action,$uit=0) { global $s,$i,$t; if($action=='On') { $items=array('eettafel','zithoek','kamer','tobi'); foreach($items as $item) if($s[$item]!='On') sl($i[$item],100,$item,300000); $items=array('bureel','tvled','kristal','wasbak','keuken','kookplaat','werkblad','inkom','hall','lichtbadkamer1'); foreach($items as $item) if($s[$item]!='On') sw($i[$item],'On',$item,300000); } elseif($action=='Off') { $items=array('denon','bureel','tv','tvled','kristal','eettafel','zithoek','garage','terras','tuin','voordeur','keuken','werkblad','wasbak','kookplaat','sony','kamer','tobi','alex'); foreach($items as $item) if($s[$item]!='Off'&&strtotime($t[$item])<time-$uit) sw($i[$item],'Off',$item,3000000); $items=array('lichtbadkamer1','lichtbadkamer2','badkamervuur'); foreach($items as $item) if($s[$item]!='Off'&&strtotime($t[$item])<time-$uit) sw($i[$item],'Off',$item,3000000); } elseif($action=='Slapen') { $items=array('hall','bureel','denon','tv','tvled','kristal','eettafel','zithoek','garage','terras','tuin','voordeur','keuken','werkblad','wasbak','kookplaat','inkom'); foreach($items as $item) if($s[$item]!='Off') sw($i[$item],'Off',$item,2000000); $items=array('pirkeuken','pirgarage','pirinkom','pirhall'); foreach($items as $item) if($s[$item]!='Off') ud($i[$item],0,'Off',3000000); } } function badkamer_temp() { global $s,$i,$t; if($s['deurbadkamer']=="Open") { if($s['badkamer_set']!=12&&(strtotime($t['deurbadkamer'])<time-57||$s['lichtbadkamer']=='Off')) { ud($i['badkamer_set'],0,12,'badkamer_set 12 deur open');$s['badkamer_set']=12.0; } } elseif($s['deurbadkamer']=="Closed"&&$s['heating']=='On') { if($s['lichtbadkamer']=='On'&&$s['badkamer_set']!=22.5) { ud($i['badkamer_set'],0,22.5,'badkamer_set 22.5 deur dicht en licht aan');$s['badkamer_set']=22.5; } elseif($s['lichtbadkamer']=='Off'&&$s['badkamer_set']!=15) { ud($i['badkamer_set'],0,15,'badkamer_set 15 deur dicht en licht uit');$s['badkamer_set']=15.0; } } $difbadkamer=number_format($s['badkamer_temp']-$s['badkamer_set'],1); $timebadkvuur=time-strtotime($t['badkamervuur']); if ($difbadkamer<=-0.2&&$s['badkamervuur']=="Off"&&$timebadkvuur>180)double($i['badkamervuur'],'On','badkamervuur dif = '.$difbadkamer.' was off for '.convertToHours($timebadkvuur)); elseif($difbadkamer<=-0.1&&$s['badkamervuur']=="Off"&&$timebadkvuur>240)double($i['badkamervuur'],'On','badkamervuur dif = '.$difbadkamer.' was off for '.convertToHours($timebadkvuur)); elseif($difbadkamer<= 0&&$s['badkamervuur']=="Off"&&$timebadkvuur>360)double($i['badkamervuur'],'On','badkamervuur dif = '.$difbadkamer.' was off for '.convertToHours($timebadkvuur)); elseif($difbadkamer>=0 &&$s['badkamervuur']=="On"&&$timebadkvuur>30) double($i['badkamervuur'],'Off','badkamervuur dif = '.$difbadkamer.' was on for '.convertToHours($timebadkvuur)); elseif($difbadkamer>=-0.2&&$s['badkamervuur']=="On"&&$timebadkvuur>120) double($i['badkamervuur'],'Off','badkamervuur dif = '.$difbadkamer.' was on for '.convertToHours($timebadkvuur)); elseif($difbadkamer>=-0.4&&$s['badkamervuur']=="On"&&$timebadkvuur>180) double($i['badkamervuur'],'Off','badkamervuur dif = '.$difbadkamer.' was on for '.convertToHours($timebadkvuur)); } function belknop() { global $s,$i; if($s['belknop']=="On"&&$s['meldingen']=='On') { if(cget('timetelegramdeurbel')<time-57) { cset('timetelegramdeurbel',time); if($s['weg']=='Off'&&$s['slapen']=='Off') sw($i['deurbel'],'On','deurbel'); if($s['slapen']=='Off') { telegram('Deurbel',false,'Kirby'); ios('Deurbel'); } else telegram('Deurbel',true,'Kirby'); $ctx=stream_context_create(array('http'=>array('timeout'=>3))); file_get_contents('http://192.168.2.11/telegram.php?snapshot=true',false,$ctx); file_get_contents('http://192.168.2.11/fifo_command.php?cmd=record%20on%205%2055',false,$ctx); if($s['zon']<=10) sw($i['voordeur'],'On'); } } } function denon() { global $s,$i; if($s['denon']=="On") { $ctx=stream_context_create(array('http'=>array('timeout'=>3))); for($x=0;$x<=20;$x++) { sleep(1); $denon=json_decode(json_encode(simplexml_load_string(file_get_contents('http://192.168.2.4/goform/formMainZone_MainZoneXml.xml?_='.time(),false,$ctx))),TRUE); if($denon['ZonePower']['value']!='ON') { file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutZone_OnOff%2FON&cmd1=aspMainZone_WebUpdateStatus%2F',false,$ctx); sleep(1); file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutZone_InputFunction/TUNER',false,$ctx); sleep(1); file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutZone_OnOff%2FON&cmd1=aspMainZone_WebUpdateStatus%2F&ZoneName=ZONE2',false,$ctx); } else break; } } } function deurbadkamer() { global $s,$i; if($s['deurbadkamer']=="Open") { if($s['slapen']=='Off'||(time>strtotime('6:00')&&time<strtotime('12:00'))) { if($s['lichtbadkamer1']=='Off') sw($i['lichtbadkamer1'],'On','lichtbadkamer1'); if($s['lichtbadkamer2']=='On') sw($i['lichtbadkamer2'],'Off','lichtbadkamer2'); } else { if($s['lichtbadkamer2']=='Off') sw($i['lichtbadkamer2'],'On','lichtbadkamer2'); if($s['lichtbadkamer1']=='On') sw($i['lichtbadkamer1'],'Off','lichtbadkamer1'); } } badkamer_temp(); } function inkomvoordeur() { global $s,$t; if(strtotime($t['inkom'])<time-5&&strtotime($t['voordeur'])<time-5) RefreshZwave(8); } function kamer_set() { verwarming(); } function kamer_temp() { verwarming(); } function keukenzolderg() { global $s,$t; if(strtotime($t['keuken'])<time-5&&strtotime($t['zolderg'])<time-5) RefreshZwave(5); } function lichtbadkamer() { global $s,$t; zon(); if(strtotime($t['lichtbadkamer1'])<time-5&&strtotime($t['lichtbadkamer1'])<time-5) { sleep(5); RefreshZwave(11); } } function living_set() { verwarming(); } function living_temp() { verwarming(); } function minihall1s() { global $s,$i; if($s['minihall1s']=="On") { alles('Slapen'); if($s['slapen']=='Off') sw($i['slapen'],'On','slapen'); } if($s['lichten_auto']=='Off') sw($i['lichten_auto'],'On','lichten auto aan'); /*if($s['luifel']!='Open')sw($i['luifel'],'Off','zonneluifel dicht');*/ } function minihall2s() { global $i; sw($i['zoldertrap'],'Off','zoldertrap open'); } function minihall3s() { global $s,$i; if($s['hall']=='Off') sw($i['hall'],'On','hall'); if($s['slapen']=='On') sw($i['slapen'],'Off','slapen'); } function minihall4s() { global $i; sw($i['zoldertrap'],'On','zoldertrap toe'); } function minihall1l() { minihall2l(); } function minihall2l() { global $i; sl($i['alex'],2,'Alex'); } function minihall3l() { minihall4l(); } function minihall4l() { global $i; sl($i['tobi'],18,'dimmer Tobi'); cset('dimmertobi',1); } function miniliving1s() { global $s,$i; if($s['denon']=='Off') sw($i['denon'],'On','Denon',100000); if($s['tv']=='Off') sw($i['tv'],'On','TV',100000); if($s['zon']=0&&$s['tvled']=='Off') sw($i['tvled'],'On','tvled',1000); elseif($s['tv']=='On'&&$s['tvled']=='Off') sw($i['tvled'],'On','tvled',1000); elseif($s['tv']=='On'&&$s['tvled']=='On') sw($i['tvled'],'Off','tvled',1000); $ctx=stream_context_create(array('http'=>array('timeout'=>3))); file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutZone_InputFunction/SAT/CBL',false,$ctx); usleep(800000); file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutMasterVolumeSet/-42.0',false,$ctx); } function miniliving2s() { global $s,$i; if($s['kodi']=='Off') sw($i['kodi'],'On','Kodi'); if($s['denon']=='Off') sw($i['denon'],'On','Denon'); if($s['tv']=='Off') sw($i['tv'],'On','TV'); if($s['zon']<100) { if($s['tvled']=='Off') sw($i['tvled'],'On','tvled'); } elseif($s['zon']>300) { if($s['kristal']=='On') sw($i['kristal'],'Off','kristal'); if($s['tvled']=='On') sw($i['tvled'],'Off','tvled'); } $ctx=stream_context_create(array('http'=>array('timeout'=>3))); file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutZone_InputFunction/DVD',false,$ctx); usleep(800000); file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutMasterVolumeSet/-40.0',false,$ctx); } function miniliving3s() { $ctx=stream_context_create(array('http'=>array('timeout'=>3))); $denon=json_decode(json_encode(simplexml_load_string(file_get_contents('http://192.168.2.4/goform/formMainZone_MainZoneXml.xml?_='.time,false,$ctx))),TRUE); if($denon) { $denon['MasterVolume']['value']=='--'?$setvalue=-55:$setvalue=$denon['MasterVolume']['value']; $setvalue=$setvalue-3; if($setvalue>-10) $setvalue=-10; if($setvalue<-80) $setvalue=-80; $volume=80+$setvalue; usleep(100000); file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutMasterVolumeSet/'.$setvalue.'.0',false,$ctx); } } function miniliving4s() { $ctx=stream_context_create(array('http'=>array('timeout'=>3))); $denon=json_decode(json_encode(simplexml_load_string(file_get_contents('http://192.168.2.4/goform/formMainZone_MainZoneXml.xml?_='.time,false,$ctx))),TRUE); if($denon) { $denon['MasterVolume']['value']=='--'?$setvalue=-55:$setvalue=$denon['MasterVolume']['value']; $setvalue=$setvalue+3; if($setvalue>-10) $setvalue=-10; elseif($setvalue<-80) $setvalue=-80; $volume=80+$setvalue; usleep(100000); file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutMasterVolumeSet/'.$setvalue.'.0',false,$ctx); } } function miniliving1l() { global $s,$i; if($s['denon']=='Off') sw($i['denon'],'On','Denon',100000); if($s['tv']=='On') sw($i['tv'],'Off','TV',100000); if($s['zon']>0) { if($s['kristal']=='On') sw($i['kristal'],'Off','Kristal'); if($s['tvled']=='On') sw($i['tvled'],'Off','tvled'); } sleep(1); $ctx=stream_context_create(array('http'=>array('timeout'=>3))); file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutMasterVolumeSet/-50.0',false,$ctx); usleep(800000); file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutZone_InputFunction/TUNER',false,$ctx); } function miniliving2l() { global $i; sw($i['bureel'],'Toggle','Bureel'); } function miniliving3l() { global $s,$i; sl($i['eettafel'],9,'dimmer eettafel'); if($s['tv']=='On') sw($i['tv'],'Off','TV'); if($s['kristal']=='On') sw($i['kristal'],'Off','kristal'); if($s['tvled']=='On') sw($i['tvled'],'Off','tvled'); $ctx=stream_context_create(array('http'=>array('timeout'=>3))); file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutZone_OnOff%2FON&cmd1=aspMainZone_WebUpdateStatus%2F',false,$ctx); usleep(800000); file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutMasterVolumeSet/-55.0',false,$ctx); usleep(800000); file_get_contents('http://192.168.2.4/MainZone/index.put.asp?cmd0=PutZone_InputFunction/TUNER',false,$ctx); } function miniliving4l() { global $s,$i; $items=array('pirkeuken','pirgarage','pirinkom','pirhall'); foreach($items as $item) if($s[$item]!='Off') ud($i[$item],0,'Off',$item); $items=array('eettafel','zithoek','garage','inkom','hall','keuken','werkblad','wasbak','kookplaat'); foreach($items as $item) if($s[$item]!='Off') sw($i[$item],'Off',$item); } function alarm($naam,$slapen=true) { global $s,$i,$t; if(($s['weg']=='On'||($s['slapen']=='On'&&$slapen==true))&&$s['meldingen']=='On'&&strtotime($t['weg'])<time-178&&strtotime($t['slapen'])<time-178) { if(cget('timealert'.$naam)<time-57) { sw($i['sirene'],'On'); $msg='Beweging '.$naam.' om '.strftime("%H:%M:%S",time); cset('timealert'.$naam,time); telegram($msg,false); ios($msg); } } } function pirgarage() { global $s,$i; if($s['pirgarage']=="On") { if((time<strtotime('10:30')||time>strtotime('18:30')||$s['zon']<1200)&&$s['garage']=='Off') sw($i['garage'],'On','garage'); alarm('garage'); } } function pirhall() { global $s,$i; if($s['pirhall']=="On") { if($s['slapen']=='Off'&&$s['hall']=='Off'&&(time<strtotime('8:00')||$s['zon']<100)) sw($i['hall'],'On','hal',100000); if($s['inkom']=='Off'&&(time<strtotime('8:00')||$s['zon']<200)) sw($i['inkom'],'On','inkom'); alarm('hall',false); } } function pirinkom() { global $s,$i; if($s['pirinkom']=="On") { if($s['inkom']=='Off'&&(time<strtotime('8:00')||$s['zon']<100)) sw($i['inkom'],'On','inkom',100000); if($s['slapen']=='Off'&&$s['hall']=='Off'&&(time<strtotime('8:00')||$s['zon']<150)) sw($i['hall'],'On','hall');alarm('inkom'); } } function pirkeuken() { global $s,$i; if($s['pirkeuken']=="On") { if($s['keuken']=='Off'&&$s['wasbak']=='Off'&&$s['werkblad']=='Off'&&$s['kookplaat']=='Off'&&$s['zon']<500) sw($i['wasbak'],'On','wasbak');alarm('keuken'); } } function pirliving() { global $s,$i; if($s['pirliving']=="On") { if($s['denon']=='Off'&&$s['weg']=='Off'&&$s['slapen']=='Off') { if($s['zon']<100) { if($s['wasbak']=='Off') sw($i['wasbak'],'On','wasbak',300000); if($s['bureel']=='Off') sw($i['bureel'],'On','bureel',300000); } miniliving1l(); } alarm('living'); } } function poort() { global $s,$i; if($s['poort']=="On") { if($s['zon']<1000&&$s['garage']=='Off') sw($i['garage'],'On','garage'); alarm('poort'); } } function raamliving() { global $s; if($s['raamliving']=="On") alarm('raamliving'); } function remoteslapen() { global $s,$i; if($s['remoteslapen']=="On") { $kamer=filter_var($s['kamer'],FILTER_SANITIZE_NUMBER_INT); if($s['slapen']=='Off'&&$kamer!=16) sl($i['kamer'],17); elseif($s['slapen']=='Off'&&$kamer==16) { sl($i['kamer'],13); minihall1s(); } elseif($s['slapen']=='On'&&$kamer==12) { sl($i['kamer'],11); cset('dimmerkamer',1); } } else minihall3s(); } function remoteweg() { weg(); } function remotezolder() { global $s; $s['remotezolder']=='On'?minihall2s():minihall4s(); } function SD($naam) { global $i; $msg='Rook gedecteerd bij '.$naam.'!'; telegram($msg,false,'Kirby'); ios($msg); resetsecurity($i['SD'.$naam],$naam); } function SDalex() { global $s; if($s['SDalex']=="On") SD('alex'); } function SDbadkamer() { global $s; if($s['SDbadkamer']=="On") SD('badkamer'); } function SDkamer() { global $s; if($s['SDkamer']=="On") SD('kamer'); } function SDliving() { global $s; if($s['SDliving']=="On") SD('living'); } function SDtobi() { global $s; if($s['SDtobi']=="On") SD('tobi'); } function SDzolder() { global $s; if($s['SDzolder']=="On") SD('zolder'); } function sirene() { global $s,$i; if($s['sirene']=="On") { sw($i['deurbel'],'On','Deurbel sirene'); sleep(2); sw($i['sirene'],'Off','sirene'); } } function slapen() { global $s,$i; if($s['slapen']=="On") { if($s['achterdeur']!='Open') { sw($i['deurbel'],'On'); telegram('Opgelet: Achterdeur open!',false,'Kirby'); } if($s['raamliving']!='Closed') { sw($i['deurbel'],'On'); telegram('Opgelet: Raam Living open!',false,'Kirby'); } if($s['poort']!='Closed') { sw($i['deurbel'],'On'); telegram('Opgelet: Poort open!',false,'Kirby'); } alles('Slapen'); double($i['GroheRed'],'Off'); double($i['badkamervuur'],'Off'); /*if($s['luifel']!='Open')sw($i['luifel'],'Off','zonneluifel dicht');*/ } if($s['lichten_auto']=='Off') sw($i['lichten_auto'],'On','lichten auto aan'); } function sony() { global $s; RefreshZwave(23,'switch','sony',$s['meldingen']); } function tobi_set() { verwarming(); } function tobi_temp() { verwarming(); } function verwarming() { if(cget('time-verwarming')<time-10) { cset('time-verwarming',time); global $s,$i,$t; $weer=unserialize(cget('weer')); $buienradar=$weer['buien']; $buiten_temp=$weer['buiten_temp']; $wind=$weer['wind']; if($s['weg']=='On') { if($s['heating']!='Off'&&strtotime($t['heating'])<time-3598) { sw($i['heating'],'Off','heating'); $s['heating']='Off'; } } else { if($s['heating']!='On') { sw($i['heating'],'On','heating'); $s['heating']='On'; } } $Setkamer=12; $setpointkamer=cget('setpointkamer'); if($setpointkamer!=0&&strtotime($t['kamer_set'])<time-3598) { cset('setpointkamer',0); $setpointkamer=0; } if($setpointkamer!=2) { if($buiten_temp<14&&$s['raamkamer']=='Closed'&&$s['heating']=='On'&&(strtotime($t['raamkamer'])<time-7198||time>strtotime('21:00'))) { $Setkamer=12.0;if(time<strtotime('5:00')||time>strtotime('21:00')) $Setkamer=16; } if($s['kamer_set']!=$Setkamer) { ud($i['kamer_set'],0,$Setkamer,'Rkamer_set'); $s['kamer_set']=$Setkamer; } } $Settobi=12; $setpointtobi=cget('setpointtobi'); if($setpointtobi!=0&&strtotime($t['tobi_set'])<time-3598) { cset('setpointtobi',0); $setpointtobi=0; } if($setpointtobi!=2) { if($buiten_temp<14&&$s['raamtobi']=='Closed'&&$s['heating']=='On'&&(strtotime($t['raamtobi'])<time-7198||time>strtotime('21:00'))) { $Settobi=12.0; if(date('W')%2==1) { if(date('N')==3) if(time>strtotime('21:00')) $Settobi=16; elseif(date('N')==4) if(time<strtotime('5:00')||time>strtotime('21:00')) $Settobi=16; elseif(date('N')==5) if(time<strtotime('5:00')) $Settobi=16; } else { if(date('N')==3) { if(time>strtotime('21:00'))$Settobi=16; } elseif(in_array(date('N'),array(4,5,6))) { if(time<strtotime('5:00')||time>strtotime('21:00')) $Settobi=16; } elseif(date('N')==7) { if(time<strtotime('5:00')) $Settobi=16; } } } if(isset($s['tobi_set'])&&$s['tobi_set']!=$Settobi) { ud($i['tobi_set'],0,$Settobi,'Rtobi_set'); $s['tobi_set']=$Settobi; } } $Setalex=12; $setpointalex=cget('setpointalex'); if($setpointalex!=0&&strtotime($t['alex_set'])<time-28795) { cset('setpointalex',0); $setpointalex=0; } if($setpointalex!=2) { if($buiten_temp<17&&$s['raamalex']=='Closed'&&$s['heating']=='On'&&(strtotime($t['raamalex'])<time-7198||time>strtotime('20:00'))) { $Setalex=12; if(time<strtotime('6:00')||time>strtotime('20:00')) $Setalex=18.5; } if($s['alex_set']!=$Setalex) { ud($i['alex_set'],0,$Setalex,'Ralex_set'); $s['alex_set']=$Setalex; } } $Setliving=14; $setpointliving=cget('setpointliving'); if($setpointliving!=0&&strtotime($t['living_set'])<time-10795) { cset('setpointliving',0); $setpointliving=0; } if($setpointliving!=2) { if($buiten_temp<20&&$s['heating']=='On'&&$s['raamliving']=='Closed') { $Setliving=17; if(time>=strtotime('5:00')&&time<strtotime('5:12'))$s['slapen']=='On'?$Setliving=17.0:$Setliving=18.0; elseif(time>=strtotime('5:12')&&time<strtotime('5:24'))$s['slapen']=='On'?$Setliving=17.3:$Setliving=18.2; elseif(time>=strtotime('5:24')&&time<strtotime('5:36'))$s['slapen']=='On'?$Setliving=17.6:$Setliving=18.4; elseif(time>=strtotime('5:36')&&time<strtotime('5:48'))$s['slapen']=='On'?$Setliving=17.9:$Setliving=18.6; elseif(time>=strtotime('5:48')&&time<strtotime('6:00'))$s['slapen']=='On'?$Setliving=18.2:$Setliving=18.8; elseif(time>=strtotime('6:00')&&time<strtotime('6:12'))$s['slapen']=='On'?$Setliving=18.4:$Setliving=19.0; elseif(time>=strtotime('6:12')&&time<strtotime('6:24'))$s['slapen']=='On'?$Setliving=18.6:$Setliving=19.2; elseif(time>=strtotime('6:24')&&time<strtotime('6:36'))$s['slapen']=='On'?$Setliving=18.8:$Setliving=19.4; elseif(time>=strtotime('6:36')&&time<strtotime('6:48'))$s['slapen']=='On'?$Setliving=19.0:$Setliving=19.6; elseif(time>=strtotime('6:48')&&time<strtotime('7:00'))$s['slapen']=='On'?$Setliving=19.2:$Setliving=19.8; elseif(time>=strtotime('7:00')&&time<strtotime('7:20'))$s['slapen']=='On'?$Setliving=19.4:$Setliving=20.0; elseif(time>=strtotime('7:20')&&time<strtotime('8:10'))$s['slapen']=='On'?$Setliving=19.6:$Setliving=20.0; elseif(time>=strtotime('8:10')&&time<strtotime('8:20'))$s['slapen']=='On'?$Setliving=19.8:$Setliving=20.0; elseif(time>=strtotime('8:20')&&time<strtotime('8:30'))$s['slapen']=='On'?$Setliving=19.8:$Setliving=20.2; elseif(time>=strtotime('8:30')&&time<strtotime('19:55'))$s['slapen']=='On'?$Setliving=20.0:$Setliving=20.5; elseif(time>=strtotime('19:55')&&time<strtotime('21:00'))$s['slapen']=='On'?$Setliving=20.0:$Setliving=20.0; elseif(time>=strtotime('21:00')&&time<strtotime('23:00'))$s['slapen']=='On'?$Setliving=20.0:$Setliving=19.5; } if($s['living_set']!= $Setliving) { ud($i['living_set'],0,$Setliving,'Rliving_set'); $s['living_set']=$Setliving; } } $kamers=array('living','tobi','alex','kamer'); $bigdif=100; $timebrander=time-strtotime($t['brander']); foreach($kamers as $kamer) { ${'dif'.$kamer}=number_format($s[$kamer.'_temp']-$s[$kamer.'_set'],1); if(${'dif'.$kamer}>9.9) ${'dif'.$kamer}=9.9; if(${'dif'.$kamer}<$bigdif&&$kamer!='kamer') $bigdif=${'dif'.$kamer}; ${'Set'.$kamer}=$s[$kamer.'_set']; } foreach($kamers as $kamer) { if(${'dif'.$kamer}<=number_format(($bigdif+ 0.2),1)&&${'dif'.$kamer}<2) ${'RSet'.$kamer}=setradiator($kamer,${'dif'.$kamer},true,$s[$kamer.'_set']); else ${'RSet'.$kamer}=setradiator($kamer,${'dif'.$kamer},false,$s[$kamer.'_set']); if(${'dif'.$kamer}<=$bigdif) $coldest=$kamer; else $coldest=''; } if($s['kamerZ']!=$RSetkamer) { lg('Danfoss KamerZ was '.$s['kamerZ'].',nieuw='.$RSetkamer); ud($i['kamerZ'],0,$RSetkamer,'RkamerZ',2000000); } if($s['tobiZ'] !=$RSettobi) { lg('Danfoss tobiZ was '.$s['tobiZ'].',nieuw='.$RSettobi); ud($i['tobiZ'],0,$RSettobi,'RtobiZ',2000000); } if($s['alexZ'] !=$RSetalex) { lg('Danfoss alexZ was '.$s['alexZ'].',nieuw='.$RSetalex); ud($i['alexZ'],0,$RSetalex,'RalexZ',2000000); } //if($s['badkamerZ']!=$RSetbadkamer)ud($i['badkamerZ'],0,$RSetbadkamer,'RbadkamerZ'); if($s['livingZ'] !=$RSetliving) { lg('Danfoss livingZ was '.$s['livingZ'].',nieuw='.$RSetliving); ud($i['livingZ'], 0,$RSetliving,'RlivingZ',2000000); } if($s['livingZZ']!=$RSetliving) { lg('Danfoss livingZZ was '.$s['livingZZ'].',nieuw='.$RSetliving); ud($i['livingZZ'],0,$RSetliving,'RlivingZZ',2000000); } if($s['livingZE']!=$RSetliving) { lg('Danfoss livingZE was '.$s['kamerZ'].',nieuw='.$RSetliving); ud($i['livingZE'],0,$RSetliving,'RlivingZE',2000000); } if ($bigdif<=-0.6&&$s['brander']=="Off"&&$timebrander>60) double($i['brander'],'On', 'brander dif = '.$bigdif.' in '.$coldest.', was off for '.convertToHours($timebrander)); elseif($bigdif<=-0.5&&$s['brander']=="Off"&&$timebrander>120) double($i['brander'],'On', 'brander dif = '.$bigdif.' in '.$coldest.', was off for '.convertToHours($timebrander)); elseif($bigdif<=-0.4&&$s['brander']=="Off"&&$timebrander>180) double($i['brander'],'On', 'brander dif = '.$bigdif.' in '.$coldest.', was off for '.convertToHours($timebrander)); elseif($bigdif<=-0.3&&$s['brander']=="Off"&&$timebrander>300) double($i['brander'],'On', 'brander dif = '.$bigdif.' in '.$coldest.', was off for '.convertToHours($timebrander)); elseif($bigdif<=-0.2&&$s['brander']=="Off"&&$timebrander>450) double($i['brander'],'On', 'brander dif = '.$bigdif.' in '.$coldest.', was off for '.convertToHours($timebrander)); elseif($bigdif<=-0.1&&$s['brander']=="Off"&&$timebrander>600) double($i['brander'],'On', 'brander dif = '.$bigdif.' in '.$coldest.', was off for '.convertToHours($timebrander)); elseif($bigdif<= 0 &&$s['brander']=="Off"&&$timebrander>2400) double($i['brander'],'On', 'brander dif = '.$bigdif.' in '.$coldest.', was off for '.convertToHours($timebrander)); elseif($bigdif> 0 &&$s['brander']=="On" &&$timebrander>30) double($i['brander'],'Off','brander dif = '.$bigdif.', was on for '.convertToHours($timebrander)); elseif($bigdif>= 0 &&$s['brander']=="On" &&$timebrander>120) double($i['brander'],'Off','brander dif = '.$bigdif.' in '.$coldest.', was on for '.convertToHours($timebrander)); elseif($bigdif>=-0.1&&$s['brander']=="On" &&$timebrander>180) double($i['brander'],'Off','brander dif = '.$bigdif.' in '.$coldest.', was on for '.convertToHours($timebrander)); elseif($bigdif>=-0.2&&$s['brander']=="On" &&$timebrander>240) double($i['brander'],'Off','brander dif = '.$bigdif.' in '.$coldest.', was on for '.convertToHours($timebrander)); elseif($bigdif>=-0.3&&$s['brander']=="On" &&$timebrander>300) double($i['brander'],'Off','brander dif = '.$bigdif.' in '.$coldest.', was on for '.convertToHours($timebrander)); elseif($bigdif>=-0.4&&$s['brander']=="On" &&$timebrander>360) double($i['brander'],'Off','brander dif = '.$bigdif.' in '.$coldest.', was on for '.convertToHours($timebrander)); elseif($bigdif>=-0.5&&$s['brander']=="On" &&$timebrander>420) double($i['brander'],'Off','brander dif = '.$bigdif.' in '.$coldest.', was on for '.convertToHours($timebrander)); elseif($bigdif>=-0.6&&$s['brander']=="On" &&$timebrander>900) double($i['brander'],'Off','brander dif = '.$bigdif.' in '.$coldest.', was on for '.convertToHours($timebrander)); } } function wasbakkookplaat() { global $t; if(strtotime($t['wasbak'])<time-5&&strtotime($t['kookplaat'])<time-5) RefreshZwave(61); } function water() { global $s; RefreshZwave(19,'switch','water',$s['meldingen']); } function weg() { global $s,$i; if($s['weg']=="On") { if($s['achterdeur']!='Open') { sw($i['deurbel'],'On','',0); telegram('Opgelet: Achterdeur open!',false,'Kirby'); } if($s['raamliving']!='Closed') { sw($i['deurbel'],'On','',0); telegram('Opgelet: Raam Living open!',false,'Kirby'); } alles('Off'); double($i['GroheRed'],'Off'); double($i['badkamervuur'],'Off'); } else { if($s['poortrf']=='Off') sw($i['poortrf'],'On','Poort RF',0); } } function werkbladtuin() { global $t; if(strtotime($t['werkblad'])<time-5&&strtotime($t['werkblad2'])<time-5) RefreshZwave(22); } function zonneluifel() { global $s,$i,$t; $weer=unserialize(cget('weer')); $buienradar=$weer['buien']; $buiten_temp=$weer['buiten_temp']; $wind=$weer['wind']; $maxbuien=20; $maxwolken=80; $zonopen=1500; $zontoe=200; if(in_array($weer['wind_dir'],array('W','S','SE'))) $maxwind=6; else $maxwind=8; if($s['luifel']!='Open'&&($wind>=$maxwind||$buienradar>=$maxbuien||$s['zon']<$zontoe)) { lg(' --- Luifel: Wind='.$wind.'|Buien='.round($buienradar,0).'|Zon='.$s['zon'].'|Luifel='.$s['luifel'].'|Last='.$t['luifel']); if($wind>=$maxwind) { sw($i['luifel'],'Off'); if(strtotime($t['luifel'])<time-3598) sw($i['luifel'],'Off'); } elseif($buienradar>=$maxbuien) { sw($i['luifel'],'Off'); if(strtotime($t['luifel'])<time-3598) sw($i['luifel'],'Off'); } elseif($s['zon']<$zontoe) { sw($i['luifel'],'Off'); if(strtotime($t['luifel'])<time-3598) sw($i['luifel'],'Off'); } } elseif($s['luifel']!='Closed'&&time>strtotime('10:25')&&$wind<$maxwind-1&&$buienradar<$maxbuien-1&&$s['living_temp']>22&&$s['zon']>$zonopen&&strtotime($t['luifel'])<time-598) { lg(' --- Luifel: Wind='.$wind.'|Buien='.round($buienradar,0).'|Zon='.$s['zon'].'|Luifel='.$s['luifel'].'|Last='.$t['luifel']); sw($i['luifel'],'On',$msg); $s['luifel']=='Open'; } } function zon() { global $s,$i,$t; $weer=unserialize(cget('weer')); $buienradar=$weer['buien']; $buiten_temp=$weer['buiten_temp']; $wind=$weer['wind']; if(cget('time-wunderground')<time-(86400/500)) { $wu=json_decode(curl('http://api.wunderground.com/api/c123456789e9413e/conditions/q/BX/Beitem.json'),true); if(isset($wu['current_observation'])) { cset('time-wunderground',time); $lastobservation=cget('time-observation'); if(isset($wu['current_observation']['estimated']['estimated'])) { lg('Wunderground '.number_format($wu['current_observation']['feelslike_c'],1).' '.number_format($wu['current_observation']['temp_c'],1).' '.number_format($wu['current_observation']['wind_kph'],1).' '.number_format($wu['current_observation']['wind_gust_kph'],1).' ESTIMATED'); goto exitwunderground; } elseif($wu['current_observation']['observation_epoch']<=$lastobservation) { lg('Wunderground '.number_format($wu['current_observation']['feelslike_c'],1).' '.number_format($wu['current_observation']['temp_c'],1).' '.number_format($wu['current_observation']['wind_kph'],1).' '.number_format($wu['current_observation']['wind_gust_kph'],1).' OBSERVATION OLDER THAN 1 HOUR'); goto exitwunderground; } else { cset('time-observation',$wu['current_observation']['observation_epoch']); } if(!isset($weer['buiten_temp'])) $weer['buiten_temp']=$wu['current_observation']['feelslike_c']; elseif($wu['current_observation']['feelslike_c']>$weer['buiten_temp']+0.2) $weer['buiten_temp']=$weer['buiten_temp']+0.2; elseif($wu['current_observation']['feelslike_c']<$weer['buiten_temp']-0.2) $weer['buiten_temp']=$weer['buiten_temp']-0.2; else $weer['buiten_temp']=round($wu['current_observation']['feelslike_c'],1); lg('Wunderground '.number_format($wu['current_observation']['feelslike_c'],1).' '.number_format($wu['current_observation']['temp_c'],1).' '.number_format($wu['current_observation']['wind_kph'],1).' '.number_format($wu['current_observation']['wind_gust_kph'],1).' Newtemp='.$weer['buiten_temp']); $weer['wind']=round(max(array($wu['current_observation']['wind_kph'],$wu['current_observation']['wind_gust_kph'])),0); $weer['wind_dir']=$wu['current_observation']['wind_dir']; $weer['icon']=str_replace('http://','https://',$wu['current_observation']['icon_url']); } exitwunderground: $rains=curl('http://gadgets.buienradar.nl/data/raintext/?lat=51.89&lon=4.11'); $rains=str_split($rains,11); $totalrain=0; $aantal=0; foreach($rains as $rain) { $aantal=$aantal+1; $totalrain=$totalrain+substr($rain,0,3); if($aantal==7) break; } $newbuienradar=pow(10,((($totalrain/7)-109)/32)); if(isset($newbuienradar)) $weer['buien']=$newbuienradar; $uweer=serialize($weer); cset('weer',$uweer); } if(cget('time-cron')<time-57) { cset('time-cron',time); verwarming(); badkamer_temp(); $items=array('eettafel','zithoek','tobi','kamer','alex'); foreach($items as $item) { if($s[$item]!='Off') { if(strtotime($t[$item])<time-29) { $action=cget('dimmer'.$item); if($action==1) { $level=filter_var($s[$item],FILTER_SANITIZE_NUMBER_INT); $level=floor($level*0.95); if($level<2) $level=0; if($level==20) $level=19; sl($i[$item],$level,$item); if($level==0) cset('dimmer'.$item,0); } elseif($action==2) { $level=filter_var($s[$item],FILTER_SANITIZE_NUMBER_INT); $level=$level+2; if($level==20) $level=21; if($level>30) $level=30; sl($i[$item],$level,$item); if($level==30) cset('dimmer'.$item,0); } } } } if($s['water']=='On'&&strtotime($t['water']<time-3598)) sw($i['water'],'Off'); if($s['pirlivingR']!='Off'&&strtotime($t['pirlivingR'])<time-57) sw($i['pirlivingR'],'Off','Reset pirlivingR'); if($s['pirgarage']=='Off'&&strtotime($t['pirgarage'])<time-178&&strtotime($t['poort'])<time-178&&strtotime($t['garage'])<time-178&&$s['garage']=='On'&&$s['lichten_auto']=='On') sw($i['garage'],'Off','licht garage'); if(strtotime($t['pirinkom'])<time-118&&strtotime($t['pirhall'])<time-118&&strtotime($t['inkom'])<time-118&&strtotime($t['hall'])<time-118&&$s['lichten_auto']=='On') { if($s['inkom']=='On') sw($i['inkom'],'Off','licht inkom'); if($s['hall']=='On') sw($i['hall'],'Off','licht hall'); } if(strtotime($t['pirkeuken'])<time-118&&strtotime($t['wasbak'])<time-118&&$s['pirkeuken']=='Off'&&$s['wasbak']=='On'&&$s['werkblad']=='Off'&&$s['keuken']=='Off'&&$s['kookplaat']=='Off') sw($i['wasbak'],'Off','wasbak pir keuken'); if($s['weg']=='Off'&&$s['slapen']=='Off') { if($s['GroheRed']=='Off') if(strtotime($t['slapen'])<time-900) double($i['GroheRed'],'On',$item); if($s['poortrf']=='Off') if(strtotime($t['slapen'])<time-900) double($i['poortrf'],'On',$item); } $items=array('living_temp','badkamer_temp','kamer_temp','tobi_temp','alex_temp','zolder_temp'); foreach($items as $item) $weer[$item]=$s[$item]; $uweer=serialize($weer); cset('weer',$uweer); $stamp=sprintf("%s",date("Y-m-d H:i")); $db=new mysqli('localhost','kodi','kodi','domotica'); if($db->connect_errno>0) die('Unable to connect to database [' . $db->connect_error . ']'); $living=$s['living_temp']; $badkamer=$s['badkamer_temp']; $kamer=$s['kamer_temp']; $tobi=$s['tobi_temp']; $alex=$s['alex_temp']; $zolder=$s['zolder_temp']; $s_living=$s['living_set']; $s_badkamer=$s['badkamer_set']; $s_kamer=$s['kamer_set'];$s_tobi=$s['tobi_set']; $s_alex=$s['alex_set']; if($s['brander']=='On') $brander=1; else $brander=0; if($s['badkamervuur']=='On') $badkamervuur=1; else $badkamervuur=0; $query="INSERT IGNORE INTO `temp` (`stamp`,`buiten`,`living`,`badkamer`,`kamer`,`tobi`,`alex`,`zolder`,`s_living`,`s_badkamer`,`s_kamer`,`s_tobi`,`s_alex`,`brander`,`badkamervuur`) VALUES ('$stamp','$buiten_temp','$living','$badkamer','$kamer','$tobi','$alex','$zolder','$s_living','$s_badkamer','$s_kamer','$s_tobi','$s_alex','$brander','$badkamervuur');"; if(!$result=$db->query($query)) die('There was an error running the query ['.$query .' - ' . $db->error . ']'); $db->close(); $Tregenpomp=strtotime($t['regenpomp']); if($buienradar>0) { $pomppauze=3600/max(array(1,($buienradar*20))); if($pomppauze>10800)$pomppauze=10800; } else $pomppauze=3600; if($s['regenpomp']=='On'&&$Tregenpomp<time-57) sw($i['regenpomp'],'Off','regenpomp off, was on for '.convertToHours(time-$Tregenpomp)); elseif($s['regenpomp']=='Off'&&$Tregenpomp<time-$pomppauze) sw($i['regenpomp'],'On','regenpomp on, was off for '.convertToHours(time-$Tregenpomp)); if($s['voordeur']=='On'&&strtotime($t['voordeur'])<time-598) sw($i['voordeur'],'Off','Voordeur uit'); if($s['lichten_auto']=='Off') if(strtotime($t['lichten_auto'])<time-10795) sw($i['lichten_auto'],'Off','lichten_auto aan'); if($s['weg']=='On'||$s['slapen']=='On') { $lastoff=cget('timelastoff'); if($lastoff<time-598) { cset('timelastoff',time); if(strtotime($t['weg'])>time-57||strtotime($t['slapen'])>time-57) $uit=60; else $uit=600; if($s['weg']=='On') alles('Off',$uit); if($s['slapen']=='On') alles('Slapen',$uit); $items=array('living','badkamer','kamer','tobi','alex'); foreach($items as $item) { ${'setpoint'.$item}=cget('setpoint'.$item); if(${'setpoint'.$item}!=0&&strtotime($t[$item])<time-3598) cset('setpoint'.$item,0); } $items=array('tobi','living','kamer','alex'); foreach($items as $item) if(strtotime($t[$item.'_set'])<time-86398) ud($i[$item.'_set'],0,$s[$item.'_set'],'Update '.$item); } if(strtotime($t['weg'])<time-57) if($s['poortrf']=='On') sw($i['poortrf'],'Off','Poort uit'); } if($s['kodi']=='On'&&strtotime($t['kodi'])<time-298) { $devcheck='Kodi'; if(pingDomain('192.168.2.7',1597)==1) { $prevcheck=cget('check'.$devcheck); if($prevcheck>0) cset('check'.$devcheck,0); } else { $check=cget('check'.$devcheck)+1; if($check>0) cset('check'.$devcheck,$check); if($check>=5) sw($i['kodi'],'Off','kodi'); } } $devcheck='PiCam1-Voordeur'; if(pingDomain('192.168.2.11',80)==1) { $prevcheck=cget('check'.$devcheck); if($prevcheck>=3) telegram($devcheck.' online',true,'Kirby'); if($prevcheck>0) cset('check'.$devcheck,0); } else { $check=cget('check'.$devcheck)+1; if($check>0) cset('check'.$devcheck,$check); if($check==3) telegram($devcheck.' Offline',true,'Kirby'); if($check%100==0) telegram($devcheck.' nog steeds Offline',true,'Kirby'); } $devcheck='PiCam2-Alex'; if(pingDomain('192.168.2.12',80)==1) { $prevcheck=cget('check'.$devcheck); if($prevcheck>=3) telegram($devcheck.' online',true,'Kirby'); if($prevcheck>0) cset('check'.$devcheck,0); } else { $check=cget('check'.$devcheck)+1; if($check>0) cset('check'.$devcheck,$check); if($check==3) telegram($devcheck.' Offline',true,'Kirby'); if($check%100==0) telegram($devcheck.' nog steeds Offline',true,'Kirby'); } $devcheck='PiCam3-Oprit'; if(pingDomain('192.168.2.13',80)==1) { $prevcheck=cget('check'.$devcheck); if($prevcheck>=3) telegram($devcheck.' online',true); if($prevcheck>0) cset('check'.$devcheck,0); } else { $check=cget('check'.$devcheck)+1; if($check>0) cset('check'.$devcheck,$check); if($check==3) telegram($devcheck.' Offline',true); if($check%100==0) telegram($devcheck.' nog steeds Offline',true); } $devcheck='PiHole-DNS'; if(pingDomain('192.168.2.2',53)==1) { $prevcheck=cget('check'.$devcheck); if($prevcheck>=3) telegram($devcheck.' online',true); if($prevcheck>0) cset('check'.$devcheck,0); } else { $check=cget('check'.$devcheck)+1; if($check>0) cset('check'.$devcheck,$check); if($check==3) telegram($devcheck.' Offline',true); if($check%100==0) telegram($devcheck.' nog steeds Offline',true); } $devcheck='PiHole-WWW'; if(pingDomain('192.168.2.2',80)==1) { $prevcheck=cget('check'.$devcheck); if($prevcheck>=3) telegram($devcheck.' online',true); if($prevcheck>0) cset('check'.$devcheck,0); } else { $check=cget('check'.$devcheck)+1; if($check>0) cset('check'.$devcheck,$check); if($check==3) telegram($devcheck.' Offline',true); if($check%100==0) telegram($devcheck.' nog steeds Offline',true); } $items=array('brander','badkamervuur'); foreach($items as $item) if($s[$item]!='Off'&&strtotime($t[$item])<time-3598) sw($i[$item],$s[$item],$item); if($s['meldingen']=='Off'&&strtotime($t['meldingen'])<time-10795) sw($i['meldingen'],'On','meldingen'); if(strtotime($t['pirliving'])<time-14395&&strtotime($t['pirlivingR'])<time-14395&&strtotime($t['pirgarage'])<time-14395&&strtotime($t['pirinkom'])<time-14395&&strtotime($t['pirhall'])<time-14395&&strtotime($t['slapen'])<time-14395&&strtotime($t['weg'])<time-14395&&$s['weg']=='Off'&&$s['slapen']=="Off") { sw($i['slapen'],'On','wakker1'); if($s['slapen']=='Off') telegram('slapen ingeschakeld na 4 uur geen beweging',false,'Kirby'); else telegram('slapen ingeschakeld na 4 uur geen beweging',true,'Kirby'); } if(strtotime($t['pirliving'])<time-43190&&strtotime($t['pirlivingR'])<time-43190&&strtotime($t['pirgarage'])<time-43190&&strtotime($t['pirinkom'])<time-43190&&strtotime($t['pirhall'])<time-43190&&strtotime($t['slapen'])<time-43190&&strtotime($t['weg'])<time-43190&&$s['weg']=='Off'&&$s['slapen']=="On") { sw($i['slapen'],'Off','wakker2'); sw($i['weg'],'On','weg'); if($s['slapen']=='Off') telegram('weg ingeschakeld na 12 uur geen beweging',false,'Kirby'); else telegram('weg ingeschakeld na 12 uur geen beweging',true,'Kirby'); } //if($s['zwembadfilter']=='On'){if(strtotime($t['zwembadfilter']) < time-14395&&time>strtotime("18:00")&&$s['zwembadwarmte']=='Off')sw($i['zwembadfilter'],'Off','zwembadfilter');} //else{if(strtotime($t['zwembadfilter'])<time-14395&&time>strtotime("12:00")&&time<strtotime("16:00"))sw($i['zwembadfilter'],'On','zwembadfilter');} //if($s['zwembadwarmte']=='On'){ // if(strtotime($t['zwembadwarmte'])<time-86398)sw($i['zwembadwarmte'],'Off','warmtepomp zwembad'); // if($s['zwembadfilter']=='Off')sw($i['zwembadfilter'],'On','zwembadfilter'); //} if($s['meldingen']=='On') { $items=array('living_temp','badkamer_temp','kamer_temp','tobi_temp','alex_temp','zolder_temp'); $avg=0; foreach($items as $item) $avg=$avg+$s[$item]; $avg=$avg/6; foreach($items as $item) { $temp=$s[$item]; if($temp>$avg+5&&$temp>25) { $msg='T '.$item.'='.$temp.'°C. AVG='.round($avg,1).'°C'; if(cget('timealerttemp'.$item)<time-3598) { telegram($msg,false,'Kirby'); ios($msg); cset('timealerttemp'.$item,time); } } if(strtotime($t[$item])<time-21590) { if(cget('timealerttempupd'.$item)<time-43190) { telegram($item.' not updated'); cset('timealerttempupd'.$item,time); } } } } $devices=array('tobiZ','alexZ','livingZ','livingZZ','livingZE','kamerZ'); foreach($devices as $device) { if(strtotime($t[$device])<time-3598) { if(cget('timealert'.$device)<time-43190) { telegram($device.' geen communicatie',true); cset('timealert'.$device,time); } } } if($s['weg']=='Off'&&$s['slapen']=='Off') { if(($buiten_temp>$s['kamer_temp']&&$buiten_temp>$s['tobi_temp']&&$buiten_temp>$s['alex_temp'])&&$buiten_temp>22&&($s['kamer_temp']>20||$s['tobi_temp']>20||$s['alex_temp']>20)&&($s['raamkamer']=='Open'||$s['raamtobi']=='Open'||$s['raamalex']=='Open')) if((int)cget('timeramen')<time-43190) { telegram('Ramen boven dicht doen, te warm buiten. Buiten = '.$buiten_temp.',kamer = '.$s['kamer_temp'].', Tobi = '.$s['tobi_temp'].', Alex = '.$s['alex_temp'],false,'Kirby'); cset('timeramen',time); } elseif(($buiten_temp<=$s['kamer_temp']||$buiten_temp<=$s['tobi_temp']||$buiten_temp<=$s['alex_temp'])&&($s['kamer_temp']>20||$s['tobi_temp']>20||$s['alex_temp']>20)&&($s['raamkamer']=='Closed'||$s['raamkamer']=='Closed'||$s['raamkamer']=='Closed')) if((int)cget('timeramen')<time-43190) { telegram('Ramen boven open doen, te warm binnen. Buiten = '.$buiten_temp.',kamer = '.$s['kamer_temp'].', Tobi = '.$s['tobi_temp'].', Alex = '.$s['alex_temp'],false,'Kirby'); cset('timeramen',time); } } $items=array(5=>'keukenzolderg',6=>'wasbakkookplaat',7=>'werkbladtuin',8=>'inkomvoordeur',11=>'badkamer'); foreach($items as $item => $name) if(cget('timerefresh-'.$name)<time-7198) { RefreshZwave($item,'time',$name,$s['meldingen']); cset('timerefresh-'.$name,time); break; } //include('gcal/gcal.php'); $nodes=json_decode(curl('http://127.0.0.1:8084/json.htm?type=openzwavenodes&idx=3'),true); if($nodes['NodesQueried']==1) { if(cget('timehealnetwork')<time-3600*24*7) { $result=json_decode(curl('http://127.0.0.1:8084/json.htm?type=command¶m=zwavenetworkheal&idx=3'),true); if($result['status']=="OK") { cset('timehealnetwork',time); exit; } } /*foreach($nodes['result'] as $node){if(in_array($node['NodeID'],array(2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,18,19,20,22,23,25,26,27,29))){if(cget('timehealnetwork')<time-1800&&cget('timehealnode-'.$node['Name'])<time-3600*12&&cget('timehealnode')<time-300){$healnode=json_decode(curl('http://127.0.0.1:8084/json.htm?type=command¶m=zwavenodeheal&idx=3&node='.$node['NodeID']),true);if($healnode['status']=="OK"){lg(' Heal Node '.$node['Name'].' started');cset('timehealnode-'.$node['Name'],time);cset('timehealnode',time);exit;}unset($healnode);}}}*/}else cset('timehealnetwork',0); }} function sw($idx,$action="",$info="",$Usleep=600000) { lg("SWITCH ".$action." ".$info); if(empty($action)) curl("http://127.0.0.1:8084/json.htm?type=command¶m=switchlight&idx=".$idx."&switchcmd=Toggle"); else curl("http://127.0.0.1:8084/json.htm?type=command¶m=switchlight&idx=".$idx."&switchcmd=".$action); usleep($Usleep); } function sl($idx,$level,$info="",$Usleep=600000) { lg("SETLEVEL ".$level." ".$info); curl("http://127.0.0.1:8084/json.htm?type=command¶m=switchlight&idx=".$idx."&switchcmd=Set%20Level&level=".$level); usleep($Usleep); } function ud($idx,$nvalue,$svalue,$info="",$Usleep=600000) { if(!in_array($idx, array(395,532,534))) lg("UPDATE ".$nvalue." ".$svalue." ".$info); curl('http://127.0.0.1:8084/json.htm?type=command¶m=udevice&idx='.$idx.'&nvalue='.$nvalue.'&svalue='.$svalue); usleep($Usleep); } function setradiator($name,$dif,$koudst=false,$set) { $setpoint=$set-ceil($dif*4); if($koudst==true) $setpoint=28.0; if($setpoint>28) $setpoint=28.0; elseif($setpoint<4) $setpoint=4.0; return round($setpoint,0).".0"; } function double($idx,$action,$comment='',$wait=4000000) { sw($idx,$action,$comment,$wait); sw($idx,$action,$comment.' repeat',0); } function telegram($msg,$silent=true,$to='Guy') { for($x=1;$x<=100;$x++) { $result=json_decode(curl('https://api.telegram.org/bot113592115:AAEZ-xCRhO-123456789_3YIr9irxI/sendMessage?chat_id=12345678&text='.$msg.'&disable_notification='.$silent,true)); if(isset($result->ok)) if($result->ok===true) { lg('telegram sent to Guy: '.$msg); break; } else { lg('telegram sent failed'); } sleep($x*3); } if($to=='Kirby') for($x=1;$x<=100;$x++) { $result=json_decode(curl('https://api.telegram.org/bot113592115:AAEZ-xCRhO-123456789_3YIr9irxI/sendMessage?chat_id=2345678&text='.$msg.'&disable_notification='.$silent,true)); if(isset($result->ok)) if($result->ok===true) { lg('telegram sent to Kirby: '.$msg); break; } else { lg('telegram sent failed'); } sleep($x*3); } } function lg($msg) { curl('http://127.0.0.1:8084/json.htm?type=command¶m=addlogmessage&message='.urlencode('=> '.$msg)); } function ios($msg) { $appledevice='123456789EeBN1nZk0sD/ZHxYptWl12345678905kSRqROHYVNSUzmWV'; $appleid='your@apple.id'; $applepass='Y0ur@ppleP@ssw0rd'; require_once("findmyiphone.php"); $fmi=new FindMyiPhone($appleid,$applepass); $fmi->playSound($appledevice,$msg); sms($msg); } function sms($msg) { if(1==2) { $smsuser='clickatelluser'; $smspassword='clickatellpassword'; $smsapi=12345678; $smstofrom=32412345678; curl('http://api.clickatell.com/http/sendmsg?user='.$smsuser.'&password='.$smspassword.'&api_id='.$smsapi.'&to='.$smstofrom.'&text='.urlencode($msg).'&from='.$smstofrom.''); usleep(500000); } } function pingDomain($domain,$port) { $file=fsockopen($domain,$port,$errno,$errstr,10); $status=0; if(!$file) $status=-1; else { fclose($file); $status=1; } return $status; } function RefreshZwave($node) { $last=cget('time-RefreshZwave'.$node); cset('time-RefreshZwave'.$node,time); if($last<time-10) { $devices=json_decode(file_get_contents('http://127.0.0.1:8084/json.htm?type=openzwavenodes&idx=3'),true); foreach($devices['result'] as $devozw) if($devozw['NodeID']==$node) { $device=$devozw['Description'].' '.$devozw['Name']; break; } lg(' > Refreshing node '.$node.' '.$device); for($k=1;$k<=5;$k++) { /* ControllerBusy(20);*/ $result=file_get_contents('http://127.0.0.1:8084/ozwcp/refreshpost.html',false,stream_context_create(array('http'=>array('header'=>'Content-Type: application/x-www-form-urlencoded\r\n','method'=>'POST','content'=>http_build_query(array('fun'=>'racp','node'=>$node)),),))); if($result==='OK') { cset('timerefresh-'.$device,time); break; } sleep(1); } if(cget('timedeadnodes')<time-298) { cset('timedeadnodes',time); foreach($devices as $node=>$data) { if($node=="result") { foreach($data as $index=>$eltsNode) { if($eltsNode["State"]=="Dead"&&!in_array($eltsNode['NodeID'],array(57))) { telegram('Node '.$eltsNode['NodeID'].' '.$eltsNode['Description'].' ('.$eltsNode['Name'].') marked as dead, reviving '.ZwaveCommand($eltsNode['NodeID'],'HasNodeFailed')); ControllerBusy(10); ZwaveCommand(1,'Cancel'); } } } } } } } function Zwavecancelaction() { file_get_contents('http://127.0.0.1:8084/ozwcp/admpost.html',false,stream_context_create(array('http'=>array('header'=>'Content-Type: application/x-www-form-urlencoded\r\n','method'=>'POST','content'=>http_build_query(array('fun'=>'cancel')),),))); } function ZwaveCommand($node,$command) { $cm=array('AssignReturnRoute'=>'assrr','DeleteAllReturnRoutes'=>'delarr','NodeNeighbourUpdate'=>'reqnnu','RefreshNodeInformation'=>'refreshnode','RequestNetworkUpdate'=>'reqnu','HasNodeFailed'=>'hnf','Cancel'=>'cancel'); $cm=$cm[$command]; for($k=1;$k<=5;$k++) { $result=file_get_contents('http://pass2php:pass2php@127.0.0.1:8084/ozwcp/admpost.html',false,stream_context_create(array('http'=>array('header'=>'Content-Type: application/x-www-form-urlencoded\r\n','method'=>'POST','content'=>http_build_query(array('fun'=>$cm,'node'=>'node'.$node)),),))); if($result=='OK') break; sleep(1); } return $result; } function ControllerBusy($retries) { for($k=1;$k<=$retries;$k++) { $result=file_get_contents('http://127.0.0.1:8084/ozwcp/poll.xml'); $p=xml_parser_create(); xml_parse_into_struct($p,$result,$vals,$index); xml_parser_free($p); foreach($vals as $val) { if($val['tag']=='ADMIN') { $result=$val['attributes']['ACTIVE']; break; } } if($result=='false') break; if($k==$retries) { ZwaveCommand(1,'Cancel'); break; } sleep(1); } } function convertToHours($time) { if($time<600) return substr(strftime('%M:%S',$time),1); elseif($time>=600&&$time<3600) return strftime('%M:%S',$time); else return strftime('%k:%M:%S',$time); } function curl($url) { $headers=array('Content-Type: application/json'); $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_HTTPHEADER,$headers); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_FRESH_CONNECT,TRUE); curl_setopt($ch,CURLOPT_TIMEOUT,5); $data=curl_exec($ch); curl_close($ch); return $data; } function cset($key,$value) { if(!$m=xsMemcached::Connect('127.0.0.1',11211)) { die('Memcache failed to connect.'); } $m->Set($key,$value); } function cget($key) { if(!$m=xsMemcached::Connect('127.0.0.1',11211)) { die('Memcache failed to connect.'); } return $m->Get($key); } class xsMemcached { private $Host; private $Port; private $Handle; public static function Connect($Host,$Port,$Timeout=5) { $Ret=new self(); $Ret->Host=$Host; $Ret->Port=$Port; $ErrNo=$ErrMsg=NULL; if(!$Ret->Handle=@fsockopen($Ret->Host,$Ret->Port,$ErrNo,$ErrMsg,$Timeout)) return false; return $Ret; } public function Set($Key,$Value,$TTL=0) { return $this->SetOp($Key,$Value,$TTL,'set'); } public function Get($Key) { $this->WriteLine('get '.$Key); $Ret=''; $Header=$this->ReadLine(); if($Header=='END') { $Ret=0; $this->SetOp($Key,0,0,'set'); return $Ret; } while(($Line=$this->ReadLine())!='END') $Ret.=$Line; if($Ret=='') return false; $Header=explode(' ',$Header); if($Header[0]!='VALUE'||$Header[1]!=$Key) throw new Exception('unexcpected response format'); $Meta=$Header[2]; $Len=$Header[3]; return $Ret; } public function Quit() { $this->WriteLine('quit'); } private function SetOp($Key,$Value,$TTL,$Op) { $this->WriteLine($Op.' '.$Key.' 0 '.$TTL.' '.strlen($Value)); $this->WriteLine($Value); return $this->ReadLine()=='STORED'; } private function WriteLine($Command,$Response=false) { fwrite($this->Handle,$Command."\r\n"); if($Response) return $this->ReadLine(); return true; } private function ReadLine() { return rtrim(fgets($this->Handle),"\r\n"); } private function __construct() { } }
Some of this stuff, or maybe even more, can also be found on Github: https://github.com/Egregius/PHP-Custom-Floorplan-for-Domoticz
Laatste versie is beschikbaar op Github:
https://github.com/Egregius
Please have a look at https://github.com/Egregius/LUA-Pass2PHP-for-Domoticz and http://www.domoticz.com/forum/viewtopic.php?f=64&t=12343
Code has changed a lot since this.
Hi
Thanks for pass2php v2.2. I’d like to give some feedback.
I’m new to lua and pass2php, but familiar with debian, scripting and programming. It was not that easy to find all peaces to install pass2php.
(php extensions: curl.so, memcached.so; extra scripts like json.php, and finally pass2php LUA and php file. Especially if htts is used. In the end for me the function call is not working “key($c)();” I got a php syntax error. Splitting it up works fine.
$r=str_replace(” “,”_”,key($c));
$a=key($c);
if(function_exists(key($c))){
$a();
// key($c)();
}elseif(function_exists($r)){
$r();
}
My setup: cubieboard2 with debian jessie build for cubieboard, php5.6.30
Regards
Johan.