HAP und MQTT

160 views
Skip to first unread message

Tobias

unread,
Feb 5, 2017, 10:13:39 AM2/5/17
to hap-users
Hallo HAP-User, ich möchte gerne die Verbindung von HAP und OpenHab über MQTT testen. Welchen MQTT-Broker muss ich installieren? Die HAP-Installation läuft bei mir auf einem Raspi2 (Ubuntu). Ich habe Mosquito installiert, aber der Start der hap-mqtt.pl wird mit einer Fehlermeldung (line 24, Websphere) abgebrochen. Ab hier komme ich nicht mehr weiter, evtl. kann mir jemand auf die Sprünge helfen.
Gruß und Dank
Tobias

Marco Bendowski

unread,
Feb 5, 2017, 12:09:46 PM2/5/17
to hap-...@googlegroups.com
Hi,

Mosquito als Broker ist korrekt. Mir scheint, als würde Dir das „Websphere“-Modul fehlen. Das musst Du nachinstallieren.

--
Sie erhalten diese Nachricht, weil Sie in Google Groups E-Mails von der Gruppe "hap-users" abonniert haben.
Wenn Sie sich von dieser Gruppe abmelden und keine E-Mails mehr von dieser Gruppe erhalten möchten, senden Sie eine E-Mail an hap-users+...@googlegroups.com.
Weitere Optionen finden Sie unter https://groups.google.com/d/optout.

Tobias

unread,
Feb 5, 2017, 2:03:14 PM2/5/17
to hap-users
Hi,
stimmt, habe ich nicht installiert. Ich habe allerdings auch nichts für den Raspi gefunden. Hast Du einen Tipp? 

Gruß
Tobias

Marco Bendowski

unread,
Feb 6, 2017, 1:59:30 AM2/6/17
to hap-...@googlegroups.com
Guten Morgen,

die Perl-Version des MQTT-Gateways ist obsolet. Ich habe gerade die NodeJS-Version hochgeladen. Du wirst aber vermutlich das module-Verzeichnis löschen müssen, weil die ja auf einem Raspberry unterwegs bist (probier es aber ruhig erstmal ohne löschen)

Tobias

unread,
Feb 6, 2017, 12:58:25 PM2/6/17
to hap-users
Hi,
super, es läuft (hat ohne löschen funktioniert). Da kann ich mich ja jetzt mal mit openhab beschäftigen.
Gruß und Dank
Tobias

Marco Bendowski

unread,
Feb 6, 2017, 1:44:43 PM2/6/17
to hap-...@googlegroups.com
Noch so als Tipp: Schau Dir unbedingt auch mal Home-Assistant an. Ich bin von dem Java-Trümmer Openhab auf Home-Assistant umgestiegen. Openhab ist schon nicht schlecht, aber Home-Assistant ist deutlich schlanker und strukturierter. 

Tobias

unread,
Feb 28, 2017, 1:11:21 PM2/28/17
to hap-users
Hi, erstmal danke für den Tipp. Ich habe mich jetzt auch für Home-Assistant entschieden. Soweit läuft auch alles, was ich bis jetzt getestet habe. Eine Frage hätte ich allerdings zu der HAP- Rollladensteuerung: warum wird keine Befehl größer 100 über MQTT von HAP ausgeführt? Werte von 0 - 100, ON/OFF, UP/DOWN werden ausgeführt aber 128,133,134,135 oder 136 werden nicht ausgeführt. Eigentlich würde ich nur den Stop-Befehl benötigen, gibt es dafür evtl eine andere Möglichkeit?

Gruß Tobias

Marco Bendowski

unread,
Feb 28, 2017, 11:50:24 PM2/28/17
to hap-...@googlegroups.com
Hi,

guck Dir mal die Datei /opt/hap/bin/hap-mqtt-gateway/app.js an. Da gibt es die Funktionen "mqttMessageHandler" und "socketDataEventHandler". Da siehst Du, wie die HAP-Befehle entsprechend umgesetzt werden.Hier kannst Du dann recht einfach Deine Anpassungen vornehmen.
Gruß
Marco

Da gibt es eine 

Nicolas Angelo

unread,
Apr 30, 2017, 12:11:30 PM4/30/17
to hap-users
Hallo Tobias,

Stehe gerade am gleichen Punkt wie du - auf der Suche nach dem STOP Befehl für die Rolladen. Tatsächlich scheint mir das Problem im Message Parser verborgen, der alles >100 als invaliden Input erkennt. Das MQTT Gateway würde den Befehl ja wohl weitergeben. Hast du da schon was rausgefunden? Sonst müssten wir da wahrscheinlich mal in den Code von Parser.pm abtauchen und die 135 "gültig machen".

Grüße
Nico

Tobias

unread,
May 1, 2017, 3:59:37 AM5/1/17
to hap-users
Hi Nico,

ich habe noch keine Lösung für das Problem. Mir reicht es im Moment aus, wenn ich über MQTT hoch- oder runterfahren kann. Allerdings wäre ich auch an einer Lösung interessiert.

Gruß
Tobias 

Nicolas Angelo

unread,
May 1, 2017, 7:05:37 AM5/1/17
to hap-users
Ich hab's! Muss man aber auch erst mal finden in der 5000 Zeilen Statemachine :)

Der Trick ist, dass man statt
... device 1 value 135
einfach stop schickt:
... device 1 stop

Allerdings braucht's dazu eine kleine Änderunge im app.js. Ich werde das im Laufe der nächsten Stunden in meinen Fork auf GH pushen.

Grüße
Nico

Nicolas Angelo

unread,
May 1, 2017, 2:54:29 PM5/1/17
to hap-users
Siehe https://github.com/nicoangelo/hap/blob/master/bin/hap-mqtt-gateway/app.js
package.json aber mitnehmen und mit npm install die zusätzlichen Dependencies installieren.


Am Montag, 1. Mai 2017 09:59:37 UTC+2 schrieb Tobias:
Message has been deleted

Joern

unread,
Mar 15, 2020, 10:31:12 AM3/15/20
to hap-users
Hallo,

hab beide Dateien kopiert & alten Rechte übertragen.
Beim ausführen von sudo npm install im Ordner /opt/hap/bin/hap-mqtt-gateway/ bekomme ich folgende Log:

joern@PI3:/opt/hap/bin/hap-mqtt-gateway $ cat npm-debug.log 
0 info it worked if it ends with ok
1 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'install' ]
2 info using n...@2.14.7
3 info using no...@v4.2.1
4 verbose readDependencies loading dependencies from /opt/hap/bin/hap-mqtt-gateway/package.json
5 error install Couldn't read dependencies
6 verbose stack Error: Failed to parse json
6 verbose stack Unexpected token '<' at 7:1
6 verbose stack <!DOCTYPE html>
6 verbose stack ^
6 verbose stack     at parseError (/usr/local/lib/node_modules/npm/node_modules/read-package-json/read-json.js:379:11)
6 verbose stack     at parseJson (/usr/local/lib/node_modules/npm/node_modules/read-package-json/read-json.js:68:23)
6 verbose stack     at /usr/local/lib/node_modules/npm/node_modules/read-package-json/read-json.js:48:5
6 verbose stack     at /usr/local/lib/node_modules/npm/node_modules/graceful-fs/graceful-fs.js:76:16
6 verbose stack     at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:380:3)
7 verbose cwd /opt/hap/bin/hap-mqtt-gateway
8 error Linux 4.9.35-v7+
9 error argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
10 error node v4.2.1
11 error npm  v2.14.7
12 error file /opt/hap/bin/hap-mqtt-gateway/package.json
13 error code EJSONPARSE
14 error Failed to parse json
14 error Unexpected token '<' at 7:1
14 error <!DOCTYPE html>
14 error ^
15 error File: /opt/hap/bin/hap-mqtt-gateway/package.json
16 error Failed to parse package.json data.
16 error package.json must be actual JSON, not just JavaScript.
16 error
16 error This is not a bug in npm.

Tom Tomsen

unread,
Oct 30, 2024, 3:51:19 PM10/30/24
to hap-users
Hallo, ich weiß, das Projekt wird schon nicht mehr gepflegt. Aber ich nutze seit einigen Jahren bereits HAP und es läuft hervorragend. Nun möchte ich alles an einen MQTT-Broker anbinden. Ich nutze dafür die Node.js Variante, bzw. möchte dies. Die Verbindung zum Broker wird schon aufgebaut. Nur zum HAP-MP hapert es noch. Gibt es eine Möglichkeit den Fehler für das scheitern zu ermitteln? Gibt es einen Log-Mode für den MP?

Ich hoffe, hier kommt noch jemand vorbei.

Danke schon mal.

Thomas

Eugen7337

unread,
Oct 31, 2024, 6:46:59 AM10/31/24
to hap-users
Hallo,
da stimmt wohl was mit package.json Datei nicht.
es muss ein JSON Format sein.
{
  "name": "hap-mqtt-gateway",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "mqtt": "^4.1.0"
  }
}
Mehr müsste da nicht stehen.

Tom Tomsen

unread,
Oct 31, 2024, 11:38:47 AM10/31/24
to hap-users
Hallo Eugen7337,

es freut mich, dass es noch den einen oder anderen gibt, der hier mal rein schaut. Danke für deinen Hinweis. Bei  mir in der Datei stehrt ganu das drin, was du geschrieben hast. Nur die MGTT-Version ist mit 5.10.1 etwas aktueller. Das scheint nicht die Ursache zu sein. Ich weiß aktuell nicht mal, ob die Spocket-Anfrage überhaupt beim MP-Service ankommt. Beim Brocker sehe ich die Connect-Meldung. Das passt. Hast du eventuell noch eine andere Idee?

VG Thomas

Eugen7337

unread,
Nov 1, 2024, 7:04:00 AM11/1/24
to hap-users
Hallo,

//app.js
Oben wird mit Variablen dir Verbindung zum hap-mp deklariert:
var hapMpIp = "127.0.0.1";
var hapMpPort = 7891;

Der Port wird in hap.yml unter /opt/hap/etc/ definiert:
MessageProcessor:
  Host: 127.0.0.1
  Port: 7891

Die Verbindung von der Nodejs App zur hap-mp wird dann durch diese Funktion erledigt:
function socketMakeConnection() {
  socket.connect(hapMpPort, hapMpIp);
}

 beschreibe dann bitte was genau nicht funktioniert. Eventuell deine app.js hier posten.
Ich habe dich jetzt so verstanden dass die Verbindung aus hap-mqtt-gateway zur hap-mp nicht klappt.
Wenn das so ist dann schaue ob die Host und Port stimmen. Wenn du z.b in hap.yml was anderes stehen hast z.b:

MessageProcessor:
  Host: 192.168.0.11 //oder so
  Port: 7891

dann muss auch in der app.js nicht 127.0.0.1 sondern 192.168.0.11stehen, weil der hap-mp dann nicht unter 127.0.0.1 lauscht.

Gruß

Tom Tomsen

unread,
Nov 3, 2024, 6:15:40 AM11/3/24
to hap-users
Hallo Eugen,

die Ports hatte ich alle geprüft und die waren übereinstimmend. Folgende Konstellation habe ich: ich habe auf Proxmox zwei  VM laufen. Die eine beinhaltet die HAP-Umgebung. Die andere beherbergt Home Assistent mit dem MQTT-Broker.

Um ehrlich zu sein, hatte ich bei meiner Fehlersuche nicht an das Triviale gedacht: die Services selbst. Ich habe festgestellt, das keiner der HAP-Services aktuell läuft. Keine Ahnung warum, ich hatte an denen nichts verändert. Drauf gekommen bin ich bei der Abfrage nach offenen Ports auf meiner HAP-VM. Hatte auch ein Backup einer funktionierenden Maschine wieder eingespielt, aber auch da starten die Dienst nicht automatisch. Das ist nun erstmal mein Thema. Wenn ich das erledigt habe, dann mach ein neuer Versuch bezüglich MQTT erst wieder Sinn. Ich melde mich wieder.

Danke für deine Unterstützung bis hierher.

VG Thomas

Tom Tomsen

unread,
Nov 6, 2024, 1:02:32 PM11/6/24
to hap-users
Hallo Eugen,

also, was soll ich sagen: ein laufender Service macht schon eine Menge aus!! Es funktioniert nun alles wie ich es möchte!! Sehr gut und vielen Dank für deine Unterstützung. Ein paar Fragen habe ich noch: irgendwie scheinen sich die Topics vom hap zu unterscheiden: zum Teil laufen sie so ein "/hap/102/46/status" und teilweise so "hap/102/46/status" ( Kopiert aus MQTT-Explorer). Hast du eine Idee, was die Ursache sein könnte?
Die zweite Frage bezieht sich auf DS1820-Temp. Sensoren. Die Umrechnung der empfangenen Werte bereiten mir Kopfzerbrechen. Die positven Werte klappen, aber die negativen bekomme ich wegen der Binärrechnungen nicht hin. Hast du eventuell sowas umgesetzt oder weißt  wo ich fündig werden könnte?
Wie hast du den Start der app.js hinbekommen, ohne dich vorher einzuloggen?

Auf jeden Fall freue ich mich, dass alles soweit läuft und ich meinen Hausbus mit über 30 Modulen nun in die moderne Welt bekomme. Danke an Alle, die das System entwickelt haben!!  :-)


HAP.PNG

VG Thomas

Eugen7337

unread,
Nov 7, 2024, 11:20:49 AM11/7/24
to hap-users
Hallo Thomas,
den DS1820 habe ich auch im Einsatz. Und als Formel habe ich dann sowas stehen:

if (X >= 2048){return(int((~X+1 & 65535)*-0.625-0.5)/10+1); } else {return (int(X*0.625+0.5)/10+1);}

das trägst du in der UI unter Feld "Formula" hier als Beispiel:
dallas.png



den autostart mache ich über systemd von Linux,
dafür eine Datei im /etc/systemd/system/hap-mqtt.service mit dem Inhalt erstellen:
[Unit]
Description=Node.js hap-mqtt Gateway
After=network.target

[Service]
ExecStart=/usr/bin/node /opt/hap/bin/hap-mqtt-gateway/app.js
# Required on some systems
WorkingDirectory=/opt/hap/bin/hap-mqtt-gateway
Restart=always
TimeoutStartSec=320
# Restart service after 10 seconds if node service crashes
RestartSec=10
# Output to syslog
# StandardOutput=syslog
# StandardError=syslog
# SyslogIdentifier=nodejs-example
#User=<alternate user>
#Group=<alternate group>
Environment=NODE_ENV=production PORT=1337

[Install]
WantedBy=multi-user.target

dann mit systemctl daemon-reload die Datei "laden"
danach mit systemctl enable --now hap-mqtt.service wird es gestartet und in autostart beim booten eingestellt.
oder einzeln
systemctl enable hap-mqtt.service (autostart aktivieren)
systemctl start hap-mqtt.service (Service Starten)
Vorausgesetz du verwendest ein Linux mit systemd am board.

für den mqtt Topic kannst du dann in app.js anpassen.
bei mir z.B zeile 135 
var topic = "/hap/" + hapMessage.source + "/" + hapMessage.device + "/status";
kannst dann in
var topic = "hap/" + hapMessage.source + "/" + hapMessage.device + "/status";
ändern.
aber eigentlich sollte es bei default nur auf /hap/... publishen echt komisch
und die Zeilen 22,23
mqttClient.subscribe("hap/+/+/set");
mqttClient.subscribe("hap/+/+/makro");
da kannst du auch den Topic so einstellen wie du möchtest.


Gruß

Tom Tomsen

unread,
Nov 28, 2024, 11:08:05 AM11/28/24
to hap-users
Hallo Eugen,

ich habe aktuell viel zu tun, weshalb mein Hobby etwas zurückstecken muss.

Das mit dem Dienst hat super funktioniert. Danke für die kommplette Konfiguration. Die MQTT-Topics kommen nun auch konstant. Ich hatte es zuvor testweise mal in der Zeile 135 angepasst und auch wieder rückgängig gemacht. Asu unerfindlichen Gründen wurde dann teilweise "hap/xxx/xx..." gesendet und teilweise "/hap/xxx/xx..." Nachdem ich im MQTT-Explorer der falschen Topics gelöscht hatte, kamen sie auch nicht mehr vor. Wer weiß...

Wegen des DS1820 habe ich diese Formel im HAP so auch drin stehen und funktioniert. Aber via MQTT kommt nicht die Temperatur, sonden ein int-Wert. Für den positiven Bereich klappt das mit der Formel auch, nur muss ich für negative Temp. diesen Teil der Rechnung binär ausführen: (int((~X+1 & 65535 . Und da hakt es bei mir, Zweierkomplement und binäre UND-Verknüfung in HA. Vielleicht hast du ja noch eine Idee. Ansonsten läuft das ganze HAP sowieso stabil und die Verbindung ins heute via MQTT zu HA ist einfach nur toll.

Grüße
Reply all
Reply to author
Forward
0 new messages