Status eines Things abfragen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
MISPEZI
Beiträge: 23
Registriert: 16. Jan 2022 15:00
Answers: 0

Status eines Things abfragen

Beitrag von MISPEZI »

Hallo in die Runde,
habe folgendes kleines Problem:
Ich steuere meine Räume und die Heizung mit HOMEMATIC-Komponenten samt einer CCU3 und ESP's mit Relais-Ansteuerung.
Von Zeit zu Zeit, sehr unregelmäßig) geht die Verbindung zwischen der CCU3 und dem OH 3.1 das auf einer VM läuft verloren. Da hilft dann nur ein Neustart des OH und der CCU3.
Dieses Problem möchte ich gerne etwas näher einkreisen. Im Internet habe ich dazu gelesen, dass man den Status eines Things abfragen kann. Dazu habe ich diese rule geschrieben:

Code: Alles auswählen

rule "1 - Prüfung der CCU-Verbindung"
    when
        Item HM_CCU_sw changed to ON    // kommt wenn 30min keine neue D-Temperatur mehr errechnet wurde
    then
        var mything = Things.getThing('homematic:HmIP-CCU3:3014F711A0001F98A99A43BC:001F98A99A43BC')
        var zwischen = mything.statusInfo
        LogWarn("Homematic CCU3", "aktueller Status = "+ zwischen)
        if(mything.statusInfo == 'COMMUNICATION_ERROR') {
            LogWarn("Homematic CCU3", "geht auf Kommunikationsfehler")
 }
        HM_CCU_sw.sendCommand(OFF)
        HM_CCU_state.postUpdate(zwischen)
end    
Die Logik dazu :
Item HM_CCU_sw wechselt auf ON wenn 30min keine neue Duchschnittstemperatur mehr gebildet wurde. Die ist ein Groupitem der Istwerte der HOMEMATIC-Thermostate.
Wenn das passiert, möchte ich gerne den Zustand des Bridge-things im Item HM_CCU_state festhalten.

Die Regel ruft allerdings einen LogErr hervor
2023-09-18 13:39:16.780 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'heater-1' failed: 'getThing' is not a member of 'java.lang.Class<org.openhab.core.model.script.actions.Things>'; line 19, column 23, length 78 in heater
Frage: Wie muss ich das machen, damit es funktioniert.
Ich danke schon mal für die Hilfe

oh73
Beiträge: 302
Registriert: 7. Mär 2021 14:49
Answers: 1

Re: Status eines Things abfragen

Beitrag von oh73 »

versuch es mal mit

Code: Alles auswählen

var mything = getThingStatusInfo('homematic:HmIP-CCU3:3014F711A0001F98A99A43BC:001F98A99A43BC').getStatus()
so rufe ich den Status vom Thing ab.
OH 4.3.0 auf HP 26o G1 Dm Mini Pc mit MX_Linux

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

Re: Status eines Things abfragen

Beitrag von udo1toni »

Das ist das Problem, wenn man mehrere Programmiersprachen zur Verfügung hat und denkt, man könnte einfach Code 1:1 aus der einen in die andere Sprache übernehmen... ;)

Zunächst einmal sehe ich keinen Sinn darin, darauf zu warten, dass die Temperatur 30 Minuten nicht upgedatet wurde. Sinnvoller (und wesentlich einfacher) wäre es, direkt das Thing zu überwachen.
Es gab mal diese Variante:

Code: Alles auswählen

Status = getThingStatusInfo('homematic:HmIP-CCU3:3014F711A0001F98A99A43BC:001F98A99A43BC').getStatus()
Ich nutze das aber nicht, habe also auch keine Ahnung, ob das in OH4 noch funktioniert (in der Doku habe ich den Befehl auf die Schnelle jedenfalls nicht gefunden).
Wie gesagt, einfacher und in meinen Augen sinnvoller wäre die direkte Überwachung:

Code: Alles auswählen

rule "CCU Verbindung"
when
    Thing 'homematic:HmIP-CCU3:3014F711A0001F98A99A43BC:001F98A99A43BC' changed from ONLINE
then
    logWarn("ccuConnection", "Homematic CCU3 aktueller Status = {}", newThingStatus)
    if(newThingStatus == 'COMMUNICATION_ERROR') {
        logWarn("ccuConnection", "Homematic Binding - Bridge meldet Kommunikationsfehler")
    }
    HM_CCU_state.postUpdate(newThingStatus)
end
Und Du könntest natürlich auch das "from ONLINE" im Trigger weg lassen und stattdessen einfach alle gemeldeten Status auswerten und entsprechend reagieren, alles mit einer Rule.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

MISPEZI
Beiträge: 23
Registriert: 16. Jan 2022 15:00
Answers: 0

Re: Status eines Things abfragen

Beitrag von MISPEZI »

Danke für die schnellen Antworten.
Den Status als Trigger zu nutzen macht Sinn.
Es gehen übrigens beide Varianten - zumindest bei mir!

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

Re: Status eines Things abfragen

Beitrag von udo1toni »

Ja, wie gesagt, ich hab es halt nicht ausprobiert und in der Doku auf Anhieb nicht s dazu gefunden, deshalb die Warnung :)
Aber wenn es weiterhin funktioniert, um so besser.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

oekonomy
Beiträge: 12
Registriert: 13. Mai 2021 17:51
Answers: 0

Re: Status eines Things abfragen

Beitrag von oekonomy »

hallihallo,
ich versuche nach Umstellung auf OH4 den Status von Things abzufragen...
Funktioniert solange man nichts ändert.
Wenn man allerdings neue Dinge hinzufügt... z.B.:
Name: shellypro4pmc8f09e83f660_Betrieb_2
Label: BoilerKlein
Kann man im JAVAscript nur noch nach dem Namen abfragen oder auch irgendwie nach dem Label , wie früher? - Ist halt viel besser Lesbar im Code.

So frage ich ab(Fehler - could not be found in the item registry)(geht auch nicht mit "Hochkomma"):
var temp1 = (items.getItem('BoilerKlein').state);

Unleserlich und mit einem großen Aufwand funktioniert(umprogrammieren):
var temp1 = (items.getItem('shellypro4pmc8f09e83f660_Betrieb_2').state);

Vielen Dank für einen Hinweis!
Enrico

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Status eines Things abfragen

Beitrag von Harka »

Moin,

kein Plan ob das bisher ging. Kommt mir zu mindestens komisch vor, weil Label im Gegensatz zum Namen nicht einmalig sein müssen.
Wenn Du die Items über die UI anlegst : den Namen des Items kannst Du beim Erstellen noch modifizieren. Danach ist er fix und nur über löschen und neu anlegen änderbar.
Hier gibt es eine Übersicht über die Befehle mit Parameter -> https://www.openhab.org/addons/automation/jsscripting/
So sind 2 etwas kürzere Schreibweisen möglich

Code: Alles auswählen

var temp1 = items.shellypro4pmc8f09e83f660_Betrieb_2.state;
var temp1 = items.getItem('shellypro4pmc8f09e83f660_Betrieb_2').state;

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

Re: Status eines Things abfragen

Beitrag von udo1toni »

Ich verstehe nicht, wie man überhaupt auf die Idee kommen kann, ein Item shellypro4pmc8f09e83f660_Betrieb_2 zu nennen.
Was die Suche nach dem Label betrifft: Das Label ist nicht eindeutig, es ist also auch kein gutes Kriterium, um ein Item zu wählen.

Ja, openHAB erzeugt solche Itemnamen, wenn man Things einfach übernimmt, ohne die Namen anzupassen :) kann man machen, ist dann halt kacke.

Das A und O eines Smarthome Systems ist, dass man sinnvolle Namen vergibt. In openHAB hat man durch die strikte Trennung der Ebenen sogar die besten Möglichkeiten dazu.
Things -> genau auf ganz bestimmte Hardware bezogen (es sei denn, man nutzt bei Bussystemen die Möglichkeit, Channel geräteübergreifend zu definieren, was eben keine gute Idee ist.
Items -> auf ganz bestimmte Funktionen bezogen, aber eigentlich völlig geräteunabhängig. Es interessiert mich nicht, ob der Boiler über einen Shelly Plug oder ein Zigbee Device oder über die native Schnittstelle der Hersteller geschaltet wird. Entsprechend sollte das Item den Namen boilerKlein tragen (unter der Voraussetzung, dass es auch einen boilerGross gibt, natürlich).

openHAB bietet von sich aus immer die Möglichkeit an, Thing IDs anzupassen, bevor ein per Autodiscovery gefundenes Thing eingebunden wird. Nutzt diese Möglichkeit und erleichtert euch das Leben.
Beim automatischen Erstellen von Items zu den entsprechenden Channels hat man ebenfalls die Möglichkeit, die Namen anzupassen. Hier ist es noch wichtiger, das auch zu tun.

Als Alternative kann ich nur immer wieder darauf verweisen, dass openHAB nach wie vor fast komplett über Text konfiguriert werden kann (zumindest, was Things und Items betrifft). Durch die Natur dieser Konfigurationsform kann man die UIDs der Things/Channels nachträglich ändern, genau wie die Namen der Items.
Tatsächlich wird dabei das Element gelöscht und neu angelegt, was aber nur in Bezug auf Persistence Daten und andere Bezüge innerhalb openHAB eine Rolle spielt, also z.B. weil ein Item in der UI verlinkt ist.
Unterm Strich kann man aber über die Textdefinition jederzeit noch Änderungen vornehmen und muss anders als über die UI nicht wieder bei null anfangen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

oekonomy
Beiträge: 12
Registriert: 13. Mai 2021 17:51
Answers: 0

Re: Status eines Things abfragen

Beitrag von oekonomy »

Hallo Udo,

danke für den deutlichen Hinweis mit der Namensänderung - das hab ich so "früher" gemacht (Name und Label selber vergeben) und nun nicht "gesehen", da der Name automatisch vergeben war...
Also noch mal von vorne, da ich nur die Definition von neuen IDs kann. Umbenennen hab ich gerade auch nicht gefunden...

Viele Grüße
Enrico

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

Re: Status eines Things abfragen

Beitrag von udo1toni »

Ja, Umbenennen gibt es nicht. Wie gesagt, mit der Textdefinition ist das kein Problem, auch wenn es intern trotzdem ein neues Item (oder auch Channel/Thing) ist.
Das Ding mit dem Umbenennen ist halt: openHAB müsste alle Referenzen ebenfalls anpassen, was sehr aufwändig sein kann. Die UID ist nun mal der Weg, Dinge in openHAB zu identifizieren.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten