Seite 1 von 1

Keine Werte per MQTT

Verfasst: 12. Feb 2022 22:40
von mimiw
Hallo Leute,
ich bin hier bei HomeAutomatisierung Neuling. Nach ein paar Anläufen bin ich froh, dass ich eine Steckdose Schalten kann (Thinks, Channel, Schwitch - Symbil) ... ;-)

Problem: Ich bekomme keine Werte von meinen Geräten per MQTT.

Mein System:
- OpenHAB 3 (mit influxdb & grafana)
- Mosquitto MQTT
- Zigbee2MQTT
- CC2531 Stick

Beschreibung:
Ich konnte die meisten Geräte mit Zigbee2Mqtt koppeln. Auch werden mir hier (GUI - Webseite) die Werte angezeigt. (Bild 1/2)
Frage ich jedoch mit MQTT Explorer die Daten ab, sehe ich zwar die Sensorden, aber keine Werte. Lustiger Weise sehe ich hier die Werte in einer beschreibenden JSON. Mit MQTT.fx 1.7.1 oder OpenHAB kann ich aber nicht darauf zugreifen. (Bild3)

Meine Befehle / Topics:
zigbee2mqtt/Temp1/temperature 🚫
zigbee2mqtt/StromDG/state 🚫
Command: zigbee2mqtt/StromDG/set -> ON/OFF ✅

Ich freue mich, auf eure Tipps! 😊

Hier die Infos zu meinen Configs:
Mosquitto.conf

Code: Alles auswählen

persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
listener 1883 0.0.0.0
listener 8883
allow_anonymous false
password_file /etc/mosquitto/mosquitto.passwd
Zigbee Config

Code: Alles auswählen

homeassistant: false
permit_join: false
mqtt:
  base_topic: zigbee2mqtt
  server: mqtt://192.168.178.20:1883/
  user: openhab
  password: ########
  client_id: ZigBee2MQTT-App
serial:
  port: /dev/ttyACM0
  adapter: auto
  disable_led: true
advanced:
  homeassistant_legacy_entity_attributes: false
  legacy_api: false
  ikea_ota_use_test_url: false
  log_syslog:
    app_name: Zigbee2MQTT
    eol: /n
    host: localhost
    localhost: localhost
    path: /dev/log
    pid: process.pid
    port: 123
    protocol: tcp4
    type: '5424'
  channel: 11
device_options:
  legacy: false
frontend:
  port: 8080
devices:
  '0x60a423fffe621130':
    friendly_name: StromEG
  '0xcc86ecfffe4ea0ae':
    friendly_name: Strom3
  '0x5c0272fffedab61a':
    friendly_name: Temp1
  '0x00158d0007087b1c':
    friendly_name: TempL1
  '0x00124b0022678e67':
    friendly_name: Motion1
  '0xcc86ecfffe4c3cf2':
    friendly_name: StromDG
  '0xccccccfffebefc6b':
    friendly_name: '0xccccccfffebefc6b'
  '0x7cb03eaa0a036b9a':
    friendly_name: '0x7cb03eaa0a036b9a'
blocklist:
  - '0xccccccfffebefc6b'

Re: Keine Werte per MQTT

Verfasst: 13. Feb 2022 01:48
von udo1toni
Herzlich willkommen im Forum!

Gleich zu Beginn ein kleiner Rüffel ;) bitte poste nicht Bilder, wenn es sich vermeiden lässt. Wir glauben Dir auch so, dass Du Werte im mqtt Explorer siehst...

Es ist üblich, dass Geräte nur ein Topic nutzen, um verschiedenste Informationen zu liefern, das hat vor allem etwas mit der Komplexität der Programme zu tun. Es ist wesentlich einfacher (aus Programmiersicht) ein JSON mit zig Werten zu erzeugen und dies in einem Topic zur Verfügung zu stellen, als für jeden Wert ein eigenes Topic aufzumachen.
Das bedeutet, dass Du in openHAB das JSON Objekt zerlegen musst. Glücklicherweise haben die Maintainer dafür den Transformation Service JSONPATH bereitgestellt. Du musst ihn lediglich installieren und das betreffende Topic abonnieren. Je nachdem, ob Du nur einen einzelnen Wert benötigst oder viele Werte aus dem JSON verwenden willst, musst Du anschließend den besten Weg für das Vorhaben bestimmen und umsetzen.

Also zum Beispiel:

Code: Alles auswählen

stateTopic="zigbee2mqtt/Strom3"
transformationPattern="JSONPATH:$.energy"
liefert im Beispiel als Zahlenwert 0.47 für einen Number Channel
Da Du aber vielleicht mehr als den einen Wert haben möchtest, nimmst Du stattdessen einen String Channel (in dem das JSON auch gespeichert werden kann). Nun verlinkst Du den String Channel mit zwei Number Items und einem Switch Item und trägt im Profile des Links jeweils unterschiedliche JSONPATH Ausdrücke ein, eben $.energy, $.linkquality und $.state

Wobei Du vielleicht den Status eh direkt an den Channel binden willst, der das Gerät auch ein- und ausschalten kann.

Re: Keine Werte per MQTT

Verfasst: 14. Feb 2022 17:09
von mimiw
Vielen Dank - mit diesem Tipp habe ich mir eine Anleitung gefunden, wie ich das benutzten kann.

In dieses Thema einzusteigen ist echt schwer - man muss so viel lesen und probieren, bis entlich was geht... Habe vor 6 Monaten schonmal damit Anfangen wollen, es dann aber aufgegeben. Diesmal klappt es - so ein bisschen.

Hast du noch einen Tipp für mich, wo es eine Anleitung zum Programieren gibt? Regeln hab ich schon hinbekommen. Aber per Bewegungsmelder eine Lampe mit Unterschiedlichen Faben zu unterschiedlichen Zeiten anmachen - das geht mit einem Script besser. Nur wo schreib ich das hin, damit es dann auch aufgerufen wird...

Re: Keine Werte per MQTT

Verfasst: 14. Feb 2022 19:02
von udo1toni
mimiw hat geschrieben: 14. Feb 2022 17:09 Habe vor 6 Monaten schonmal damit Anfangen wollen, es dann aber aufgegeben. Diesmal klappt es - so ein bisschen.
Wichtig ist, dran zu bleiben. Ich habe mit Beginn des Hausbaus begonnen, mich intensiver mit knx und mit Hausautomation zu beschäftigen (ein Kollege hatte sowas damals schon, und witzigerweise musste ich ihm immer helfen, weil er Apple-User und damals Windows einzige Option :lol: ) Ich habe auch einige Sachen ausprobiert, LeibNix (SBC Hardware, One-Man-Show, extrem schlank aber auch sehr eingeschränkt), Gira HomeServer (unlizensiert, nur mal angetestet), MisterHouse (grauslich...), openHAB in Version 1.0 entdeckt, schockverliebt, nach (ungelogen) 5 Minuten erste Lampe geschaltet, dann - etwas langwieriger - Einrichtung als xen vm angelegt und innerhalb 2 Stunden ( echt...) hatte ich mein gesamtes Haus abgebildet, Uhrzeit auf den Bus gebracht und die Außentemperatur von einem Wetterdienst auf meine RTR abgebildet (die Wetterstation war zu dem Zeitpunkt kaputt...)
mimiw hat geschrieben: 14. Feb 2022 17:09 Hast du noch einen Tipp für mich, wo es eine Anleitung zum Programieren gibt? Regeln hab ich schon hinbekommen. Aber per Bewegungsmelder eine Lampe mit Unterschiedlichen Faben zu unterschiedlichen Zeiten anmachen - das geht mit einem Script besser. Nur wo schreib ich das hin, damit es dann auch aufgerufen wird...
Was meinst Du mit Script? Was meinst Du mit Regeln? openHAB kennt ausschließlich Rules zur Automation. Wie Du eine Rule programmierst, ist Dir überlassen, Du kannst mit Blockly was zusammenklicken oder die Sprache Deiner Wahl verwenden (so sie schon unterstützt ist...) Die Rules DSL ist halt schon von Anfang an dabei. Angeblich (ich habe da keine Expertise...) ist sie Turing-komplett, man sollte also alles damit tun können, wonach einem der Sinn steht. Ob das sinnvoll ist, steht natürlich auf einem anderen Blatt, aber zur tageszeitabhängigen Manipulation der Lichtfarbe braucht es im Zweifel nur ein paar Zeilen Code.

Re: Keine Werte per MQTT

Verfasst: 14. Feb 2022 21:03
von mimiw
Ich werd mir Mühe geben. Software Entwickeln kann ich ein wenig, aber hier steige ich in ein neues Universum ein, wo ich vieles zum ersten Mal sehe.

Regeln schreiben
Von anderen sehe ich in Foren Texte wie

Code: Alles auswählen

rule "set charing target"
when
    Item RenaultZEServices_Zoe_Charging_Target changed or  
	...
then

       if(RenaultZEServices_Zoe_Charging.state == "Charging"){
        i...
        }else return
    }
end
Wenn ich bei mir auf Rules gehe und welche hinzufüge, erschein unter COde aber eine andere Strucktur

Code: Alles auswählen

configuration: {}
triggers:
  - id: "1"
    configuration:
      itemName: Motion1_DGOccupancy
      state: ON
      previousState: OFF
    type: core.ItemStateChangeTrigger
conditions:
  - inputs: {}
    id: "3"
    configuration:
      startTime: 17:00
      endTime: 22:00
    type: core.TimeOfDayCondition
actions:
  - inputs: {}
    id: "2"
    configuration:
      command: ON
      itemName: Strom3_OnOff
    type: core.ItemCommandAction
Was muss ich tun, um hier anderen Code zu schreiben, und wo find ich Information/Dokumentation, was die speziellen Befehle für OH sind?

Re: Keine Werte per MQTT

Verfasst: 14. Feb 2022 22:55
von udo1toni
Die Rules, die Du hier siehst, sind meist aus openHAB1 oder openHAB2-Zeiten (bzw. von Leuten, die eben nicht erst mit openHAB3 eingestiegen sind). In openHAB1 gab es nur eine Möglichkeit, Rules zu erstellen, das war über Textdateien, die im Ordner /etc/openhab/rules/ hinterlegt wurden. Alles Dateien, die dort angelegt sind und auf .rules enden, werden von openHAB beim Start (und bei Änderung des Speicherdatums) eingelesen und interpretiert. Man kann in einer Datei beliebig viele Rules anlegen und man kann beliebig viele .rules Dateien verwenden. Einzige Bedingungen: Die Namen aller Rules müssen über alle Dateien eindeutig sein und globale Variablen und Konstanten müssen ebenfalls über alle Dateien eindeutig benannt sein. Jedoch stehen globale Variablen und Konstanten (zumindest offiziell) nur in der .rules Datei zur Verfügung, in der die auch definiert sind.
Unter openHAB1 musste man zu Beginn jeder .rules Datei zwingend bestimmte Bibliotheken importieren. Unter openHAB2 wurden bestimmte imports als Default definiert, weshalb man meist komplett auf Imports verzichten kann, wenn man keine exotischen Funktionen benötigt. openHAB2 stellte zwar eine UI-Schnittstelle zum programmieren von Rules zur Verfügung, diese war aber nur rudimentär und auf simple Funktionen begrenzt (so wie jetzt auch, wenn man sich auf Item-Actions beschränkt)
Die Funktionen von openHAB1 stehen auch in openHAB3 noch vollständig zur Verfügung, mit der einen Einschränkung, dass openHAB1 Bindings unter openHAB 3 nicht mehr verwendet werden können.
In openHAB1 und openHAB2 wurde Joda Time als Bibliothek verwendet, da Java6 und Java7 keine entsprechenden Funktionen mitbrachten. Mit Java8 wurde aber JavaTime von Oracle ergänzt, womit Joda Time plötzlich deprecated wurde. Deshalb sind viele Rules (insbesondere solche mit Timerfunktionen und mit Ausdrücken, die sich auf now() beziehen) aus openHAB1/2 nicht ohne Anpassungen unter openHAB3 verwendbar, denn der Befehlssatz von JavaTime weicht im Detail von Joda Time ab.

Wenn Du (was ich nur immer wieder empfehlen kann) diese "alte" Art der Ruleprogrammierung nutzen möchtest, solltest Du unbedingt VSCode als Editor installieren und das dort vorhandene openHAB Plugin installieren und korrekt konfigurieren. Mit dem Plugin stehen im Editor Listen für Things, Channel und Items zur Verfügung, die dynamisch sind und den jeweiligen Zustand anzeigen können. Außerdem kann man diese Elemente aus den Listen heraus in Textdateien einfügen lassen, also z.B. auf einen Rutsch für alle Channel eines Things passende Items erzeugen, die Items in Sitemaps einfügen oder auch in Rules... Und wo wir bei Rules sind, sendet der Editor den Code an die laufende openHAB Instanz zur Syntaxprüfung. Ebenso bietet er Kontexthilfe, Codecompletion, Links in die Doku, Codeschnipsel und Vieles mehr. Und das openHAB Pludin ist nicht das einzige, welches Du unbedingt haben willst, spätenstens, wenn Du mit Devices zu tun hast, welches JSON sprechen, möchtest Du ein Tool, welches Dir konkret sagt, was Du in JSONPATH eintragen sollst, um Wert x abzufragen. Gleiches gilt sinngemäß natürlich auch für xml...