NEWS
UNSOLVED Script Xiaomi Battery leer ?
-
sieht für mich aus als ob es über vis ausgegeben wird
-
@karstent sagte in Script Xiaomi Battery leer ?:
Und wie bekommst Du diese Nachricht das die Batterien sich leeren? Würde gerne das Script benutzen. Danke
Brauchst dir nur die Variable "Alarmtext" als Text, zum Beispiel mit Telegram, aufs Handy schicken.
Funktioniert bei mir 1 A -
Ist das die Variable "Batterie.MiHomeBatterietausch"? Eine andere finde ich nicht.
-
-
@karstent sagte in Script Xiaomi Battery leer ?:
@ilovegym
Und wie bekommst Du diese Nachricht das die Batterien sich leeren? Würde gerne das Script benutzen. DankeIch triggere das Objekt javascript.0.Batterie.MiHomeBatterietausch ( habe da noch mehr, -FritzBatterietausch, etc..) mit einem anderen Script, das mir den Wert dann als Message über Telegram schickt.
-
@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 !?