apple home homekit iphone7 plus gold 825x510 - Homebridge - Xiaomi Mi Robot Vacuum Saugroboter - Fehlermeldungen

Homebridge – Xiaomi Mi Robot Vacuum Saugroboter – Fehlermeldungen

Vor circa 6 Wochen habe ich mal beim bei Xiaomi Mi Robot Vacuum Saugroboter auf mydealz für unter 200€ zugeschlagen – bisher bin ich auch sehr zufrieden, bei der nächsten Aktion, unter 350€, werde ich mir sicherlich die zweite Generation „schießen“mrgreen - Homebridge - Xiaomi Mi Robot Vacuum Saugroboter - Fehlermeldungen

Jedenfalls wollte ich den Xiaomi dann natürlich auch im Homebridge haben, die Einrichtung gestaltet sich etwas schwieriger, da man den einmaligen Token des Xiaomi MiHome Gerätes auslesen muss. Ich habe mein iPhone Backup ausgelesen und den Token aus der SQLite-Datei extrahiert und umgewandelt – mehr dazu hier.

Nun ja, beim Einrichten bin ich über mehrere Fehlermeldungen gestolpert, die ich mir für einige Zeit nicht erklären konnte. Jetzt kenne ich aber den Grund und möchte meine Erkenntnisse mit euch teilen.

Es gibt zwei ähnliche Plugins, mit denen man die Xiaomi Staubsaugerroboter der ersten Generation in Homebridge einbinden kann …

npm install -g homebridge-xiaomi-mi-robot-vacuum miio

… und …

npm install -g homebridge-mi-robot_vacuum miio

Diese konnten bei meiner Homebridge-Installation beide nicht erfolgreich gestartet werden.

Bei homebridge-xiaomi-mi-robot-vacuum (unterstützt nur die erste Generation) erhielt ich die Fehlermeldung:

ERROR LOADING PLUGIN homebridge-xiaomi-mi-robot-vacuum:
TypeError: Path must be a string. Received undefined
at assertPath (path.js:7:11)
at Object.join (path.js:1213:7)
at userData (/usr/local/lib/node_modules/miio/node_modules/appdirectory/lib/appdirectory.js:21:29)
at Object.AppDirectory._setTemplates (/usr/local/lib/node_modules/miio/node_modules/appdirectory/lib/appdirectory.js:134:34)
at Object.AppDirectory (/usr/local/lib/node_modules/miio/node_modules/appdirectory/lib/appdirectory.js:129:10)
at Object.<anonymous> (/usr/local/lib/node_modules/miio/lib/tokens.js:8:14)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.require (module.js:483:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/usr/local/lib/node_modules/miio/lib/discovery.js:10:16)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)

/usr/local/lib/node_modules/homebridge/lib/api.js:64
throw new Error("The requested accessory '" + name + "' was not registered by any plugin.");
^
Error: The requested accessory 'MiRobotVacuum' was not registered by any plugin.
at API.accessory (/usr/local/lib/node_modules/homebridge/lib/api.js:64:13)
at Server._loadAccessories (/usr/local/lib/node_modules/homebridge/lib/server.js:264:42)
at Server.run (/usr/local/lib/node_modules/homebridge/lib/server.js:86:38)
at module.exports (/usr/local/lib/node_modules/homebridge/lib/cli.js:40:10)
at Object.<anonymous> (/usr/local/lib/node_modules/homebridge/bin/homebridge:17:22)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.runMain (module.js:590:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3

Bei homebridge-mi-robot_vacuum (unterstützt die erste und zweite Generation) erhielt ich die Fehlermeldung:

ERROR LOADING PLUGIN homebridge-mi-robot_vacuum:
TypeError: Path must be a string. Received undefined
at assertPath (path.js:7:11)
at Object.join (path.js:1213:7)
at userData (/usr/local/lib/node_modules/miio/node_modules/appdirectory/lib/appdirectory.js:21:29)
at Object.AppDirectory._setTemplates (/usr/local/lib/node_modules/miio/node_modules/appdirectory/lib/appdirectory.js:138:34)
at Object.AppDirectory (/usr/local/lib/node_modules/miio/node_modules/appdirectory/lib/appdirectory.js:133:10)
at Object.<anonymous> (/usr/local/lib/node_modules/miio/lib/tokens.js:8:14)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.require (module.js:483:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/usr/local/lib/node_modules/miio/lib/discovery.js:10:16)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)

/usr/local/lib/node_modules/homebridge/lib/api.js:122
throw new Error("The requested platform '" + name + "' was not registered by any plugin.");
^
Error: The requested platform 'MiRobotVacuumPlatform' was not registered by any plugin.
at API.platform (/usr/local/lib/node_modules/homebridge/lib/api.js:122:13)
at Server._loadPlatforms (/usr/local/lib/node_modules/homebridge/lib/server.js:294:45)
at Server.run (/usr/local/lib/node_modules/homebridge/lib/server.js:85:36)
at module.exports (/usr/local/lib/node_modules/homebridge/lib/cli.js:40:10)
at Object.<anonymous> (/usr/local/lib/node_modules/homebridge/bin/homebridge:17:22)
at Module._compile (module.js:556:32)
at Object.Module._extensions..js (module.js:565:10)
at Module.load (module.js:473:32)
at tryModuleLoad (module.js:432:12)
at Function.Module._load (module.js:424:3)
at Module.runMain (module.js:590:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3

Die jeweils unteren Bereiche der Fehlermeldung sagen uns nur, dass das Plugin nicht gefunden werden konnte. Der obere Bereich ist das Interessante …

TypeError: Path must be a string. Received undefined

Die Variable Path muss eine Zeichenfolge sein, wo möglich ist diese einfach nur leer und …

at userData (/usr/local/lib/node_modules/miio/node_modules/appdirectory/lib/appdirectory.js:21:29)

…, scheinbar ist eine Abhängigkeit des Paketes miio das Problem – appdirectory. In der Zeile 21 der JavaScript Datei wird das Homeverzeichnis des Benutzers ausgelesen, welches offensichtlich auf Fehler läuft, weshalb dann die Xiaomi-Plugins nicht geladen werden können.

Der Grund für das Problem ist, dass ich bei meiner Homebridge-Installation in dem Systemd-Service File die User Variable nicht gesetzt habe – dennoch läuft der Prozess unter „root“, aber das Homeverzeichnis kann von „appdirectory.js“ trotzdem nicht ermittelt werden. (Beitrag zur Einrichtung von Homebridge ist bereits korrigiert)

Lange Fehlersuche, schnelle und einfache Lösung: Im Systemd-Service File, in meinem Fall unter /etc/systemd/system/homebridge.service zu finden, einfach eine Zeile User=USERNAME im Bereich [Service] einfügen. Wenn Homebridge unter root laufen muss, weil beispielsweise Amazon Dash Buttons benutzt werden und man privilegierte Rechte benötigt, um den Netzwerkverkehr per Packet Capture (PCAP) auslesen zu können, kann einfach …

User=root

… eingefügt werden und ein …

systemctl daemon-reload
service homebridge restart

… reicht und schon sind die Fehlermeldungen verschwunden. Wenn Homebridge aber nicht unter root laufen muss, sollte man es auch nicht tun! In diesem Fall müssen wir zuerst einen passenden User anlegen und die Berechtigungen im Homebridge-Verzeichnis anpassen.

useradd --system homebridge -m -s /bin/bash
mkdir /home/homebridge/.homebridge/ 
chown -R homebridge:homebridge /home/homebridge
chown -R homebridge:homebridge /var/lib/homebridge

Nun die Dienstdatei anpassen …

vi /etc/systemd/system/homebridge.service
[Unit]
Description=Node.js HomeKit Server
After=syslog.target network-online.target

[Service]
Type=simple
User=homebridge
#User=root
EnvironmentFile=/etc/default/homebridge
# Adapt this to your specific setup (could be /usr/bin/homebridge)
# See comments below for more information
ExecStart=/usr/local/bin/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

… und ein Neustart des Dienstes löst unser Problem.

systemctl daemon-reload
service homebridge restart

Ich hoffe, ich konnte mit diesem Artikel ein paar Seelen helfen. 😉

Veröffentlicht von

_nico

Mac-User aus Leidenschaft, Blogger seit Oktober 2009, 88er Baujahr, technikaffin. Ich fühle mich aber nicht nur auf Apple'schen Betriebssystemen zu Hause, alles was eine Shell hat, interessiert mich besonders! Ihr findet mich auch auf Twitter und Google+.

Ein Gedanke zu „Homebridge – Xiaomi Mi Robot Vacuum Saugroboter – Fehlermeldungen“

  1. Ich stieß auf dasselbe Problem als ich versuchte einen Xiaomi Smart Plug über Homebridge einzubinden –
    Danke für diesen Artikel, du hast mich gerettet!!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert