Seite 1 von 3

[GELÖST] State() mit Delay in HM Script

Verfasst: 11.04.2020, 16:14
von dstephan
Hallo zusammen,

seit Version 3.47.15.20190828 können Kanäle per State mit einem delay geschaltet werden. Ich versuche das jetzt zu nutzen, um meine Beregnungsventile nacheinander ein- und wieder auszuschalten.

Code: Alles auswählen

dom.GetObject("ID_VENTIL1").State(true, 60000);
dom.GetObject("ID_VENTIL1").State(false, 120000);
dom.GetObject("ID_VENTIL2").State(true, 120000);
dom.GetObject("ID_VENTIL2").State(false, 180000);
Im (vereinfachten) Beispiel würde Ventil 1 mit einer Verzögerung von einer Minute starten und eine Minute laufen, anschließend Ventil 2 nochmal eine Minute. In der Realität sind es sieben Ventile mit individuellen Timings, die aus Systemvariablen gezogen werden. Einzeln funktionieren die Aufrufe, nur zusammen nicht, ich vermute, weil der letzte für den Kanal gesetzte Wert den vorigen überschreibt (also wird das Einschalten durchs nachfolgende Ausschalten wieder überschrieben).

Hat jemand eine Idee, wie sich das lösen lässt?

Schöne Grüße
Daniel

Re: State Delay in HM Script

Verfasst: 14.04.2020, 15:26
von jmaus
dstephan hat geschrieben:
11.04.2020, 16:14
Hat jemand eine Idee, wie sich das lösen lässt?
Ja, das habe ich. Für den von dir genannten Anwendungsfall gibt es extra zusätzlich zum zweiten parameter für die delay zeit in ms auch noch einen dritten Parameter den man der State() Funktion mitgeben kann. Dieser Parameter (boolean) ist standardmäßig "true", heisst "retrigger" und macht genau das was du festgestellt hast bzw. das was auch die WebUI Programmierung standardmäßig macht. D.h. ein noch laufendes State() mit delay wird unterbrochen bzw. überschrieben. Wenn du das also nicht willst und einfach mehrere gestaffelte State() aufrufe machen möchtest müsste dein Aufruf wie folgt aussehen:

Code: Alles auswählen

dom.GetObject("ID_VENTIL1").State(true, 60000);
dom.GetObject("ID_VENTIL1").State(false, 120000, false);
dom.GetObject("ID_VENTIL2").State(true, 120000);
dom.GetObject("ID_VENTIL2").State(false, 180000, false);
Hoffe das löst dein Problem.

Re: State() mit Delay in HM Script

Verfasst: 28.04.2020, 16:42
von dstephan
Hi Jens,
herzlichen Dank, funktioniert!
Gibt es eigentlich irgendwo eine konsolidierte Dokumentation dieser Scripting-API (HM-Standard + RasperryMatic-Erweiterungen), bzw. ließe sich das irgendwie generieren á la JavaDoc?
Schöne Grüße
Daniel

Re: [GELÖST] State() mit Delay in HM Script

Verfasst: 26.05.2020, 10:27
von Stefan0815
Eine Frage zur Verzögerung bei State: Wird der Sendebefehl um die Delay-Zeit verzögert oder wird die Verzögerung erst im Aktor realisiert?

Re: [GELÖST] State() mit Delay in HM Script

Verfasst: 26.05.2020, 20:40
von Black
Sendebefehl wird verzögert

Re: [GELÖST] State() mit Delay in HM Script

Verfasst: 25.06.2020, 11:05
von ehohz
Ich habe versucht in einem HM Script einen Schaltaktor auszuschalten und nach 5 Sekunden wieder einzuschalten.

Code: Alles auswählen

dom.GetObject("schalter1").State(false);
dom.GetObject("schalter1").State(true, 5000);
Der Schalter wird zwar ausgeschaltet, aber nicht wieder eingeschaltet.

Was mache ich falsch?

Re: [GELÖST] State() mit Delay in HM Script

Verfasst: 25.06.2020, 11:41
von MichaelN
Gibt es Fehlermeldungen im SysLog?
Ich setze vorraus, das der Aktor schalter1 existiert und es ohne ,5000 funktioniert und Du auch die richtige Firmware hast!?

Re: [GELÖST] State() mit Delay in HM Script

Verfasst: 25.06.2020, 12:11
von jmaus
ehohz hat geschrieben:
25.06.2020, 11:05
Ich habe versucht in einem HM Script einen Schaltaktor auszuschalten und nach 5 Sekunden wieder einzuschalten.

Code: Alles auswählen

dom.GetObject("schalter1").State(false);
dom.GetObject("schalter1").State(true, 5000);
Der Schalter wird zwar ausgeschaltet, aber nicht wieder eingeschaltet.

Was mache ich falsch?
Schau doch einfach ein paar Beiträge weiter oben nach meinen Hinweisen. Dort habe ich etwas von einem dritten Parameter für die State() funktion beschrieben (siehe viewtopic.php?f=65&t=58034&p=589846#p575179). Könnte auch deine Lösung sein.

Re: [GELÖST] State() mit Delay in HM Script

Verfasst: 25.06.2020, 17:04
von ehohz
Hallo MichaelN,

zu deinen Fragen:

1. Ich habe die neuste Firmware installiert.
2. Neuere Gerätefirmware wird nicht angezeigt.

3. Wenn ich es ohne Verzögerung probiere, geht es. Er schaltet aus und sofort wieder an.

4. Im Syslog gibt es folgende Fehlermeldung:
homematic-raspi local0.err ReGaHss: ERROR: dp pointer is null - id= 1419 [ExecuteWriteJob():iseRTScheduler.cpp:641]

Die Fehlermeldung sagt mir allerdings nichts.

Re: [GELÖST] State() mit Delay in HM Script

Verfasst: 25.06.2020, 17:06
von MichaelN
Und es gibt nur ein Objekt "schalter1"?
Wie lautet die genaue Firmware deiner CCU?