= 200) { if ($debug) IPS_LogMessage($skriptName,"Socket ist fehlerhaft"); } else { if ($debug) IPS_LogMessage($skriptName,"unbekanter Fehler im Socket:".$status); } return; } // ------------------------------------------------------------------------------------------------------------------------------------------------------ // Daten empfangen vom Automower // ------------------------------------------------------------------------------------------------------------------------------------------------------ if ($_IPS['SENDER'] == "RegisterVariable") { // ------------------------------------------------------------------------------------------------------------------------------------------------------ // Ermittel Daten // ------------------------------------------------------------------------------------------------------------------------------------------------------ $data = $_IPS['VALUE']; $preFix = (substr($data,0,1)); $addressHigh = substr($data,1,1); $addressLow = substr($data,2,1); // ------------------------------------------------------------------------------------------------------------------------------------------------------ // Ungültige Datenpakete, beende Auswertung // ------------------------------------------------------------------------------------------------------------------------------------------------------ if ($preFix != chr(0x0F)) { IPS_LogMessage($skriptName,"Prefix falsch!"); exit(); } // ------------------------------------------------------------------------------------------ // Daten auswerten // ------------------------------------------------------------------------------------------ foreach($dataArray as $dataEntry) { if ($dataEntry["ReadAddress"][0] != $addressHigh || $dataEntry["ReadAddress"][1] != $addressLow) continue; // Wie müssen die Daten interpretiert werden? // Normale Value if ($dataEntry["Type"] == "INT" OR $dataEntry["Type"] == "FLOAT") { $value = (ord(substr($data,3,1))+256*ord(substr($data,4,1))); if ($value & 0x8000) $value = $value - 0x10000; if (isset($dataEntry["Math"])) { eval("\$value = \$value".$dataEntry["Math"].";"); $value = floatval($value); } // Falls Werte unter Min oder über Max sind, setze diese auf Min. if ($value < $dataEntry["Min"] || $value > $dataEntry["Max"]) { IPS_LogMessage($skriptName,"Value invalid!!! -> ".$dataEntry["Titel"]."=".$value); // Wert ungültig, setze diesen auf den MIN Wert $value =$dataEntry["Min"]; // SetValue($Variabeln[$dataEntry["Titel"]],$dataEntry["Min"]); } if (isset($dataEntry["Korrektur"])) $value = $value +$dataEntry["Korrektur"]; if ($debug) IPS_LogMessage($skriptName,$dataEntry["Titel"]."=".$value); // Setzte Wert nur, wenn sich dieser geändert hat //if (getvalue($Variabeln[$dataEntry["Titel"]]) != $value) SetValue($Variabeln[$dataEntry["Titel"]],$value); } // Status Anzeige else if ($dataEntry["Type"] == "STATUS") { $value = (ord(substr($data,3,1))+256*ord(substr($data,4,1))); if ($debug) IPS_LogMessage($skriptName,$dataEntry["Titel"]."=".$value); foreach($statusArray as $status) { if ($status["Value"] == $value) { // Bei Fehler eine Fehlermeldung absetzen! if ($status["Type"] == "ALERT") { $errorCodeCounter = GetValueInteger($errorCodeCounterID); // Aber nur, wenn der Fehler die letzten 10 Abfragen besteht if ($errorCodeCounter == 10) { // Schicke ggf. Fehlermeldung $Meldung ="Automower FEHLER - ".$status["Text"]; if (getvalue($Variabeln['WebKonfig_Push'])) WFC_SendNotification($WebfrontKonfigID, $PushTitel, $Meldung, 'Speaker', 4); if (getvalue($Variabeln['App_Push'])) WFC_PushNotification ( $WebfrontKonfigID , $PushTitel , $Meldung, 'Hinweis' , 0 ); } $errorCodeCounter ++; SetValueInteger($Variabeln["ErrorCounter"],$errorCodeCounter); } else SetValueInteger($Variabeln["ErrorCounter"],0); // Gebe Meldung aus SetValue($Variabeln[$dataEntry["Titel"]],$status["Text"]); // Gebe an, ob Automower Mäht oder nicht setvalue($Variabeln["Maehe"],$status["Maehe"]); // ------------------------------------------------------------------------ // PIN muss erneuert werden // ------------------------------------------------------------------------ if (isset($status["RenewPIN"])) { // Lese PIN ein $Pin = getvalue($Variabeln["PIN"]); // Sperre gegen weitere Automower Abfragen if (IPS_SemaphoreEnter("MowerAbfrage", 10000 ))// Warte max. 10sec. bevor abgebrochen wird. { // Gebe Pin als Tastaturbefehle ein for ($i = 0; $i < strlen($Pin); $i++) { csck_sendtext($clientSocketID, $TastaturArray[$Pin[$i]]); if ($debug) IPS_LogMessage($skriptName,"Pin eingegeben: ".bin2hex($TastaturArray[$Pin[$i]])); IPS_Sleep (700); } // Schließe Eingabe ab csck_sendtext($clientSocketID, $TastaturArray["YES"]); IPS_Sleep (100); if ($debug) IPS_LogMessage($skriptName,"HINWEIS - PIN war abgelaufen, und wurde erneuert!"); // Push senden $Meldung = "PIN war abgelaufen, und wurde erneuert!"; if (getvalue($Variabeln['WebKonfig_Push'])) WFC_SendNotification($WebfrontKonfigID, $PushTitel, $Meldung, 'Speaker', 4); if (getvalue($Variabeln['App_Push'])) WFC_PushNotification ( $WebfrontKonfigID , $PushTitel , $Meldung , 'Hinweis' , 1 ); // Gebe Automower Abfragen wieder frei IPS_SemaphoreLeave("MowerAbfrage"); } } } continue; } } else if ($dataEntry["Type"] == "TIMER") { // Daten, welche im Timer stehen $stunde = ord(substr($data,3,1)); $stunde = sprintf ("%'02s", $stunde); $minute = ord(substr($data,4,1)); $minute = sprintf ("%'02s", $minute); SetValue($Variabeln[$dataEntry["Titel"]],$stunde.":".$minute); } } } // ------------------------------------------------------------------------------------------------------------------------------------------------------ // Daten empfangen von der Webfront // ------------------------------------------------------------------------------------------------------------------------------------------------------ else if ($_IPS['SENDER'] == "WebFront") { // Ändere den Wert in der Webfont SetValue($_IPS["VARIABLE"],$_IPS["VALUE"]); // Ermittel die TimeranausID $TimeranausID = @IPS_GetObjectIDByIdent($VarIdentPrefix."Timer_anaus", $TimerKatID); // Ermittel die Modus soll ID $mowerModussollID = @IPS_GetObjectIDByIdent($VarIdentPrefix."Modus_soll", $EinstellungenID); if ($mowerModussollID === false) $DoInstall = "Modus soll Variable"; // ---------------------------------- // Button - Mowermodus // ---------------------------------- if ($_IPS["VARIABLE"] == $mowerModussollID) { switch($_IPS["VALUE"]) { case 0: /*Man*/ setMowerModus("Manuell"); break; case 1: setMowerModus("Auto"); break ; case 3: /*Home*/ setMowerModus("Home"); break; } } elseif ($_IPS["VARIABLE"] == $TimeranausID) { if ($_IPS['VALUE'] == 1) { csck_sendtext($clientSocketID, "\x0f\xca\x4e\x00\x00"); echo "Timer ein"; // Beim Automower heißt die Einstellung Timer ausgeschalten, finde ich etwas verwirrent. // Daher in IP Symcon Timer ein = Timer ausgeschaltet ohne Haken = 0 // Timer aus = Timer ausgeschaltet mit Haken = 1 } ELSE { csck_sendtext($clientSocketID, "\x0f\xca\x4e\x00\x01"); echo "Timer aus"; } } else IPS_LogMessage($skriptName,"Button (".$_IPS['VARIABLE'].") nicht unterstützt!"); } // ------------------------------------------------------------------------------------------------------------------------------------------------------ // Überprüfe ob es regnet oder zu kalt ist. Wenn ja, schalten den Modus in Home, // sonst schalte diesen in den vorgegebenen Modus. Tut dies nur, wenn eine ID // hierfür angegeben wurde // ------------------------------------------------------------------------------------------------------------------------------------------------------ // Ermittel Soll Status // $mowerModussollID = @IPS_GetObjectIDByIdent($VarIdentPrefix."Modus_soll", $EinstellungenID); // $ModusSoll = getvalue($mowerModussollID); $ModusSoll = getvalue($Variabeln["Modus_soll"]); // Prüfe ob es regnet if ($esregnetID != 0) { if (getvalue($esregnetID)) { $ModusSoll = 3;// Home // Setze Wartezeit // setvalue($Variabeln["Warte_nach_Regen"],getvalue($Variabeln["Wartezeit_nach_Regen"])); setvalue($Variabeln["Warte_nach_Regen"],date("d.m.Y, H:i:s",time()+getvalue($Variabeln["Wartezeit_nach_Regen"])*60)); } ELSE if (getvalue($Variabeln["Warte_nach_Regen"])<>"Nein") // Die Wartezeit ist noch nicht abgelaufen { // Wenn die Zeit abgelaufen ist, dann gebe den Automower wieder frei if (time()> strtotime(getvalue($Variabeln["Warte_nach_Regen"]))) setvalue($Variabeln["Warte_nach_Regen"],"Nein") ; else $ModusSoll = 3; } } // Prüfe, ob es zu kalt ist if ($istTemperaturID !=0) if (getvalue($istTemperaturID)< getvalue($Variabeln["min_Maehtemperatur"])) $ModusSoll = 3; // Home // Ändere ggf. den Modus if (getvalue($Variabeln["Modus"])<> $ModusSoll) setMowerModus($ModusSoll); // ------------------------------------------------------------------------------------------ // Vermerke Zeitpunkt der letzten Abfrage // ------------------------------------------------------------------------------------------ SetValue($Variabeln["Aktualisiert"],date("H:i:s d.m.Y")); function setMowerModus($value) { global$clientSocketID; global $skriptName; // global $mowerModusistID; global $EinstellungenID; global $VarIdentPrefix; global $Variabeln; switch($value) { case 1: case "Auto": csck_sendtext($clientSocketID, "\x0f\x81\x2c\x00\x01"); setvalue($Variabeln["Modus"],1); break ; case 3: case "Home": csck_sendtext($clientSocketID, "\x0f\x81\x2c\x00\x03"); setvalue($Variabeln["Modus"],3); break; case 0: case "Manuell": csck_sendtext($clientSocketID, "\x0f\x81\x2c\x00\x00"); setvalue($Variabeln["Modus"],0); break; } IPS_LogMessage($skriptName,"Modus wurde eingestellt auf: ".$value); } ?>