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.
MQTT-Funksteckdosen als Thing anlegen
- Neinhorn
- Beiträge: 5
- Registriert: 31. Dez 2025 02:10
MQTT-Funksteckdosen als Thing anlegen
openHAB 5.1.0 auf Raspberry PI 4 (8GB) mit Trixie und Zulu 21
MAX! Heizungsteuerung
MAX! Heizungsteuerung
- udo1toni
- Beiträge: 15739
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Funksteckdosen als Items anlegen und in Script verwenden
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):
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:
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
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"]
}
}
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"}
//
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
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