-
Zuerst habe ich im IPS Variablen wie im Screenshot zu sehen angelegt:
-
Dann habe ich die BWC_Remote_v1.0.exe heruntergeladen und ins IP-Symcon Hauptverzeichnis kopiert.
-
Die IPSCommand.exe aus der angehängten rar-Datei wird ebenfalls in das IP-Symcon Hauptverzeichnis kopiert.
-
Auto-It herunterladen und installieren.
-
Das IPS-Skript:
<?
$debug = true;
//Event-IDs
$BWStart = 49297;
$Sicheraus = 52578;
//Daten vom BWC holen
IPS_ExecuteEx(".\GardenaGatewaybox.exe", "Status", false, true, 1);
//Daten aus Variablen auslesen
$Regenmenge24h = GetValueFloat(41210);
$Bodenfeuchte = GetValueString(21982);
$Ventilstatus = GetValueString(42277);
$VentilRestlaufzeit = date("H:i",strtotime(GetValue(35041)));
$Runtime = date("H:i",strtotime(GetValue(37606)));
$Batteriestatus = GetValueString(40144);
$Systemzeit = strtotime(GetValue(48286));
$Uhrzeit = date("H:i",time());
$Wasserverteiler = GetValueInteger(32857);
$Ventilchanged = IPS_GetVariable(42277);
$Ventilchanged = $Ventilchanged['VariableChanged'];
if (isset($IPS_EVENT))
{
if ($IPS_EVENT == "$BWStart")
{
switch ($Wasserverteiler){
case 1:
//Entscheidung treffen ob an diesem Tag bewässert werden soll
if ($Bodenfeuchte == "Sensor trocken" && $Regenmenge24h < 2 && $Ventilstatus == "Ventil geschlossen")
{
SetValueBoolean(39220, true);
$Runtime = 15; //Bewässerungsdauer für aktuellen Bewässerungsstrang am Verteiler setzen
//jeweils nächste Startzeit setzen
IPS_SetEventCyclicTimeBounds ($BWStart, mktime(8, 00, 0), 0);
}
Else SetValueBoolean(39220, false);
break;
case 2:
$Runtime = 10;
IPS_SetEventCyclicTimeBounds ($BWStart, mktime(9, 00, 0), 0);
break;
case 3:
$Runtime = 10;
IPS_SetEventCyclicTimeBounds ($BWStart, mktime(18, 00, 0), 0);
break;
case 4:
$Runtime = 5;
IPS_SetEventCyclicTimeBounds ($BWStart, mktime(19, 00, 0), 0);
break;
case 5:
$Runtime = 5;
IPS_SetEventCyclicTimeBounds ($BWStart, mktime(20, 00, 0), 0);
break;
case 6:
$Runtime = 4;
IPS_SetEventCyclicTimeBounds ($BWStart, mktime(7, 00, 0), 0);
break;
}
IPS_SetEventActive($BWStart,true);
if (GetValueBoolean(39220))
{
IPS_ExecuteEx(".\GardenaGatewaybox.exe", "Runtime $Runtime", false, true, 1);
sleep(5);
IPS_ExecuteEx(".\GardenaGatewaybox.exe", "VentilAuf", false, true, 1);
sleep(5);
IPS_ExecuteEx(".\GardenaGatewaybox.exe", "Status", false, true, 1);
sleep(5);
if ($Wasserverteiler < 6) SetValueInteger(32857, $Wasserverteiler +1);
Else SetValueInteger(32857, 1);
//Sicherheitsabschaltung 3 Minuten nach Ende der Restlaufzeit
$VentilRestlaufzeit = explode(":", GetValue(35041));
$Sicherheitsaus = strtotime($Uhrzeit)+180+($VentilRestlaufzeit[1]*60);
IPS_SetEventCyclicTimeBounds ($Sicheraus,$Sicherheitsaus, 0);
IPS_SetEventActive($Sicheraus,true);
}
}
}
if (isset($IPS_EVENT))
{
if ($IPS_EVENT == "$Sicheraus")
{
IPS_ExecuteEx(".\GardenaGatewaybox.exe", "VentilZu", true, false, 1);
sleep(5);
IPS_SetEventActive($Sicheraus,false);
IPS_ExecuteEx(".\GardenaGatewaybox.exe", "Status", false, true, 1);
}
}
if ($debug){
echo "BWC-Systemzeit: ".date("H:i", $Systemzeit)."
";
echo "PC-Systemzeit: $Uhrzeit
";
echo "Sicherheitsaus: ".date("H:i", $Sicherheitsaus)."
";
echo "Sicherheitsaus: $Sicherheitsaus
";
//echo "VentilRestlaufzeit: ".date("H:i",$VentilRestlaufzeit)."
";
echo "VentilRestlaufzeit: $VentilRestlaufzeit
";
echo "Runtime: $Runtime
";
echo "Regenmenge24h: $Regenmenge24h
";
echo "Bodenfeuchte: $Bodenfeuchte
";
echo "Ventilstatus: $Ventilstatus
";
echo "VentilRestlaufzeit: $VentilRestlaufzeit
";
echo "Runtime: $Runtime
";
echo "Batteriestatus: $Batteriestatus
";
echo "Wasserverteiler: $Wasserverteiler
";
echo "Ventilchanged: ".date("H:i", $Ventilchanged)."
";
}
?>
An das Skript habe ich drei Events wie folgt angehängt:

Im Skript müssen einige IDs angepasst werden, die sich hoffentlich aus den Screenshots erklären.
Das Skript ist im Moment so aufgebaut, dass es zuerst anhand der verfügbaren Daten prüft ob an diesem Tag bewässert werden soll. Wenn ja, dann setzt es die Timer und die Bewässerungszeit und macht 6 Bewässerungen mit voreingestellten Zeiten, um den automatischen Wasserverteiler von Gardena jeweils auf den nächsten Ausgang zu schalten. Ohne den Verteiler könnte man das Skript vermutlich noch deutlich einfacher gestalten.
Ich ziehe zur Entscheidung ob bewässert werden soll noch meinen Regenmengenmesser hinzu ($Regenmenge24h = GetValueFloat(41210); ).
- Das Auto-It-Skript wird im IPS-Homeverzeichnis abgelgt und dort nach Anpassung der IDs kompiliert.
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.6.1
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
;Prüfen ob Fenster vorhanden
; Wenn Fenster nicht vorhanden dann starte GardenaSW und warte bis aktiv
;Verbindung herstellen
If Not WinExists ("Gardena - BWC Remote - Untitled") Then
Run ("BWC_Remote_v1.0.exe")
WinWait ("Gardena - BWC Remote - Untitled")
ControlClick("Gardena - BWC Remote - Untitled","","[ID:1039]")
;warten bis Verbindung hergestellt
EndIf
If $CmdLine[0] = 0 Then
MsgBox(4096, "Hilfe", "Mögliche Parameter:" & @CR & "Status" & @CR & "VentilAuf" & @CR & "VentilZu" & @CR & "Timesync" & @CR & "Runtime", 20)
Else
Switch $CmdLine[1]
Case $CmdLine[1] = "Status"
;Daten auslesen Button drücken
$Sensor = ControlGetText ("Gardena - BWC Remote - Untitled","","[ID:1079]")
$Ventil = ControlGetText ("Gardena - BWC Remote - Untitled","","[ID:1083]")
$VentilRestlaufMinute = ControlGetText ("Gardena - BWC Remote - Untitled","","[ID:1004]")
$VentilRestlaufStunde = ControlGetText ("Gardena - BWC Remote - Untitled","","[ID:1003]")
$Batterie = ControlGetText ("Gardena - BWC Remote - Untitled","","[ID:1001]")
$SystemStunde = ControlGetText ("Gardena - BWC Remote - Untitled","","[ID:1020]")
$SystemMinute = ControlGetText ("Gardena - BWC Remote - Untitled","","[ID:1021]")
$RuntimeStunde = ControlGetText ("Gardena - BWC Remote - Untitled","","[ID:1047]")
$RuntimeMinute = ControlGetText ("Gardena - BWC Remote - Untitled","","[ID:1048]")
;MsgBox(4096, "Daten aus BWC", "Sensor: " & $Sensor & @CR & "Batterie: " & $Batterie & @CR & "Ventilstatus: " & $Ventil & @CR & "Systemzeit: " & $SystemStunde & ":" & $SystemMinute & @CR & "Runtime: " & $RuntimeStunde & ":" & $RuntimeMinute , 20)
;Daten in IPS-Variablen schreiben
Run('IPSCommand.exe -h 192.168.6.100 -s 40144 '&chr(34)&$Batterie&chr(34)&' -s 21982 '&chr(34)&$Sensor&chr(34)&' -s 37606 '&chr(34)&$RuntimeMinute&chr(34)&' -s 42277 '&chr(34)&$Ventil&chr(34)&' -s 48286 '&chr(34)&$SystemStunde&chr(34)&':'&chr(34)&$SystemMinute&chr(34)&' -s 35041 '&chr(34)&$VentilRestlaufStunde&chr(34)&':'&chr(34)&$VentilRestlaufMinute&chr(34))
Case $CmdLine[1] = "VentilAuf"
;Button Ventil auf drücken
ControlClick("Gardena - BWC Remote - Untitled","","[ID:1073]")
$Ventil = ControlGetText ("Gardena - BWC Remote - Untitled","","[ID:1083]")
Run('IPSCommand.exe -h 192.168.6.100 -s 42277 '&chr(34)&$Ventil&chr(34)&'')
Case $CmdLine[1] = "VentilZu"
;Button Ventil zu drücken
ControlClick("Gardena - BWC Remote - Untitled","","[ID:1074]")
$Ventil = ControlGetText ("Gardena - BWC Remote - Untitled","","[ID:1083]")
Run('IPSCommand.exe -h 192.168.6.100 -s 42277 '&chr(34)&$Ventil&chr(34)&'')
Case $CmdLine[1] = "Timesync"
;Buton mit PC-Zeit synchronisieren drücken
ControlClick("Gardena - BWC Remote - Untitled","","[ID:1019]")
$SystemStunde = ControlGetText ("Gardena - BWC Remote - Untitled","","[ID:1020]")
$SystemMinute = ControlGetText ("Gardena - BWC Remote - Untitled","","[ID:1021]")
Run('IPSCommand.exe -h 192.168.6.100 -s 48286 '&chr(34)&$SystemStunde&chr(34)&':'&chr(34)&$SystemMinute&chr(34)&'')
Case $CmdLine[1] = "Runtime"
;Zeit setzen und Daten übertragen
ControlSetText ("Gardena - BWC Remote - Untitled","","[ID:1048]", $CmdLine[2])
ControlSend ("Gardena - BWC Remote - Untitled","","[ID:1048]", "{ENTER}")
ControlCommand("Gardena - BWC Remote - Untitled","","[ID:59392]", "SendCommandID", 32779)
EndSwitch
EndIf
- Für die Gateway-Box gibt es aktuellere Treiber direkt vom Hersteller der Platine.
Bei unklarheiten einfach fragen!
Gruß
Tobias
Gardena.zip (558 KB)