NEWS
[Vorlage] Xiaomi Airpurifier 3H u.a. inkl. Token auslesen.
-
Habe versucht wie folgt das Script zu installiere:
- Javascript adapter 4.8.4
- "node-mihome" beim Javascript Adapter unter "Zusätzliche NPM-Module" eingetragen
- Das Script in raw von https://raw.githubusercontent.com/Pittini/iobroker-nodemihome/main/AllMyMi-V0.2.5.js Als neues Javascript script angelegt
- user und passw eingetragen. country auf de belassen.
Bekomme aber folgenden Fehler:
2021-01-20 13:12:44.977 - info: javascript.0 (15537) Start javascript script.js.VIS.Xiaomi.AllMyMi 2021-01-20 13:12:45.223 - error: javascript.0 (15537) script.js.VIS.Xiaomi.AllMyMi: Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/lib/../../node-mihome' 2021-01-20 13:12:45.224 - error: javascript.0 (15537) at script.js.VIS.Xiaomi.AllMyMi:3:16 2021-01-20 13:12:45.225 - error: javascript.0 (15537) at Script.runInContext (vm.js:133:20) 2021-01-20 13:12:45.226 - info: javascript.0 (15537) script.js.VIS.Xiaomi.AllMyMi: Starting AllMyMi V.0.2.5 2021-01-20 13:12:45.227 - info: javascript.0 (15537) script.js.VIS.Xiaomi.AllMyMi: Reaching init 2021-01-20 13:12:45.233 - info: javascript.0 (15537) script.js.VIS.Xiaomi.AllMyMi: registered 0 subscriptions and 0 schedules 2021-01-20 13:12:45.238 - error: javascript.0 (15537) script.js.VIS.Xiaomi.AllMyMi: TypeError: Cannot read property 'miioProtocol' of undefined 2021-01-20 13:12:45.239 - error: javascript.0 (15537) at Init (script.js.VIS.Xiaomi.AllMyMi:586:12) 2021-01-20 13:12:45.240 - error: javascript.0 (15537) at script.js.VIS.Xiaomi.AllMyMi:67:1 2021-01-20 13:12:45.240 - error: javascript.0 (15537) at Script.runInContext (vm.js:133:20)
inden logs habe ich gesehen, dass es so installiert wurde, läuft auch ohne Fehler wenn ich es manuell ausführe
npm install node-mihome --production --prefix "/opt/iobroker/node_modules/iobroker.javascript"find . -name node-mihome ./node_modules/iobroker.javascript/node_modules/node-mihome
Was habe ich übersehen?
-
wenn ich den require ändere auf:
const mihome = require('iobroker.javascript/node_modules/node-mihome');bekomme ich folgenden Fehler:
2021-01-20 13:59:22.353 - error: javascript.0 (22232) script.js.VIS.Xiaomi.testMii: /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/devices/deerma.humidifier.jsq.js:5 2021-01-20 13:59:22.353 - error: javascript.0 (22232) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) 2021-01-20 13:59:22.353 - error: javascript.0 (22232) at Module.load (internal/modules/cjs/loader.js:653:32) 2021-01-20 13:59:22.354 - error: javascript.0 (22232) at tryModuleLoad (internal/modules/cjs/loader.js:593:12) 2021-01-20 13:59:22.354 - error: javascript.0 (22232) at Function.Module._load (internal/modules/cjs/loader.js:585:3) 2021-01-20 13:59:22.354 - error: javascript.0 (22232) at Module.require (internal/modules/cjs/loader.js:692:17) 2021-01-20 13:59:22.354 - error: javascript.0 (22232) at require (internal/modules/cjs/helpers.js:25:18) 2021-01-20 13:59:22.354 - error: javascript.0 (22232) at glob.sync.forEach.modelPath (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/models.js:9:23) 2021-01-20 13:59:22.355 - error: javascript.0 (22232) at Array.forEach (<anonymous>) ...
-
@m76 Hast Du den JS-Adapter danach einmal komplett neu gestartet?
Gruß, Jürgen
-
hi, ja, ich hatte den erst in compact mode. Verursachte aber Probleme, startete sich immer wieder neu.
Ich hatte auch probiert:
npm install node-mihome --production --prefix "/opt/iobroker/node_modules/iobroker.javascript"
(wie gesehen im log - keine Auffälligkeiten)
npm install node-mihome
Letzteres brachtre gleiche Fehlermeldung wenn ichmich nicht irre als wie mit dem "require". -
@m76 Wie sieht es bei Dir im iobroker unter "/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/devices/" aus. Hast Du da die devices als einzelne Dateien?
Gruss, Jürgen
-
Hallo Gemeinde,
ich versuche das Skript auf meinem Pi4 laufen zu lassen (JS 4.8.4, node-mihome da drin eingetragen, user/pass im Skript)Ich bekomme aber nur Fehler beim Skriptstart. Was habe ich vergessen?
vg
Svenjavascript.0 2021-01-28 15:17:41.974 error (2380) at Script.runInContext (vm.js:133:20)
javascript.0 2021-01-28 15:17:41.974 error (2380) at script.js.skripte.Allgemein.Purify:3:16
javascript.0 2021-01-28 15:17:41.974 error (2380) at require (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:389:36)
javascript.0 2021-01-28 15:17:41.973 error (2380) at require (internal/modules/cjs/helpers.js:25:18)
javascript.0 2021-01-28 15:17:41.973 error (2380) at Module.require (internal/modules/cjs/loader.js:692:17)
javascript.0 2021-01-28 15:17:41.973 error (2380) at Function.Module._load (internal/modules/cjs/loader.js:585:3)
javascript.0 2021-01-28 15:17:41.973 error (2380) at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
javascript.0 2021-01-28 15:17:41.973 error (2380) at Module.load (internal/modules/cjs/loader.js:653:32)
javascript.0 2021-01-28 15:17:41.973 error (2380) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
javascript.0 2021-01-28 15:17:41.972 error (2380) at Module._compile (internal/modules/cjs/loader.js:778:30)
javascript.0 2021-01-28 15:17:41.972 error (2380) at Object.<anonymous> (/opt/iobroker/node_modules/node-mihome/lib/index.js:5:16)
javascript.0 2021-01-28 15:17:41.972 error (2380) at require (internal/modules/cjs/helpers.js:25:18)
javascript.0 2021-01-28 15:17:41.972 error (2380) at Module.require (internal/modules/cjs/loader.js:692:17)
javascript.0 2021-01-28 15:17:41.972 error (2380) at Function.Module._load (internal/modules/cjs/loader.js:585:3)
javascript.0 2021-01-28 15:17:41.972 error (2380) at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
javascript.0 2021-01-28 15:17:41.972 error (2380) at Module.load (internal/modules/cjs/loader.js:653:32)
javascript.0 2021-01-28 15:17:41.971 error (2380) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
javascript.0 2021-01-28 15:17:41.971 error (2380) at Module._compile (internal/modules/cjs/loader.js:778:30)
javascript.0 2021-01-28 15:17:41.971 error (2380) at Object.<anonymous> (/opt/iobroker/node_modules/node-mihome/lib/device.js:1:16)
javascript.0 2021-01-28 15:17:41.971 error (2380) at require (internal/modules/cjs/helpers.js:25:18)
javascript.0 2021-01-28 15:17:41.971 error (2380) at Module.require (internal/modules/cjs/loader.js:692:17)
javascript.0 2021-01-28 15:17:41.971 error (2380) at Function.Module._load (internal/modules/cjs/loader.js:585:3)
javascript.0 2021-01-28 15:17:41.970 error (2380) at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
javascript.0 2021-01-28 15:17:41.970 error (2380) at Module.load (internal/modules/cjs/loader.js:653:32)
javascript.0 2021-01-28 15:17:41.970 error (2380) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
javascript.0 2021-01-28 15:17:41.970 error (2380) at Module._compile (internal/modules/cjs/loader.js:778:30)
javascript.0 2021-01-28 15:17:41.970 error (2380) at Object.<anonymous> (/opt/iobroker/node_modules/node-mihome/lib/models.js:6:54)
javascript.0 2021-01-28 15:17:41.970 error (2380) at Array.forEach (<anonymous>:null:null)
javascript.0 2021-01-28 15:17:41.969 error (2380) at glob.sync.forEach.modelPath (/opt/iobroker/node_modules/node-mihome/lib/models.js:9:23)
javascript.0 2021-01-28 15:17:41.969 error (2380) at require (internal/modules/cjs/helpers.js:25:18)
javascript.0 2021-01-28 15:17:41.969 error (2380) at Module.require (internal/modules/cjs/loader.js:692:17)
javascript.0 2021-01-28 15:17:41.969 error (2380) at Function.Module._load (internal/modules/cjs/loader.js:585:3)
javascript.0 2021-01-28 15:17:41.969 error (2380) at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
javascript.0 2021-01-28 15:17:41.968 error (2380) at Module.load (internal/modules/cjs/loader.js:653:32)
javascript.0 2021-01-28 15:17:41.968 error (2380) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
javascript.0 2021-01-28 15:17:41.968 error (2380) script.js.skripte.Allgemein.Purify: /opt/iobroker/node_modules/node-mihome/lib/devices/imibar.cooker.mbihr3.js:26 -
@ahzurdan Wie ich grad auf Git schon schrieb:
(2380) at script.js.skripte.Allgemein.Purify:3:16 is das Problem, was danach kommt sind folgefehler würd ich sagen. Zeile 3 is dasconst mihome = require('node-mihome');
Also passt iwas mit node-mihome nicht. Auch seltsam ist der Pfad den ich im letzten Logeintrag seh, bei mir sieht der so aus,
/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/devices/
aber evtl. is das wegen pi. Jedenfalls, das Problem is nicht das Skript, sondern die Einbindung von node-mihome -
@pittini Habe beim Skript folgenden Fehler,,, Das hängt wohl mit dem Yeelight Bulp 2 (farbige Lampe) zusammen...
20:53:11.425 error javascript.0 (11255) script.js.common.Wohnung_Anja_und_Volker.Heizungssteuerung.Schlafzimmer.Ventilator_4: Error: Model yeelink.light.color2 is not supported 20:53:11.427 error javascript.0 (11255) at CreateDevices (script.js.common.Wohnung_Anja_und_Volker.Heizungssteuerung.Schlafzimmer.Ventilator_4:598:36) 20:53:11.428 error javascript.0 (11255) at main (script.js.common.Wohnung_Anja_und_Volker.Heizungssteuerung.Schlafzimmer.Ventilator_4:530:5)
-
@hilde0407 Hm ja, das ist weil der node-mihome Entwickler nach kurzem röcheln wieder in Winterschlaf verfallen ist und weder Issue noch prs bearbeitet. Schnellste Lösung: Das hier unter dem Namen yeelink.light.color2.js ins Verzeichnis /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/devices/
Dann Js Controller neustarten, dann sollte die funktionieren mit Ausnahme Farbe einstellen, das hab ich noch ned rausgefunden was da erwartet wird.const Device = require('../device-miio'); const { withLightEffect } = require('../utils'); module.exports = class extends Device { static model = 'yeelink.light.color2'; static name = 'Yeelight LED Bulb (Color)'; static image = 'http://static.home.mi.com/app/image/get/file/developer_15233531497uxs6o06.png'; constructor(opts) { super(opts); // this._miotSpecType = 'urn:miot-spec-v2:device:light:0000A001:yeelink-color2:1'; this._propertiesToMonitor = [ 'power', 'bright', 'rgb', 'color_mode', 'ct']; } getPower() { const { power } = this.properties; if (power === 'on') return true; if (power === 'off') return false; return undefined; } getBrightness() { const brightness = parseInt(this.properties.bright, 10); if (brightness >= 0) return brightness; return undefined; } getColorRgb() { const colorRgb = parseInt(this.properties.rgb, 10); if (colorRgb >= 1) return colorRgb; return undefined; } getMode() { const mode = parseInt(this.properties.color_mode, 10); if (mode >= 1) return mode; return undefined; } getCt() { const ct = parseInt(this.properties['color-temperature'], 10); if (ct >= 1700) return ct; return undefined; } setPower(v) { return this.miioCall('set_power', withLightEffect(v ? 'on' : 'off')); } setBrightness(v) { return this.miioCall('set_bright', withLightEffect(v)); } setColorRgb(v) { this._miioCall('set_rgb', withLightEffect(v.rgb)); } setMode(v) { return this.miioCall('set_color_mode', withLightEffect(v)); } setCt(v) { return this.miioCall('set_color-temperature', withLightEffect(v)); } };
-
@pittini Vielen Dank!
-
@pittini Deine Anleitung hat funktioniert! Mein Problem, nicht nur bei den Lampen (auch beim Ventilator) ist, dass die aktuellen Zustände nicht auf die Datenpunkte übertragen werden. Gibt es da auch eine Lösung?
-
@hilde0407 sagte in [Vorlage] Xiaomi Airpurifier 3H u.a. inkl. Token auslesen.:
Gibt es da auch eine Lösung?
Bestimmt. Aber bestimmt nicht ohne Log und etwas genauerer Erklärung was passiert und was nicht.
-
Hallo zusammen,
erstmal vielen Dank für das Script @Pittini . Ich habe es mal mit meinem 3H getestet und funktioniert soweit echt gut.
Was mir aber sofort aufgefallen ist, ist die Verwendung von "setObject" im Script.
Dies hatte ich bisher im JS-Adapter nicht aktiviert, da dies ja auch aus "Sicherheitsgründen" standardmäßig deaktiviert ist.Wäre es vielleicht sinnvoll/möglich dies in der Form nicht zu verwenden?
Wenn ich die Object-Schemabeschreibung richtig verstehe, ist diese Funktion auch nicht für solche Scripte gedacht und "eigentlich" den Adaptern vorbehalten.
https://www.iobroker.net/#de/documentation/dev/objectsschema.md#ObjekttypenGibt es ggf. einen techn. Grund, warum diese Funktion verwendet werden muss?
Wenn ja, wäre es nicht etwas "sicherer" die Funktion "extendObject" zu verwenden?
https://github.com/ioBroker/ioBroker.javascript/blob/master/docs/en/javascript.md#extendObjectFalls es sich wirklich nicht vermeiden lässt, sollte dies vielleicht auch in die Installationsanleitung mit aufgenommen werden.
Gruß
Esche -
@esche sagte in [Vorlage] Xiaomi Airpurifier 3H u.a. inkl. Token auslesen.:
Hallo zusammen,
erstmal vielen Dank für das Script @Pittini . Ich habe es mal mit meinem 3H getestet und funktioniert soweit echt gut.
Was mir aber sofort aufgefallen ist, ist die Verwendung von "setObject" im Script.
Dies hatte ich bisher im JS-Adapter nicht aktiviert, da dies ja auch aus "Sicherheitsgründen" standardmäßig deaktiviert ist.Ja, das sollte ich evtl. mal in der Doku dazu schreiben.
Wäre es vielleicht sinnvoll/möglich dies in der Form nicht zu verwenden?
Wenn Du einen anderen/besseren Weg kennst aus einem Ordner der beim Datenpunktanlegen miterstellt wird, einen Channel oder Device zu machen und nen Namen zu geben....bitte ich höre.Wenn ich die Object-Schemabeschreibung richtig verstehe, ist diese Funktion auch nicht für solche Scripte gedacht und "eigentlich" den Adaptern vorbehalten.
https://www.iobroker.net/#de/documentation/dev/objectsschema.md#ObjekttypenEs gibt tatsächlich Funktionen welche Adaptern vorbehalten sind. Diese sind auch nur in Adaptern zugänglich. setObjekt is zugänglich also legitim zu verwenden und auch nötig einzusetzen.
-
@pittini said in [Vorlage] Xiaomi Airpurifier 3H u.a. inkl. Token auslesen.:
….auch nötig einzusetzen.
Darf ich fragen warum es unbedingt nötig ist? Warum muss das Objekt unbedingt ein Channel/Device sein und kein State?
-
@esche Die Antwort steht in dem von Dir propagierten Link https://www.iobroker.net/#de/documentation/dev/objectsschema.md#Objekttypen
Objekttypen
state - Datenpunkt. Eltern sollten vom Typ Kanal, Gerät, Instanz oder Host sein
channel - Objekt zum Gruppieren eines oder mehrerer Datenpunkte. Eltern sollten Gerät sein.
device - Objekt zum Gruppieren eines oder mehrerer Kanäle oder Datenpunkte. Sollte außer dem Adapterinstanz-Namespace kein übergeordnetes Element haben. -
Moin!
Habe leider auch das Problem auf meinem Hauptsystem mi-home zum laufen zu bekommen...
- mi-home im JavaScript Adapter eingefügt, Script gestartet
-> Fehler im Log:
javascript.0 2021-02-15 10:20:24.169 error (179) script.js._Testing.mihome: Error: Cannot find module '/usr/local/iobroker/node_modules/iobroker.javascript/lib/../../node-mihome'
mi-home liegt bei mir allerdings unter:
'/usr/local/iobroker/node_modules/iobroker.javascript/node_modules/node-mihomeKann man den Pfad umbiegen?
Danke Euch!
Mr.Lee -
Nachtrag:
Wenn ich den pfad im require auf:
const mihome = require('iobroker.javascript/node_modules/node-mihome/');
dann kommt im log:
javascript.2 2021-02-15 10:40:12.688 error (7570) at Object.<anonymous> (/usr/local/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/models.js:6:54) javascript.2 2021-02-15 10:40:12.688 error (7570) at Array.forEach (<anonymous>:null:null) javascript.2 2021-02-15 10:40:12.688 error (7570) at glob.sync.forEach.modelPath (/usr/local/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/models.js:9:23) javascript.2 2021-02-15 10:40:12.687 error (7570) at require (internal/modules/cjs/helpers.js:25:18) javascript.2 2021-02-15 10:40:12.687 error (7570) at Module.require (internal/modules/cjs/loader.js:692:17) javascript.2 2021-02-15 10:40:12.687 error (7570) at Function.Module._load (internal/modules/cjs/loader.js:585:3) javascript.2 2021-02-15 10:40:12.686 error (7570) at tryModuleLoad (internal/modules/cjs/loader.js:593:12) javascript.2 2021-02-15 10:40:12.686 error (7570) at Module.load (internal/modules/cjs/loader.js:653:32) javascript.2 2021-02-15 10:40:12.686 error (7570) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) javascript.2 2021-02-15 10:40:12.685 error (7570) script.js._Testing.mihome: /usr/local/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/devices/deerma.humidifier.jsq.js:5```
-
@mrlee
Habe leider das gleiche Problem. Testweise habe ich eine neue VM aufgesetzt und iobroker frisch installiert, dann gehts ohne Probleme. Meine Installation hat schon einige Zeit auf dem Buckel, kann es vielleicht ein das durch die ganzen Updates irgend wo mal was "hängen" geblieben ist?Vielleicht kommt ja hier noch eine Lösung, ich denke ich werd aber jetzt mal versuchen wie es sich verhält wenn man ein Backup vom nicht funktionierenden System in die VM einspielt.
-
@christian-maurer Wie schon erwähnt, weder kann ichs reproduzieren noch isses ein Skriptfehler an sich. Ich hab absolut keine Ahnung warum das bei einigen vollkommen problemlos geht und bei anderen son Gedöns ist, evtl. hat @apollon77 oder @Dutchman ne spontane Idee dazu?
Aber wir können ja derweil mal ne blöde Idee ausprobieren, was passiert denn wenn Du meine Fork, statt der orig. node-mihome im Adapteradmin angibst?