Closed jonaschuba closed 3 years ago
Aktueller Error:
18:03:56.780 | info | javascript.0 (7467) Start javascript script.js.node-mihome |
---|---|---|
18:03:56.791 | error | javascript.0 (7467) script.js.node-mihome compile failed: at script.js.node-mihome:2 |
Die node-mihome wird nicht gefunden, das Script fängt gar nicht erst an was zu machen. Bitte mal auf Schreibfehler prüfen und wenn ok, das komplette system mal neustarten.
Nach Neustart tut sich immer noch nichts. Das zeigt der Log an: ` javascript.0 | 2021-02-04 18:18:48.488 | error | (1224) at process._tickCallback (internal/process/next_tick.js:68:7) |
---|---|---|---|
javascript.0 | 2021-02-04 18:18:48.488 | error | (1224) at promise.then (/opt/iobroker/node_modules/standard-as-callback/built/index.js:19:49) |
javascript.0 | 2021-02-04 18:18:48.488 | error | (1224) at tryCatcher (/opt/iobroker/node_modules/standard-as-callback/built/utils.js:11:23) |
javascript.0 | 2021-02-04 18:18:48.487 | error | (1224) at client.get (/opt/iobroker/node_modules/iobroker.js-controller/lib/states/statesInRedis.js:616:17) |
javascript.0 | 2021-02-04 18:18:48.487 | error | (1224) at adapter.getForeignState (/opt/iobroker/node_modules/iobroker.javascript/main.js:1238:17) |
javascript.0 | 2021-02-04 18:18:48.487 | error | (1224) at createProblemObject (/opt/iobroker/node_modules/iobroker.javascript/main.js:1722:17) |
javascript.0 | 2021-02-04 18:18:48.487 | error | (1224) at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:1621:37) |
javascript.0 | 2021-02-04 18:18:48.487 | error | (1224) at createVM (/opt/iobroker/node_modules/iobroker.javascript/main.js:1383:28) |
javascript.0 | 2021-02-04 18:18:48.487 | error | (1224) at Object.createScript (vm.js:277:10) |
javascript.0 | 2021-02-04 18:18:48.487 | error | (1224) at new Script (vm.js:83:7) |
javascript.0 | 2021-02-04 18:18:48.486 | error | (1224) SyntaxError: Unexpected string |
javascript.0 | 2021-02-04 18:18:48.486 | error | (1224) ^^^^^^^^^^^^^ |
javascript.0 | 2021-02-04 18:18:48.486 | error | (1224) const mihome = require'node-mihome'; |
javascript.0 | 2021-02-04 18:18:48.486 | error | at script.js.node-mihome:2 |
javascript.0 | 2021-02-04 18:18:48.486 | error | (1224) script.js.node-mihome compile failed: |
`
Hm, ich kann Dir da tatsächlich nicht helfen, weils halt kein Fehler im/vom Skript ist. Es scheint als würde die node-mihome entweder nicht oder nicht richtig laufen, das is aber ne systemseitige Sache. Schreib das Problem doch mal ins Forum, das lesen mehr als hier, evtl. hat einer ne Idee. Wichtig sind jetzt genaue Systemdaten, npm Version, js Adapterversion, Betriebssystem? Version? Raspi oder PC? Schreib das im Forum gleich dazu, inkl der Logs von hier, dann muss man weniger nachfragen. https://forum.iobroker.net/topic/39388/vorlage-xiaomi-airpurifier-3h-u-a-inkl-token-auslesen/47
So, es läuft jetzt, aber anscheinend gibt es keine Verbindung zu den Geräten.
Luftreiniger ist ein 2H. Luftbefeuchtern einMi Smart Antibacterial Humidor
Ja, das liegt am 2H, der ist zwar im Skript integriert, aber der PullRequest bei node-mihome noch nicht gemerged. Deswegen fehlt Dir da die Definitionsdatei. Die kannste Dir aber selber anlegen. Das hier unter dem Namen zhimi.airpurifier.mc2.js ins Verzeichnis /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-mihome/lib/devices/ Dann Js Controller neustarten, dann sollte das funktionieren.
const Device = require('../device-miio');
module.exports = class extends Device {
static model = 'zhimi.airpurifier.mc2';
static name = 'Mi Air Purifier 2H';
static image = 'https://static.home.mi.com/app/image/get/file/developer_15470144879uw2ei4h.png';
constructor(opts) {
super(opts);
this._propertiesToMonitor = [
'power',
'mode',
'favorite_level',
'temp_dec',
'humidity',
'aqi',
'average_aqi',
'buzzer',
'led',
'led_b',
'filter1_life',
'f1_hour',
'f1_hour_used',
'motor1_speed',
'child_lock',
];
}
getPower() {
return this.properties['power'] === 'on';
}
getMode() {
return this.properties['mode'];
}
getFavoriteLevel() {
return this.properties['favorite_level'];
}
getTemperature() {
return this.properties['temp_dec'] / 10;
}
getHumidity() {
return this.properties['humidity'];
}
getPM2_5() {
return this.properties['aqi'];
}
getAveragePM2_5() {
return this.properties['average_aqi'];
}
getLed() {
return this.properties['led'] === 'on';
}
getLedB() {
return this.properties['led_b'];
}
getBuzzer() {
return this.properties['buzzer'] === 'on';
}
getFilterRemaining() {
return this.properties['filter1_life'];
}
getFilterTotal() {
return this.properties['f1_hour'];
}
getFilterUsed() {
return this.properties['f1_hour_used'];
}
getMotorSpeed() {
return this.properties['motor1_speed'];
}
getChildLock() {
return this.properties['child_lock'] === 'on';
}
setPower(v) {
return this.miioCall('set_power', [v ? 'on' : 'off']);
}
setMode(v) {
return this.miioCall('set_mode', [v]);
}
setFavoriteLevel(v) {
return this.miioCall('set_level_favorite', [v]);
}
setLed(v) {
return this.miioCall('set_led', [v ? 'on' : 'off']);
}
setLedB(v) {
return this.miioCall('set_led_b', [v]);
}
setBuzzer(v) {
return this.miioCall('set_buzzer', [v ? 'on' : 'off']);
}
setChildLock(v) {
return this.miioCall('set_child_lock', [v ? 'on' : 'off']);
}
};
Danke, klappt. Gibts das auch für den Luftbefeuchtern?
Nutzt du die Geräte in Yahka? Kannst du mir von den Zuweisungen ein Screenshot machen? Danke!!!
Isch abe gar kein Yahka. Kann man das essen? Der Luftbefeuchter sollte eigentlich laufen, zumindest is der in node-mihome drin. Kann aber auch da sein dasses noch nicht gemergede Änderungen gab. Hier das File, abzuspeichern als deerma.humidifier.jsq.js
const Device = require('../device-miio');
module.exports = class extends Device {
static model = 'deerma.humidifier.jsq';
static name = 'Mi Smart Antibacterial Humidifier';
static image = 'https://cdn.awsde0.fds.api.mi-img.com/miio.files/developer_1584598944z7vf4g16.png';
constructor(opts) {
super(opts);
this._propertiesToMonitor = [
'limit_hum',
'power',
'humidity',
'temperature',
'buzzer',
'led',
'depth',
'dry',
'child_lock',
'mode',
];
}
getPower() {
const { power } = this.properties;
if (power === 'on') return true;
if (power === 'off') return false;
return undefined;
}
getFanLevel() {
const fanLevel = parseInt(this.properties['mode'], 10);
if (fanLevel >= 0) return fanLevel;
return undefined;
}
getTartgetHumidity() {
return this.properties['limit_hum'];
}
getWaterLevel() {
return this.properties['depth'];
}
getTemperature() {
return this.properties['temperature'];
}
getHumidity() {
return this.properties['humidity'];
}
getMode() {
const { dry } = this.properties;
if (dry === 'on') return 'dry';
if (dry === 'off') return 'humidify';
return undefined;
}
getChildLock() {
const childLock = this.properties['child_lock'];
if (childLock === 'on') return true;
if (childLock === 'off') return false;
return undefined;
}
getLedBrightness() {
const led = this.properties['led_b'];
if (led >= 0) return led;
return undefined;
}
getBuzzer() {
const { buzzer } = this.properties;
if (buzzer === 'on') return true;
if (buzzer === 'off') return false;
return undefined;
}
setPower(v) {
return this.miioCall('set_power', [v ? 'on' : 'off']);
}
setBuzzer(v) {
return this.miioCall('set_buzzer', [v]);
}
setFanLevel(v) {
return this.miioCall('set_mode', [v]);
}
setTargetHumidity(v) {
if ([30, 40, 50, 60, 70, 80].includes(v)) {
return this.miioCall('set_limit_hum', [v]);
}
return Promise.reject(new Error(`Invalid target humidity: ${v}`));
}
setLedBrightness(v) {
return this.miioCall('set_led_b', [String(v)]);
}
setChildLock(v) {
return this.miioCall('set_child_lock', [v ? 'on' : 'off']);
}
setMode(v) {
if (v === 'dry') {
return this.miioCall('set_dry', ['on']);
}
if (v === 'humidify') {
return this.miioCall('set_dry', ['off']);
}
return Promise.reject(new Error(`Invalid mode: ${v}`));
}
};
Mit Yahka meine ich den HomeKit Adapter
Hab ich trotzdem nicht.
Soweit funktioniert beim Luftreiniger jetzt alles, bis auf die Power Funktion. Egal ob 0 oder 1, der Luftreiniger tut nichts. Child-Lock ist auch nicht ansprechbar, stört mich aber nicht.
Zum Luftbefeuchtern kriege ich gar keine Verbindung.
Zeile 113 und 119, nimm mal hinten das (val ? 'on' : 'off') raus, so das wie bei den anderen Einträgen nur noch (val) steht, dann sollte power und childlock klappen. Zum Luftbefeuchter kann ich ohne Logs nix sagen.
Die Werte werden aktuell nicht mehr aktualisiert. Ordnerstruktur ist noch da, der Rest nicht mehr. Hast du eine Idee? 021-02-21 14:47:24.860 | error | at UDP.onMessage (dgram.js:921:8)
Irgendwelche updates, inbesonders vom JS Controller gemacht?
Nein.
Hab jetzt Javascript neuinstalliert und das Skript neu reingezogen. Vorher alles gelöscht.
Cannot find module 'node-mihome' or its corresponding type declarations.(2307) In der dritten Zeile des Scripts kriege ich den Error.
Naja, nachdem Du JS neu installiert hast, isses klar das node-mihome weg ist. Musst wieder eintragen und die beiden Files anlegen. Alternativ kannste meinen Fork verwenden, wie, siehe hier: https://github.com/Pittini/iobroker-nodemihome/issues/12
Skript hab ich neu angelegt und den Luftreiniger in den Ordner gezogen.
Nochmal. Hast Du die node-mihome wieder im JS Adapteradmin eingetragen?
Da hier nix mehr kommt, mach ich zu.
Hey, als absoluter Neuling habe ich mich an das Projekt des ioBrokers gewagt, Scheiter der vergeblich bei meinem Xiaomi Luftreiniger.
Ich habe in der Script-Engine "node-mihome" als Zusatzmodul eingetragen und die drei Häkchen gesetzt. Das Skript hab ich anschließend unter Skripte als JS eingefügt und ebenfalls "node-mihome" genannt. Dann bekommm ich jedoch ein Error raus.
Als Anfänger hab ich absolut keine Ahnung davon, wäre aber sehr cool, wenn du mir helfen könntest.
LG
Hier die Infos:
Geändertes im File: `const SkriptVersion = "0.2.8"; const mihome = require'node-mihome';
const username = 'jxxxx@googlemail.com'; const password = 'xxxx'; const options = { country: 'de' }; const refresh = 10000;
const praefix0 = "javascript.0.MiHomeAll";
const logging = true; //Logging aktivieren/deaktivieren `
`