Voraussetzungen :
WLAN Anbindung, Client Socket in IPS Anlegen (IP Adresse + Port 10001), Cutter in IPS anlegen : 5 Byte 0F sync, Register Variable anlegen das das Auswertungs Script ansteuert.
Jede Menge Integer variable zum Speichern der Stati die aus dem Register ausgelesen werden. Eine String Variable zum Anzeigen der Timer und 8 IPS Timer zum einstellen der Rasenmäher Timer (2 Werktags Timer und 2 Wochenend Timer jeweils Startzeit und Stopzeit)
Das folgende Script liest die Zeiten der 8 Timer aus und schreibt schickt diese zum Rasenmäher. Die Dummy Variable auf das Webfront legen um die Timer einstellen zu können. Das folgende Script ebenso um den Schreibvorgang manuell starten zu können
<?
/* Die Reihenfolge der Timer ist : T1 Start, T1 Stop, T2 Start, T2 Stop, Wochenend T1 Start, Wochenend T1 Stop, Wochenend T2 Start, Wochenend T2 Stop */
$IPS_Timer_ID = [13735,18389 ,20801,47634,28575,37203,39091,39178]; /* 8 Timer unterhalb einer Dummy Variable anlegen und ID`s hier eintragen */
$Minuten_Index = [0,2,4,6,8,10,12,14];
$Stunden_Index = [1,3,5,7,9,11,13,15];
foreach ($IPS_Timer_ID as $key => $ID)
{
$IPS_Timer_Info = IPS_GetEvent ($ID);
$Unix_Zeit_in_sekunden = $IPS_Timer_Info['CyclicTimeFrom'];
$Zeit_Array[$Stunden_Index[$key]] = date("H",$Unix_Zeit_in_sekunden);
$Zeit_Array[$Minuten_Index[$key]] = date("i",$Unix_Zeit_in_sekunden);
}
$Header = chr(0x0F).chr(0xca);
$Footer = chr(0x00);
$Timer_Automower_adressen = [chr(0x38),chr(0x39),chr(0x3a),chr(0x3b),chr(0x40),chr(0x41),chr(0x42),chr(0x43),
chr(0x3c),chr(0x3d),chr(0x3e),chr(0x3f),chr(0x44),chr(0x45),chr(0x46),chr(0x47)];
foreach ($Timer_Automower_adressen as $key => $adresse)
{
Csck_sendtext(24124/*[Automower]*/,$Header.$adresse.chr($Zeit_Array[$key]).$Footer); /* Client Socket ID eintragen */
}
sleep(1);
IPS_Runscript(35524 /*[Scripte\Automower\Timer abfragen]*/); /* ID des Abfragescripts eintragen um die Anzeige der Timer im WF zu aktualisieren */
?>
Im nächsten Schritt ein Script das den Rasenmäher auffordert die Inhalte der Timer aus dem Rasenmäher an IPS zu schicken. Ich starte das script verzögert (1 sec.) über das Timer schreib script.
<?
$Header = chr(0x0F).chr(0x4a);
$Footer = chr(0x00).chr(0x00);
/* Timer Adressen sind in diesem Fall die Adressen im Rasenmaeher */
$Timer_adressen = [chr(0x38),chr(0x3a),chr(0x3c),chr(0x3e),chr(0x40),chr(0x42),chr(0x44),chr(0x46)];
foreach ($Timer_adressen as $adresse)
{
Csck_sendtext(24124/*[Automower]*/,$Header.$adresse.$Footer);
}
?>
Das folgende Script habe ich von Garfi35 übernommen und etwas erweitert um eine Reihe von Daten des Rasenmähers anzuzeigen unter anderem auch die Timer Einstellungen. Für dieses Script müssen eine Reihe von variablen angelegt werden die als speicher für die Register Daten genutzt werden. Das Script wird über die Registervariable gestartet.
<?
$CR = '<BR>';
if ($_IPS['SENDER'] == "RegisterVariable")
{
$data = $IPS_VALUE;
$pos1=(substr($data,0,1));
$werte=(ord(substr($data,3,1))+256*ord(substr($data,4,1)));
if ($pos1==chr(0x0F))
{
$pos2=(substr($data,1,2));
switch ($pos2)
{
case chr(0x2e).chr(0xea): if ((int)$werte < 3000){setvalue(57060 /*[Eigene Globale Variablen\Automower\Drehzahl]*/,(int)$werte);}break;
case chr(0x02).chr(0x2d): setvalue(11216 /*[Eigene Globale Variablen\Automower\Stromverbrauch Blade Motor]*/,((int)$werte)); break;
case chr(0x12).chr(0x8e): setvalue(54766 /*[Eigene Globale Variablen\Automower\Blade Motor Current II]*/,((int)$werte)); break;
case chr(0x4a).chr(0x38): setvalue(11078 /*[Eigene Globale Variablen\Automower\Timer\1]*/, ord(substr($data,3,1))); setvalue(56659 /*[Eigene Globale Variablen\Automower\Timer\2]*/ , ord(substr($data,4,1))); break;
case chr(0x4a).chr(0x3a): setvalue(37082 /*[Eigene Globale Variablen\Automower\Timer\3]*/, ord(substr($data,3,1))); setvalue(36581 /*[Eigene Globale Variablen\Automower\Timer\4]*/, ord(substr($data,4,1))); break;
case chr(0x4a).chr(0x3c): setvalue(11963 /*[Eigene Globale Variablen\Automower\Timer\5]*/, ord(substr($data,3,1))); setvalue(16115 /*[Eigene Globale Variablen\Automower\Timer\6]*/, ord(substr($data,4,1))); break;
case chr(0x4a).chr(0x3e): setvalue(22336 /*[Eigene Globale Variablen\Automower\Timer\7]*/, ord(substr($data,3,1))); setvalue(51097 /*[Eigene Globale Variablen\Automower\Timer\8]*/, ord(substr($data,4,1))); break;
case chr(0x4a).chr(0x40): setvalue(18414 /*[Eigene Globale Variablen\Automower\Timer\9]*/, ord(substr($data,3,1))); setvalue(10594 /*[Eigene Globale Variablen\Automower\Timer\10]*/, ord(substr($data,4,1))); break;
case chr(0x4a).chr(0x42): setvalue(12627 /*[Eigene Globale Variablen\Automower\Timer\11]*/, ord(substr($data,3,1))); setvalue(45721 /*[Eigene Globale Variablen\Automower\Timer\12]*/, ord(substr($data,4,1))); break;
case chr(0x4a).chr(0x44): setvalue(20143 /*[Eigene Globale Variablen\Automower\Timer\13]*/, ord(substr($data,3,1))); setvalue(46202 /*[Eigene Globale Variablen\Automower\Timer\14]*/, ord(substr($data,4,1))); break;
case chr(0x4a).chr(0x46): setvalue(14574 /*[Eigene Globale Variablen\Automower\Timer\15]*/, ord(substr($data,3,1))); setvalue(51688 /*[Eigene Globale Variablen\Automower\Timer\16]*/, ord(substr($data,4,1)));break;
case chr(0x01).chr(0xf1): switch ($werte) {
case 12 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"kein Schleifensignal"); break;
case 34 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Mäher hochgehoben"); break;
case 54 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"PIN abgelaufen"); break;
case 1000 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Ladestation verlassen"); break;
case 1002 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Mähen"); break;
case 1006 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Mähwerk starten"); break;
case 1008 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Mähwerk gestartet"); break;
case 1012 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Signal Mähwerk starten"); break;
case 1014 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"In Ladestation am aufladen"); break;
case 1016 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"in Ladestation warten"); break;
case 1024 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Aus Ladestation ausfahren"); break;
case 1036 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Viereckmodus"); break;
case 1038 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Festgefahren"); break;
case 1040 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Kollission / Schleife erreicht"); break;
case 1042 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Suche Ladestation"); break;
case 1044 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Stop"); break;
case 1048 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Andocken"); break;
case 1050 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Aus Ladestation fahren"); break;
case 1052 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Bitte Yes drücken"); break;
case 1056 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Wartend (Manuell/Home)"); break;
case 1058 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Bregrenzung folgend"); break;
case 1060 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"N-Signal gefunden"); break;
case 1064 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Suche Ladestation"); break;
case 1070 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Suchschleife folgen"); break;
case 1072 :setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,"Schleife folgen"); break;
default: setvalue(44466 /*[Eigene Globale Variablen\Automower\Status]*/,$werte);break;
}
case chr(0x2e).chr(0xfe): if ((int)$werte/1000 < 25){(setvalue(35195 /*[Eigene Globale Variablen\Automower\Spannung]*/,$werte/1000));} break;//Spannung [V]
case chr(0x02).chr(0x33): if ((int)$werte < 50){(setvalue(37236 /*[Eigene Globale Variablen\Automower\Akku Temperatur]*/,(int)$werte));} break;//Akku A Temperatur
case chr(0x2e).chr(0xe0): if ((int)$werte < 2500){(setvalue(50390 /*[Eigene Globale Variablen\Automower\Kapazität]*/,(int)$werte));}break;//Kapazität [mAh]
default: setvalue(31111 /*[Eigene Globale Variablen\Automower\Werte]*/,"Adr: ".(dechex(ord(substr($data,1,1))))." ".(dechex(ord(substr($data,2,1))))." - Werte: ".$werte ); break;
}
}
}
$Start_t1_s = GetValue(11078 /*[Eigene Globale Variablen\Automower\Timer\1]*/);
$Start_t1_m = GetValue(56659 /*[Eigene Globale Variablen\Automower\Timer\2]*/);
$Stop_t1_s = GetValue(37082 /*[Eigene Globale Variablen\Automower\Timer\3]*/);
$Stop_t1_m = GetValue(36581 /*[Eigene Globale Variablen\Automower\Timer\4]*/);
$Start_t2_s = GetValue(18414 /*[Eigene Globale Variablen\Automower\Timer\9]*/);
$Start_t2_m = GetValue(10594 /*[Eigene Globale Variablen\Automower\Timer\10]*/);
$Stop_t2_s = GetValue(12627 /*[Eigene Globale Variablen\Automower\Timer\11]*/);
$Stop_t2_m = GetValue(45721 /*[Eigene Globale Variablen\Automower\Timer\12]*/);
$Start_wt1_s = GetValue(11963 /*[Eigene Globale Variablen\Automower\Timer\5]*/);
$Start_wt1_m = GetValue(16115 /*[Eigene Globale Variablen\Automower\Timer\6]*/);
$Stop_wt1_s = GetValue(22336 /*[Eigene Globale Variablen\Automower\Timer\7]*/);
$Stop_wt1_m = GetValue(51097 /*[Eigene Globale Variablen\Automower\Timer\8]*/);
$Start_wt2_s = GetValue(20143 /*[Eigene Globale Variablen\Automower\Timer\13]*/);
$Start_wt2_m = GetValue(46202 /*[Eigene Globale Variablen\Automower\Timer\14]*/);
$Stop_wt2_s = GetValue(14574 /*[Eigene Globale Variablen\Automower\Timer\15]*/);
$Stop_wt2_m = GetValue(51688 /*[Eigene Globale Variablen\Automower\Timer\16]*/);
$text1 = date("H:i",($Start_t1_s-1)*60*60 +$Start_t1_m*60);
$text2 = date("H:i",($Stop_t1_s-1)*60*60 +$Stop_t1_m*60);
$text3 = date("H:i",($Start_t2_s-1)*60*60 +$Start_t2_m*60);
$text4 = date("H:i",($Stop_t2_s-1)*60*60 +$Stop_t2_m*60);
$text5 = date("H:i",($Start_wt1_s-1)*60*60 +$Start_wt1_m*60);
$text6 = date("H:i",($Stop_wt1_s-1)*60*60 +$Stop_wt1_m*60);
$text7 = date("H:i",($Start_wt2_s-1)*60*60 +$Start_wt2_m*60);
$text8 = date("H:i",($Stop_wt2_s-1)*60*60 +$Stop_wt2_m*60);
$text = "Wochentage".$CR.
"Timer 1 ".$CR."Start : ".$text1.$CR.
" Stop : ".$text2.$CR.$CR.
"Timer 2 ".$CR."Start : ".$text3.$CR.
"Stop : ".$text4.
$CR.$CR.
"Wochenende".$CR.
"Timer 1 ".$CR."Start : ".$text5.$CR.
" Stop : ".$text6.$CR.$CR.
"Timer 2 ".$CR."Start : ".$text7.$CR.
"Stop : ".$text8
;
SetValueString(56280 /*[Eigene Globale Variablen\Automower\Timer\Anzeige\Timer ]*/,$text);
?>
Viel Spass