Verbindung zu HomeAssistant mit MQTT_GENERIC_BRIDGE

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

Vorheriges Thema - Nächstes Thema

Dominik83

Noch eine Ergänzung,

ich habe nochmal meine Screenshots durchforstet. Auch als ich noch das global publish auf der MGB definiert hatte gab es von den Rollos nicht einen einzigen publish. Alle anderen Devices waren da.


Beta-User

Zitat von: Dominik83 am 27 April 2022, 23:01:23
Irgendwie publishen die Dooya Devices aber gar nichts.
Das kommt mir komisch vor, jedenfalls auf die Schnelle ist im Dooya-Code kein Anhaltspunkt zu erkennen, warum das nicht klappen sollte.

Gibt es denn Events (im Event-Monitor), wenn du schaltest? Wenn nein, ist es "relativ klar": MGB ist bzgl. publish von Aktualisierungen einfach nur ein Event-Handler - keine Events, kein publish... Das wäre dann im dazu passenden Forenbereich zu klären.
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

Dominik83

Hi,

das ist das Problem - keine Events der Devices im Event Monitor.

Ich suche ...

Dominik83

Hi,

noch ein Update: Habe es nun mit einem DOIF und Dummies gelöst. Nicht die schönste Lösung aber funktioniert!

Danke nochmal für die Unterstützung.


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

Mark

Hallo zusammen,

ich versuche die Daten von einem Strommesser (Revolt_71a6) per MQTT an Homeassitant zu senden.

Einen zusätzlichen MQTT Server, wie in diesem Thread beschrieben, möchte ich nicht verwenden,
sondern einfach den in fehm enthaltenen MQTT2_SERVER.

Sende ich einen Test mit Topic (123) über den MQTT2_FHEM_Server an Homeassistant kommt dieser bei Homeassitant an.
Nachrichten von Homeassitant werden am FHEM Server ebenfalls empfangen.

Die Daten vom Strommesser (Revolt_71a6) sehe ich im MQTT traffic als sent, diese kommen aber nicht bei Homeassitant an.

Hat jemand vielleicht einen einen Tip für mich.

Danke

Gruß Mark

FHEM Version:
fhem.pl 25997 2022-04-25 18:39:55Z rudolfkoenig

MQTT_GENERIC_BRIDGE Version:
version 1.4.4 by hexenmeister
$Id: 10_MQTT_GENERIC_BRIDGE.pm 25117 2021-10-25 11:05:19Z hexenmeister $


MQTT traffic:
RCVD: 123 Hallo von Homeassistant
SENT: /Revolt_71a6/voltage/voltage 231
SENT: /Revolt_71a6/current/current 0.56
SENT: /Revolt_71a6/power/power 87.9
SENT: /Revolt_71a6/pf/pf 0.67
SENT: /Revolt_71a6/current/current 0.57
SENT: /Revolt_71a6/power/power 89.1
SENT: /Revolt_71a6/pf/pf 0.68
RCVD: shellies/shellyplug-s-0CDAD9/relay/0/power 0.00



list MQTT2_FHEM_Server:
Internals:
   CONNECTS   7
   Clients    :MQTT2_DEVICE:MQTT_GENERIC_BRIDGE:
   ClientsKeepOrder 1
   DEF        1883 global
   FD         86
   FUUID      5e45b3c2-f33f-a0b3-d691-a162068318b09ed0
   NAME       MQTT2_FHEM_Server
   NR         779
   PORT       1883
   STATE      Initialized
   TYPE       MQTT2_SERVER
   MatchList:
     1:MQTT2_DEVICE ^.
     2:MQTT_GENERIC_BRIDGE ^.
   READINGS:
     2022-05-06 06:00:06   RETAIN          {"fhem/Revolt_71a6/.lastenergy/.lastenergy":"467.79","fhem/Revolt_71a6/current/current":"0.58","fhem/Revolt_71a6/energy/energy":"467.79","fhem/Revolt_71a6/power/power":"89.8","fhem/Revolt_71a6/statEnergy/statEnergy":"Hour: 0.07 Day: 1.90 Month: 8.27 Year: 268.23","fhem/Revolt_71a6/statEnergyDay/statEnergyDay":"1.90","fhem/Revolt_71a6/statEnergyHour/statEnergyHour":"0.07","fhem/Revolt_71a6/statEnergyMonth/statEnergyMonth":"8.27","fhem/Revolt_71a6/statEnergyYear/statEnergyYear":"268.23","tele/Steckdose_2/LWT":"Online","tele/tasmota102/LWT":"Online"}
     2022-05-06 06:02:58   lastPublish     123:Test fhem
     2022-05-06 06:00:51   nrclients       7
     2022-05-06 05:59:39   state           Initialized
   clients:
     MQTT2_FHEM_Server_192.168.11.166_43411 1
     MQTT2_FHEM_Server_192.168.110.102_60653 1
     MQTT2_FHEM_Server_192.168.110.112_53521 1
     MQTT2_FHEM_Server_192.168.110.130_6493 1
     MQTT2_FHEM_Server_192.168.110.131_22239 1
     MQTT2_FHEM_Server_192.168.110.132_4515 1
     MQTT2_FHEM_Server_192.168.110.160_51925 1
   retain:
     fhem/Revolt_71a6/.lastenergy/.lastenergy:
       ts         1651809580.54848
       val        467.79
     fhem/Revolt_71a6/current/current:
       ts         1651809580.54848
       val        0.58
     fhem/Revolt_71a6/energy/energy:
       ts         1651809580.54848
       val        467.79
     fhem/Revolt_71a6/power/power:
       ts         1651809580.54848
       val        89.8
     fhem/Revolt_71a6/statEnergy/statEnergy:
       ts         1651809580.54848
       val        Hour: 0.07 Day: 1.90 Month: 8.27 Year: 268.23
     fhem/Revolt_71a6/statEnergyDay/statEnergyDay:
       ts         1651809580.54848
       val        1.90
     fhem/Revolt_71a6/statEnergyHour/statEnergyHour:
       ts         1651809580.54848
       val        0.07
     fhem/Revolt_71a6/statEnergyMonth/statEnergyMonth:
       ts         1651809580.54848
       val        8.27
     fhem/Revolt_71a6/statEnergyYear/statEnergyYear:
       ts         1651809580.54848
       val        268.23
     tele/Steckdose_2/LWT:
       ts         1651809606.81993
       val        Online
     tele/tasmota102/LWT:
       ts         1651809606.77573
       val        Online
Attributes:
   autocreate simple
   clientOrder MQTT2_DEVICE MQTT_GENERIC_BRIDGE
   rePublish  0
   room       00_devices,02_MQTT2_Devices
   verbose    1


list mqttGeneric:
Internals:
   DEF        fhem_ Revolt_71a6
   FUUID      62703058-f33f-a0b3-1143-560988d95b2b52f7
   IODev      MQTT2_FHEM_Server
   NAME       mqttGeneric
   NR         979
   NTFY_ORDER 70-mqttGeneric
   STATE      ???
   TYPE       MQTT_GENERIC_BRIDGE
   devspec    Revolt_71a6
   prefix     fhem_
   READINGS:
     2022-05-06 05:59:41   IODev           MQTT2_FHEM_Server
     2022-05-05 15:54:15   attrTemplateVersion 20211208_MQTT
     2022-05-06 05:59:41   device-count    1
     2022-05-06 05:59:40   incoming-count  0
     2022-05-06 06:48:12   outgoing-count  342
     2022-05-06 06:48:12   transmission-state outgoing publish sent
     2022-05-06 05:59:40   updated-reading-count 0
     2022-05-06 05:59:40   updated-set-count 0
   devices:
     Revolt_71a6:
       :alias:
       :publish:
         *:
           mode       R
           topic      {"$base/$device/$name/$reading"}
       :subscribe:
   globalDeviceExcludes:
   globalReadingExcludes:
   globalTypeExcludes:
     pub:
       FHEMWEB    *
       Global     *
       MQTT       transmission-state
       MQTT_BRIDGE transmission-state
       MQTT_DEVICE transmission-state
       MQTT_GENERIC_BRIDGE *
       telnet     *
     sub:
       FHEMWEB    *
       Global     *
       MQTT       transmission-state
       MQTT_BRIDGE transmission-state
       MQTT_DEVICE transmission-state
       MQTT_GENERIC_BRIDGE *
       telnet     *
Attributes:
   IODev      MQTT2_FHEM_Server
   room       00_devices,02_MQTT2_Devices


list Revolt_71a6:
Internals:
   CUL433_MSGCNT 134
   CUL433_RAWMSG r71a6e5003732034d42b7e0
   CUL433_RSSI -24
   CUL433_TIME 2022-05-06 06:48:12
   DEF        71a6
   FUUID      5c46f961-f33f-a0b3-e790-e061c2eae95d109d
   ID         71a6
   IODev      CUL433
   LASTInputDev CUL433
   MSGCNT     134
   NAME       Revolt_71a6
   NR         507
   STATE      P: 84.5 E: 470.72 V: 229 C: 0.55 Pf: 0.66
   TYPE       Revolt
   READINGS:
     2022-05-06 05:59:40   IODev           CUL433
     2018-10-22 08:45:07   avgpower        66.25
     2022-05-06 06:48:12   current         0.55
     2022-05-06 06:48:12   energy          470.72
     2022-05-06 06:41:15   energy_avg_day  470.4
     2022-05-06 06:41:15   energy_avg_month 464.2
     2022-05-06 06:41:15   energy_cum_day  11325411.67
     2022-05-06 06:41:15   energy_cum_month 251838921.07
     2022-05-06 06:41:15   energy_max_day  470.7
     2022-05-06 06:41:15   energy_max_month 470.7
     2022-05-06 00:05:10   energy_min_day  470.1
     2022-05-01 00:00:28   energy_min_month 459.5
     2022-05-06 06:48:12   frequency       50
     2022-05-06 06:48:12   pf              0.66
     2022-05-06 06:48:12   power           84.5
     2022-05-06 06:48:12   statEnergy      Hour: 0.07 Day: 0.61 Month: 11.20 Year: 271.16
     2022-05-06 06:48:12   statEnergyDay   0.61
     2022-05-05 23:59:55   statEnergyDayLast 2.11
     2022-05-06 06:48:12   statEnergyHour  0.07
     2022-05-06 05:59:55   statEnergyHourLast 0.09
     2022-05-06 05:59:55   statEnergyLast  Hour: 0.09 Day: 2.11 Month: 63.17 Year: 136.39
     2022-05-06 06:48:12   statEnergyMonth 11.20
     2022-04-30 23:59:57   statEnergyMonthLast 63.17
     2022-05-06 06:48:12   statEnergyYear  271.16
     2021-12-31 23:59:55   statEnergyYearLast 136.39
     2022-05-06 06:48:12   state           active
     2022-05-06 06:48:12   voltage         229
   helper:
     _98_statistics myStatDevice
Attributes:
   IODev      CUL433
   comment    power:1,avgpower
dblog exclude 
current,energy,pf,state,.lastenergy,voltage,frequency

event-aggregator power:180:linear:mean


   event-on-change-reading .*
   fhem_Publish *:topic={"$base/$device/$name/$reading"}
   room       1.Verbrauch,Revolt
   stateFormat P: power E: energy V: voltage C: current Pf: pf
   userattr   fhem_Alias:textField-long fhem_Defaults:textField-long fhem_Disable:both,incoming,outgoing fhem_Forward:all,none fhem_Publish:textField-long fhem_Subscribe:textField-long

Beta-User

Zeigst du bitte auch noch die Einstellungen auf der HomeAssistant-Seite? Wenn ich das richtig verstanden habe, muss man dort erst angeben, was man abonnieren will (yaml editieren).

Falls du da was erstellen mußt, solltest du m.E. vorab noch die Vaiable $base belegen (unterschiedlich in Sende- und Empfangsrichtung):
attr mqttGeneric globalDefaults sub:base=fhem/set pub:base=fhem


Und für den Fall, dass du irgendwann mal was aus HomeAssistant heraus schalten willst, musst du auch die clientOrder ändern:
attr MQTT2_FHEM_Server clientOrder MQTT_GENERIC_BRIDGE MQTT2_DEVICE
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

Mark

Hallo und danke für den Hilfeversuch. Auf der HomeAssistant-Seite gibt es nur die MQTT-Optionen, siehe Screenshot. In der yaml habe ich nichts editiert und dort steht auch nichts zum Thema mqtt.
Die Variable $base zu belegen klingt gut. Wenn ich es richtig verstehe, handelt es sich dabei um einen Prefix und nicht um ein Topic?
Laut Doku hört HomeAssitant per Default auf das Topic "homeassistant".
Kann man vielleicht das sent topic bei FHEM angeben, so wie beim testen des MQTT2_SERVER?

Beta-User

Zitat von: Mark am 06 Mai 2022, 16:30:03
Hallo und danke für den Hilfeversuch. Auf der HomeAssistant-Seite gibt es nur die MQTT-Optionen, siehe Screenshot. In der yaml habe ich nichts editiert und dort steht auch nichts zum Thema mqtt.
Also:
- FHEM übermittelt keine "auto-Konfigurationsdaten" (nennt sich glaube ich autodiscovery)
- Kann sein, dass HomeAssistant den "homeassistant"-Topic automatisch abonniert, aber wenn, dann solltest du das so lassen, und ggf. überlegen, ob du in FHEM diesen "prefix" (als "$base") vergibst. Ich _glaube_ aber, das ist nicht der richtige Weg, denn das ist mAn. für autodiscovery gedacht, nicht für die eigentlichen Nutzdaten.

Ich kenne nur das, was die User hier posten, und das sieht dann z.B. so aus:
Zitat von: Dominik83 am 24 April 2022, 23:18:30
In der HA Conf steht folgendes:

switch:
  - platform: mqtt
    name: demoswitch
    command_topic: "fhem/demoswitch/set"
    state_topic: "fhem/demoswitch/state"
    payload_on: "on"
    payload_off: "off"
    state_on: "on"
    state_off: "off"
    #availability_topic: "fhem/connection/status"
    #payload_available: "connected"
    #payload_not_available: "disconnected"
    optimistic: true

  - 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"
    icon: "mdi:desk-lamp"


Ergo meine ich, dass dir da was vergleichbares fehlt und du das händisch konfigurieren musst (wie auch immer die Datei heißt...).

Zitat
Die Variable $base zu belegen klingt gut. Wenn ich es richtig verstehe, handelt es sich dabei um einen Prefix und nicht um ein Topic?
Laut Doku hört HomeAssitant per Default auf das Topic "homeassistant".
Es handelt sich um eine Variable, die man dann bei den "untergeordneten Devices" in FHEM nutzen kann, und zwar u.A. eben als Teil des Topics. Würd das in diesem Fall auch als "Prefix" bezeichnen, der Mechanismus an sich ist aber universeller, und dein mqttPublish-Attribut enthält die Variable ja auch schon...

(Ergo: just do it, ich hatte mir schon was dabei gedacht ::) ).
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

Mark

Zitat(Ergo: just do it, ich hatte mir schon was dabei gedacht ::) ).
Hatte ich doch direkt gemacht  :D

Zitat- FHEM übermittelt keine "auto-Konfigurationsdaten" (nennt sich glaube ich autodiscovery)
Ahh, okay. Dann kann ich ja lange warten...

Habe jetzt im Homassistant yaml manuell einen Sensor angelegt.

sensor:
  - platform: mqtt
    state_topic: "fhem/Revolt_71a6/power/power"
    name: revolt
    unit_of_measurement: "W"
    device_class: "power"
    state_class: "measurement"


Und siehe da, die Werte kommen heile an.

Klasse, das ist ein Anfang.

Vielen Dank für die Hilfe.

jazzor

Hallo zusammen,

ich habe mithilfe dieses Forums es geschafft, meine 15 Rollos von Fhem aus nach Homeassistant durchzuschleifen und auch zu steuern.

Allerdings stelle ich nun fest, dass fhem bei aktiviertem MQTT2_CLIENT sehr träge reagiert. Bspw. wirft alexa nun Fehlermeldungen wie lexa: read: end of file reached while sysread.
Vorher konnte ich diese Verhalten nicht beobachten. Hier einmal die Definitionen meiner MQTT2 Geräte:
defmod ha_MQTT2 MQTT2_CLIENT 192.168.0.20:1883
attr ha_MQTT2 clientId mqtt_fhem
attr ha_MQTT2 keepaliveTimeout 60
attr ha_MQTT2 msgAfterConnect -r fhem/connection/status connected
attr ha_MQTT2 msgBeforeDisconnect -r fhem/connection/status disconnected
attr ha_MQTT2 qosMaxQueueLength 100
attr ha_MQTT2 room MQTT
attr ha_MQTT2 username mqtt_fhem

setstate ha_MQTT2 opened
setstate ha_MQTT2 2022-05-28 23:02:00 state opened


defmod mqttGeneric MQTT_GENERIC_BRIDGE mqtt room=HASS
attr mqttGeneric IODev ha_MQTT2
attr mqttGeneric globalDefaults sub:qos=0 pub:qos=0 retain=1 base={"fhem/$device"}
attr mqttGeneric globalPublish *:topic={"fhem/$device/$reading"}
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

setstate mqttGeneric in: 4238421 out: 22445 devices: 17
setstate mqttGeneric 2022-05-28 23:02:00 device-count 17
setstate mqttGeneric 2022-05-29 10:41:30 incoming-count 4238421
setstate mqttGeneric 2022-05-29 08:43:05 outgoing-count 22445
setstate mqttGeneric 2022-05-29 08:43:05 transmission-state outgoing publish sent
setstate mqttGeneric 2022-03-12 21:17:15 updated-reading-count 0
setstate mqttGeneric 2022-05-28 23:59:18 updated-set-count 103



Fällt euch hier auf den ersten Blick etwas auf? Ich stehe ein bisschen auf dem Schlauch. Würde mich über Hilfe freuen :)

rudolfkoenig

ZitatAllerdings stelle ich nun fest, dass fhem bei aktiviertem MQTT2_CLIENT sehr träge reagiert.
Woher stammt die Vermutung, dass die Ursache MQTT2_CLIENT ist?

Existiert das Problem auch:
- wenn qosMaxQueueLength nicht gesetzt ist?
- wenn MQTT2_CLIENT mit einem nicht vorhandenen MQTT Server konfiguriert ist?

Wieviele Events pro Minute muss das System verarbeiten, wieviele FHEM-Definitionen gibt es und auf welchem Hardware laeuft FHEM?
Sieht man zeitliche Aussetzer im "attr global verbose 5" FHEM-log?

Beta-User

Kling nach einer Schleife...?!? sub und pub sollten unterschiedlich sein, globalPublish ist nur zu empfehlen, wenn man weiß, was es bewirkt...
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

jazzor

#118
Zitat von: rudolfkoenig am 29 Mai 2022, 11:22:07
Woher stammt die Vermutung, dass die Ursache MQTT2_CLIENT ist?

Existiert das Problem auch:
- wenn qosMaxQueueLength nicht gesetzt ist?
- wenn MQTT2_CLIENT mit einem nicht vorhandenen MQTT Server konfiguriert ist?

Wieviele Events pro Minute muss das System verarbeiten, wieviele FHEM-Definitionen gibt es und auf welchem Hardware laeuft FHEM?
Sieht man zeitliche Aussetzer im "attr global verbose 5" FHEM-log?
Sofern mein MQTT2_CLIENT nicht verbunden ist, reagiert das system flott.
Die beiden anderen Punkte konnte ich gerade mangels Zeit nicht ausreichend testen. Wie bekomme ich denn raus, wieviele Events pro Minute hier ankommen? Fhem läuft auf einem Pi3B, bisher völlig ohne Probleme.
Zitat von: Beta-User am 29 Mai 2022, 12:00:09
Kling nach einer Schleife...?!? sub und pub sollten unterschiedlich sein, globalPublish ist nur zu empfehlen, wenn man weiß, was es bewirkt...
Was ist denn die alternative zu global publish? Habe nur 15 Rollos und ein Thermostatdummy, die gepusht bzw. auf die Befehle gehorcht werden soll. Horche ich vielleicht auf alles? Im Log tauchen nämlichnauch Sachen auf, die eigentlich nur an Homeassistant gehen sollen (Shellyklingel bspw.)

Hier jedenfalls mal das log mit verbose 5:
Edit: Nun im Anhang.

Beta-User

Zitat von: jazzor am 29 Mai 2022, 12:43:27
Was ist denn die alternative zu global publish?
mqttPublish an den Geräten _konkret_ und _so_ zu setzen, dass _nur_ das raus geht, was auch interessiert. Bei 22k publishes (dein list) stellt sich die Frage, über welchen Zeitraum das zusammengekommen ist...

Zitat
Habe nur 15 Rollos und ein Thermostatdummy, die gepusht bzw. auf die Befehle gehorcht werden soll. Horche ich vielleicht auf alles? Im Log tauchen nämlichnauch Sachen auf, die eigentlich nur an Homeassistant gehen sollen (Shellyklingel bspw.)
Das ist ein (etwas) anderes Problem: Du hast  (@MQTT2_CLIENT)
a) keine Einschränkung der subscriptions, und
b) keine geänderte clientOrder
=> es gibt ein MQTT2_DEVICE, das "alles" bekommt und auch entsprechend viele Events erzeugt (dein list: 4,2Mio Events...). Stellt sich wieder die Frage, in welchem Zeitraum...

(Thermostatdummy klingt auch gruselig, und das log wäre in einem Anhang besser aufgehoben gewesen).
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