NEWS
Script Xiaomi Battery leer ?
Script Xiaomi Battery leer ?
-
@Glasfaser
Muss mich entschuldigen. Ich habe mich im Gerät geirrt. Du hattest völlig recht:
Scheint als hat de Fernbedienung keinen Empfang und sendet daher weder true noch false.
-
@Glasfaser
Muss mich entschuldigen. Ich habe mich im Gerät geirrt. Du hattest völlig recht:
Scheint als hat de Fernbedienung keinen Empfang und sendet daher weder true noch false.
-
@Glasfaser
Der Datenpunkt ist ein Homematic Schaltaktor. Der hat, wie andere Geräte auch, keinen Batteriestatus. Warum stört sich das Skript daran?
Darüber hinaus funktioniert die Bedingung ( == true) nicht. Es werden schlussendlich alle Homematicgeräte mit LOWBAT gelistet, auch die die false sind...@passuff sagte in Script Xiaomi Battery leer ?:
Darüber hinaus funktioniert die Bedingung ( == true) nicht. Es werden schlussendlich alle Homematicgeräte mit LOWBAT gelistet, auch die die false sind...
Das erschließt sich mir allerdings immer noch nicht...
-
@passuff sagte in Script Xiaomi Battery leer ?:
Darüber hinaus funktioniert die Bedingung ( == true) nicht. Es werden schlussendlich alle Homematicgeräte mit LOWBAT gelistet, auch die die false sind...
Das erschließt sich mir allerdings immer noch nicht...
-
Kann leider nicht testen , da ich gerade keine leere Batterie habe , aber dein Script läuft ohne Fehler bei mir im LOG .
Ich habe auch keine leere Batterie. Dennoch habe ich im erzeugten Datenpunkt alle HM Geräte gelistet..
-
Ich habe auch keine leere Batterie. Dennoch habe ich im erzeugten Datenpunkt alle HM Geräte gelistet..
-
Wollte jetzt den Raumnamen entfernen aber irgendwie habe ich das skript zerschossen:
const idVis = 'Batterie.HomematicBatterietausch'; const batt = $('hm-rpc.0.*.LOWBAT'); createState(idVis, '', {type: 'string'}); function lowBatt() { console.log('lowbat Homematic wird ausgeführt'); var low = []; batt.each(function (id, i) { if(getState(id).val == true) { id = id.split('.'); id = 'hm-rpc.0.' + id[2]; low.push(getObject(id).common.name); // Kanal-Name: Raum } }); setState(idVis, low.join(','), true); } schedule('*/5 * * * * *', lowBatt); // jeden Tag //schedule('{"time":{"exactTime":true,"start":"18:00"},"period":{"days":1}}', lowBatt)Folgendes Warn im Log:
javascript.0 2019-08-04 21:53:45.008 warn at Timer.processTimers (timers.js:223:10)
javascript.0 2019-08-04 21:53:45.008 warn at listOnTimeout (timers.js:263:5)
javascript.0 2019-08-04 21:53:45.008 warn at tryOnTimeout (timers.js:300:5)
javascript.0 2019-08-04 21:53:45.007 warn at ontimeout (timers.js:436:11)
javascript.0 2019-08-04 21:53:45.007 warn at Timeout._onTimeout (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:501:7)
javascript.0 2019-08-04 21:53:45.007 warn at /opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:543:11
javascript.0 2019-08-04 21:53:45.007 warn at Job.invoke (/opt/iobroker/node_modules/iobroker.javascript/node_modules/node-schedule/lib/schedule.js:173:10)
javascript.0 2019-08-04 21:53:45.007 warn at Job.nodeSchedule.scheduleJob [as job] (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:1191:34)
javascript.0 2019-08-04 21:53:45.007 warn at Object.lowBatt (script.js.common.Batteriestatus.Batteriestatus_Homematic:9:10)
javascript.0 2019-08-04 21:53:45.007 warn at Object.result.each (/opt/iobroker/node_modules/iobroker.javascript/lib/sandbox.js:778:29)
javascript.0 2019-08-04 21:53:45.006 warn at script.js.common.Batteriestatus.Batteriestatus_Homematic:10:5
javascript.0 2019-08-04 21:53:45.004 warn getState "hm-rpc.0.PEQ0508233.0.LOWBAT" not found (3) states[id]=null
javascript.0 2019-08-04 21:53:45.001 info script.js.common.Batteriestatus.Batteriestatus_Homematic: lowbat Homematic wird ausgeführt -
Das führt lediglich dazu, dass die Fehlermeldungen verschwinden. Die Bedingung wird immer noch falsch ausgewertet bzw alle Sensoren werden als lowbat = true erkannt.
-
@passuff sagte:
alle Sensoren werden als lowbat = true erkannt.
Wie sieht das Log aus, wenn in Zeile 10 ein zusätzliches Log eingefügt wird ?
batt.each(function (id, i) { log(id + ': ' + getState(id).val); -
@paul53 sagte in Script Xiaomi Battery leer ?:
log(id + ': ' + getState(id).val);
"23:57:50.014 info javascript.0 script.js.common.Batteriestatus.Batteriestatus_Homematic: hm-rpc.0.OEQ0708741.0.LOWBAT: true"

-
@passuff
Es liefern zwar viele, aber nicht alle LOWBAT true. Es liegt nicht am Skript. Hast Du mal die JS-Instanz neu gestartet ? -
@passuff
Und trotzdem weicht die Log-Ausgabe so stark von den angezeigten Werten im Reiter "Objekte" (auch in der Statusansicht) ab ? Dann bin ich mit meinem Latein am Ende
-
-
@passuff sagte:
Was ist "hm-rpc.0.OEQ0672249" für ein Gerät, das in den Kanälen 0 bis 5 ein LOWBAT hat ? Hat es wirklich mehrere Batterien ?
Außerdem gibt es mehrere Geräte mit Kanal 0.LOWBAT = true und Kanal 1.LOWBAT = false. Welche Geräte sind das ?@paul53 sagte in Script Xiaomi Battery leer ?:
@passuff sagte:
Was ist "hm-rpc.0.OEQ0672249" für ein Gerät, das in den Kanälen 0 bis 5 ein LOWBAT hat ? Hat es wirklich mehrere Batterien ?
Nein. Das ist ein Fehler im RPC. Hat mich aber nie gestört. Es ist ein Differenztemperatursensor HM-WDS30-OT2-SMAußerdem gibt es mehrere Geräte mit Kanal 0.LOWBAT = true und Kanal 1.LOWBAT = false. Welche Geräte sind das ?
HM-Sec-SCo
Auch diese haben zwei LOWBAT DP. Beide stehen auf false.
Hier vermute ich ein Bug in dem neuen Node, das ist mir vorher nicht aufgefallen. Andere Erklärung habe ich dafür aktuell nicht.OEQ0860057 Heizkörperthermostat steht tatsächlich auf true.
OEQ1359645, OEQ1360423 sind schaltbare Steckdosen. Diese haben (warum auch immer ) einen LOWBAT DP, dieser steht aber auf false.Bei allen restlichen Geräten steht LOWBAT auf false.
Ich mache nun erst mal einen Downgrade vom NodeJS -
Nach dem downgrade von NodeJS auf 10.16.0 funktioniert wieder alles:
EDIT: Nach einem erneuten Update mit rest eller module in nodes_modules funktioniert es jetzt. NPM Rebuild alleine reichte wohl nicht.
Jetzt funktioniert wieder alles so wie es soll und ich bin auf nidejs 10.16.1 -
Hi, hier mal mein Ansatz. Ich prüfe alle 2 Stunden den Batteriestand über einen Cronjob. Den Abstand kann man natürlich noch vergrößern. Hat den Vorteil das man das Script relativ schnell um neue Geräte erweitern kann.

@lesiflo
hallo, wollte mir das nachbauen. Jedoch was ist genau mit "steuere Alarmliste" und "steuere Alarme" gemeint.
Was muss ich machen um das auswählen zu können? Ich verstehe den Zweck nicht was damit gemeint wird und wie das funktioniert.
Und kann man sich das Ergebniss auch als E Mail schicken lassen? Wo käme der Baustein dann hin.
Das Bild meine ich:
https://forum.iobroker.net/assets/uploads/files/1550232996624-batterien.jpg

