Seite 1 von 1

openHAB schreibt Änderunen nicht per MQTT

Verfasst: 27. Okt 2024 22:15
von RoCMe
Moin,

ich habe einen Heizungsthermostat per zibee2MQTT eingebunden und kann auf alle relevanten Informationen lesend zugreifen. Sinn der Aktion ist aber natürlich, den Thermostat auch zu steuern.

Ich habe also über "Add Meta data" ein "Default List Item Widget" hinzugefügt und erhalte so einen Slider, mit dem ich die Temperatur in den angegebenen Grenzen und Schrittweiten einstellen kann. Aber anscheinend übersehe ich etwas: Der Thermostat reagiert nicht. Mein mosquitto erhält auch keine Daten.

Ich habe also irgendwo noch einen Denkfehler, oder irgendwo die Konfiguration vermurkst - vermutlich eher das erste. Muss ich die MQTT Bridge erst noch "schreibbar" konfiguieren? Ist das Item falsch? Mir fehlt der richtige Ansatz...

Re: openHAB schreibt Änderunen nicht per MQTT

Verfasst: 28. Okt 2024 07:20
von RoCMe
Ich habe noch mal gegoogelt (ja, ich kann das selbst, auch wenn ich hier den Eindruck erwecken mag, ich könne es nicht ^^):
Scheinbar fehlt meinem Channel (oder doch dem Item?) mindestens ein comandTopic. Meine aktuellen Probleme dabei:
1. Ich finde nur Beispiele für dateibasierte Konfigurationen. In der UI habe ich nach etwas Rumgesuche ein Feld "MQTT Command Topic" gefunden. Das sieht doch vielversprechend aus. Allerdings habe ich bislang nicht rausgefunden, was ich da reinschreiben müsste. Ansprechen will ich einen "Eurotronics Comet Zigbee" Thermostat, den zu setzenden Wert kann ich als "occupied_heating_setpoint" aus dem erhaltenen JSON Blob auslesen. Aber wie setze ich ihn? Da stehe ich weiter auf dem Schlauch...

2. Zusätzlich gibt es weiter unten den "Transform Values" Abschnitt und dort ein Feld "Incoming Value Transformations" mit dem aktuellen Wert "JSONPATH:$.occupied_heating_setpoint". Das führt zu der Frage: Wie kann ich ein "Outgoing Value Transformations" setzen? Da gibt es nämlich kein weiteres Eingabefeld. Oder brauche ich das gar nicht? Dann stehe ich wohl weiter ziemlich fest auf dem Schlauch :-/

Re: openHAB schreibt Änderunen nicht per MQTT

Verfasst: 28. Okt 2024 08:09
von kopfnuss
Hi,
du benötigst als erstes ein Thing MQTT bridge und anschließend ein weites Thing als MQTT Client.
In dem MQTT Client erstellst du dir dann die ganzen Channels und in den Channels die Items, die du benötigst.
Mein Set-Channel sieht bei mir so aus:

Code: Alles auswählen

UID: mqtt:topic:82757d9a59:b0713b1ccf
label: MQTT_Noah
thingTypeUID: mqtt:topic
configuration: {}
bridgeUID: mqtt:broker:82757d9a59
channels:
  - id: noah2mqtt_set_output_pwr
    channelTypeUID: mqtt:number
    label: Battery Set Output
    description: ""
    configuration:
      commandTopic: noah2mqtt/device-serial/parameters/set
      postCommand: false
      formatBeforePublish: '{"output_power_w": %s}'
      stateTopic: noah2mqtt/device-serial/parameters
      transformationPattern: JSONPATH:$.output_power_w
Und das Item dazu so:

Code: Alles auswählen

label: Battery Set Output
type: Number:Power
category: ""
groupNames:
  - BKW
tags:
  - Energy
  - Setpoint

Re: openHAB schreibt Änderunen nicht per MQTT

Verfasst: 28. Okt 2024 08:43
von RoCMe
Wohooo, das hat geholfen, vielen Dank :)

Was mir gefehlt hat war
  1. Der Hinweis, dass man das commandTopic im Channel Code definieren kann (commandTopic)
  2. Welchen Pfad ich für das commandTopic angeben muss. Das habe ich anhand deines Beispiels erraten (hier: zigbee2mqtt/thermostat_office/set)
  3. Wie man den Raw Value beim Versenden in JSON umgewandelt bekommt (formatBeforePublish)
Vielen Dank!

Mir fällt es aktuell schwer, "aktuelle" Anleitungen für die openHAB Konfiguration zu finden - die meisten beziehen sich noch auf die Definition per Datei, was nach meinem Verständnis aber eher ein "Auslaufmodell" ist. Sehe ich das richtig?
Aktuell empfinde ich das Konfigurieren über die UI als ziemlich "technokratisch" und teilweise sehr aufwendig. Ist das wirklich so, oder übersehe ich etwas?

Re: openHAB schreibt Änderunen nicht per MQTT

Verfasst: 28. Okt 2024 15:16
von udo1toni
Die Konfiguration per Datei ist nicht abgekündigt. Es gab schon mehrfach den Versuch, das so zu verkaufen :) aber es gibt unverbesserliche Altnutzer, die zu blöd für die UI sind und nur Text können ;)
Ob Du Dich allerdings als Newbie mit der Textkonfiguration beschäftigen willst, ist eine andere Frage. Sie spielt vor allem ihre Vorteile aus, wenn Du oft viele gleichartige Things bearbeitest oder neu anlegst. Willst Du hingegen nur mal ein einzelnes Thing hinzufügen, mit meinetwegen zwei Items verbinden, und das dann in die UI bringen, so ist die UI natürlich viel komfortabler und auch sicherer - in Bezug darauf, keine Schreibfehler einzubauen :)

Eigentlich sollte die Konfiguration über UI einfach sein.
1. Addon installieren
2. Addon findet die Geräte selbständig (oder man muss lediglich zu Beginn einmalig Zugangsdaten in einer Bridge eintragen)
3. Das Thing hat automatisch alle Channel, die das Gerät bietet.
4. Add Thing as Equipment erzeugt alle notwendigen Items und fügt sie an der korrekten Stelle im Semantic Model ein.

Allerdings sollte man der Automatik nicht unbegrenzt vertrauen, und oftmals ist es wesentlich besser, sich Thing-, Channel- und Itemnamen selbst auszudenken. Spätestens an dieser Stelle ist die UI dann nicht mehr so schick wie die Textdateien mit VS Code und dem openHAB Plugin für diesen Editor, denn auch dort kann man "einfach" alle Items für ein Thing erzeugen lassen, nur kann man dort im Unterschied zur UI komfortabel im Nachhinein Namensteile austauschen - auch der Itemnamen (die kann man in der UI überhaupt nicht bearbeiten).

Es gibt natürlich verschiedene Addons, die keine Autodiscovery bieten - meist, weil das angebundene System das nicht erlaubt, schließlich müssen die Daten auch irgendwie zur Verfügung gestellt werden.

Re: openHAB schreibt Änderunen nicht per MQTT

Verfasst: 28. Okt 2024 16:38
von RoCMe
OK, vielleicht ist genau das Teil meines Problems: Ich habe sowohl meine vier Sensoren als auch meinen (bislang einzigen) Thermostat komplett manuell eingerichtet, also Thing, Channels und Items jeweils selbst getippt. Wir beide hatten das Thema kopieren dieser Dinge ja letztens schon mal: Aktuell sträubt sich in mir einiges, den nächsten Sensor einzurichten.
Ich werde mal nach Add-Ons suchen :)

Re: openHAB schreibt Änderunen nicht per MQTT

Verfasst: 28. Okt 2024 21:56
von udo1toni
Ja, da liegt ein Missverständnis vor (aber kein Wunder...)
Du hast In der UI in der Code Ansicht yaml Code eingegeben. das kann man machen, muss aber natürlich genau wissen, was man da einträgt. Die Code Ansicht ist durchaus geeignet, Änderungen an bestehenden Things (und inzwischen auch Items) vorzunehmen. Neu erstellen geht aber nicht, einzig könnte man ein "default" Thing des gewünschten Addons erstellen und anschließend den Code von einem bestehenden Thing der selben Sorte (!) ins neu erzeugte Thing einfügen, um dann dort Teile des Texts anzupassen.
Man kann damit super aus einem Kanal eines Things z.B. sieben weitere - fast komplett identische - Kanäle erstellen, weil man hier kein neues Thing benötigt, sondern einfach im bestehenden Thing die Anzahl der Kanäle erweitert, mittels Vorlage des bestehenden Kanals, das ist also prima, um z.B. eine Relaiskarte mit mehreren Kanälen ziemlich schnell vollständig manuell einzurichten.

Die "echte" Textkonfiguration hat nichts mit der UI zu tun :)

Es gibt den VS Code Editor, und dieser bringt im eigenen Marketplace auch ein openHAB Plugin mit. In diesem Plugin kann man einstellen, unter welcher Adresse der eigene openHAB Server erreichbar ist (und natürlich kann man dort auch die notwendigen Credentials hinterlegen, also z.B. einen eigens dafür erstellten Token).
Anschließend muss man in VS Code ein Arbeitsverzeichnis öffnen. Auf einem Windows PC richtet man dafür am besten ein Netzwerklaufwerk ein (der UNC-Pfad sollte eigentlich auch funktionieren, macht aber regelmäßig Probleme, also besser Laufwerksbuchstaben mappen), die Freigabe schaut auf \\openhabian\openhab_conf\ (User openhabian, Passwort openhabian) und diese Freigabe öffnet man als Arbeitsverzeichnis.
Im Arbeitsverzeichnis gibt es dann für jede Art Konfigurationsdatei ein eigenes Unterverzeichnis, items, things, rules usw.
In diesen Ordnern kann man wiederum Textdateien anlegen, die die korrekte Endung haben und die passende Konfiguration enthalten müssen.
Beispiel für eine Konfiguration für ein mqtt Device (hier ein 4-Kanal-Aktor mit Tasmota als Firmware) in einer Datei meine.things:

Code: Alles auswählen

Bridge mqtt:broker:mosquitto "Mosquitto" [
    host="192.168.178.2",
    clientID="openHAB4",
    birthTopic="openHAB4/system/LWT",
    lwtTopic="openHAB4/system/LWT",
    shutdownTopic="openHAB4/system/LWT",
    lwtMessage="Offline",
    shutdownMessage="Offline",
    birthMessage="Online"
] {
    Thing topic sonoff4Ch "Sonoff 4-Channel mit Tasmota" [
        availabilityTopic="tele/tasmota-1/LWT",
        payloadAvailable="Online",
        payloadNotAvailable="Offline"
    ] {
        Channels:
        Type switch : ch1 "Channel 1" [ stateTopic="stat/tasmota-1/POWER", commandTopic="cmnd/tasmota-1/POWER" ]
        Type switch : ch2 "Channel 2" [ stateTopic="stat/tasmota-1/POWER2", commandTopic="cmnd/tasmota-1/POWER2" ]
        Type switch : ch3 "Channel 3" [ stateTopic="stat/tasmota-1/POWER3", commandTopic="cmnd/tasmota-1/POWER3" ]
        Type switch : ch4 "Channel 4" [ stateTopic="stat/tasmota-1/POWER4", commandTopic="cmnd/tasmota-1/POWER4" ]
    }
}
Insbesondere die vier Channel sind interessant, weil die drei unteren Zeilen letztlich nur Kopien der ersten Zeile sind, mit geändertem Index. das geht auch ganz gut über die UI Code Ansicht.
Aber wenn ich nun von diesem 4-Kanal-Gerät drei Stück habe, wird es in der UI unpraktisch. Im VS Code Editor muss ich hier aber lediglich den gesamten Thing-Block vervielfältigen und das Topic anpassen (das geht prima mit Suchen & Ersetzen...)

Die zugehörigen Items (mitsamt Links) kommen dann in eine andere Datei - beispielsweise meineSuper.items:

Code: Alles auswählen

Switch sonoff4Ch_ch1 "Channel 1" <light> {channel="mqtt:topic:broker:sonoff4Ch:ch1",autoupdate="false"}
Switch sonoff4Ch_ch2 "Channel 2" <light> {channel="mqtt:topic:broker:sonoff4Ch:ch2",autoupdate="false"}
Switch sonoff4Ch_ch3 "Channel 3" <light> {channel="mqtt:topic:broker:sonoff4Ch:ch3",autoupdate="false"}
Switch sonoff4Ch_ch4 "Channel 4" <light> {channel="mqtt:topic:broker:sonoff4Ch:ch4",autoupdate="false"}
Ich habe hier mal auf alles weitere verzichtet, man kann in dieser Textdatei aber alle Aspekte eines Items konfigurieren, Gruppenzugehörigkeit, Tags, Profiles, Metadaten, wird halt beliebig kompliziert, weil viele dieser möglichen Parameter erst viel später erfunden wurden, als die Textkonfiguration schon nur noch optional war.

Der Witz ist aber, dass man diesen Text nicht mal selbst schreiben muss, es reicht, im VS Code die Things-Liste zu öffnen (wir erinnern uns - das Plugin hat Zugang zum eigenen openHAB Server), dort das Thing zu suchen und über das Kontextmenü Items für alle Channel zu erzeugen. Die Items werden dann in der zuletzt ausgewählten *.items Datei an der Cursorposition angelegt, so dass man sie dort direkt editieren kann.
Seine Stärken spielt das Plugin aber bei der Entwicklung von Rules aus, denn der eingegeben Code wird jederzeit live auf dem aktuellen System auf Korrektheit geprüft. Was leider nicht (mehr) zuverlässig funktioniert, ist die automatische Ergänzung von Schlüsselworten, das war mal besser. Trotzdem kann man DSL Rules so sehr komfortabel erstellen und hat auch nette Zusatzfunktionen, z.B. kann man durch MouseOver sehen, welchen Status ein Item hat - in diesem Moment - oder auch welche Items zu einem Group Item gehören - wird alles live abgefragt, super praktisch beim Erstellen generalisierter Rules.

*.items Dateien kann man über die UI auch einlesen, dabei erzeugt openHAB dann automatisch "nach Rezept" die Items in der UI, mit allem, was dazu gehört, also auch verteilt über die diversen Untermenüs. Für die *.things Dateien fehlt eine solche Import-Funktion leider, und es ist auch nicht vorgesehen, von der UI aus den umgekehrten Weg zu gehen, also die Konfiguration in *.items und *.things zu exportieren.

Ein weites Feld... :) ich habe halt mit openHAB1.0 angefangen, da gab es noch nicht mal Things, ganz zu schweigen von einer Verwaltungs-UI, Textdateien waren die einzige Möglichkeit, openHAB zu konfigurieren, ich habe das also mal so gelernt und habe entsprechend auch keinerlei Probleme, das so zu nutzen - auch mit der aktuellen openHAB Version.