Inbetriebnahme von node-wifi-mqtt-homie mit Hiveeyes Anbindung

mosquitto
mqtt

#1

Hallo zusammen,

ich habe heute meine 2. Waage endlich mal finalisiert und unterm Volk in Betrieb genommen. Eigentlich läuft der Knoten schon seit 3 Tagen, aber ich habe mit @Andreas (Danke) den Code noch Hiveeyes-kompatibel gemacht, um die Daten auch hier auf die Plattform schicken zu können. Zusätzlich zu diesem Artikel könnt Ihr mehr Details auch bei mir unter ESP8266 Stockwaage – erste Eindrücke nachlesen.

Hier sind die Daten zu sehen:

Die Hardware ist sehr ähnlich zu Clemens Huzzah basiertem Setup, (ESP8266, HX711, DS18B20) jedoch gibt es zwei wesentliche Unterschiede.

1. Firmware auf Basis von Homie-esp8266

Die Firmware basiert auf dem Homie-esp8266 Framework, dass einen sehr durchdachten Ansatz für allerlei IOT-Anbindung und Management der Sensorknoten mitbringt, so dass ich dies auch schon in der Heim-Automatisierung einsetze, unter anderem habe ich mir damit eine Automatisierung/Überwachung meines Honigauftau-Schranks realisiert.

Ihr findet sie im Hiveeyes GitHub Repository unter node-wifi-mqtt-homie (für die Variante mit Stromanschluss) und unter node-wifi-mqtt-homie-battery als Ultra-Low Power Variante für den Akku-/Batteriebetrieb. Unter node-wifi-mqtt-homie README findet Ihr noch eine entsprechende Dokumentation dazu.

Weitere Vorteile des Homie-Frameworks sind u.a.:

  • Telemetrie via MQTT
  • Over the Air Updates der Firmware via MQTT
  • Over the Air Updates der Konfiguration via MQTT
  • HandyApp/WebApp und config-File als Konfigurationsmöglichkeit
  • Existierende Management Anwendungen Homie-OTA, openHAB und check_mk aus dem Open Source Umfeld:

Screenshot Homie-OTA


Screenshots der openHAB Einbindung

Screenshot der openHAB Einbindung des Honigauftauschranks


Screenshots der check_mk Einbindung

2. ESP-07 statt Feather Huzzah

Die Entscheidung für den ESP-07 liegt vor allem am externen Antennenanschluss der eine deutlich bessere Reichweite ermöglicht. Selbst bei meinen 10m die ich im Garten zu überbrücken habe, durfte ich schon Erfahrungen bei meiner ersten Stockwaage machen.
Ihr könnt Euch das Platinenlayout herunterladen. Die Platine an sich ist kein Muss, mit minimalen Code-Anpassungen (GPIO-PINs) wird es auch auf dem Board von Clemens laufen oder auf einem Wemos D1 mini.

3. Anbindung an Hiveeyes

Die Homie MQTT-Topic Logik ist bzw. war nicht ganz kompatibel mit den Hiveeyes/Kotori Anforderungen.
Hiveeyes/Kotori erwartet als Topic folgendes Schema:

hiveeyes/<ziemlich lange UID>/<standort>/<node>/data.json

Dies führt zu zwei Problemen:

  1. Die ESP Libraries sind auf Größe optimiert. Die lange UID bläht den Base Topic über die von Homie und der async-mqtt Library vorgesehene Größe auf. Lösung: Keine lange UID verwenden.
  2. Homie erwartet einen Topic-Aufbau im Format:
    <base>/<node>/<sensor>/<sensorvalue>

Also nach <node> (Im Sinne eines IP Hosts/ESPs) noch 2 Subtopics <sensor>/<sensorvalue>.
Daher hat Andreas einen Workaround geschaffen, dass der Topic im Format:

hiveeyes/<kurze UID>/<standort>/<node>/data/__json__

angegeben werden kann.
Somit ist die Firmware voll Hiveeyes-komptibel, als Broker kann direkt swarm.hiveeyes.org angegeben werden.

3.1 Indirekte Anbindung an Hiveeyes

3.1.1 Übersetzung mit mqttwarn

Da das Base-Topic homie/ bei mir schon zigfach in der Heimautomatisierung genutzt wird, wollte ich meine Stockwaagen nicht auf hiveeyes/ umstellen, da ich insbesondere die Homie-OTA Funktionalität verloren hätte.
Daher habe ich mir einen Übersetzer auf Basis von mqttwarn gebaut, der auf den entsprechenden Topic unterhalb von homie/ reagiert und nach hiveeyes/ übersetzt:

[config:mqtt]
hostname =  'localhost'
port =  1883
qos =  0
retain =  False
username =  "user"
password =  "passt"
targets = {
  'hiveeyes-beute-2'    : [ 'hiveeyes/666/garten/beute-2/data/__json__' ],
  'hiveeyes-beute-3'    : [ 'hiveeyes/666/garten/beute-3/data/__json__' ],
  }

[beute-2]
topic = homie/beute-2/data/__json__
targets = mqtt:hiveeyes-beute-2, http:http-beute-2

[beute-3]
topic = homie/beute-3/data/__json__
targets = mqtt:hiveeyes-beute-3, http:http-beute-3

Zusätzlich überträgt http:http-beute-3 die Werte auch noch in ein lokales dygraphs.

3.1.2 Übertragung via mosquitto Bridge

Das in 3.1.1 übersetzte Topic könnte man statt an localhost natürlich auch direkt an swarm.hiveeyes.org übertragen, jedoch habe ich den Weg über den lokalen MQTT Broker gewählt, um auch die übersetzten Daten lokal vorrätig zu haben. Zur finalen Übertragung an swarm.hiveeys.org habe ich daher eine Mosquitoo MQTT Bridge gewählt.
Diese ist simpel zu realisieren, hier finden sich die entsprechenden Konfigurationsdirektiven für die /etc/mosquitto/conf.d/bridge.conf:

connection hiveeyes
address swarm.hiveeyes.org:8883
bridge_cafile /etc/letsencrypt/RootCA-lets-encrypt
topic hiveeyes/# in
topic hiveeyes/UID/+/+/data/__json__ out
clientid finanzamt
start_type automatic
try_private true
remote_user user@email.com
remote_password very_secure_password

Total Newbie aus München versucht sich an IoT
Anbandelung mit Trachtnet
Welcome, Alex!
Using the Adafruit Feather M0 LoRa (RFM95) and TTN
Imker als Datenmuli?
Komfortable Firmware Frameworks für die Programmierung der ESP MCUs
Probleme beim Datentransfer über SIM800 Modul per MQTT
Probleme bei der Datenübertragung via Homie/MQTT
Remote Konfiguration der Nodes (Firmware/Backend)
Probleme bei der Datenübertragung via Homie/MQTT
Total Newbie aus München versucht sich an IoT
Firmware builder development
MQTT Weiterleitung per Bridge Konfiguration an swarm.hiveeyes.org
#2

Hi @Alex,

vielen herzlichen Dank für Deine ausführliche Beschreibung! Schön, dass Du nun auch bei der kollektiven Datensammelei mit an Bord bist und noch schöner, dass wir bei Dir eine weitere Variante zur Datenanbindung - nämlich über die Mosquitto Bridge - realisieren konnten.

Liebe Grüße,
Andreas.


#3

Hi @andreas,

danke für die Überarbeitung. Hast Du den PR gesehen? Kannst Du den bitte mergen, ich hab noch einen in der Pipeline.

Danke und Gruß
Alex


#4

Erledigt:
https://github.com/hiveeyes/arduino/pull/5

Vielen Dank!


#6

6 posts were merged into an existing topic: Remote Konfiguration der Nodes (Firmware/Backend)


#7

Es kommt (hoffentlich) gleich der PR rein für folgende neue Features der node-wifi-mqtt-homie-battery Node:

  • DeepSleep meldet sich ordnungsgemäß beim MQTT-Broker ab (kostet leider ein paar mA-Sekunden)

  • Alle Settings sind via Homies Custom Settings via API/Web/MQTT setzbar. Dies sind:

    sleepTimeSetting.setDefaultValue(DEFAULT_SLEEP_TIME);
    weightOffsetSetting.setDefaultValue(DEFAULT_WEIGHT_OFFSET);
    kilogramDividerSetting.setDefaultValue(DEFAULT_KILOGRAM_DIVIDER);
    vccAdjustSetting.setDefaultValue(DEFAULT_VCC_ADJUST);
    

@andreas: Kannst Du mir eine Anschubhilfe für eine Changes.rst geben?


#8

Gern. Wenn Du magst, nimmt Dir doch einfach die CHANGES.rst im Hauptordner unseres Firmware Repositories als Blaupause und trage Deine Änderungen in einem ähnlichen Stil oben im Block “in-progress” ein.

Danke!


#9

A post was merged into an existing topic: Daten per MQTT ans Backend auf swarm.hiveeyes.org übertragen


#10

Hey,

Super Setup, dass du da am Laufen hast.

Hab mich auf deine Anregung nochmal durch Homie durchgebissen.
Hab die node-wifi-mqtt-homie Anlage auf mein Setup angepasst
(Volt raus, Waage raus, DS18b20 dazu + 2 DHT22 Sensoren)

nachdem der Code nun endlich aufgehört hat compile errors auszuspucken (libraries, “;” und “}” :-) )
stecke ich leider fest beim connecten zum Broker, siehe: Daten per MQTT ans Backend auf swarm.hiveeyes.org übertragen


Quelltexte der Firmware herunterladen und kompilieren
#11

3 posts were merged into an existing topic: Quelltexte der Firmware herunterladen und kompilieren


Quelltexte der Firmware herunterladen und kompilieren
#12

+1 sag ich da nur. Lüppt et? (Fragt man so im Rheinland)
Falls mir die Bienen Zeit lassen, mach ich noch ein #ifdef rein für den DHT11/22. Ich hab einen DHT an meinem ersten Setup aus 2015 dran. Ich habe aber festgestellt, dass ich daraus nichts für mich ™ erkenntniserweiterndes ableiten kann.
Da aber jeder einen DHT haben zu wollen scheint, sollte ich das mal tun.


Quelltexte der Firmware herunterladen und kompilieren
#13

@beeneugierig Ich hab gerade den Code von node-wifi-mqtt-homie.ino an das Featureset von node-wifi-mqtt-homie-battery.ino angepasst. Kein großes Ding, nur für den Fall, dass Du es “kompatibel” halten möchtest. Wir müssen wohl noch auf den Commit des PR von @andreas warten.


#14

5 posts were merged into an existing topic: Probleme bei der Datenübertragung via MQTT


Probleme bei der Datenübertragung via Homie/MQTT
#15

Mit den Zugangsdaten zum Grafana, die wir Dir gleich zusenden, kannst Du Dein Dashboard dann auch per “Save as…” unter einem eigenen Namen speichern und weiter editieren. Damit entkoppelst Du es vom automatischen Anlegen durch unser Backendsystem, was vor allem für einen wash & go Schnellstart gedacht war.

Wie man seine Dashboards gestalten kann, kannst Du Dir von den anderen Benutzern abschauen, die ähnliches bereits gemacht haben. @mois hat sich da gerade über die letzten Tage hinweg richtig Mühe gemacht, siehe https://swarm.hiveeyes.org/grafana/dashboard/db/mois. Aber auch das von @mhies ist nicht von schlechten Eltern, siehe https://swarm.hiveeyes.org/grafana/dashboard/db/muc-mh-b99.

Viele Grüße,
Andreas.


Probleme bei der Datenübertragung via Homie/MQTT