Seite 1 von 1

Status eines Things abfragen

Verfasst: 18. Sep 2023 13:44
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

Re: Status eines Things abfragen

Verfasst: 18. Sep 2023 15:13
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.

Re: Status eines Things abfragen

Verfasst: 18. Sep 2023 15:21
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.

Re: Status eines Things abfragen

Verfasst: 18. Sep 2023 17:11
von MISPEZI
Danke für die schnellen Antworten.
Den Status als Trigger zu nutzen macht Sinn.
Es gehen übrigens beide Varianten - zumindest bei mir!

Re: Status eines Things abfragen

Verfasst: 18. Sep 2023 23:30
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.

Re: Status eines Things abfragen

Verfasst: 2. Nov 2023 16:12
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

Re: Status eines Things abfragen

Verfasst: 2. Nov 2023 17:35
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;

Re: Status eines Things abfragen

Verfasst: 2. Nov 2023 19:49
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.

Re: Status eines Things abfragen

Verfasst: 3. Nov 2023 07:47
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

Re: Status eines Things abfragen

Verfasst: 3. Nov 2023 11:35
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.