dom.GetObject("...").State(1) liefert false trotz Erfolg

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

dom.GetObject("...").State(1) liefert false trotz Erfolg

Beitrag von jp112sdl » 15.07.2018, 18:22

Hallo zusammen!

Kurze Frage:
In der Skript-Dokumentation (https://www.eq-3.de/Downloads/eq3/downl ... l_V1.2.pdf), Seite 12/13, heißt es:
4.8 State
4.8.1 Parameter und Rückgabewert
...
Wird ein Parameter übergeben, liefert der Rückgabewert Aufschluss darüber, ob der Aufruf erfolgreich war (true) oder nicht (false).
Schaltet man bspw. einen Aktor ein:

Code: Alles auswählen

var a = dom.GetObject("BidCos-RF.NEQ0386972:1.STATE").State(1);
ist der Rückgabewert trotz korrektem Befehl a = false.

Muss das so?

LG, JP

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Xel66
Beiträge: 14149
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: dom.GetObject("...").State(1) liefert false trotz Erfolg

Beitrag von Xel66 » 15.07.2018, 18:36

Mit diesem Befehl setzt Du doch den Inhalt der Scriptvariable "a" auf den Inhalt von dem per domGet abgefragten Status. Wenn dieser zum Zeitpunkt der Abfrage falsch ist, dann ist das Ergebnis korrket. Deine Syntax fragt nicht das Ergebnis der eigentlichen Abfrage, sondern den Status ab. Wobei dort eigentlich State() stehen müsste.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: dom.GetObject("...").State(1) liefert false trotz Erfolg

Beitrag von jp112sdl » 15.07.2018, 18:41

Xel66 hat geschrieben:
15.07.2018, 18:36
Mit diesem Befehl setzt Du doch den Inhalt der Scriptvariable "a" auf den Inhalt von dem per domGet abgefragten Status. Wenn dieser zum Zeitpunkt der Abfrage falsch ist, dann ist das Ergebnis korrket. Deine Syntax fragt nicht das Ergebnis der eigentlichen Abfrage, sondern den Status ab. Wobei dort eigentlich State() stehen müsste.

Gruß Xel66
Also ich möchte nicht den Zustand des Aktors abfragen. Dass das mit .State() erfolgen muss, ist mir bekannt. :wink:

Es ging mir nur drum, zu verstehen, warum das Ergebnis vom Schalten des Aktors mit .State(1) oder auch .State(0) ein "false" liefert.
Er ist immer "false". Auch wenn der Aktor vorher an war, oder aus war. Oder schon den Status hatte, den ich wieder setze... Alles egal.

Irgendwie widerspricht das "false" der Doku...

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: dom.GetObject("...").State(1) liefert false trotz Erfolg

Beitrag von alchy » 15.07.2018, 19:25

Er hat schon Recht, wenn man es streng nimmt ist es *IMHO* ein Bug.
Das es funktioniert, sieht man z.B. bei .State() bei einer Systemvariablen.

Alchy

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

Xel66
Beiträge: 14149
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: dom.GetObject("...").State(1) liefert false trotz Erfolg

Beitrag von Xel66 » 15.07.2018, 19:45

jp112sdl hat geschrieben:
15.07.2018, 18:41
Es ging mir nur drum, zu verstehen, warum das Ergebnis vom Schalten des Aktors mit .State(1) oder auch .State(0) ein "false" liefert.
Dann solltest Du auch den Zustand setzen und nicht abfragen. Mit der Zuweisung zu einer Scriptvariable ist dieses kein Schaltbefehl sondern eine Abfrage des Status. Da die von Dir verwendete Syntax dafür aber falsch ist, ist vermutlich das "Ergebnis" immer falsch. Es sollte ein Syntaxfehler angemahnt werden. Man könnte interpretieren, dass das Zuweisen nicht möglich ist, und darum das Falsch als Ergebnis kommt. Die Ursachen dafür liegen vermutlich tiefer.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: dom.GetObject("...").State(1) liefert false trotz Erfolg

Beitrag von alchy » 15.07.2018, 20:01

Du willst es nicht hören oder?
Wenn er

Code: Alles auswählen

var a = dom.GetObject("BidCos-RF.NEQ0386972:1.STATE").State();
benutzen würde, würde in a der Wert des Datenpunktes enthalten sein, da er danach fragt.

Wenn er

Code: Alles auswählen

var a = dom.GetObject("BidCos-RF.NEQ0386972:1.STATE").State(1);
oder

Code: Alles auswählen

var a = dom.GetObject("BidCos-RF.NEQ0386972:1.STATE").State(0);
benutzt, sollte die Rückgabe true ausgegeben werden.
Natürlich immer vorausgesetzt der Datenpunkt ist so vorhanden, da er nicht fragt sondern setzt.


Mach dasselbe mit einer Systemvariablen und es wird funktionieren

b enthält den Wert der Systemvariablen:

Code: Alles auswählen

var b = dom.GetObject("Anwesenheit").State();
b sollte immer true ergeben ,und macht es auch:

Code: Alles auswählen

var b = dom.GetObject("Anwesenheit").State(0);

Code: Alles auswählen

var b = dom.GetObject("Anwesenheit").State(1);
da bei diesem Befehl die erfolgreiche Ausführung zurückgegeben wird.

Alchy

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

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: dom.GetObject("...").State(1) liefert false trotz Erfolg

Beitrag von jp112sdl » 15.07.2018, 20:16

alchy hat geschrieben:
15.07.2018, 20:01
Wenn er

Code: Alles auswählen

var a = dom.GetObject("BidCos-RF.NEQ0386972:1.STATE").State(1);
oder

Code: Alles auswählen

var a = dom.GetObject("BidCos-RF.NEQ0386972:1.STATE").State(0);
benutzt, sollte die Rückgabe true ausgegeben werden.
Natürlich immer vorausgesetzt der Datenpunkt ist so vorhanden, da er nicht fragt sondern setzt.
Ja genau - sollte.

Und ist der Datenpunkt nicht vorhanden, erhalte ich eine "leere" Ausgabe.
Zumindest schreibt WriteLine(a); keinen Text aus - da hätte ich jedoch dann false erwartet.
Ob a dabei sogar "null" ist, habe ich noch nicht geprüft.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

jp112sdl
Beiträge: 12108
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 848 Mal
Danksagung erhalten: 2148 Mal
Kontaktdaten:

Re: dom.GetObject("...").State(1) liefert false trotz Erfolg

Beitrag von jp112sdl » 15.07.2018, 20:21

Xel66 hat geschrieben:
15.07.2018, 19:45
Dann solltest Du auch den Zustand setzen und nicht abfragen. Mit der Zuweisung zu einer Scriptvariable ist dieses kein Schaltbefehl sondern eine Abfrage des Status. Da die von Dir verwendete Syntax dafür aber falsch ist, ist vermutlich das "Ergebnis" immer falsch. Es sollte ein Syntaxfehler angemahnt werden. Man könnte interpretieren, dass das Zuweisen nicht möglich ist, und darum das Falsch als Ergebnis kommt. Die Ursachen dafür liegen vermutlich tiefer.

Gruß Xel66
Ja, also ich glaub, wir reden aneinander vorbei oder meinen beide was anderes...

Code: Alles auswählen

dom.GetObject("BidCos-RF.NEQ0386972:1.STATE").State(1);
schaltet den Aktor ein.
Ja, so macht man es gewöhnlich.

Ich bin es aber gewöhnt, dass wenn eine Methode eine Rückgabe liefert (die sogar auch so dokumentiert ist!), ich deren Rückgabe gern validiere.
Und so sollte auch das Schalten des Aktors eine Rückgabe liefern. Natürlich nicht den IST-Zustand des Aktors, der interessiert mich an der Stelle auch gar nicht! Sondern lediglich, ob die Methode korrekt ausgeführt wurde.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: dom.GetObject("...").State(1) liefert false trotz Erfolg

Beitrag von alchy » 15.07.2018, 20:30

Du hast Recht, das ist ein Bug der schon immer in der RegaHss enthalten ist, wie mir gerade mitgeteilt wurde.
So wie ich es auch geschrieben habe. Xel66 hat das nur bis jetzt nicht eingesehen.

Alchy

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

Xel66
Beiträge: 14149
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 583 Mal
Danksagung erhalten: 1497 Mal

Re: dom.GetObject("...").State(1) liefert false trotz Erfolg

Beitrag von Xel66 » 15.07.2018, 23:28

alchy hat geschrieben:
15.07.2018, 20:30
Xel66 hat das nur bis jetzt nicht eingesehen.
OK, gebe mich geschlagen. Ist 'n Bug.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Antworten

Zurück zu „HomeMatic allgemein“