Verbindung zu HomeAssistant mit MQTT_GENERIC_BRIDGE

Begonnen von edy_80, 25 Oktober 2020, 19:06:36

Vorheriges Thema - Nächstes Thema

daim21

So ich habe nun über msquitto zwei Sensoren und ein Switch aufgenommen.

pi@fhem:~ $ mosquitto_sub -h 192.168.178.72 -u hamqtt -P <password> -t 'fhem/Balkon.Sensor.temp/temperature'
23.1

Temperatur auf dem Display und Fhem ist 3.7

pi@fhem:~ $ mosquitto_sub -h 192.168.178.72 -u hamqtt -P <password> -t 'fhem/KZ.Sensor.temp/temperature'
100

Temperatur auf dem Sensor Display und Fhem ist 20.8

Und wenn ich nun ein Switch schalten will passiert folgendes.
pi@fhem:~ $ mosquitto_sub -h 192.168.178.72 -u hamqtt -P <password> -t 'fhem/PCLicht/state'
on
off


Schalte ich das Switch "PCLicht" aus Fhem heraus erhalte ich on off schalte ich jedoch aus HA das Switch dann sehe ich kein "on off" über mosquitto und das Switch geht nicht an und aus.

So sehen die Devices nun bei mir aus
MQTT Bridge
define mqttGeneric MQTT_GENERIC_BRIDGE mqtt room=HASS
attr mqttGeneric IODev ha_MQTT2
attr mqttGeneric event-aggregator state,temperature,humidity
attr mqttGeneric globalDefaults sub:base=fhem/set pub:base=fhem
attr mqttGeneric icon mqtt_bridge_2
attr mqttGeneric room MQTT
attr mqttGeneric stateFormat in: incoming-count out: outgoing-count devices: device-count
attr mqttGeneric verbose 0


Sensor in Fhem
define Balkon.Sensor.temp HUEDevice sensor 6  IODev=deCONZ
attr Balkon.Sensor.temp userattr mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long structexclude
attr Balkon.Sensor.temp IODev deCONZ
attr Balkon.Sensor.temp alexaName Temperatur Balkon
attr Balkon.Sensor.temp event-min-interval temperature:30
attr Balkon.Sensor.temp group Temperaturen
attr Balkon.Sensor.temp icon temp_temperature
attr Balkon.Sensor.temp model TS0201
attr Balkon.Sensor.temp mqttPublish temperature:topic={"$base/$device/temperature"}
attr Balkon.Sensor.temp room Balkon,HASS,Sensoren,alexa
attr Balkon.Sensor.temp stateFormat temperature C°


Sensor in HA
- platform: mqtt
  name: "BalkonTemperature"
  state_topic: "fhem/Balkon.Sensor.temp/temperature"
  unit_of_measurement: "°C"
  icon: mdi:thermometer
  value_template: '{{ value | round(1) }}'
  expire_after: 4000
  availability_topic: "fhem/connection/status"
  payload_available: "connected"
  payload_not_available: "disconnected"


Switch in Fhem
define PCLicht dummy
attr PCLicht userattr mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long structexclude
attr PCLicht alexaName Pc Licht
attr PCLicht alexaRoom alexa
attr PCLicht devStateIcon an:li_wht_on aus:li_wht_off
attr PCLicht eventMap on:an off:aus
attr PCLicht genericDeviceType switch
attr PCLicht group Beleuchtung
attr PCLicht icon light_office_desk
attr PCLicht mqttForward all
attr PCLicht mqttPublish *:topic={"$base/$device/$name"}
attr PCLicht mqttSubscribe state:stopic={"$base/set"}
attr PCLicht room Arbeitszimmer,HASS,alexa
attr PCLicht setList on off
attr PCLicht webCmd on:off


Switch in HA
- platform: mqtt
  name: PCLicht
  command_topic: "fhem/PCLicht/set"
  payload_on: "on"
  payload_off: "off"
  availability_topic: "fhem/connection/status"
  payload_available: "connected"
  payload_not_available: "disconnected"


Habt ihr eine Idee was ich ändern muss am sub bzw am pub?

Vielen Dank im Vorraus

Beta-User

Die Pfade sollten in FHEM und HASS zusammenpassen, tun sie aber nicht:
attr PCLicht mqttSubscribe state:stopic={"$base/set"}
command_topic: "fhem/PCLicht/set"


Versuch's mal so:
attr PCLicht mqttSubscribe state:stopic={"$base/$device"}
command_topic: "fhem/set/PCLicht"

Außerdem würde ich erst mal ohne eventMap testen, (falls es nicht funktioniert).


Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

daim21

Also nach der Anpassung:
in Fhem
attr PCLicht mqttSubscribe state:stopic={"$base/$device"}
in HA
command_topic: "fhem/set/PCLicht"
Ich Kann ddas Switch über HA schalten und state ändert sich in Fhem und HA.
Schalte ich über Fhem ändert sich state nur in Fhem.
Beim schalten über HA wird folgendes aufgelistet.
pi@fhem:~ $  mosquitto_sub -h 192.168.178.72 -u hamqtt -P <password> -t 'fhem/PCLicht/state'
on
off
on
off
on

Das entfernen von:
attr eventMap on:an off:aus
hat keine Auswirkungen.

Was die Sensoren angeht bin ich ratlos, vorallem da mir der Sensor Balkon gestern kurzzeitig die korrekte Temperatur angezeigt hat.

Hast du eine Idee?

Beta-User

Hmm,

da scheint mir auf der HASS-Seite noch was zu fehlen:
state_topic: "fhem/PCLicht"

Was den Sensor angeht, bin ich erst mal ratlos, ich würde empfehlen, den MQTT-Verkehr mal etwas detaillierter mitzulesen. Sollte so gehen:
mosquitto_sub -h 192.168.178.72 -u hamqtt -P <password> -t 'fhem/#' -v
(Wegen -v für verbose = zeige auch den Topic an müßte ich in die manpage schauen; => bitte selbst verifizieren)

Vermute, dass da schlicht zu selten was gesendet wird oder sonst ein Problem in FHEM/HUEBridge vorliegt.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

daim21

Nachdem ich nun in HA
state_topic: "fhem/PCLicht"
gesetzt habe.
Und über HA das Switch schalte, spring state sofort wieder auf "off".

Hier hat nur das geholfen. Wie früher beschrieben.
ZitatWenn der Schalter hin HA wieder zurück springt, liegt das i.d.R. daran, dass du auf dem .../state keine Rückmeldung über den Schaltvorgang bekommst, der über .../set ausgelöst wurde.
Das kann je nachdem was du da tatsächlich an Hardware schaltest auch normal sein, z.B. bei einfachen Funksteckdosen mit einem oder mehreren Handsendern. Da bekommen die Handsender keine Rückmeldung ob der Schaltbefehl ausgeführt wurde und wie der momentane Schaltzustand gerade ist. Dann kann man nur hoffen dass der Schaltbefehl ausgeführt wurde. Für diesen Fall gibt es in HA den optimistic mode. in der configuration.yaml ergänzt Du dann entweder ein
optimistic: true

Was die Sensoren angeht habe ich langsam auch die Vermutung das die Sensoren zu selten Daten übermitteln.

Das habe ich mitgelesen
pi@fhem:~ $ mosquitto_sub -h 192.168.178.72 -u hamqtt -P <password> -t 'fhem/#' -v
fhem/connection/status connected
fhem/Balkon.Sensor.temp/temperature 23.1
fhem/Balkon.Sensor.temp/battery 10
fhem/Balkon.Sensor.temp/reachable 1
fhem/Balkon.Sensor.temp/batteryPercent 10
fhem/Balkon.Sensor.temp/Balkon.Sensor.temp/reachable 1
fhem/Balkon.Sensor.temp/Balkon.Sensor.temp/battery 30
fhem/Balkon.Sensor.temp/Balkon.Sensor.temp/batteryPercent 30
fhem/Balkon.Sensor.temp/Balkon.Sensor.temp/temperature 6.2
fhem/Balkon.Sensor.hum/humidity 59.4
fhem/Balkon.Sensor.hum/batteryPercent 30
fhem/Balkon.Sensor.hum/reachable 1
fhem/Balkon.Sensor.hum/battery 30
fhem/Balkon.Sensor.hum/Balkon.Sensor.hum/state 10
fhem/Balkon.Sensor.hum/Balkon.Sensor.hum/humidity 67.6
fhem/PCLicht/PCLicht/state on
fhem/PCLicht/set on
fhem/KZ.Sensor.hum/humidity 41.2
fhem/KZ.Sensor.hum/KZ.Sensor.hum 41.2
fhem/KZ.Sensor.hum/KZ.Sensor.hum/humidity 100
fhem/KZ.Sensor.temp/KZ.Sensor.temp/temperature 100
fhem/KZ.Sensor.temp/KZ.Sensor.temp/reachable 1
fhem/KZ.Sensor.temp/KZ.Sensor.temp/batteryPercent 100
fhem/KZ.Sensor.temp/KZ.Sensor.temp/battery 100
fhem/KZ.Sensor.temp/temperature 100
fhem/SZ.Sensor.hum/SZ.Sensor.hum/reachable 1
fhem/SZ.Sensor.hum/SZ.Sensor.hum/battery 100
fhem/SZ.Sensor.hum/SZ.Sensor.hum/batteryPercent 100
fhem/SZ.Sensor.temp/SZ.Sensor.temp/battery 100
fhem/SZ.Sensor.temp/SZ.Sensor.temp/reachable 1
fhem/SZ.Sensor.temp/SZ.Sensor.temp/batteryPercent 100


Mich wundert auch das der z.B. der Batterie Status da auftaucht. Sollte eigentlich nicht oder?

Werde im nächsten Schritt mal den Phoscon Stick updaten.

Vielleicht fällt dir noch etwas auf was ich nicht bedenke bzw. nicht sehe.

Danke nochmal. :)


Beta-User

Bei dem dummy war aber doch weiter
attr PCLicht mqttForward allgesetzt, oder? Dann sollte eigentlich auch die Schaltung zurückgemeldet werden...

Der Batteriestatus ist vermutlich "alt" und eine Folge von früheren "retain"- und "globalPublish"-Werten (jetzt wird hoffentlich auch klarer, warum ich es nicht empfehlenwert finde, das zu setzen ;) ).
Und m.E. sollte man auch von HASS aus nicht mit retain senden, allenfalls mit QoS "once" (aber m.E. in einem TCP/IP-Umfeld nicht mal das).
Irgendwo gab es die Option, alle "retain"-Einträge von mosquitto zu löschen, das solltest du mal tun.

Und dann ggf. einfach etwas mehr Geduld haben, die Dinger senden eigentlich schon so etwa alle Stunde, wenn es keine signifikante Änderung gab... Zum Testen kannst du auch "setreading" verwenden und einfach den alten Wert nochmal setzen, dann sollte auch auf der MQTT-Seite was zu sehen sein.

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

gadget

#81
Zu Deinem Temperatur Sensor: Installier Dir mal  auf deinem Arbeitsrechner den MQTT Explorer http://mqtt-explorer.com/ und verbinde Dich mit dem MQTT-Broker. Mit dem kann man per Mausklick alte Messages, die retain gesetzt haben, ganz einfach löschen. Echt ein geniales Tool für die Experimentierphase. Du kannst mit dem Tool auch vorhergehende Nachrichten kopieren und nochmal per publish verschicken (und ggf. auch vorher editieren). Das ist beim Rumprobieren ungemein nützlich.

Bei einem Temperatursensor spricht aber meiner Meinung nach nichts dagegen, retain zu verwenden, damit man nach einem Neustart sofort den letzten übermittelten Wert bekommt. Ist ja bei fhem auch nicht anders, da bleibt ein reading ja auch stehen bis was Neues kommt.


Bezüglich Switch in HA:

Wenn im MQTT-Dump die Nachricht so auschaut:


fhem/PCLicht/PCLicht/state on


Dann müsste in der HA-Config doch stehen:

state_topic: "fhem/PCLicht/state"

oder ?

Probier ggf. auch mal ein

attr PCLicht event-on-change-reading .*

Sollte eigentilch nicht notwendig sein, Ich hab da was im Hinterkopf, dass sich dummys bezüglich Event-Generieung etwas konterinutitiv verhalten und dass das dagegen hilft.

Grüße, gadget

daim21

#82
Ok danke dir.

Hiermit klappt es nun
state_topic: "fhem/PCLicht/state"
Wenn ich aus Fhem schalte wird nun auch in HA der richtige state gesetzt.  8)

Das einzige was mich optisch bei den HA Switchen noch stört ist, dass das Switch seit dem "State topic" keinen Schieberegler mehr hat sondern diese zwei Blitze für "an" "aus".  ???

Zu den Sensoren:

Das mit dem MQTT Explorer war echt ein guter Tipp.
Habe blitz schnell alle "retain" Einträge löschen können.  ;D

Ich bezweifel aber langsam das ich über MQTT meine Sensoren in HA sauber eingebunden kriege.

Ich warte jetzt mal nach dem löschen der "retains" ab...  :P

Sollte dies wieder nichts bringen werde ich mal probieren, den ConBee Stick an den HA-Rpi anzuschließen und nicht mehr über den Fhem-Rpi.
In Fhem muss ich theoretisch nur die IP des deCONZ Devices anpassen und die Sensoren sollten wieder in Fhem verbunden sein.

Ich werde weiter berichten.

Danke für die ganzen Tipps!



gadget

Zitat von: daim21 am 07 April 2021, 23:35:09
Das einzige was mich optisch bei den HA Switchen noch stört ist, dass das Switch seit dem "State topic" keinen Schieberegler mehr hat sondern diese zwei Blitze für "an" "aus".  ???

Wenn Du - wie im Beispiel in Post #2 - auch noch


    state_on: "on"
    state_off: "off"


verwendest, sollte das nicht mehr auftreten.


Wenn Du einen fhem-Sensor in HA sauber darstellen kannst, ist der Rest dann eigentlich nur noch Copy & Paste. Ich habe um die 40 Stück (Temperatur, Tür&Fenster, Wasser, Bewegung, Presence). Wo ich länger kämpfen musste waren Heizung & Klima und die Rollos sowie der Staubsauger-Roboter (valetudo).

Für Zigbee verwende ich Zigbee2mqtt - das funktioniert sowohl mit HA als auch mit fhem sehr ordentlich, wenn man einen guten Stick hat. In einer reinen HA Umgebung würde ich aber ZHA mit einer sonoff bridge bevorzugen. Dann musst Du aber auch Deine Automationen von fhem nach HA oder NodeRed verlagern. Ich mach das weiterhin lieber in fhem mit DOIF usw.

daim21

Das Switch sieht nun so aus
- platform: mqtt
  name: PCLicht
  command_topic: "fhem/set/PCLicht"
  payload_on: "on"
  payload_off: "off"
  state_topic: "fhem/PCLicht/state"
  state_on: "on"
  state_off: "off"
  availability_topic: "fhem/connection/status"
  payload_available: "connected"
  payload_not_available: "disconnected"
  optimistic: "true"


Habe trotz der state on off s lediglich die zwei Blitze zum ein und aus schalten.  :(

Was die Sensoren angeht.

Hat das löschen der retains geholfen, zumindest kurzfristig.

Ich habe nun über den Tag verteilt über den MQTT Explorer "retains" gelöscht und hatte jeweils kurzfristig korrekte Werte für Temperatur und Luftfeuchte.

Kann man das irgendwie automatisieren? Ich bin mir aber nicht sicher ob das sinnvoll ist.  ???

gadget

Zitat von: daim21 am 08 April 2021, 22:16:31

  command_topic: "fhem/set/PCLicht"
  state_topic: "fhem/PCLicht/state"

Würde ich so machen:

 
  command_topic: "fhem/PCLicht/set"
  state_topic: "fhem/PCLicht/state"


(natürlich auch entsprechend auf fhem-Seite) - sonst wird das schnell unübersichtlich wenn du mehrere Devices hast.

Zitat von: daim21 am 08 April 2021, 22:16:31
 
  optimistic: "true"


Wenn die Rückmeldung fhem -> HA sauber funktioniert stell den optimistic mode auf false (oder lass die Zeile weg, die ist per Default auf false wenn ein state_topic gesetzt ist.

Zitat von: daim21 am 08 April 2021, 22:16:31

Habe trotz der state on off s lediglich die zwei Blitze zum ein und aus schalten.  :(


Das gehört zwar jetzt eigentlich in ein HA Forum, aber wenn Dir das Blitz Symbol nicht gefällt such Dir auf https://materialdesignicons.com/ ein anderes aus.


switch:
- platform: mqtt
  name: PCLicht
  command_topic: "fhem/PCLicht/set"
  payload_on: "on"
  payload_off: "off"
  state_topic: "fhem/PCLicht/state"
  state_on: "on"
  state_off: "off"
  availability_topic: "fhem/connection/status"
  payload_available: "connected"
  payload_not_available: "disconnected"
  optimistic: "false"
  icon: mdi:desk-lamp


Im Anhang ist ein Screenshot wie das dann im Lovelace-Editor aussieht wenn man den auf einer Lovelace-Card (Elemente) verwendet.

Zitat von: daim21 am 08 April 2021, 22:16:31

Was die Sensoren angeht.

Hat das löschen der retains geholfen, zumindest kurzfristig.

Ich habe nun über den Tag verteilt über den MQTT Explorer "retains" gelöscht und hatte jeweils kurzfristig korrekte Werte für Temperatur und Luftfeuchte.

Kann man das irgendwie automatisieren? Ich bin mir aber nicht sicher ob das sinnvoll ist.  ???

Nein, das ist nicht sinnvoll. Das ist nur hilfreich wenn von früheren Experimenten alte Werte rumschwirren und man Tabula Rasa machen will. Schau dir in HA den Verlauf an (Menüpunkt auf der linken Seite, Du kannst da dann filtern). Da siehst Du, was HA bisher empfangen hat und man erkennt auch, ob die Daten regelmäßig ankommen. Ich hab mal einen Screenshot vom Verlauf einem meiner Temperatursensoren angehängt. Das ist ein LaCrosse Sensor, der in fhem an einem https://wiki.fhem.de/wiki/LaCrosseGateway_V1.x hängt und die Messwerte per MQTT an HA sendet.

Beta-User

Das mit "würde ich so machen" ist eine Geschmacksfrage. Wenn man $base entsprechend setzt, ergibt sich das halt automatisch anders.

Ich würde "state" tendenziell direkt auf den Haupttopic umbiegen wollen:
state_topic: "fhem/PCLicht
Vielleicht eine Anmerkung dazu warum ich das anders machen würde: Die bisher existierenden attrTemplate folgen genau diesem Muster.... Soweit das also schon funktiniert, ist es auf der FHEM-Seite schnell und einfach fertig konfiguriert. (Wer mag, kann gerne Vorschläge für Erweiterungen liefern!)
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

gadget

Zitat von: Beta-User am 09 April 2021, 11:41:42
Das mit "würde ich so machen" ist eine Geschmacksfrage. Wenn man $base entsprechend setzt, ergibt sich das halt automatisch anders.


Definitiv Geschacksfrage. Ich hab gern alles was zu einem Device gehört, in einem Leaf, gerade wenn es dann einen ganzen Sack voll Topics zu einem Device gibt wie z.B. bei HVAC.

Beta-User

Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

daim21

#89
So habe ich das Switch nun auf beiden Seiten laufen.
HA
- platform: mqtt
  name: PCLicht
  command_topic: "fhem/set/PCLicht"
  payload_on: "on"
  payload_off: "off"
  state_topic: "fhem/PCLicht/state"
  state_on: "on"
  state_off: "off"
  availability_topic: "fhem/connection/status"
  payload_available: "connected"
  payload_not_available: "disconnected"
  icon: "mdi:desk-lamp"


FHEM
define PCLicht dummy
attr PCLicht userattr mqttAlias:textField-long mqttDefaults:textField-long mqttDisable:both,incoming,outgoing mqttForward:all,none mqttPublish:textField-long mqttSubscribe:textField-long structexclude
attr PCLicht alexaName Pc Licht
attr PCLicht alexaRoom alexa
attr PCLicht devStateIcon an:li_wht_on aus:li_wht_off
attr PCLicht eventMap on:an off:aus
attr PCLicht genericDeviceType switch
attr PCLicht group Beleuchtung
attr PCLicht icon light_office_desk
attr PCLicht mqttForward all
attr PCLicht mqttPublish *:topic={"$base/$device/$name"}
attr PCLicht mqttSubscribe state:stopic={"$base/$device"}
attr PCLicht room Arbeitszimmer,HASS,alexa
attr PCLicht setList on off
attr PCLicht webCmd on:off


ZitatDas gehört zwar jetzt eigentlich in ein HA Forum, aber wenn Dir das Blitz Symbol nicht gefällt such Dir auf https://materialdesignicons.com/ ein anderes aus.

Ich habe nicht das Entity Icon gemeint sondern die "An Aus" Schaltfläche. Und die zwei Blitze verschwinden sobald der "optimistic mode" entfernt wird.  :D
Somit ist das Thema "Switches" für meine Umgebung erfolgreich umgesetzt.

Vielen Dank an @Beta-User und @gadget !!!!!

Die Sensoren werde ich nun beobachten und wie schon erwähnt den DeCONZ Stick an HA anschließen und umgekehrt an FHEM und HA anbinden.

Grüße
Daim