NEWS
Adapter mihome-vacuum anpassungen
-
@dirkhe danke, ne sieht so gut aus. danke.
-
@dirkhe sagte in Adapter mihome-vacuum anpassungen:
Minuten können jetzt auf alle 5 Minuten eingestellt werden und der timer geht auch pünktlich los
@dirkhe Kann ich bestätigen.
Der Channel vom Raum muss den ioBroker Raum haben, nicht nur das mapindex Objekt.
Ich hab eben 3 Testtimer gebraucht, bei denen anfangs nur der mapindex den Raum kannte und es wurde keine Reinigung gestartet. Nur der Logeintrag für die vermeintliche Reinigung kam zum richtigen Zeitpunkt.
Erst wenn der Channel den Raum kennt, weiß der Adapter wirklich welcher Raum gemeint ist.
Daher wäre es cool wenn im Log bei der Zeile "set nächster Timer" gleich noch die Räume+Index mit ausgegeben würden.
Bei den fehlgeschlagenen Tests ist vollkommen unbekannt was der Adapter an den Sauger gesendet hat.
Loglevel Debug hab ich nicht aktiv. Vermutlich war es ein leeres "app_segment_clean". -
Hmmm, ich habe gerade nochmal in den code geschaut. Also der TimerManager merkt sich nur die id des Timers. Wenn er dann dran ist, wird anhand des timers ermittelt, welche Räume daran gepflegt sind. Da wird überall die gleiche Funktion genutzt, ob du bei einem Timer sofort starten auswählst oder ob du multiroomclean drückst. mit den Räumen wird intern "cleanRooms" aufgerufen. Der mach dann folgendes
was soviel heißt, wie gib mir die mapIndex Einträge aller Räume meines Adapters.
Dabei werdnen dann auch sofort die Räume mit ausgelesen. Dann frage ich von jedem zurückgegeben (mapIndex-)Objekt die Räume ab und vergleiche die mit den angeforderten. Das wird dann an "cleanSegments" direkt oder indirekt (bei einnem Treffer) übergeben.
Darum schreibe ich ins log auch nur, wann der nächste Timer (incl dessen id) losgeht. Der Raum interessiert mich da noch nicht.
Ich könnte aber in den commands noch eine Warnung ausgeben, wenn diese ohne Parameter aufgerufen würden. Zusätzlich könnte ich auch noch in den Namen des Channels timer die TimerID reinschreibenIch habe das gerade auch nochmal ausprobiert und bei mir funktioniert das auch mit dem Raum nur an mapIndex.
-
Ich habe jetzt nochmal die Warnings bei leeren Räumen/mapIndex mit reingepackt und einen PR gestellt.
-
@dirkhe Wenn alle Timer mal funktionieren, dann interessiere ich mich auch nicht mehr für Logeinträge. Am Ende stelle ich die meisten Adapter eh auf Loglevel warn. Da ich nun eine Lösung habe, die funktioniert, brauchst du da kein Aufwand betreiben. So wieder Adapter jetzt ist, ist er perfekt für mich. Ich brauche die MiHome App nun gar nicht mehr, außer vllt. mal für die Kartenbearbeitung.
D.h. sobald @Meistertr den PR merged müsste der offizielle Adapter alle deine Erweiterungen enthalten?
-
@dirkhe sagte in Adapter mihome-vacuum anpassungen:
Ich habe es bei mir gerade nochmal getestet und es funktioniert. Es ist doch ein Button, da musst du draufdrücken, im Prinzip wird das auf true gesetzt, das stimmt.
Setzte den adapter mal auf debug und schaue mal in Log oder poste es hierbekomme folgende Fehlermeldung:
mihome-vacuum.0 2020-01-17 20:06:25.148 error [189](unknown) -> data for segment is not a number mihome-vacuum.0 2020-01-17 20:06:25.147 debug Receive <<< {"error":{"code":-10000,"message":"data for segment is not a number"},"id":189}<<< 21310080000000000f9d2ccf5e2205b1896f24d2d6fc15813b1b98775008e4b00d55212412c09a0daa616947a3b1b72c0a841aac mihome-vacuum.0 2020-01-17 20:06:25.134 debug sendMsgRaw >>> 21310070000000000f9d2ccf5e2205b112e0cce154de492e8055bae31aab0352808c12daa905e370d2440111e12dcf7a828d84b4c97c92dddeb33a565971ab300ca8f55808a67fa5e20250d8e90be0b916c1cade5d1839e5e4e84ce4 mihome-vacuum.0 2020-01-17 20:06:25.134 debug sendMsg >>> {"id":189,"method":"app_segment_clean","params":[null,17,null,104]} mihome-vacuum.0 2020-01-17 20:06:25.133 debug Timestamp: 5e2205b1 mihome-vacuum.0 2020-01-17 20:06:25.133 debug trigger cleaning segment NaN,17,NaN,104 mihome-vacuum.0 2020-01-17 20:06:25.132 debug redis pmessage messagebox.system.adapter.mihome-vacuum.0 messagebox.system.adapter.mihome-vacuum.0 {"command":"cleanSegments","message":"NaN,17,NaN,104","from":"system.adapter.mihome-vacuum.0","_id" mihome-vacuum.0 2020-01-17 20:06:25.129 debug sendTo "cleanSegments" to system.adapter.mihome-vacuum.0 from system.adapter.mihome-vacuum.0: NaN,17,NaN,104 mihome-vacuum.0 2020-01-17 20:06:25.042 debug redis pmessage messagebox.system.adapter.mihome-vacuum.0 messagebox.system.adapter.mihome-vacuum.0 {"command":"cleanRooms","message":"enum.rooms.kitchen","from":"system.adapter.mihome-vacuum.0","_id mihome-vacuum.0 2020-01-17 20:06:25.040 debug sendTo "cleanRooms" to system.adapter.mihome-vacuum.0 from system.adapter.mihome-vacuum.0: enum.rooms.kitchen mihome-vacuum.0 2020-01-17 20:06:24.979 debug stateChange mihome-vacuum.0.rooms.multiRoomClean {"val":false,"ack":false,"ts":1579287984977,"q":0,"from":"system.adapter.admin.0","user":"system.user.admin","lc":1579287984977} mihome-vacuum.0 2020-01-17 20:06:24.978 debug redis pmessage io.mihome-vacuum.0.* io.mihome-vacuum.0.rooms.multiRoomClean {"val":false,"ack":false,"ts":1579287984977,"q":0,"from":"system.adapter.admin.0","user":"system.user.admin","lc":15792879
-
@mumurik hast du irgendwelche leeren mapindex, denen du einen Raum zugewiesen hast?
Ich sollte das zwar abfangen, wollte aber zumindest wissen, was die Ursache ist -
Ich habe gerade nochmal in den code geschaut. Ich fange das mittlerweile ab, kann das sein, dass du noch eine ältere Version hast?
-
@dirkhe sagte in Adapter mihome-vacuum anpassungen:
Ich habe gerade nochmal in den code geschaut. Ich fange das mittlerweile ab, kann das sein, dass du noch eine ältere Version hast?
nein, ich habe heute alles deinstalliert und die neueste Version gezogen.
Einen leeren Mapindex habe ich nicht, ich zeig dir am besten, wie es bei mir aussieht:
"roomClean" in jedem Zimmer funktioniert einwandfrei, wenn ich diesen auf true setze, aber "multiCleanRoom" funktioniert weder mit einem einzigen zugewiesenen Raum noch mit mehreren Räumen.
Was ich gerade getestet habe, auch der Timer funktionier nicht, für keinen Raum, egal welche ich auswähle...
Kann es sein, dass ich bei der Raumzuordnung/Benennung irgendetwas falsch gemacht habe bzw. dort noch irgendetwas verkehrt läuft?
-
Wenn ich mir oben das Log nochmal ansehe, wird da Nan,17,NaN,104 übergeben. Hast du wirklich einen Index von 104?
-
@dirkhe sagte in Adapter mihome-vacuum anpassungen:
Wenn ich mir oben das Log nochmal ansehe, wird da Nan,17,NaN,104 übergeben. Hast du wirklich einen Index von 104?
Nein, 104 ist eher die Saugstäkre, so ist es zumindest für diesen Raum (Raumindex 17) eingestellt
-
Bin jetzt echt verwirrt, denn er ruft ja cleanrooms mit dem Parameter Küche auf, das man man im Log ja sehen. Da n wird der Code, den ich weiter oben gespoilert habe aufgerufen. Wenn du sagst, dass die 104 die saugstärke ist, sieht das ja so aus, als wenn das getforeignstate nicht richtig funktionieren würde. Welche js-controller hast du denn installiert? Aber unabhängig davon, wird doch eindeutig auf Zahl, bzw nan geprüft...
Kannst du mal bitte in der iobroker/node_modules/ioBroker.mihome-vacuum.main.js nach dem Code von oben suchen, ob der da genauso drin steht? -
@dirkhe sagte in Adapter mihome-vacuum anpassungen:
Bin jetzt echt verwirrt, denn er ruft ja cleanrooms mit dem Parameter Küche auf, das man man im Log ja sehen. Da n wird der Code, den ich weiter oben gespoilert habe aufgerufen. Wenn du sagst, dass die 104 die saugstärke ist, sieht das ja so aus, als wenn das getforeignstate nicht richtig funktionieren würde. Welche js-controller hast du denn installiert? Aber unabhängig davon, wird doch eindeutig auf Zahl, bzw nan geprüft...
Kannst du mal bitte in der iobroker/node_modules/ioBroker.mihome-vacuum.main.js nach dem Code von oben suchen, ob der da genauso drin steht?habe den js-controller: 1.5.11
bei mir sieht die main.js tatsächlich etwas anders aus:
case 'cleanRooms': let rooms= obj.message // comma separated String with enum.rooms.XXX if (!rooms) return adapter.log.warn("cleanRooms needs paramter ioBroker room-id's") adapter.getForeignObjects(adapter.namespace + '.rooms.*.mapIndex', 'state', 'rooms', function (err, states) { if (states){ let mapIndex= []; for ( let stateId in states){ for ( let r in states[stateId].enums) if (rooms.indexOf(r) >= 0) mapIndex.push(stateId) } if (mapIndex.length == 1){ // trigger button, because than the fan_power will also set adapter.setForeignState(mapIndex[0].replace('.mapIndex','.roomClean'), true, false); } else if (mapIndex.length > 0){ adapter.getForeignStates(mapIndex, function(err,states){ mapIndex= []; for ( let stateId in states){ let val= parseInt(states[stateId].val,10) if (val != NaN) mapIndex.push(val) } adapter.sendTo(adapter.namespace, "cleanSegments",mapIndex.join(',')) }) } else adapter.log.warn('cleanRooms found no mapIndex for ' + rooms) } else adapter.log.warn("cleanRooms found no room-channel with mapIndex") }); return;
schon ab der Zeile 3...
-
-
Also der code ist schon der richtige, der ist sogar schon neuer. Auf jeden Fall ist die Abfrage da schon drin. Ob es Unterschiede bei den controllern gibt, muss ich jetzt erstmal checken, darum wollte ich ja die Version haben. Ich meld mich dazu
-
@Diginix sagte in Adapter mihome-vacuum anpassungen:
@mumurik Dann solltest du den Adapter mal mit der GIT URL installieren und danach noch mal beim Adapter auf das Upload Icon klicken. Danach nochmal die main.js checken. Ob der alte JS-Controller das ganze auch noch beeinflusst weiß nur @dirkhe .
genauso bitte ich die ganze Zeit auch vorgegangen...
-
@mumurik Teste bitte mal folgendes:
Du gehst in die config des Adapters (am besten mit chrome)
dann drückst du F12, damit du in die Entwickler tools kommst:
da gehst du auf console und wählst den content iframe aus. Dann gibst du rechts folgendes einsocket.emit('getObjectView', 'system', 'state', { startkey: namespace + 'rooms..mapIndex', endkey: namespace + 'rooms.\u9999.mapIndex' }, function (err, states) { console.log(states) });
und postest das Ergebnis
-
socket.emit('getObjectView', 'system', 'state', { startkey: namespace + 'rooms..mapIndex', endkey: namespace + 'rooms.\u9999.mapIndex' }, function (err, states) { console.log(states) }); n {io: n, nsp: "/", json: n, ids: 7, acks: {…}, …} VM267:4 {rows: Array(27)} rows: Array(27) 0: {id: "mihome-vacuum.0.rooms.loadRooms", value: {…}} 1: {id: "mihome-vacuum.0.rooms.multiRoomClean", value: {…}} 2: {id: "mihome-vacuum.0.rooms.addRoom", value: {…}} 3: {id: "mihome-vacuum.0.rooms.137001123082.mapIndex", value: {…}} 4: {id: "mihome-vacuum.0.rooms.137001123082.roomClean", value: {…}} 5: {id: "mihome-vacuum.0.rooms.137001074750.mapIndex", value: {…}} 6: {id: "mihome-vacuum.0.rooms.137001074750.roomClean", value: {…}} 7: {id: "mihome-vacuum.0.rooms.137001074749.mapIndex", value: {…}} 8: {id: "mihome-vacuum.0.rooms.137001074749.roomClean", value: {…}} 9: {id: "mihome-vacuum.0.rooms.137001123083.mapIndex", value: {…}} 10: {id: "mihome-vacuum.0.rooms.137001123083.roomClean", value: {…}} 11: {id: "mihome-vacuum.0.rooms.137001123081.mapIndex", value: {…}} 12: {id: "mihome-vacuum.0.rooms.137001123081.roomClean", value: {…}} 13: {id: "mihome-vacuum.0.rooms.137001068653.mapIndex", value: {…}} 14: {id: "mihome-vacuum.0.rooms.137001068653.roomClean", value: {…}} 15: {id: "mihome-vacuum.0.rooms.137001102054.mapIndex", value: {…}} 16: {id: "mihome-vacuum.0.rooms.137001102054.roomClean", value: {…}} 17: {id: "mihome-vacuum.0.rooms.137001102055.mapIndex", value: {…}} 18: {id: "mihome-vacuum.0.rooms.137001102055.roomClean", value: {…}} 19: {id: "mihome-vacuum.0.rooms.137001123082.roomFanPower", value: {…}} 20: {id: "mihome-vacuum.0.rooms.137001074750.roomFanPower", value: {…}} 21: {id: "mihome-vacuum.0.rooms.137001074749.roomFanPower", value: {…}} 22: {id: "mihome-vacuum.0.rooms.137001123083.roomFanPower", value: {…}} 23: {id: "mihome-vacuum.0.rooms.137001123081.roomFanPower", value: {…}} 24: {id: "mihome-vacuum.0.rooms.137001068653.roomFanPower", value: {…}} 25: {id: "mihome-vacuum.0.rooms.137001102054.roomFanPower", value: {…}} 26: {id: "mihome-vacuum.0.rooms.137001102055.roomFanPower", value: {…}} length: 27 __proto__: Array(0) __proto__: Object
-
das scheint, wie vermutet ein bug im JS-controller zu sein, der in der 2er version gefixt ist. Ich baue mal noch eine extra Abfrage ein, die nochmal auf mapIndex filtert
-
@dirkhe
super, danke!