MQTT-Funksteckdosen als Thing anlegen

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
Neinhorn
Beiträge: 5
Registriert: 31. Dez 2025 02:10
Answers: 0

MQTT-Funksteckdosen als Thing anlegen

Beitrag von Neinhorn »

Servus Zusammen,

ich habe ein paar Steckdosen die ich via MQTT ein/ausschalten kann. Aktuell habe ich zwei Rules die Cron-Gesteuert die jeweiligen MQTT-Nachrichten verschicken. Dabei sind die Adressen der Steckdosen einfach hart codiert in einem Array hinterlegt.

Ich würde gerne jede einzelne Steckdose als Item anlegen, diese dann in unterschiedliche Groups zusammenfassen und in den Rules die Groups/Items verwenden, statt der hart codierten Adressen. Nice wäre auch, wenn ich über die Web-UI die Steckdosen manuell schalten könnte.

Dazu muss ich vermutlich ein benutzerdefiniertes Thing erstellen, das ich dann dem Item zuweise etc.

Jetzt ist die Frage, wie ich so ein Thing am besten anlegen. Da es viele Steckdosen sind und ich eh lieber programmiere wäre mir etwas das ich tippen kann 1000x lieber als irgendwas zum zusammen zu klicken.

Wenn ich openHAB soweit richtig verstanden habe müsste das Item ein Switch sein, der bei Betätigung die jeweilige MQTT-Nachricht über das verknüpfte MQTT-Item verschickt. Jetzt so mal grob als openHAB-Neuling formuliert.

Meine Suche nach "openhab create custom item" und ähnlichem hat mir leider nix brauchbares geliefert. Bin für jeden Tipp oder Link der von einem Menschen kommt dankbar.

Edit: Thing hinzugefügt, ich denke da muss ich anfangen, nicht erst beim Item.
openHAB 5.1.0 auf Raspberry PI 4 (8GB) mit Trixie und Zulu 21
MAX! Heizungsteuerung

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

Re: Funksteckdosen als Items anlegen und in Script verwenden

Beitrag von udo1toni »

Grundsätzlich kannst Du das Gewünschte über verschiedene Wege erreichen :)
Ich nutze openHAB seit Version 1.0. Damals geb es ausschließlich die rein textbasierte ('DSL') Konfiguration (und außerdem noch nicht die Things, aber das das ist ein anderes Thema). Für eine per mqtt gesteuerte Steckdose (geflasht mit Tasmota) sieht das so aus:
Thing (incl. Bridge):

Code: Alles auswählen

Bridge mqtt:broker:mymqtt "Mosquitto" @ "mqtt" [
    host="192.168.178.151",              // die IP des mqtt Brokers
    port=1883,                           // der Port des mqtt Brokers
    clientID="openHAB5",                 // Die ID, unter der openHAB gegenüber dem Broker auftritt (Stichwort Logging)
    lwtTopic="openHAB5/system/LWT",      // Das LastWillTopic von openHAB
    lwtMessage="Offline",                // Die LastWill Message von openHAB
    lwtRetain=true,                      // LastWill Retain Verhalten
    birthTopic="openHAB5/system/LWT",    // Das Topic, unter dem openHAB meldet, wenn der Client startet
    birthMessage="Online",               // Die Meldung, die openHAB beim Start der Verbindung sendet
    birthRetain=true,                    // Siehe lwtRetain
    shutdownTopic="openHAB5/system/LWT", // Das Topic, unter dem openHAB meldet, wenn der Client gestoppt wird
    shutdownMessage="Offline",           // Die Meldung, die openHAB beim Stopp der Verbindung sendet
    shutdownRetain=true,                 // Siehe lwtRetain
    enableDiscovery=false                // soll openHAB sich an den HomeAssistant Standard halten?
 ] {
      Thing topic gosund_1 "Gosund 1" @ "mqtt" [
         availabilityTopic="t_switch/gosund_1/tele/LWT", // LastWillTopic der WLAN Steckdose
         payloadNotAvailable="Offline",                  // Offline-Meldung
         payloadAvailable="Online"                       // Online-Meldung
      ]{
          Type switch : ch1 "Schalter"     [ stateTopic="t_switch/gosund_1/stat/POWER", commandTopic="t_switch/gosund_1/cmnd/POWER" ]
          Type number : power "Leistung"   [ stateTopic="t_switch/gosund_1/tele/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Power"  , unit="W" ]
          Type number : voltage "Spannung" [ stateTopic="t_switch/gosund_1/tele/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Voltage", unit="V" ]
          Type number : current "Strom"    [ stateTopic="t_switch/gosund_1/tele/SENSOR", transformationPattern="JSONPATH:$.ENERGY.Current", unit="A" ]
          Type switch : ch1t "Timer"       [ commandTopic="t_switch/gosund_1/cmnd/Timers", stateTopic="t_switch/gosund_1/stat/RESULT",  transformationPattern="REGEX:((.*Timers.*))∩JSONPATH:$.Timers"]
      }
}
Rein für den Schaltvorgang brauchst Du nur den ersten Channel, aber falls Deine mqtt Schalter Informationen wie Spannung und Strom liefern, kann das ja interessant sein, genau wie 'fortgeschrittene' Funktionen von Tasmota (im Beispiel die Aktivierung/Deaktivierung eines im Device angelegten Timers)
Der Block von Thing bis zur zugehörigen schließenden curly Bracket } wird für jedes Device gebraucht, natürlich jeweils mit den passenden Topics und einer eindeutigen Thing ID.

Passend dazu brauchst Du dann noch die Items:

Code: Alles auswählen

// Gosund 1
 Switch                   Gosund1Ch1       "Fernseher"       <poweroutlet> (gGosund1) ["Control","Power"]    {channel="mqtt:topic:mymqtt:gosund_1:ch1"}
 Number:Power             Gosund1Power     "Leistung"        <poweroutlet> (gGosund1) ["Status","Power"]     {channel="mqtt:topic:mymqtt:gosund_1:power",unit="W"}
 Number:ElectricPotential Gosund1Voltage   "Spannung"        <poweroutlet> (gGosund1) ["Status","Voltage"]   {channel="mqtt:topic:mymqtt:gosund_1:voltage",unit="V"}
 Number:ElectricCurrent   Gosund1Current   "Strom"           <poweroutlet> (gGosund1) ["Status","Current"]   {channel="mqtt:topic:mymqtt:gosund_1:current",unit="A"}
 Switch                   Gosund1Ch1Timers "Timer"           <poweroutlet> (gGosund1) ["Control","Duration"] {channel="mqtt:topic:mymqtt:gosund_1:ch1t"}

//
Vorteil der textbasierten Konfiguration: Du erstellst ein Thing und die zugehörenden Items, anschließend kopierst Du die Texte und änderst lediglich die Parameter.
Mit OH5 kannst Du grundsätzlich auch Konfigurationen immer als DSL oder YAML exportieren, Du kannst also ein Thing auch über die Main UI erstellen und anschließend als Text exportieren, um sie danach als Vorlage für weitere gleichartige Devices zu nutzen.
Die Gegenrichtung kann etwas tricky sein, also aus einem DSL-Thing ein UI-Thing zu erzeugen, dafür gibt es momentan noch keinen direkten Weg.
Für Items gibt es aber einen "echten" Import, bei dem DSL Items-Dateien importiert werden und als UI Items gespeichert werden
openHAB5.2.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime - LXC, 4 Kerne, 3 GByte RAM)
Hostsystem Proxmox VE 9.2.10 - AMD Ryzen 5 3600 6 Kerne, 12 Threads - 64 GByte RAM - ZFS Pools: Raid Z1, 3 x 20 TB HDD -> 40 TByte und Raid Z0-Mirrored 4 x 1 TByte NVMe -> 2 TByte

Antworten