OH3: "Mapping" für Drehriffsensoren mit drei Zuständen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Anbeku
Beiträge: 216
Registriert: 12. Nov 2020 10:26
Answers: 4

Re: OH3: "Mapping" für Drehriffsensoren mit drei Zuständen

Beitrag von Anbeku »

violine21 hat geschrieben: 14. Feb 2021 17:57 Wie gesagt, habe das in OH3 mit Homematic-Fenstersensoren noch nicht gemacht, steht mir aber noch bevor.
Habe davon 5 Stück verbaut :shock:
Ich habe vier davon für den Anfang aber werde die aber wohl bei den restlichen Fenstern nicht mehr einsetzen, aus diversen Gründen. Mal abgesehen davon, das man damit in Kombination mit Openhab nur zusätzliche Arbeit hat, lassen die sich auch schwerer verbauen als ich dachte. Bei allen Fenstern musste ich den viereckigen Stift vom Drehgriff erst mal gerade feilen, damit das gepasst hat, aber bei manchen Fenstern passen die auch gar nicht, weil die runden Löcher für manche Systeme zu klein sind. Was hingegen immer Problemlos gepasst hat ist der Fenster- und Türkontakt verdeckter Einbau und der ist auch noch 10 € billiger. Ich denke ich nehme bei den weiteren Fenstern lieber den.

Anbeku
Beiträge: 216
Registriert: 12. Nov 2020 10:26
Answers: 4

Re: OH3: "Mapping" für Drehriffsensoren mit drei Zuständen

Beitrag von Anbeku »

Ich habe mal in Javascript ein kleines Skript geschieben, dass diese drei Zustände auf ein Contact Item mit zwei Zuständen abbildet. Das ist wahrscheinlich nicht das, was ich auf dauer möchte, aber ich frage mich warum das nicht funktioniert.

Code: Alles auswählen

var logger = Java.type('org.slf4j.LoggerFactory').getLogger('org.openhab.rule.' + ctx.ruleUID);

var Proxyitemname = event.itemName.replace("State", "Contact");

logger.info("triggered "+ event.itemState + " " + Proxyitemname);

var proxyitem = itemRegistry.getItem(Proxyitemname);

if(proxyitem) {
 
logger.info("item found"); 

  if(event.itemState == "CLOSED"){
    logger.info("CLOSED");
    proxyitem.sendCommand("CLOSED");
   }
  else if(event.itemState == "OPEN"){
        logger.info("OPEN");
        proxyitem.sendCommand("OPEN");
   }
  else if(event.itemState == "TILTED"){
        logger.info("TILTED");
        proxyitem.sendCommand("OPEN");
   }
}
else {
  logger.info("item not found"); 
}
Laut den Debugausgaben funktioniert da alles, bis auf die SendCommand-Aufrufe:
Script execution of rule with UID 'FenstergriffsensorenTranformation' failed: TypeError: proxyitem.sendCommand is not a function in <eval> at line number 23
Irgendetwas muss ich da grundlegend falsch machen. Haben die Items keine "SendCommand"-Methode? Aber die Autocompletion hat mir das geliefert.

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: OH3: "Mapping" für Drehriffsensoren mit drei Zuständen

Beitrag von udo1toni »

Anbeku hat geschrieben: 15. Feb 2021 09:30 Ich baue da mal was zusammen. Ich frage mich allerdings, warum der Contact in Openhab3 nicht einfach drei Zustände hat. Wenn es Icons mit drei Zuständen gibt, hat man das Problem ja offenbar schon erkannt. Es dürfte ja auch eigentlich nichts kaputt gehen, wenn man dem ENUM einfach einen dritten Wert hinzufügt, der sonst einfach nicht benutzt wird. Aber das müsste ich wohl die Entwickler fragen.
Der Punkt ist, dass Contact per Definition zwei Zustände hat, offen oder geschlossen. Es wäre in der Tat sehr schön, wenn es ein ENUM Item gäbe. Ob die Entwickler da offen sind, weiß ich nicht, das Contact Item hat einen definierten Datentyp namens OpenClosedType, der kennt nur exakt zwei Zustände. Contact ist eben keine beliebie Darstellung vom Typ ENUM, sondern ein Item, um einen Binäreingang abzubilden.
Es wäre nicht das erste Mal, dass ein neuer Itemtyp eingeführt wird, da das mit vergleichsweise viel Arbeit verbunden ist, wird oft versucht, das abzuschmettern, aber gerade für die vorliegende Anwendung wäre so eine Erweiterung ja äußerst sinnvoll, also nur zu :)
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: OH3: "Mapping" für Drehriffsensoren mit drei Zuständen

Beitrag von udo1toni »

Anbeku hat geschrieben: 15. Feb 2021 13:10 Ich habe mal in Javascript ein kleines Skript geschieben, dass diese drei Zustände auf ein Contact Item mit zwei Zuständen abbildet. Das ist wahrscheinlich nicht das, was ich auf dauer möchte, aber ich frage mich warum das nicht funktioniert.

Laut den Debugausgaben funktioniert da alles, bis auf die SendCommand-Aufrufe:
Script execution of rule with UID 'FenstergriffsensorenTranformation' failed: TypeError: proxyitem.sendCommand is not a function in <eval> at line number 23
Irgendetwas muss ich da grundlegend falsch machen. Haben die Items keine "SendCommand"-Methode? Aber die Autocompletion hat mir das geliefert.
Ein Contact Item hat in der Tat kein sendCommand. Es ist per Definition nur ein Empfänger. Du solltest aber mit postUpdate den Status setzen können. Die erlaubten Status sind OPEN, CLOSED, NULL und UNDEF (wobei die beiden letzten vom System verwendet werden, also eigentlich nicht zur Verfügung stehen). OPEN ist etwas anderes als "OPEN" ;)
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Anbeku
Beiträge: 216
Registriert: 12. Nov 2020 10:26
Answers: 4

Re: OH3: "Mapping" für Drehriffsensoren mit drei Zuständen

Beitrag von Anbeku »

udo1toni hat geschrieben: 15. Feb 2021 17:42 Ein Contact Item hat in der Tat kein sendCommand. Es ist per Definition nur ein Empfänger. Du solltest aber mit postUpdate den Status setzen können.
Ah Ok, ich fürchte ich habe den Unterschied doch nicht so ganz verstanden. Aber mit postUpdate kann ich trotzdem mit dem StateChange etwas triggern?
udo1toni hat geschrieben: 15. Feb 2021 17:42 Die erlaubten Status sind OPEN, CLOSED, NULL und UNDEF (wobei die beiden letzten vom System verwendet werden, also eigentlich nicht zur Verfügung stehen). OPEN ist etwas anderes als "OPEN" ;)
Ja letzteres ist ein String und ersteres etwas anderes, wobei da hört es bei mir momentan mit dem Verständnis auf.

Anbeku
Beiträge: 216
Registriert: 12. Nov 2020 10:26
Answers: 4

Re: OH3: "Mapping" für Drehriffsensoren mit drei Zuständen

Beitrag von Anbeku »

Ich hab es jetzt geänder in

Code: Alles auswählen

proxyitem.postUpdate(OPEN);
Das funktioniert aber leider genau so wenig.
Script execution of rule with UID 'FenstergriffsensorenTranformation' failed: TypeError: proxyitem.postUpdate is not a function in <eval> at line number 23

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: OH3: "Mapping" für Drehriffsensoren mit drei Zuständen

Beitrag von udo1toni »

Dann ist proxyitem kein vollständiges Item. Der Code sieht aber erst mal gut aus (wobei ich mich mit JavaScript noch nicht weiter beschäftigt habe).
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Anbeku
Beiträge: 216
Registriert: 12. Nov 2020 10:26
Answers: 4

Re: OH3: "Mapping" für Drehriffsensoren mit drei Zuständen

Beitrag von Anbeku »

udo1toni hat geschrieben: 16. Feb 2021 23:06 Dann ist proxyitem kein vollständiges Item. Der Code sieht aber erst mal gut aus (wobei ich mich mit JavaScript noch nicht weiter beschäftigt habe).
Das proxyitem habe ich über die Gui als Point angelegt, das sollte eigentlich funktionieren. Ist natürlich kein Channel verknüpft. ich werde mal weiter forschen, wenn ich etwas Zeit finde.

Benutzeravatar
udo1toni
Beiträge: 15269
Registriert: 11. Apr 2018 18:05
Answers: 245
Wohnort: Darmstadt

Re: OH3: "Mapping" für Drehriffsensoren mit drei Zuständen

Beitrag von udo1toni »

Nein, ich meine im Code. proxitem ist eine Variable, die für ein Item steht. Gewöhnlich sollte die Variable ein Objekt sein, welches alle Eigenschaften und Methoden erbt. Das scheint aber schief zu gehen, weshalb proxitem nun weder postUpdate noch sendCommand unterstützt.
openHAB4.3.6 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Anbeku
Beiträge: 216
Registriert: 12. Nov 2020 10:26
Answers: 4

Re: OH3: "Mapping" für Drehriffsensoren mit drei Zuständen

Beitrag von Anbeku »

Ich habe das jetzt geändert in

Code: Alles auswählen

events.postUpdate(Proxyitemname, CLOSED)
Damit funktioniert es. Offenbar müssen die Aktionen alle über das events Object angestoßen werden, selbst wenn man das Item schon in der Hand hält.

Antworten