Wie geht das mit dem Timer?

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

Antworten
helmut
Beiträge: 6
Registriert: 11.08.2018, 15:41

Wie geht das mit dem Timer?

Beitrag von helmut » 16.08.2018, 20:18

Moin!
Hoffentlich bin ich in dieser Rubrik richtig?!

Ich möchte eine Bewässerungsanlage mit der CCU steuern.

Dazu habe ich Systemvariablen für Bewässerungskanäle und die jeweilige Bewässerungsdauer definiert und kann sie inzwischen auch mit Potis an analogen Eingängen einstellen.
Nun möchte ich per script das entsprechende Ventil für die gewünschte Dauer einschalten.
Ich komme allerdings mit dem Systemtimer aus CuxD nicht klar und benötige wohl bitte Hilfe:

Bisher sieht das script so aus:

Code: Alles auswählen

! Aufgabe: gewaehlten kanal mit dauer : Ventil öffnen für die festgelegte Zeit ............

! Bewässerungskreis ( integer 1 bis 6) lesen
integer kreis = dom.GetObject("bewkreis").Value();

! Bewässerungsdauer (integer, min) lesen
integer dauer = dom.GetObject("bewdauer").Value();

! BewKreis einschalten
boolean zust = true;
dom.GetObject("BidCos-Wired.OEQ0853504:" # kreis # ".STATE").State(zust);

! timer setzen auf "dauer"  ??????  geht das so??
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State(" #dauer # ");

! jetzt den timer abwarten und dann
! keine Ahnung wie das geht !!

! BewKreis ausschalten
boolean zust = false;
dom.GetObject("BidCos-Wired.OEQ0853504:" # kreis # ".STATE").State(zust);
Zuletzt geändert von uwe111 am 17.08.2018, 11:18, insgesamt 1-mal geändert.
Grund: Code in Code-Tags posten

Benutzeravatar
uwe111
Beiträge: 4819
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 245 Mal
Kontaktdaten:

Re: Wie geht das mit dem Timer?

Beitrag von uwe111 » 17.08.2018, 10:11

helmut hat geschrieben:
16.08.2018, 20:18

Code: Alles auswählen

! timer setzen auf "dauer" ?????? geht das so??
dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State(" #dauer # ");
Für die HM-Script Programmierung kann ich Dir die HM-Script Doku von eQ3 empfehlen.

Wenn in dauer die Sekunden stehen, dann sollte es so gehen:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2800001:1.TIMER_SET").State(dauer);
helmut hat geschrieben:
16.08.2018, 20:18

Code: Alles auswählen

! jetzt den timer abwarten und dann
! keine Ahnung wie das geht !!

! BewKreis ausschalten
boolean zust = false;
dom.GetObject("BidCos-Wired.OEQ0853504:" # kreis # ".STATE").State(zust);
Neue Programmverknüpfung anlegen, die auf den Ablauf des Timers bei Aktualisierung triggert und den Kreis abschaltet:

Code: Alles auswählen

! Bewässerungskreis ( integer 1 bis 6) lesen
integer kreis = dom.GetObject("bewkreis").Value();

! BewKreis ausschalten
dom.GetObject("BidCos-Wired.OEQ0853504:" # kreis # ".STATE").State(false);
Sollen gleichzeitig mehrere Kreise akiv sein, müsstest Du für jeden Kreis einen eigenen Timer-Kanal nutzen.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

helmut
Beiträge: 6
Registriert: 11.08.2018, 15:41

Re: Wie geht das mit dem Timer?

Beitrag von helmut » 17.08.2018, 14:21

Hallo Uwe!
Vielen Dank für die Tips,
Kanal einschalten , Timer setzen und Kanal ausschalten funktioniert jetzt, aber:

Ich wollte möglichst im Script das Timer-Ende abfragen und dann den Kanal abschalten.
Den Umweg über ein neues Programm verstehe ich so nicht, kann man das nicht im gleichen script lösen ??
Wie man den Ablauf des Timers in der webGui abfragt hab ich auch nicht heraus gefunden.
Gruß Helmut

grissli1
Beiträge: 2268
Registriert: 22.06.2012, 17:46
System: Alternative CCU (auf Basis OCCU)
Wohnort: Tirol/Austria
Hat sich bedankt: 13 Mal
Danksagung erhalten: 2 Mal

Re: Wie geht das mit dem Timer?

Beitrag von grissli1 » 17.08.2018, 15:10

Wenn du den Timer im gleichen Programm/Script abwartest, blockierst du damit alle anderen Programme so lange, bis der Timer zu ende ist.
Ansonsten läuft der Timer im Hintergrund, bis er wieder ein Programm triggert.

Viele Grüße
Chris
System: RaspberryMatic 3.41.11.20190126 auf RPi3, ReverseProxy auf RPi3

Benutzeravatar
uwe111
Beiträge: 4819
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 245 Mal
Kontaktdaten:

Re: Wie geht das mit dem Timer?

Beitrag von uwe111 » 20.08.2018, 09:32

helmut hat geschrieben:
17.08.2018, 14:21
Den Umweg über ein neues Programm verstehe ich so nicht, kann man das nicht im gleichen script lösen ??
Nein, wie Chris bereits geschrieben hat, musst Du hier umdenken und die CCU ereignisorientiert programmieren.
https://de.wikipedia.org/wiki/Ereignis_(Programmierung)

Also Deine Gerätedatenpunkte (bzw. Timer usw.) lösen Ereignisse aus, auf die Du mittels Programmverknüpfung reagierst.
Dabei sollten die ausgeführten Aktionen (HM-Scripts usw.) immer zeitnah beendet werden, um die Prozessverarbeitung nicht unnötig zu blockieren.

Über das timer.tcl Script im extra Verzeichnis vom CUxD kannst Du über CUxD-Exec natürlich aus dem HM-Script heraus auch eine verzögerte Aktion im Hintergrund starten. Dafür brauchst Du dann aber keinen CUxD-Timer.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

Antworten

Zurück zu „CUxD“