Gartenbewässerung mit Gardena Gatewaybox und IPS

Hallo,

im Moment setze ich für die Gartenbewässerung den Bewässerungscomputer C 1060 solar plus von Gardena in Verbindung mit einem Gardena Bodenfeuchtesensor ein. Die Programmierung des Computers in Verbindung mit dem Bodenfeuchtesensor und einem automatischen Wasserverteiler ist aber leider sehr eingeschränkt, so dass man für die einzelnen Bewässerungsstränge keine freien Startzeiten mehr einstellen kann.

Nun gibt es für ca 50€ für den C1060 plus/solar plus eine Gatewaybox und eine kleine Software, mit der man vom PC aus den Bewässerungscomputer programmieren und steuern kann. Infos zu dem Gerät siehe: Informationen zur Programmierung von Bewässerungcomputern über PC
Dort kann man sich den Treiber und die Software runterladen. Anhand des Treibernamens ist die verwendete Hardware eine USB to UART Bridge von Silicon Labs.

Da ich mich mit seriellen Protokollen und dem Reverse Engineering der Software leider so gar nicht auskenne muss ich die Frage hier einfach mal ins Forum stellen: Ist es möglich über diese Gatewaybox aus IPS heraus das Ventil zu steuern und den Bodenfeuchtesensor abzufragen?
Würde mich freuen wenn jemand der sich mit sowas auskennt mal seine Meinung kund tut.

Vielen Dank und erstmal ein schönes Wochenende!
Tobias

So, ich habe mir mal mit Auto-IT ein kleines Script gebastelt, welches mir die Daten aus der Gardena-SW ausliest und an IPS überträgt und mit dem ich theoretisch auch das Ventil öffnen und schließen kann… Theoretisch, weil ich noch auf die bestellte Gatewaybox von Gardena warte.
Dazu habe ich mir ein Script im IPS gebastelt welches dann die Daten auswertet und für meinen Gardena-Wasserverteiler passend die Bewässerung auslöst. Wenn die Box da ist werde ich noch etwas basteln müssen und stelle dann bei Interesse gerne die Scripte zur Verfügung.

hi, klar wäre klasse, wenn du dein script veröffentlichst. hätte intresse dran :smiley:

gruß

  1. Zuerst habe ich im IPS Variablen wie im Screenshot zu sehen angelegt:

  2. Dann habe ich die BWC_Remote_v1.0.exe heruntergeladen und ins IP-Symcon Hauptverzeichnis kopiert.

  3. Die IPSCommand.exe aus der angehängten rar-Datei wird ebenfalls in das IP-Symcon Hauptverzeichnis kopiert.

  4. Auto-It herunterladen und installieren.

  5. 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:
Events.jpg

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); ).

  1. 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
  1. Für die Gateway-Box gibt es aktuellere Treiber direkt vom Hersteller der Platine.

Bei unklarheiten einfach fragen!

Gruß
Tobias

Gardena.zip (558 KB)

So, Hardware ist da, habe noch einige Fehler beseitigt und das AutoIt_Skript an die Merkwürdigkeiten der Gardena_SW angepasst. Bei der Runtime lässt sich z.B. die Stunde nicht setzen, ich werte jetzt nur noch die Minuten aus und habe dafür die ehemalige String-Variable als Integer-Variable neu angelegt.

Bis jetzt läuft erstmal alles was ich getestet habe, ob sich das Skript im Alltag bewährt wird sich zeigen.

Gruß
Tobias

Hallo Tobias,

Wie ist denn die Anbindung realisiert ? Der Gardena Bewässerungscompter muss doch mit der Gateway Box verbunden werden und diese wieder mit dem IPS Server ?! Wie hast Du denn Weg vom Rechner zur Gateway Box gelöst?

Habe nochmals ein paar Fehler im IPS-Skript ausgemerzt und musste vorerst einige Sleep-Befehle einbauen, mal sehen ob man da noch eine schönere Lösung findet. Der obere Post wurde angepasst.

@hbraun: Bei mir hängt der Gardena-BWC vor dem Kellerfenster in dem auch mein IPS-Server steht. Damit reichte mir ein langes USB-Kabel vom PC bis zum Fenster, dort hängt die Gatewaybox, und von da aus geht es mit einem relativ kurzen PS/2-Kabel durch das Fenster in den BWC.

Tja, da komm ich nicht hin, bei mir sind es so 20-30 mtr. :frowning:

Das ist natürlich schon eine Strecke, dem seriellen PS/2 Kabel sollte die Distanz aber nichts ausmachen. Ich weiß allerdings nicht, ob man so ein Kabel fertig kaufen könnte, serlberlöten sollte ja aber nicht das Problem sein.
Aber es gibt sicher noch andere Möglichkeiten die Steuerung zu realisieren, bei mir war halt bis auf die Gatewaybox schon alles vorhanden und die räumlichen Umstände günstig.

Naja ist jetzt nicht so schlimm, dieser Sommer ist ja fast vorbei (war überhaupt schon Sommer ?).
Evtl. gehe ich das irgendwann mal mit den Gardena Ventilen und Homematic an.