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