Update der Schalter

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
MagicBird
Beiträge: 76
Registriert: 8. Jun 2020 17:31
Answers: 1

Update der Schalter

Beitrag von MagicBird »

Hallo Forum,

nachdem mir gestern der Supergau passierte habe ich nun angefangen alles auf OH4 einzustellen.

Die Konfiguration habe ich komplett für Weboberfläche vorgenommen. Ich kann via BasicUI und der Admin Seite einzelne aktionen Steuern.

Ich würde gerne nun aber die Stellung der Schalter wie ich das kenne gerne wieder auslesen.
Dazu fand ich etwas mit addmeta daten autoupdate aber es passiert nichts. (habe in items alle Steckdosen dazu auf autoudate gestellt)

hat jemand dazu eine Idee?

danke

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

Re: Update der Schalter

Beitrag von udo1toni »

Zu wenig Information und eventuell ein falscher Gedanke :)

Welche Addons verwendest Du?

Bezüglich autoupdate: Dieser Parameter steuert lediglich, ob ein von openHAB gesendetes Kommando unmittelbar zu einer Aktualisierung des entsprechenden Status führt.
Beispiel:
Ich habe eine per mqtt angebundene "WLAN Steckdose" :), Thing in einer things-Datei:

Code: Alles auswählen

Bridge mqtt:broker:mosquitto "Mosquitto" [
    // Ballast...
] {
    Thing topic socket1 "Steckdose 1" [
        // mehr Ballast
    ] {
    Channels:
        Type switch : ch1 "Schaltkanal" [ commandTopic="cmnd/socket1/POWER", stateTopic="stat/socket1/POWER" ]
    }
}
Und das passende Item dazu:

Code: Alles auswählen

Switch Steckdose1 "Steckdose 1" {channel="mqtt:topic:mosquitto:socket1:ch1", autoupdate="false"} 
Schalte ich die Steckdose per ON Befehl ein, so sendet das Item ON an den Channel, der den Befehl an mqtt Topic cmnd/socket1/POWER sendet. Die Steckdose reagiert, indem sie einschaltet und den neuen Zustand über Topic stat/socket1/POWER sendet. openHAB empüfängt das ON der Steckdose und sendet das Update an das Item, welches daraufhin seinen Zustand auch auf ON setzt.

Nun mit

Code: Alles auswählen

Switch Steckdose1 "Steckdose 1" {channel="mqtt:topic:mosquitto:socket1:ch1", autoupdate="true"} 
Schalte ich die Steckdose per ON Befehl ein, so sendet das Item ON an den Channel, der den Befehl an mqtt Topic cmnd/socket1/POWER sendet.
Unmittelbar anschließend setzt openHAB von sich aus den Zustand des Items auf ON, weil das der vermutete neue Zustand ist. Ob die Steckdose geschaltet hat, ist irrelevant.
Nur mit autoupdate="false" habe ich also immer den tatsächlichen Zustand der Steckdose im Item (unter der Voraussetzung, dass ich das Item nicht anderweitig manipuliere).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

MagicBird
Beiträge: 76
Registriert: 8. Jun 2020 17:31
Answers: 1

Re: Update der Schalter

Beitrag von MagicBird »

Oh Addons, gar keine

autoupdate auf false gesetzt.

viele dank

MagicBird
Beiträge: 76
Registriert: 8. Jun 2020 17:31
Answers: 1

Re: Update der Schalter

Beitrag von MagicBird »

nach der entsprechenden Änderung von autoupdate auf false wird die Info ob der Schalter auf On oder Off steht nicht verarbeitet.

sitemap

Code: Alles auswählen

    Frame {
        Text label="Lennox Zimmer" icon="boy_1" {
            Switch item=KidsRoom1_Power icon="light" label="Schreibtisch"
           }
    }
items

Code: Alles auswählen

Switch	KidsRoom1_Power    "Schreibtisch"			<light>         (LennoxRoom, gPower)	["Switch", "Switchable"]	{channel="mqtt:topic:mqttbroker:lennox_licht1:POWER", autoupdate="false", ga="Switch"}
things

Code: Alles auswählen

  Thing topic lennox_licht1 "Schreibtisch" @ "Lennox" {
    Channels:
      Type switch : POWER  [ stateTopic="tele/lennox_licht1/STATE", commandTopic="cmnd/lennox_licht1/POWER", on="ON", off="OFF" ]
    }
wo mache ich meinen Fehler oder dauert es vom System solange?

danke

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

Re: Update der Schalter

Beitrag von udo1toni »

Erstens: Lass bitte on="ON" und off="OFF" weg, das ist die Default Payload.
Zweitens: Bitte setze das korrekte stateTopic, das ist stat/lennox_licht1/POWER und nicht das tele-Topic. tele wird zyklisch gesendet (alle fünf Minuten, wenn das in Tasmota nicht anders konfiguriert wird). Du willst nicht fünf Minuten auf den Status warten (oder durchschnittlich 150 Sekunden) .

"Nachteil" des stat-Topics: es kommt nur, wenn ein Schaltbefehl gesendet wird. Das bedeutet, wenn Du openHAB neu startest, weiß openHAB nicht, welchen Status das Item hat (bis Du einmal schaltest).
Lösung: eine kleine Rule:

Code: Alles auswählen

rule "get all states of tasmota Devices"
when
    System started
then
    val actionsMqtt = getActions("mqtt","mqtt:broker:mybroker") // korrekte UID des Brokers eintragen!
    actionsMqtt.publishMQTT("cmnd/Tasmotas/POWER","")
end
Die Rule sendet einen leeren Befehl an das Topic cmnd/Tasmotas/POWER. Gewöhnlich lauschen alle mittels Tasmota geflashten Geräte auf dieses Topic und führen den betreffenden Befehl dann alle aus. Da kein Kommando gesendet wird, antwortet Tasmota mit dem aktuellen Status (über das Standard Topic stat/DeviceTopic/POWER). Der Broker empfängt alle Statusmeldungen und sendet sie an openHAB weiter, schwups sind alle aktuellen Status auf einen Schlag eingelesen :)

Genauso kann man übrigens auch alle Devices auf einen Schlag mit einer neuen Einstellung versehen (sofern diese für alle Devices gleich sein soll - z.B. per Backlog die SSID und das zugehörige Passwort tauschen, oder den Timeserver setzen, eine neue Firmware installieren usw.)
Platt gesagt ist Tasmota nicht nur genial einfach, sondern auch einfach genial ;)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

MagicBird
Beiträge: 76
Registriert: 8. Jun 2020 17:31
Answers: 1

Re: Update der Schalter

Beitrag von MagicBird »

Hallo, nun hatte ich mal wieder etwas zeit und probierte da mit den Regeln.

Code: Alles auswählen

rule "CheckDevices"
when
    System started
then
    val actionsMqtt = getActions("mqtt","mqtt:broker:mqttbroker") // korrekte UID des Brokers eintragen!
    actionsMqtt.publishMQTT("cmnd/balkon_wlandose/POWER","")
    actionsMqtt.publishMQTT("cmnd/bad_wlandose/POWER","")
    actionsMqtt.publishMQTT("cmnd/lennox_licht1/POWER","")
    actionsMqtt.publishMQTT("cmnd/lennox_licht2/POWER","")
    actionsMqtt.publishMQTT("cmnd/lennox_luefter/POWER","")
    actionsMqtt.publishMQTT("cmnd/lennox_netzwerk1/POWER","")
    actionsMqtt.publishMQTT("cmnd/colin_licht1/POWER","")
    actionsMqtt.publishMQTT("cmnd/colin_licht2/POWER","")
    actionsMqtt.publishMQTT("cmnd/colin_luefter/POWER","")
    actionsMqtt.publishMQTT("cmnd/colin_netzwerk1/POWER","")
    actionsMqtt.publishMQTT("cmnd/wohnzimmer_stehlampe/POWER","")
    actionsMqtt.publishMQTT("cmnd/wohnzimmer_blume/POWER","")
    actionsMqtt.publishMQTT("cmnd/wohnzimmer_highboard/POWER","")
    actionsMqtt.publishMQTT("cmnd/wohnzimmer_dyson/POWER","")
    actionsMqtt.publishMQTT("cmnd/kuechen_geraete1/POWER","")
    actionsMqtt.publishMQTT("cmnd/kueche_microwelle/POWER","")
    actionsMqtt.publishMQTT("cmnd/kuechen_kaffeemaschinen/POWER","")
    actionsMqtt.publishMQTT("cmnd/schlafzimmer_tv/POWER","")
end

Code: Alles auswählen

cmnd/balkon_wlandose/POWER (null)
cmnd/bad_wlandose/POWER (null)
cmnd/lennox_licht1/POWER (null)
cmnd/lennox_licht2/POWER (null)
cmnd/lennox_luefter/POWER (null)
cmnd/lennox_netzwerk1/POWER (null)
cmnd/colin_licht1/POWER (null)
cmnd/colin_licht2/POWER (null)
cmnd/colin_luefter/POWER (null)
cmnd/colin_netzwerk1/POWER (null)
cmnd/wohnzimmer_stehlampe/POWER (null)
cmnd/wohnzimmer_blume/POWER (null)
cmnd/wohnzimmer_highboard/POWER (null)
cmnd/wohnzimmer_dyson/POWER (null)
cmnd/kuechen_geraete1/POWER (null)
cmnd/kueche_microwelle/POWER (null)
cmnd/kuechen_kaffeemaschinen/POWER (null)
cmnd/schlafzimmer_tv/POWER (null)
stat/colin_licht1/RESULT {"POWER":"OFF"}
stat/colin_licht1/POWER OFF
stat/lennox_licht1/RESULT {"POWER":"OFF"}
stat/lennox_licht1/POWER OFF
stat/kueche_microwelle/RESULT {"POWER":"ON"}
stat/kueche_microwelle/POWER ON
stat/colin_licht2/RESULT {"POWER":"OFF"}
stat/colin_licht2/POWER OFF
stat/schlafzimmer_tv/RESULT {"POWER":"ON"}
stat/schlafzimmer_tv/POWER ON
stat/bad_wlandose/RESULT {"POWER":"ON"}
stat/bad_wlandose/POWER ON
stat/colin_luefter/RESULT {"POWER":"OFF"}
stat/colin_luefter/POWER OFF
stat/kuechen_kaffeemaschinen/RESULT {"POWER":"ON"}
stat/kuechen_kaffeemaschinen/POWER ON
stat/wohnzimmer_stehlampe/RESULT {"POWER":"OFF"}
stat/wohnzimmer_stehlampe/POWER OFF
stat/lennox_netzwerk1/RESULT {"POWER":"ON"}
stat/lennox_netzwerk1/POWER ON
stat/colin_netzwerk1/RESULT {"POWER":"ON"}
stat/colin_netzwerk1/POWER ON
stat/kuechen_geraete1/RESULT {"POWER":"ON"}
stat/kuechen_geraete1/POWER ON
stat/lennox_licht2/RESULT {"POWER":"OFF"}
stat/lennox_licht2/POWER OFF
stat/wohnzimmer_highboard/RESULT {"POWER":"OFF"}
stat/wohnzimmer_highboard/POWER OFF
stat/wohnzimmer_dyson/RESULT {"POWER":"OFF"}
stat/wohnzimmer_dyson/POWER OFF
aber die basic ui hat das nicht verarbeitet.

lars

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

Re: Update der Schalter

Beitrag von udo1toni »

Warum sendest Du direkt an jedes einzelne Topic? Wie gesagt, es reicht ein Befehl, der alle Tasmotas auf einen Schlag anspricht.

openHAB liest das commandTopic nicht ein, sondern ausschließlich das stateTopic. cmnd/blah/POWER ist kein stateTopic, Du musst stat/blah/POWER abfragen.

Ändere erst mal alle Things entsprechend ab, also als Beispiel

Code: Alles auswählen

  Thing topic lennox_licht1 "Schreibtisch" @ "Lennox" {
    Channels:
      Type switch : ch1  [ stateTopic="stat/lennox_licht1/POWER", commandTopic="cmnd/lennox_licht1/POWER" ]
    }
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

MagicBird
Beiträge: 76
Registriert: 8. Jun 2020 17:31
Answers: 1

Re: Update der Schalter

Beitrag von MagicBird »

OK dann habe ich es nun verstanden, beim schalten habe ich mal auf die konsole geachtet und es kam
18:50:11.727 MQT: stat/zimmer_tv/RESULT = {"POWER":"OFF"}
18:50:11.732 MQT: stat/zimmer_tv/POWER = OFF

und nicht tele.

und die Regel habe ich auch noch geändert nach Tasmotas

danke

Antworten