NEWS
Skript LOWBAT
-
@paul53 said in Skript LOWBAT:
$('channel[state.id=*0.LOWBAT]').each(function(id, i) { if(i > 82) log(i + ': ' + id); });
10:35:50.771 info javascript.0 (28564) script.js.common.TEST: 100: hm-rpc.0.QEQ0087728.0.LOWBAT 10:35:50.771 info javascript.0 (28564) script.js.common.TEST: 101: hm-rpc.1.CUX2801001.0.LOWBAT 10:35:50.771 info javascript.0 (28564) script.js.common.TEST: 102: hm-rpc.1.CUX4000001.0.LOWBAT 10:35:50.771 info javascript.0 (28564) script.js.common.TEST: 103: hm-rpc.1.CUX9000002.0.LOWBAT 10:35:50.771 info javascript.0 (28564) script.js.common.TEST: 104: hm-rpc.1.CUX9000003.0.LOWBAT 10:35:50.771 info javascript.0 (28564) script.js.common.TEST: 105: hm-rpc.1.CUX9000004.0.LOWBAT
-
Hab die Datenpunkte gefunden. Indicator.lowbat heißen die.
Soll / muss ich die entfernen? -
@deifel Erweitere mal den $Selector:
$('channel[state.id=hm-rpc.0*0.LOWBAT]').each(function(id, i) { if(i > 82) log(i + ': ' + id); });
-
Damit bekomme ich die CUXD-Geräte nicht mehr angezeigt, nur die "korrekten" Geräte.
-
@deifel Dann übernehme die Erweiterung in das Lowbat-Skript.
-
Ich danke Dir! Wenn ich das so übernehme, dann fehlen mir leider die Geräte aus der HM-IP-Instanz
-
Kannst Du mir sagen, wie ich die Geräte aus meiner HM-IP-Instanz (rpc.2) noch dazu bekomme?
Diese werden nicht gefunden. Die Datenpunkte LOWBAT sind aber vorhanden.
Vielen DANK! -
@deifel sagte:
CUXD-Geräte, obwohl diese nicht im Gewerk "Batteriebetrieb" sind.
Dann erweitere den $Selector anstelle von "hm-rpc.0" um das Gewerk (Schreibweise groß/klein in der enum-ID beachten)
$('channel[state.id=*0.LOWBAT](functions=Batteriebetrieb)').each(function(id, i) { log(i + ': ' + id); });
Werden dann alle "richtigen" IDs geloggt ?
-
@deifel sagte in Skript LOWBAT:
Kannst Du mir sagen, wie ich die Geräte aus meiner HM-IP-Instanz (rpc.2) noch dazu bekomme?
Diese werden nicht gefunden. Die Datenpunkte LOWBAT sind aber vorhanden.Bei mir heißen die HM-IP LOW_BAT und nicht LOWBAT.
-
Danke - das hab ich versucht. Eigenartigerweise wird damit nichts gefunden
Ich verzweifle noch.
"Batteriebetrieb" ist korrekt geschrieben.
Die Datenpunkte unter den IP-Geräten heißen allerdings "LOW_BAT".Mit dem Selektor :
$('channel[state.id=*0.LOWBAT](functions=Batteriebetrieb)').each(function(id, i) { log(i + ': ' + id); });
bekomme ich kein Ergebnis (0 Geräte).
Mit dem Selektor:
$('channel[state.id=hm-rpc.0*0.LOWBAT]').each(function(id, i) {
bekomme ich nur die von der normalen HM-Instanz.
und mit dem Selektor:
$('channel[state.id=*0.LOWBAT]').each(function(id, i) {
bekomme ich die normalen und die CuxD - aber auch keine HM-IP-Geräte
-
$('channel[state.id=hm-rpc.*0.LOW*](functions=Batteriebetrieb)').each(function(id, i) { if(i > 1) log(i + ': ' + id); });
Gibt mir alle aus, also inkl. HMIP und auch den CUX-D-Geräten. Wenn ich jetzt noch die CUXD weg bekomme, dann wärs perfekt.
-
@deifel sagte:
Wenn ich jetzt noch die CUXD weg bekomme
$('channel[state.id=hm-rpc.*0.LOW*](functions=Batteriebetrieb)').each(function(id, i) { if(id.indexOf('CUX') == -1) log(i + ': ' + id); });
-
Leider nein, damit findet er nichts
-
@deifel
Ich bin unterwegs und am Handy, deshalb bekomme ich das Script nicht kopiert, aber hier ein Screenshot vom Selektor, wie es bei mir funktioniert. -
@deifel sagte:
damit findet er nichts
Ohne functions ?
$('channel[state.id=hm-rpc.*0.LOW*]').each(function(id, i) { if(id.indexOf('CUX') == -1) log(i + ': ' + id); });
-
Danke Euch Beiden! Es klappt jetzt mit beiden Varianten. Wobei evtl. das von dslraser sicherer ist, da es nicht nur noch low* abfragt - keine Ahnung, was in Zukunft sonst noch "low" wird
Vielen Dank für die tatkräftige Unterstützung!!!
-
Kleine Ergänzung: Bei der Lösung von dslraser werden die cux-Geräte gefunden und eine Warnung angezeigt...
Ich lass es jetzt trotzdem so drin -
-
@Xanon said in Skript LOWBAT:
Danke, das Skript sieht gut aus und funktionierte auf anhieb!!
Um Deine Frage zu beantworten, wie wäre es mit:
addDeviceCounter("lowbat", $('channel[state.id=*.LOW_BAT]') + $('channel[state.id=*.LOWBAT]'), true);
Habs aber nicht ausprobiert, habe keine IP Komponenten.
-
Hallo zusammen,
sorry das ich den alten thread noch mal auspacke. Ich habe allerdings das problem das meine Homematic Ip Komponenten nicht erkannt werden.
Ich habe das Script folgendermaßen geändert:createState('zählenLowbat.möglicheLOWBAT', 0); // wenn benötigt: Anzahl der Geräte mit Batterie
createState('zählenLowbat.anzahlLOWBAT', 0); // wenn benötigt: Anzahl der vorhandenen LOWBAT
createState('zählenLowbat.textLOWBAT', " "); // Namen LOWBAT, die an sind als Variable unter Javascript.0 anlegenvar cacheSelectorLOWBAT = $('channel[state.id=*0.LOWBAT]'); // für Homematic
var cacheSelectorLOW_BAT = $('channel[state.id=*0.LOW_BAT]'); // für Homematic IPfunction countLowbat(obj) {
// Setzt die Zähler vor dem Durchlauf aller Elemente *.LOWBAT auf 0
var moeglicheLOWBAT = 0;
var textLOWBAT = [];if (obj) {
log('Auslösender Aktor: ' + obj.id + ': ' + obj.newState.val); // Info im Log, welcher Zustand sich geändert hat
} else {
log('Ausgelöst bei Timer');
}cacheSelectorLOWBAT.each(function (id, i) { // Schleife für jedes gefundenen Element *0.LOWBAT
var status = false;
if(getState(id)) {
status = getState(id).val; // Zustand *0.LOWBAT abfragen (jedes Element)
}
var obj = getObject(id);
if (status === true) { // wenn Zustand = true, wird das Array erweitert
textLOWBAT.push(obj.common.name); // Zu Array hinzufügen
}
log("Geräte Nr. " + i + ": " + getObject(id).common.name + ": " + status);
++moeglicheLOWBAT; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
});// Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon LOWBAT zutreffend) ausgegeben
log("Text: " + textLOWBAT);
log("Anzahl Geräte: " + moeglicheLOWBAT + " # davon LOWBAT erkannt: " + textLOWBAT.length);// die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
setState("zählenLowbat.textLOWBAT", textLOWBAT.join(',<br>')); // Schreibt die Namen der Geräte mit LOWBAT Meldung
setState("zählenLowbat.anzahlLOWBAT", textLOWBAT.length); // Schreibt die aktuelle Anzahl der LOWBAT-Meldungen
setState("zählenLowbat.möglicheLOWBAT", moeglicheLOWBAT); // Schreibt die Anzahl der vorhandenen Batterie-Geräte
}cacheSelectorLOWBAT.on(function(obj) { // bei Zustandänderung . LOWBAT in allen Gewerken
countLowbat(obj);
});
schedule("/60 * * * *", function () { //oder!! soll entweder ausgelöst werden alle 10 Minuten
log("===>Will be triggered every 60 minutes!");
countLowbat();
});muss ich sonst noch was ändern?