homee in Verbindung mit MQTT: homeeToMqtt

Gibt es von homee2mqtt mittlerweile eine Docker Version? Ich würde das gerne analog meiner Netatmo2Mqtt und dem eBus Daemon auf meiner Synology installieren, um auf den Homee genauso zuzugreifen. Meine Smart Home Lösung wird voraussichtlich noch in diesem Jahr nativ MQTT bieten, sodass ich dann alles, was nicht per KNX läuft, über Docker realisieren würde.

Ich habe keine gefunden und mir (auf ubuntu 20.04 bzw. 21.10) deshalb selbst ein Image gebastelt:

mkdir ~/src
cd ~/src
git clone https://github.com/odig/homeeToMqtt

cd homeeToMqtt
npm i

Anschließend ~/src/homeeToMqtt/Dockerfile erstellen:

FROM node:10-slim

# Create app directory
WORKDIR /usr/src/app

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./

# RUN npm install
# If you are building your code for production
RUN npm ci --only=production

# Bundle app source
COPY . .

CMD [ "node", "app.js" ]

Mit docker build -t hajo/homee2mqtt:10-0.0.4 .erstellst Du das Image.

1 „Gefällt mir“

Hallo @hajo62,
das klingt doch schonmal vielversprechend. Da ich bisher außer Arduino noch nichts kompiliert habe (und das über die halbwegs komfortable IDE), stelle ich mich da etwas doof an.
Ich vermute mal, wenn Du das Docker Image bei Dir erstellt hast, kann ich es nicht ohne Weiteres nutzen? Ich habe eine Synology RS818+ mit INTEL Atom C2538.
Gerne würde ich das Hosting von Docker Images und eine Anleitung für die Installation bei mir auf der Website im Smart Home Bereich veröffentlichen.

Falls Dein Docker-Image mit meiner Synology kompatibel ist, schicke es mir gerne per PN zum ausprobieren.

Tja… So weit weg von doof anstellen bin ich leider auch nicht.
Ich vermute, dass das nicht kompatibel ist. Wenn ich bei Zeiten mal rausfinde, wie man das Image exportiert… oder Du…
kann ich’s gern zum Download bereitstellen.

:smile: Na so exotisch erscheint mir Intel Atom nun auch nicht. Klingt für mich sehr nach einem üblichen System. Von daher würde ich Dein Image gerne mal ausprobieren.

Wenn Du auf der Synology auf Docker > Image > hajo/homee2mqtt:10-0.0.4 klickst und dann oben auf Exportieren, kannst Du einen Pfad auf Deinen Laufwerken wählen, wo das als tar Image gespeichert wird. Von dort kannst Du es dahin kopieren, wo Du willst und dann hochladen.

Welche Synology oder ggf. QNAP hast Du?
Und was hast Du ggf. in den Evironment Variablen definiert?

Gar keines. Ich nutze eine Raspberry Pi 4B.
Der Build hinterlässt eine paar abhängige Imges und beim Versuch des Exports gab’s irgendein Permission-Problem…

Ah, der Raspberry ist natürlich etwas Anderes.
Ich habe aber gerade entdeckt, dass ich auch etwas kompliziert unterwegs bin.
Wenn ich auf der Synology im Docker Paketzentrum nach homeetomqtt suche, finde ich drei Ergebnisse. Leider keines direkt von Gido, aber von zwei anderen Usern.
Probiere ich mal aus. Kann nur etwas dauern, da ich meinen Homee gerade bei meinen Nachbarn installiert habe, die den dringend für ihr Tor brauchten. Ich habe noch das BiSecur Gateway.

Habe jetzt alles installiert. Allerdings werden die von mir in Docker konfigurierten ENV Variablen nicht beachtet. Offensichtlich muss immer eine config.json vorhanden sein.
Diese habe ich auch gemäß Readme unter /etc/homeeToMqtt/config.json erstellt. Allerdings wird sie da nicht von homeeToMqtt beachtet. Ideen?

Hilft Dir vielleicht ein Auszug aus meinen docker-compose.yaml:

  ##################################################
  # Home2mqtt
  ##################################################
  homee2mqtt:
    container_name: homee2mqtt
    image: hajo/homee2mqtt:10-0.0.4
    depends_on:
      - mqtt
    volumes:
      - /home/hajo/docker-volumes/homee2mqtt/config.json:/etc/homeeToMqtt/config.json
      - /home/hajo/docker-volumes/homee2mqtt/log:/usr/src/app/log 
    network_mode: host
    dns:
      - 1.1.1.1
      - 8.8.8.8  
    restart: unless-stopped

Und meine config.json:

{
    "homeeUserName": "ich",
    "homeePassword": "geheim",
    "homeeServer": "192.168.178.nnn",
    "mqttServer": "192.168.178.mmm",
    "mqttUserName": "ich",
    "mqttPassword": "geheim",
    "publish": true,
    "publishHuman": true,
    "publishInt": false,
    "publishBool": true,
    "subscribe": false,
    "subscribeHuman": true,
    "identifier": "devices/status/",
    "identifierHuman": "human/",
    "identifierInt": "devices/int/",
    "identifierBool": "devices/bool/",
    "filterEchoedMQTTMessages": false,
    "homeeStatusRepeat": false,
    "statusTimer": 180
}
1 „Gefällt mir“

Hallo,

ich bin aus privaten Gründen zur Zeit hier nicht aktiv.
Wollte aber kurz antworten.

@Hajo62 sieht gut aus.

@skyynet

hier gibt es mein Repo wo ich den ganzen üblichen Stack unter X86 oder Raspi mit docker-compose bei mir laufen lasse. Zur zeit auf der Synology DS1821.

Das Ding baut alle Images und verknüpft sie.
Läuft so bei mir seit 4 Jahren.

Keine Garantie das es out of the Box geht aber ein guter Start denke ich.

Ciao
Gido

1 „Gefällt mir“

Hi Gido,
danke, dass Du kurz aus der Versenkung aufgetaucht bist. Ich habe eigentlich nur eine konkrete Frage: Wo auf der Synology muss die config.json liegen?

Ich hatte die Config unter /etc/homeeToMqtt/config.json abgelegt, aber sie wird nicht eingelesen (warn: no config.json found → use defaults"). Habe die Dateirechte auch auf 777 gestellt.

Meine anderen xyz2mqtt Bridges lassen sich alle mittels ENV Variablen in der grafischen Oberfläche von Docker einstellen. Wenn ich das Einlesen der Config einmal hinbekommen habe, können alle weiteren Interessenten es auf meiner Homepage hier nachlesen.
Freue mich auf eine Info, wo ich die Datei ablegen soll.

Irgendwann dieses Jahr wird mein KNX Smart Home System Anbieter (Enertex) MQTT integrieren. Dann kann ich über meinen KNX Schalter in der Garage das Tor draußen über Homee öffnen.

Du mapst die config vom Filesystem der Synology in die Docker Instanz.

Wie im Beispiel von @hajo62:

  - /home/hajo/docker-volumes/homee2mqtt/config.json:/etc/homeeToMqtt/config.json

Links der Pfad aus Synology Sicht. Rechts der Pfad innerhalb der Docker Instanz wo HomeeToMqtt standardmässig seine Config sucht.

Also „/home/hajo/docker-volumes/homee2mqtt/config.json“ an deine Gegenheiten anpassen.

Danke. Das hat mich auf die richtige Spur gebracht.

Ich kann in Docker auf der Synology beim Container „homeeToMqtt“ eine Datei in den erweiterten Einstellungen unter „Volumes“ mappen. Hier habe ich nun die config.json in einen im Filesystem der Synology erreichbaren Ordner gelegt und gemappt auf /app/config.json
Danach hat homeeToMqtt merkwürdigerweise nicht die Werte aus dieser gemappten Datei übernommen, sondern die von mir unter „Umgebung“ definierten. Irgendeine Datei muss aber an der gemappten Stelle stehen. Verstehe ich zwar nicht, aber laut Protokoll wurden genau diese Werte genutzt. Auf /homeeToMqtt/config.json konnte ich nicht mappen. Da erhalte ich einen Fehler.

Nach dem Start des Containers wurde der Status eines (von drei) homee Devices ausgelesen und der Container danach beendet. Bei der Durchsicht des Protokolls fiel mir auf, dass Docker auf der Synology alle Werte als Strings übergibt, also statt true → „true“ und statt 180 → „180“. Nachdem ich alle non-Strings aus den Umgebungsvariablen gelöscht hatte. Wurde lief der Container.

Jetzt muss ich nur noch zusehen, wie ich meine eigene Konfiguration hinterlegt bekomme, also entweder tatsächlich die config.json eingelesen bekomme oder die Anführungszeichen bei den Umgebungsvariablen raus.

Auf jeden Fall bin ich jetzt einen großen Schritt weiter. Danke für die Hilfe.
Ich aktualisiere das die Tage noch bei mir auf der Homepage, falls es nochmal jemand versucht.

Das in der Oberfläche angeben Pfad ist ein anderer als der reale:

Docker Settings:

File Browser:

Shell:
/volume1/docker/dockeriot/etc/homeeToMqtt/config.json

Meine Config:
{
„homeeUserName“: „mqtt“,
„homeePassword“: „mqtt“,
„homeeServer“: „homee.ugk.lan“,
„mqttServer“: „192.168.1.55“,
„mqttUserName“: „mqtt“,
„mqttPassword“: „mqtt“,
„publish“: true,
„publishHuman“: true,
„publishInt“: false,
„publishBool“: false,
„subscribe“: true,
„subscribeHuman“: true,
„identifier“: „devices/status/“,
„identifierHuman“: „human/“,
„identifierInt“: „devices/int/“,
„identifierBool“: „devices/bool/“,
„filterEchoedMQTTMessages“: false,
„homeeStatusRepeat“: false,
„statusTimer“: 180
}

Danke. Das Volume wird in der Tat nicht in der File Station angezeigt.
Ansonsten habe ich es ja so gemacht. Bei mir wird nur der Inhalt der config.json ignoriert und die ENV Variablen genutzt. Für mich auch gut.

Mit dem MQTT Explorer kann ich auch sehr schön alle Werte anschauen. Nur das Setzen gelingt mir nicht. Bei einem ElectroDragon WiFi Relaisboard kann ich die Werte ändern, indem ich an das Topic ein /set hänge und den gewünschten Wert übergebe.
Ist das bei einem Attribut anders?

Ich bekomme z.B. homee/devices/bool/9/attributes/28 als False angezeigt. Füge ich ein /set hinzu und übergebe den Wert True. wird mir homee/devices/bool/9/attributes/set als True angezeigt.
Publishe ich True an homee/devices/bool/9/attributes/28 so wird mir die 28= True angezeigt, aber nichts schaltet. Vermutlich ein ganz doofer Denkfehler.

Im MQTT is es ungünstig auf das gleiche Topic zu subscriben welches man sendet, da man sich dann immer selber hört.

HomeeToMQtt subscribed auf:

homee/devices/set/[DeviceId]/attributes/[AttributeId]

In deinem Fall:

homee/devices/set/9/attributes/28

Ansonsten ist es hier beschrieben:

1 „Gefällt mir“

Danke!

Das setzen von Parametern hatte ich nicht gefunden, da es unter „MQTT subscribed topics from homeeToMqtt“ steht, was ich nicht mit dem Thema in Verbindung gebracht hatte.

Ich habe es mit dem Topic homee/devices/set/9/attributes/28 probiert und Parameter { „data“: 1 } und { „boolData“: true }

und mit Topic homee/devices/bool/9/attributes/28 und Parameter True

Leider ohne Erfolg. Wenn ich auf meiner Fernbedienung auf Öffnen klicke, wechselt Attribut 28 kurz von False auf True. Sollte also der richtige Wert sein.

Ich habe auch ein Feedback von Synology:

Die Umgebungsvariablen sind als Character String definiert. D.h. alle Umgebungsvariablen sind Character Strings. Umgebungsvariable mit dem Typ boolean oder int gibt es nicht. Dies liegt am Design der Umgebungsvariablen in Linux.

Wenn „Boolean“ Werte in den Umgebungsvariablen gesetzt werden sollen, müssen diese als String gespeichert werden und vom Programm dann in den entsprechenden Typen überführt werden.

In PHP würde ich es selbst hinbekommen, die übergebenen Strings bei Variablen mit Typ Bool oder Int von homee2mqtt in den richtigen Typ zu konvertieren. Leider nicht hier.
Solltest Du (oder jemand anderes) dies ergänzen, könnte man über die grafische Docker Oberfläche die Werte setzen.

Leider habe ich den Eindruck, dass nur wenige Deine schöne Bridge nutzen. Das motiviert natürlich nicht gerade, daran weiter zu entwickeln.

Habe ich das jetzt richtig gelesen das du den value der Fernbedienung ändern magst?
Das geht nicht, da die FB ein Sensor ist.

Ich habe nachgeschaut, welcher Wert sich im Homee ändert, wenn ich die Fernbedienung drücke und angenommen, ich kann diesen Wert per MQTT setzen. Alternativ zur FB kann ich auch den Öffnen Button in der Homee App setzen. Das toggelt auf das Attribut 28 bei Device 9.

Ich habe einen Hörmann Brain Cube, also einen Brain Cube mit integriertem Hörmann BiSecur Modul. Damit will ich Garage, Tor & Haustür öffnen.

Die Haustür ist Device 9 ist und hat nur ein Attribut 28. Der Status von homee/devices/status/9/attributes/28 ist

{„id“:28,
„node_id“:9,
„instance“:0,
„minimum“:0,
„maximum“:1,
„current_value“:0,
„target_value“:0,
„last_value“:0,
„unit“:"",
„step_value“:1,
„editable“:1,
„type“:327,„state“:1,
„last_changed“:1646678120,
„changed_by“:1,
„changed_by_id“:0,
„based_on“:8,
„data“:0,
„name“:„Haustür“,
„typeString“:327,
„cubeType“:„Unknown“,
„note“:"# Hörmann ThermoSafe Smart",
„boolData“:„False“
}

Wenn ich den JSON String kopiere und status durch set ersetze, kann ich die Werte setzen.
Egal, ob ich boolData auf True setze, data auf 1 oder target_value auf 1 - es passiert nichts.

Wenn ich den Bool Wert ablese, steht dort 28 = False. Setze ich ihn mit homee/devices/bool/9/attributes/28 auf True passiert auch nichts. Etwas ernüchternd.

Du möchtest also ein Hörmann Tor öffnen?
In deinem homee gibt es dazu aber nur die eingelernte FB und nicht das Tor selber ?

Wie schon erwähnt kannst du die target_value nur bei Aktoren ändern.
Sensoren kannst du nur auslesen.

Hier musst du dann wohl einen Umweg gehen.

Ich kenne dein Setup nicht und daher kann ich dir auch nicht die Lösung anbieten.