NEWS
UNSOLVED Script Xiaomi Battery leer ?
-
@karstent so sieht es bei mir aus:
-
@ilovegym sagte in Script Xiaomi Battery leer ?:
Hi,
ich verwende dafür dieses Javascript, das alle xiaomi-batterie States scannt und dann in einen Datenpunkt schreibt, wo die Batterie leer ist.
Funktioniert auch prima mit fritzdect, muss nur der State geändert werden.const idVis = 'Batterie.MiHomeBatterietausch'; const batt = $('mihome.0.*.percent'); createState(idVis, '', {type: 'string'}); function lowBatt() { var low = []; batt.each(function (id, i) { if(getState(id).val < 30) { id = id.split('.'); id = 'mihome.0.' + id[2] + '.' + id[3]; low.push(getObject(id).common.name); // Geräte-Name } }); setState(idVis, low.join(',<br>'), true); } schedule('0 * * * *', lowBatt); // jede volle Stunde
Vielen Dank für das Skript. Ich wollte es neben mihome ach für meine Homematic Komponenten einsetzen. Dazu habe ich es wie folgt geändert:
Ich würde gerne abgesehen vom Gerätenamen noch den Raum in den Datenpunkt schreiben, da bei mir dieser aus der Homematic Nomenklatur nicht hervorgeht. Wie stelle ich das an? -
var raum = getObject(id, 'rooms').enumNames.join(', ');
-
@paul53 sagte in Script Xiaomi Battery leer ?:
var raum = getObject(id, 'rooms').enumNames.join(', ');
Wo muss das hin? Ich bin blutiger Anfänger und habe bisher nur blockly code generiert.
Mein erster Versuch schlug direkt fehl.
-
@passuff sagte:
Wo muss das hin?
Wie willst Du die Räume anzeigen ? Zusammen mit dem Kanalnamen (davor / dahinter) oder getrennt ?
-
@paul53 Kanalname + Raum wäre super
-
id = 'hm-rpc.0.' + id[2] + '.' + id[3]; var raum = getObject(id, 'rooms').enumNames.join(', '); low.push(getObject(id).common.name + ': ' + raum); // Kanal-Name: Raum }
-
@paul53 sagte in Script Xiaomi Battery leer ?:
id = 'hm-rpc.0.' + id[2] + '.' + id[3];
var raum = getObject(id, 'rooms').enumNames.join(', ');
low.push(getObject(id).common.name + ': ' + raum); // Kanal-Name: Raum
}Vielen Dank. Funktioniert bestens!
-
Bekomme bei einem Xiaomi Temperatur Sensor keine Werte bei Batterie und Spannung angezeigt.
Ist das Teil defekt oder die Batterie leer?Der Sensor ist ca. 5 Wochen alt.
-
hast du ihn erst angelernt? wenn ja dauert das bis zu ein paar stunden!
-
Ja habe ich.
Die Anderen, welche ich gleichzeitig angelernt habe, liefern aber direkt die Daten -
die Temp und Feuchtigkeit liefert er ja, hauch ihn an , dann siehst ja eh ob er reagiert, Status der Batterie kann dennoch ewig dauern!
-
Ok! Danke erstmal. Werde ich beobachten.
-
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 -
@passuff sagte in Script Xiaomi Battery leer ?:
…………………….> javascript.0 2019-08-04 21:53:45.004 warn getState "hm-rpc.0.PEQ0508233.0.LOWBAT" not found (3) states[id]=null
………………….Dein Skript macht kein Fehler .
Da ist ein Fehler im Datenpunkt hm-rpc.0.PEQ0508233.0.LOWBAT not found (3) states[id]=null
Schau mal nach ob da ein Wert vorhanden ist !?
-
@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... -
-
Nein, wie gesagt das Gerät ist eine Steckdose. Diese hat keine Batterie und daher auch keinen Batteriestatus...
-
Sorry ...mit der Angabe " Homematic Schaltaktor " konnte ich leider nicht erlesen , das es sich um eine Steckdose handelt .
-