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

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

Baxxy
Beiträge: 967
Registriert: 18.12.2018, 15:45
System: Alternative CCU (RaspberryMatic etc.)
Hat sich bedankt: 93 Mal
Danksagung erhalten: 149 Mal

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

Beitrag von Baxxy » 25.06.2020, 17:36

ehohz hat geschrieben:
25.06.2020, 11:05
Der Schalter wird zwar ausgeschaltet, aber nicht wieder eingeschaltet.
Kann ich bei einem kurzen Gegentest mit Kanal:5 einer HmIP-PSM nicht bestätigen.
Der Kanal:5 wird ausgeschalten und entsprechend der Verzögerung im Script wieder eingeschalten.

Code: Alles auswählen

channels.Get ("HMIP-PSM 0D2:5").DPByHssDP ("STATE").State(false);
channels.Get ("HMIP-PSM 0D2:5").DPByHssDP ("STATE").State(true, 10000);
Grüße
Baxxy

ehohz
Beiträge: 26
Registriert: 19.11.2015, 14:27

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

Beitrag von ehohz » 25.06.2020, 17:46

Es gibt nur einen Schaltaktor mit der
schalter1.jpg
Bezeichung schalter1.

Ich teste es derzeit in einer Umgebung mit nur diesem Schaltaktor.

ehohz
Beiträge: 26
Registriert: 19.11.2015, 14:27

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

Beitrag von ehohz » 25.06.2020, 17:53

Ich habe es jetzt auch mit der Befehlssequenz

Code: Alles auswählen

channels.Get ("schalter1").DPByHssDP ("STATE").State(false);
channels.Get ("schalter1").DPByHssDP ("STATE").State(true, 5000);

Zu meiner Überraschung funktioniert es dann.

MichaelN
Beiträge: 387
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 34 Mal
Danksagung erhalten: 27 Mal

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

Beitrag von MichaelN » 25.06.2020, 17:58

ehohz hat geschrieben:
25.06.2020, 17:46
Es gibt nur einen Schaltaktor mit der Bezeichung schalter1.
Das mag sein - Ich frage aber nach "Objekt". Vielleicht schwirrt da nach eine SysVar rum oder so?
Zu meiner Überraschung funktioniert es dann.
Mich nicht, denn so wird der Kanal direkt angesprochen und nicht das erste Objekt, das zufällig schalter1 heißt.

ehohz
Beiträge: 26
Registriert: 19.11.2015, 14:27

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

Beitrag von ehohz » 25.06.2020, 18:19

Wieder was dazugelernt.

Auf jeden Fall vielen Dank an euch.

alchy
Beiträge: 9617
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 17 Mal
Danksagung erhalten: 230 Mal

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

Beitrag von alchy » 29.06.2020, 19:29

Weil das hier nichts mit RaspberryMatic zu tun hat, mal ne Ausnahme.
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?
Du nichts oder nicht viel. :wink:
Das es kein doppeltes Objekt geben kann sollte schon die Aussage "wird zwar ausgeschaltet, aber..." beweisen.
Auch die Fehlermeldung
ehohz hat geschrieben:
25.06.2020, 17:04

Code: Alles auswählen

ReGaHss: ERROR: dp pointer is null
ist ziemlich eindeutig.

Da gibt es eben so eine Ungereimtheit die Methode .State() direkt auf einen Kanal anzuwenden, ist dabei die eine Sache.
Als die zusätzlichen Parameter in der ReGaHss-Version 0208 eingeführt wurden war dies bereits buggy und funktionierte nur mit Systemvariablen. In der Version 0213 wurde dann ein Reparaturversuch durchgeführt, welcher jedoch nicht zur endgültigen Beseitigung des Bugs führte, sondern nur die Anwendbarkeit auf Hss-Datenpunkte bereitstellte. Die Funktion des Delays bei Anwendung auf Kanäle wurde aber weiterhin schlicht vergessen.
Kann man sich drüber streiten ob es wieder mal ein Bug oder doch ein Feature ist. :roll:
ehohz hat geschrieben:
25.06.2020, 17:53

Code: Alles auswählen

channels.Get ("schalter1").DPByHssDP ("STATE").State(true, 5000);
Zu meiner Überraschung funktioniert es dann.
Man merke, da wird es dann auf einen Datenpunkt angewendet und nicht mehr auf einen Kanal.
MichaelN hat geschrieben:
25.06.2020, 17:58
Mich nicht, denn so wird der Kanal direkt angesprochen und nicht das erste Objekt, das zufällig schalter1 heißt.
Was aber mit dem eigentlichen Problem wenig zu tun hat.

ob er

Code: Alles auswählen

channels.Get ("schalter1").DPByHssDP ("STATE").State(false);
channels.Get ("schalter1").DPByHssDP ("STATE").State(true, 5000);
oder

Code: Alles auswählen

dom.GetObject("schalter1").DPByHssDP ("STATE").State(false);
dom.GetObject("schalter1").DPByHssDP ("STATE").State(true, 5000);
verwendet, ist in seinem Fall zu 99% egal, denn er wendet damit .State() mit den neuem delay Parameter auf einen Datenpunkt an und nicht auf den Kanal wie im ersten Versuch. Der Kanal schalter1 ist augenscheinlich das einzigste Objekt mit dem Namen oder zumindest ist es der mit der niedrigeren ISE_ID, sonst würde ja das Ausschalten vorher ebenso ins Leere laufen.
Besser ist aber trotzdem channels.Get zu benutzen.

Alchy

.................... full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Benutzeravatar
jmaus
Beiträge: 5919
Registriert: 17.02.2015, 14:45
System: Alternative CCU (RaspberryMatic etc.)
Wohnort: Dresden
Hat sich bedankt: 14 Mal
Danksagung erhalten: 323 Mal
Kontaktdaten:

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

Beitrag von jmaus » 29.06.2020, 19:58

alchy hat geschrieben:
29.06.2020, 19:29
Da gibt es eben so eine Ungereimtheit die Methode .State() direkt auf einen Kanal anzuwenden, ist dabei die eine Sache.
Als die zusätzlichen Parameter in der ReGaHss-Version 0208 eingeführt wurden war dies bereits buggy und funktionierte nur mit Systemvariablen. In der Version 0213 wurde dann ein Reparaturversuch durchgeführt, welcher jedoch nicht zur endgültigen Beseitigung des Bugs führte, sondern nur die Anwendbarkeit auf Hss-Datenpunkte bereitstellte. Die Funktion des Delays bei Anwendung auf Kanäle wurde aber weiterhin schlicht vergessen.
Das ist in der Tat eine interessante Feststellung. Muss ich mir mal bei gegebener Zeit anschauen ob ich da wirklich etwas übersehen habe bzgl. State() anwendung mit Delay auf einem Kanal vs. Datenpunkt. War mir bis dato gar nicht so bewusst. Danke alchy für diesen nützlichen Hinweis.
RaspberryMatic 3.51.6.20200621 @ ESXi mit ~180 HomeMatic Geräten + ioBroker – GitHubGitHub Sponsors / PayPalTwitter

MichaelN
Beiträge: 387
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 34 Mal
Danksagung erhalten: 27 Mal

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

Beitrag von MichaelN » 29.06.2020, 20:05

Gerade getestet, es ist so, wie alchy sagt. Danke, der Zusammenhang war mir auch nicht klar. Habe meine Doku der undokumentierten Befehle gleich mal angepasst...

Gelobe ab sofort nur noch saubere Deklarationen anzuwenden :mrgreen:

alchy
Beiträge: 9617
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 17 Mal
Danksagung erhalten: 230 Mal

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

Beitrag von alchy » 29.06.2020, 21:02

jmaus hat geschrieben:
29.06.2020, 19:58
Muss ich mir mal bei gegebener Zeit anschauen ob ich da wirklich etwas übersehen habe bzgl. State() anwendung mit Delay auf einem Kanal vs. Datenpunkt.
Du hast die Aussagen / Beschreibungen / Fehlermeldung von ehohz gelesen?
Und der Rest steht eigentlich hier von dir selber:
jmaus hat geschrieben:
31.08.2019, 15:53
Bug in der neuen "State()" ReGa/HM-Skript Funktion beseitigt die es mit einem zusätzlichen Parameter erlaubt nun verzögerte Schaltoperationen durchführen zu lassen. Dort wurde die Verzögerung nur bei Schaltoperationen auf Systemvariablen durchgeführt und nicht bei der Anwendung auf Geräteobjekte welches nunmehr möglich sein sollte (#659).
Wie auch immer, es ist ja recht einfach nachzustellen. Man denke nur an .Variable()

MichaelN hat geschrieben:
29.06.2020, 20:05
Habe meine Doku der undokumentierten Befehle gleich mal angepasst...
In meiner Aussage ist doch gar nichts "undokumentiertes" versteckt.....glaube ich..... :shock:
Was Kanal, Datenpunkt usw. ist, ist offiziell doch reichlich beschrieben., denke ich.
Der bessere Zugriff mittels channels.Get() usw. statt dom.GetObject() wurde damals erstmals von BadenPower hier gepostet.
(Was EQ3 intern immer noch verwendet kann sich jeder selber anschauen.)
Ich kann mich auch noch daran erinnern, das ich es am Anfang als "Umgehung des gleiche Namen Bug" bezeichnet habe. Und auch heute sehe ich es noch als Bug an, wenn es nicht verhindert wird, das man namensgleiche Objekte anlegen kann über die Klickibunti.

Alchy

.................... full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Benutzeravatar
jmaus
Beiträge: 5919
Registriert: 17.02.2015, 14:45
System: Alternative CCU (RaspberryMatic etc.)
Wohnort: Dresden
Hat sich bedankt: 14 Mal
Danksagung erhalten: 323 Mal
Kontaktdaten:

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

Beitrag von jmaus » 30.06.2020, 11:53

alchy hat geschrieben:
29.06.2020, 21:02
jmaus hat geschrieben:
29.06.2020, 19:58
Muss ich mir mal bei gegebener Zeit anschauen ob ich da wirklich etwas übersehen habe bzgl. State() anwendung mit Delay auf einem Kanal vs. Datenpunkt.
Du hast die Aussagen / Beschreibungen / Fehlermeldung von ehohz gelesen?
Und der Rest steht eigentlich hier von dir selber:
jmaus hat geschrieben:
31.08.2019, 15:53
Bug in der neuen "State()" ReGa/HM-Skript Funktion beseitigt die es mit einem zusätzlichen Parameter erlaubt nun verzögerte Schaltoperationen durchführen zu lassen. Dort wurde die Verzögerung nur bei Schaltoperationen auf Systemvariablen durchgeführt und nicht bei der Anwendung auf Geräteobjekte welches nunmehr möglich sein sollte (#659).
Wie auch immer, es ist ja recht einfach nachzustellen.
Ja, das ist es in der Tat und ich hab es auch schon reproduzieren können und ich denke auch schon den schuldigen gefunden. Der entscheidende Hinweis war dabei die folgende Fehlermeldung die kommt wenn man ein Delayed State() auf einen Kanal macht:

Code: Alles auswählen

Jun 30 09:07:43 homematic-raspi local0.err ReGaHss: ERROR: dp pointer is null - id= 1679 [ExecuteWriteJob():iseRTScheduler.cpp:641]
Der Scheduler der das State ja dann nach der angegebenen Delayzeit ausführen soll kann bis jetzt eben nur mit DPs umgehen und verweigt mit dieser Fehlermeldung auch ein State() auf einem Kanal auszuführen (was prinzipiell geht wenn es einen DefaultDP für einen Kanal gibt. Sollte sich recht einfach reparieren lassen.
alchy hat geschrieben:
29.06.2020, 21:02
Man denke nur an .Variable()
Wie meinst du das genau? Was hat .Variable() damit zu tun?
RaspberryMatic 3.51.6.20200621 @ ESXi mit ~180 HomeMatic Geräten + ioBroker – GitHubGitHub Sponsors / PayPalTwitter

Antworten

Zurück zu „RaspberryMatic“