[gelöst] Einbinden von ENVIRO Wetterstation in FHEM via MQTT

Begonnen von Borkk, 06 Juli 2020, 13:41:08

Vorheriges Thema - Nächstes Thema

Borkk

Hallo Zusammen,

ich habe nun 3 4 Tage versucht mich mit Hilfe verschiedenster Wiki, Foren und sonstigen Einträgen an das Thema MQTT heranzuwagen. Leider springt der Funkten noch nicht über... evtl. kann mir einer ein wenig auf die Sprünge helfen.

Ich würde gerne die Messwerte einer Enviro Messstation in FHEM einlesen. Das Teil steckt auf einem Pi Zero und wenn man eines der Python examples startet, wirft es Messwerte im Sekundentakt aus. (https://learn.pimoroni.com/tutorial/sandyj/getting-started-with-enviro-plus).

Mit dieser Anpassung (https://github.com/hotplot/enviroplus-mqtt) habe ich (hoffentlich) das Teil dazu gebracht MQTT Events zu senden. Die Config habe ich wie folgt angelegt:


[Unit]
Description=Enviro+ MQTT Logger
After=network.target

[Service]
ExecStart=/usr/bin/python3 /usr/src/enviroplus-mqtt/src/main.py -h 192.168.23.119 -p 1883 --prefix fhem/enviro --client-id enviro --interval 30
WorkingDirectory=/usr/src/enviroplus-mqtt
StandardOutput=inherit
StandardError=inherit
Restart=always
User=pi

[Install]
WantedBy=multi-user.target


Auf 192.168.23.119 läuft ein leeres Test FHEM indem ich einen MQTT2_SERVER angelegt habe. Dort scheint auch was anzukommen, da das Reading nrclients immer zwischen 1 und 0 umschaltet. Im Log kommt das an:


2020.07.06 12:43:43 4: Connection accepted from myBroker_192.168.23.118_45681
2020.07.06 12:43:43 5: in:  CONNECT: (16)(18)(0)(4)MQTT(4)(2)(0)<(0)(6)enviro
2020.07.06 12:43:43 4:   myBroker_192.168.23.118_45681 cid:enviro CONNECT V:4 keepAlive:60
2020.07.06 12:43:43 5: out: CONNACK:  (2)(0)(0)
2020.07.06 12:43:43 4: Connection closed for myBroker_192.168.23.118_45681: EOF


Und jetzt bin ich lost... Brauche ich nun einen MQTT2_Device, oder ein MQTT2_Client oder MQTT oder MQTT_bridge?!?!

Wenn ich das richtig verstanden habe müsste ENVIRO z.B. über das Topic fhem/enviro/temperatur den Temp Wert über MQTT an den Broker senden.

Kann ich diese Kommunikation irgendwo sehen (ohne Wireshark ;-)) ?

Wie bekomme ich die Messwerte in ein FHEM Gerät um sie entsprechend weiter zu verarbeiten?

Wäre nett wenn mir jemand helfen könnte. Ich hoffe meine Beschreibung ist für den Moment ausreichend.


Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

Otto123

#1
Hi,

Dein MQTT2_Server sollte eigentlich automatisch ein MQTT2_DEVICE anlegen. Hast Du bei dem zusätzlich was eingestellt?  Zeig am Besten ein list von dem MQTT2_Server.
Ich hatte hier mal meine Anfänge dokumentiert, vielleicht hilft es Dir.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Beta-User

Also:
MMn hast du bis dahin - im Prinzip - alles richtig gemacht. MQTT2_SERVER steht auch per default auf "autocreate simple", was dann - ein aktives Gerät des TYPE autocreate vorausgesetzt - dazu führt, dass alle Infos/mqtt-publishes, die zu einer CID gehören jeweils in einem eigenen MQTT2_DEVICE landen.

Ergo ist das einzige Problem bis dahin, dass dein MQTT-Dienst bisher scheinbar nichts publisht, jedenfalls war aus dem Schnippsel nichts zu erkennen... Würde aber (leeres FHEM?) eher auf ein fehlendes TYPE=autocreate tippen?

Ansonsten kann man den MQTT-Verkehr auch beim MQTT2_SERVER mit RAW-Events sichtbar machen, sowas wie eine Kurzanleitung steht in dem "Praxisbeispielen" im Wiki.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Borkk

Hallo Otto,

wie gesagt ich stehe mit MQTT ganz am Anfang :-)

Internals:
   CFGFN     
   CONNECTS   571
   DEF        1883 global
   FD         10
   FUUID      5f030911-f33f-64e7-99de-ef00a5e426d729bd
   NAME       myBroker
   NR         14072
   PORT       1883
   STATE      Initialized
   TYPE       MQTT2_SERVER
   READINGS:
     2020-07-06 13:51:17   nrclients       -1
     2020-07-06 13:20:49   state           Initialized
   clients:
   retain:
Attributes:
   autocreate simple
   room       MQTT
   verbose    5
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

Beta-User

"autocreate simple" kannst du gleich wieder löschen. Das entspricht zwar dem default, Rudi empfiehlt aber gerne ausdrücklich, das (bei SERVER) nicht zu setzen (beim CLIENT wäre das was anderes).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Otto123

Wie Beta-User vermutet - da scheint er nichts weiter zu senden/publishen sondern  macht nur connect.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Borkk

Zitat von: Beta-User am 06 Juli 2020, 13:52:31
Ergo ist das einzige Problem bis dahin, dass dein MQTT-Dienst bisher scheinbar nichts publisht, jedenfalls war aus dem Schnippsel nichts zu erkennen... Würde aber (leeres FHEM?) eher auf ein fehlendes TYPE=autocreate tippen?

Den verdacht habe ich auch, das ENVIRO zwar irgendwas schickt aber ich weiss nicht was. Ich schau mit das mit dem RAW mal an.
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

Beta-User

Wie wäre es, erst mal zu schauen, ob das autocreate vorhanden ist:
list TYPE=autocreate
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Borkk

Ist so vorhanden wie nach eine frischen fhem installation

Internals:
   FUUID      5f025301-f33f-64e7-f0c6-8bfb549d06e814e0
   NAME       autocreate
   NOTIFYDEV  global
   NR         8
   NTFY_ORDER 50-autocreate
   STATE      active
   TYPE       autocreate
Attributes:
   filelog    ./log/%NAME-%Y.log
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

Beta-User

OK, dann scheint also wirklich bisher einfach noch nichts gesendet worden zu sein...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

rudolfkoenig

Ich habe die Bits aus dem verbose 5 Log mit dem Spec abgeglichen: ich sehe keinen Fehler: das Python Script schliesst die Verbindung ohne eine Begruendung direkt nach dem ersten Paketwechsel.

Meldet das Skript einen Fehler?
Funktioniert es mit mosquitto?

Borkk

Zitat von: rudolfkoenig am 06 Juli 2020, 14:48:29
Ich habe die Bits aus dem verbose 5 Log mit dem Spec abgeglichen: ich sehe keinen Fehler: das Python Script schliesst die Verbindung ohne eine Begruendung direkt nach dem ersten Paketwechsel.

Meldet das Skript einen Fehler?
Funktioniert es mit mosquitto?

Wenn ich den service anhalte und das script auf der Console starte:
python main.py -h 192.168.23.119 -p 1883 --prefix fhem/enviro --client-id enviro --interval 60

Bekomme ich in der tat eine Fehlermeldung:
File "main.py", line 49
    sys.exit(f"Connecting to the MQTT server failed: {logger.connection_error}")
                                                                              ^


Es kommt aber dann auch nichts bei MQTT2_Server auf FHEM an. (Kein Log Eintrag)
Mosquito habe ich noch noch getestet, wollte es eigentlich so schlank wie möglich realisieren.

Liege ich denn mit meinem Aufruf richtig? Evtl. habe ich da einen Denkfehler.

main.py -h 192.168.23.119 -p 1883 --prefix fhem/enviro --client-id enviro --interval 60

  usage: main.py -h HOST [-p PORT] [-U USERNAME] [-P PASSWORD] [--prefix PREFIX]
              [--client-id CLIENT_ID] [--interval INTERVAL] [--delay DELAY]
              [--use-pms5003] [--help]

  optional arguments:
  -h HOST, --host HOST  the MQTT host to connect to
  -p PORT, --port PORT  the port on the MQTT host to connect to
  -U USERNAME, --username USERNAME
                      the MQTT username to connect with
  -P PASSWORD, --password PASSWORD
                      the password to connect with
  --prefix PREFIX       the topic prefix to use when publishing readings, i.e.
                      'lounge/enviroplus'
  --client-id CLIENT_ID
                      the MQTT client identifier to use when connecting
  --interval INTERVAL   the duration in seconds between updates
  --delay DELAY         the duration in seconds to allow the sensors to
                      stabilise before starting to publish readings
  --use-pms5003         if set, PM readings will be taken from the PMS5003
                      sensor
  --help                print this help message and exit
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

Otto123

Schau doch mal in meinen Link da steht alles in den ersten Zeilen. Du brauchst nur die  mosquitto-clients (keinen Server installieren!)
Dann machst Du eine Zeile in der Art
mosquitto_pub -h 192.168.23.119 -i enviro1 -t fhem/enviro/temperature -m 22
Und schaust was passiert.

Dann wüsstest Du ob die FHEM Seite läuft ;)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Borkk

hmm, wenn ich das script so aufrufe:
/usr/bin/python3 /usr/src/enviroplus-mqtt/src/main.py -h 192.168.23.119 -p 1883 --prefix fhem/enviro --client-id enviro --interval 60

bekomme ich das...

Traceback (most recent call last):
  File "/usr/src/enviroplus-mqtt/src/main.py", line 65, in <module>
    main()
  File "/usr/src/enviroplus-mqtt/src/main.py", line 40, in main
    logger.update(publish_readings=False)
  File "/usr/src/enviroplus-mqtt/src/logger.py", line 99, in update
    self.samples.append(self.take_readings())
  File "/usr/src/enviroplus-mqtt/src/logger.py", line 76, in take_readings
    gas_data = gas.read_all()
  File "/usr/local/lib/python3.7/dist-packages/enviroplus-0.0.3-py3.7.egg/enviroplus/gas.py", line 79, in read_all
  File "/usr/local/lib/python3.7/dist-packages/enviroplus-0.0.3-py3.7.egg/enviroplus/gas.py", line 50, in setup
  File "/usr/local/lib/python3.7/dist-packages/ads1015-0.0.5-py3.7.egg/ads1015/__init__.py", line 167, in set_mode
    self._ads1015.set('CONFIG', mode=value)
  File "/usr/local/lib/python3.7/dist-packages/i2cdevice-0.0.6-py3.7.egg/i2cdevice/__init__.py", line 215, in set
    self.read_register(register)
  File "/usr/local/lib/python3.7/dist-packages/i2cdevice-0.0.6-py3.7.egg/i2cdevice/__init__.py", line 183, in read_register
    self.values[register.name] = self._i2c_read(register.address, register.bit_width)
  File "/usr/local/lib/python3.7/dist-packages/i2cdevice-0.0.6-py3.7.egg/i2cdevice/__init__.py", line 283, in _i2c_read
    for x in self._i2c.read_i2c_block_data(self._i2c_address, register, bit_width // self._bit_width):
OSError: [Errno 121] Remote I/O error


Ich glaube das Problem liegt erst mal an der MQTT Geschichte auf dem ENVIRO. Ich kann leider kein Python, werde wohl mal den Entwickler anschreiben...
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)

Borkk

Zitat von: Otto123 am 06 Juli 2020, 15:30:13
Schau doch mal in meinen Link da steht alles in den ersten Zeilen. Du brauchst nur die  mosquitto-clients (keinen Server installieren!)
Dann machst Du eine Zeile in der Art
mosquitto_pub -h 192.168.23.119 -i enviro1 -t fhem/enviro/temperature -m 22
Und schaust was passiert.

Dann wüsstest Du ob die FHEM Seite läuft ;)

Danke Otto, das versuche ich erst mal. Ich melde mich wenn ich weitergekommen bin.
Aber mal abgesehen von MQTT, das ENVIRO Modul ist echt klasse, kann sogar Feinstaub messen. Wäre doch mal ein Überlegung wert es direkt in FHEM zu unterstützen. ;) Aber so lerne ich mal wie MQTT arbeitet, ist auch gut, wollte ich mir schon lange man anschauen.
Proxmox & Docker:  FHEM, Raspberrymatic, ConBee3, Nginx ReverseProxy, ConfigDB, MQTT, NodeRed, InfluxDB, Grafana, HmIP Akt- /Sensoren, Shelly´s, Alexa, ASC, Gardena, E-Paper, FritzBox; (Tado° x), iBeacon, OLED ; ESP32/8266, SwitchBot ... (Netatmo & Homekit über HomeAssistant)