18 Timer für den Gardena 6-Wege-Wasserverteiler

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Antworten
Mathias
Beiträge: 1767
Registriert: 03.11.2010, 10:25
System: CCU
Wohnort: Aachen
Hat sich bedankt: 58 Mal
Danksagung erhalten: 253 Mal
Kontaktdaten:

18 Timer für den Gardena 6-Wege-Wasserverteiler

Beitrag von Mathias » 02.06.2022, 21:15

Mit dem 6-Wege-Wasserverteiler können 6 Bewässerungskreise mit nur einem Ventil geschaltet werden. Mit dem Abschalten eines Bewässerungskreises wird automatisch der nächste Kreis angewählt. Für die Ansteuerung des Ventils ist das hier beschriebene Skript gedacht.

Folgende Funktionalitäten bietet das Skript:
  • Individuelle Zeit je Bewässerungskreis
  • Der Ausschaltbefehl für das Ventil wird zusammen mit dem Einschaltbefehl gesendet. Das Ventil schaltet also immer selbständig ab. Kommunikationsstörungen richten keinen Schaden an.
In der Zeichenkettensystemvariable "Bewässerungszeiten" müssen nur die Bewässerungszeiten in Sekunden kommasepariert angegeben werden. In RaspberryMatic kann der Inhalt der Systemvariable über die Web-UI editiert werden. Auf der normalen CCU3 kann dies mit folgendem Skript erreicht werden:

Code: Alles auswählen

var sv=dom.GetObject(ID_SYSTEM_VARIABLES).Get("Bewässerungszeiten");
sv.State("300,330,360,300,420,300");
Das eigentliche Steuerungsskript kann im Dann-Zweig eines CCU-Programms untergebracht werden, das von einem Zeitmodul angestoßen wird. Für Testzwecke kann es auch direkt in der Skriptumgebung ausgeführt werden.

Code: Alles auswählen

! Konfiguration
! Sekunden zwischen den Bewässerungskreisen
integer pauseTime=120; 
! Schaltkanal mit Ventil
var valveState=(dom.GetObject(ID_CHANNELS).Get("Bewässerungsventil")).DPByHssDP("STATE");
var valveOnTime=(dom.GetObject(ID_CHANNELS).Get("Bewässerungsventil")).DPByHssDP("ON_TIME");
! Zeichenkettensystemvariable mit den Bewässerungszeiten in Sekunden kommasepariert
var wateringDurations=dom.GetObject(ID_SYSTEM_VARIABLES).Get("Bewässerungszeiten").Value();

! Für Tests
! WriteLine(valveState);
! WriteLine(valveOnTime);
! WriteLine(wateringDurations);

! Zeitplan erstellen
integer plannedTime=0;
string wateringDurationStr;
foreach(wateringDurationStr, wateringDurations.Split(",")) {
  integer wateringDuration=wateringDurationStr.ToInteger();
  ! Für Tests
  ! WriteLine("Planzeit: " # plannedTime);
  ! WriteLine("Dauer: " # wateringDuration);
  valveOnTime.State(wateringDuration, plannedTime*1000, false);
  plannedTime=plannedTime+1;
  valveState.State(true, plannedTime*1000, false);
  plannedTime=plannedTime+wateringDuration+pauseTime;
}

Für ein Abbruch des Bewässerungszyklus ist die Option "Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern)." zu aktivieren und das Bewässerungsventil auf "Schaltzustand: Aus" zu setzen. An dem Wasserverteiler können auch Ausgänge übersprungen werden (Hebel umlegen). Dann muss die Anzahl der Einträge in der Systemvariable "Bewässerungszeiten" entsprechend reduziert werden.

Das Ergbnis sieht dann so aus:
trend.png
trend.png (12.83 KiB) 680 mal betrachtet

Quiz: Eine ähnliche Funktionalität ist auch ohne ein einziges Skript in einem einzigen CCU-Programm möglich. Wie sieht dann das CCU-Programm aus?

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“