NEWS
[Frage] lowbat Script von paul
-
Poste bitte das Objekt "enum.functions.Batterie betrieben" (raw in Code tags).
-
so richtig ?
createState('zählenLowbat.möglicheLOWBAT', 0); // wenn benötigt: Anzahl der vorhandenen LOWBAT createState('zählenLowbat.anzahlLOWBAT', 0); // wenn benötigt: Anzahl der vorhandenen LOWBAT createState('zählenLowbat.textLOWBAT', " "); // Anzahl LOWBAT, die an sind als Variable unter Javascript.0 anlegen var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT]'); function 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 *.LOWBAT var status = getState(id).val; // Zustand *.LOWBAT abfragen (jedes Element) var obj = getObject(id); if (status === true) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt 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.join(', ')); 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(', ')); // Schreibt die aktuelle Namen der Geräte mit LOWBAT Meldung setState("zählenLowbat.anzahlLOWBAT", textLOWBAT.length); // Schreibt die aktuelle Anzahl der Geräte im System setState("zählenLowbat.möglicheLOWBAT", moeglicheLOWBAT); // Schreibt die aktuelle Anzahl der vorhandene 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 countLowbat(); });
-
so richtig ? `
Nein, das ist das Skript. Ich würde gern das Objekt (Reiter "Objekte") sehen. -
ahaaaaaa
sieht so aus:
{ "desc": "", "from": "system.adapter.hm-rpc.0", "ts": 1521228098628, "common": { "name": "Batterie betrieben", "members": [ "hm-rpc.0.LEQ0922159.1", "hm-rpc.0.LEQ1177607.1", "hm-rpc.0.LEQ1176746.1", "hm-rpc.0.JEQ0264936.1", "hm-rpc.0.KEQ0845003.1", "hm-rpc.0.LEQ0030811.1", "hm-rpc.0.LEQ0642545.1", "hm-rpc.0.KEQ0972353.1", "hm-rpc.0.JEQ0263935.1", "hm-rpc.0.KEQ0972459.1", "hm-rpc.0.LEQ0030556.1", "hm-rpc.0.LEQ0642275.1", "hm-rpc.0.LEQ0031227.1", "hm-rpc.0.LEQ0030758.1", "hm-rpc.0.LEQ0031043.1", "hm-rpc.0.MEQ1425139.1", "hm-rpc.0.NEQ0046063.1", "hm-rpc.0.LEQ0031256.1", "hm-rpc.0.LEQ0642555.1", "hm-rpc.0.LEQ0492702.1", "hm-rpc.0.LEQ0031112.1", "hm-rpc.0.KEQ0972248.1", "hm-rpc.0.KEQ0905371.2", "hm-rpc.0.MEQ0172937.1", "hm-rpc.0.MEQ0185071.1", "hm-rpc.0.MEQ0369906.1", "hm-rpc.0.MEQ0369829.1", "hm-rpc.0.MEQ0186214.1", "hm-rpc.0.MEQ0367128.1", "hm-rpc.0.LEQ1469992.1", "hm-rpc.0.LEQ1470572.1", "hm-rpc.0.LEQ1176525.1", "hm-rpc.0.LEQ0175356.1", "hm-rpc.0.JEQ0684367.1", "hm-rpc.0.GEQ0250711.1", "hm-rpc.0.LEQ0175293.1", "hm-rpc.0.LEQ0175827.1", "hm-rpc.0.NEQ0530138.1", "hm-rpc.0.NEQ0530138.2", "hm-rpc.0.KEQ0905371.1", "hm-rpc.0.KEQ0241184.1", "hm-rpc.0.LEQ0175356.2", "hm-rpc.0.KEQ0954261.1", "hm-rpc.0.LEQ1313457.2", "hm-rpc.0.LEQ1313457.1", "hm-rpc.0.LEQ1313457.3", "hm-rpc.0.KEQ1040434.4", "hm-rpc.0.KEQ0576469.4", "hm-rpc.0.LEQ0783942.4", "hm-rpc.0.KEQ0574459.4", "hm-rpc.0.KEQ1040651.4", "hm-rpc.0.KEQ1040517.4", "hm-rpc.0.KEQ0574613.4", "hm-rpc.0.LEQ1200382.4", "hm-rpc.0.KEQ0574642.4", "hm-rpc.0.LEQ0782624.4", "hm-rpc.0.LEQ0784844.4", "hm-rpc.0.KEQ1040443.4", "hm-rpc.0.KEQ0653104.4", "hm-rpc.0.LEQ0635400.1", "hm-rpc.0.LEQ0635400.2", "hm-rpc.0.LEQ0635400.3", "hm-rpc.0.LEQ0635400.4", "hm-rpc.0.LEQ0635400.5", "hm-rpc.0.LEQ0635400.6", "hm-rpc.0.LEQ0636114.1", "hm-rpc.0.LEQ0636114.2", "hm-rpc.0.LEQ0636114.3", "hm-rpc.0.LEQ0636114.4", "hm-rpc.0.LEQ0636114.5", "hm-rpc.0.LEQ0636114.6", "hm-rpc.0.GEQ0250711.2", "hm-rpc.0.GEQ0250711.3", "hm-rpc.0.GEQ0250711.4", "hm-rpc.0.JEQ0684367.2", "hm-rpc.0.JEQ0684367.3", "hm-rpc.0.JEQ0684367.4", "hm-rpc.0.KEQ0056854.2", "hm-rpc.0.KEQ0056929.2", "hm-rpc.0.KEQ0905371.3", "hm-rpc.0.LEQ0028395.1", "hm-rpc.0.LEQ0028395.4", "hm-rpc.0.LEQ0028395.3", "hm-rpc.0.LEQ0028395.2", "hm-rpc.0.LEQ0029078.1", "hm-rpc.0.LEQ1221393.1", "hm-rpc.0.LEQ0175356.3", "hm-rpc.0.KEQ0766778.1", "hm-rpc.0.NEQ0322651.1", "hm-rpc.0.NEQ0322032.1", "hm-rpc.0.KEQ0056929.1", "hm-rpc.0.KEQ0056854.1", "hm-rpc.0.NEQ0530138.3", "hm-rpc.0.LTK0100483.1", "hm-rpc.0.LTK0016804.1", "hm-rpc.0.LTK0009865.1", "hm-rpc.0.LTK0008637.1", "hm-rpc.0.LTK0009942.1", "hm-rpc.0.OEQ1006181.1", "hm-rpc.0.OEQ1006181.2", "hm-rpc.0.OEQ1006181.3", "hm-rpc.0.OEQ1006181.4", "hm-rpc.0.LTK0111742.1" ] }, "native": { "Name": "Batterie betrieben", "TypeName": "ENUM", "EnumInfo": "" }, "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" }, "_id": "enum.functions.Batterie betrieben", "type": "enum" }
-
Bitte keine Leerzeichen in einer ID !! Das kann Probleme bringen.
@bahnuhr:Mit der "alten" Zeile bekomme ich eine warn-meldung bei meinen cuxd Geräten. Grund dürfte sein, dass dieses manuelle angelegten Geräte kein lowbat haben. `
Ich sehe bei den Members ausschließlich <u>Kanäle</u> von der Instanz hm-rpc.0 (BidCos-RF), kein CUxD.Da die Kanäle mehrere Datenpunkte haben, muss man eingerenzen mit [state.id=*.LOWBAT]. Wenn einige Geräte kein LOWBAT haben, muss es anders gelöst werden:
Die <u>Datenpunkte</u> müssen dem Gewerk zugeordnet und der Selektor muss angepasst werden:
var cacheSelectorLOWBAT = $('state(functions=batterie_betrieben)');
EDIT: Ich wundere mich über die Kanalnummern in der Members-Liste: Bei meinen Geräten (Thermostate) befindet sich LOWBAT im Kanal 0.
-
So, habe nun auf der ccu2 das Gewerk geändert in "Batterie"
- folgendes Script (analog paul)
var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT]'); cacheSelectorLOWBAT.each(function (id, i) { // Schleife für jedes gefundenen Element *.LOWBAT var status = getState(id).val; // Zustand *.LOWBAT abfragen (jedes Element) var obj = getObject(id); if (status === true) { // wenn Zustand = true, dann wird die Anzahl der Geräte hochgezählt textLOWBAT.push(obj.common.name); // Zu Array hinzufügen } log("Geräte Nr. " + i + ": " + getObject(id).common.name + ": " + status); });
Folglich cuxd Geräte erzeugen Warnung
javascript.0 2018-03-19 19:37:27.389 warn at script.js.Scripte.test1:7:20 javascript.0 2018-03-19 19:37:27.389 warn getState "hm-rpc.1.CUX0200010.0.LOWBAT" not found (3) states[id]=null javascript.0 2018-03-19 19:37:27.389 info script.js.Scripte.test1: Geräte Nr. 3: CUX: Wassertränke-Nachlauf:0.LOWBAT: null javascript.0 2018-03-19 19:37:27.389 warn at script.js.Scripte.test1:7:20 javascript.0 2018-03-19 19:37:27.388 warn getState "hm-rpc.1.CUX0200009.0.LOWBAT" not found (3) states[id]=null javascript.0 2018-03-19 19:37:27.388 info script.js.Scripte.test1: Geräte Nr. 2: CUX: Beamer-Hide:0.LOWBAT: null javascript.0 2018-03-19 19:37:27.388 warn at script.js.Scripte.test1:7:20 javascript.0 2018-03-19 19:37:27.388 warn getState "hm-rpc.1.CUX0200008.0.LOWBAT" not found (3) states[id]=null javascript.0 2018-03-19 19:37:27.388 info script.js.Scripte.test1: Geräte Nr. 1: CUX: Beamer-Power:0.LOWBAT: null javascript.0 2018-03-19 19:37:27.387 warn at script.js.Scripte.test1:7:20 javascript.0 2018-03-19 19:37:27.387 warn getState "hm-rpc.1.CUX0200006.0.LOWBAT" not found (3) states[id]=null javascript.0 2018-03-19 19:37:27.387 info script.js.Scripte.test1: Geräte Nr. 0: CUX: Zisterne-Wasser:0.LOWBAT: null javascript.0 2018-03-19 19:37:27.387 warn at script.js.Scripte.test1:7:20 javascript.0 2018-03-19 19:37:27.386 warn getState "hm-rpc.1.CUX0200003.0.LOWBAT" not found (3) states[id]=null javascript.0 2018-03-19 19:37:27.375 info Start javascript script.js.Scripte.test1 javascript.0 2018-03-19 19:37:27.355 info Stop script script.js.Scripte.test1
Wenn ich den selektor ändere auf:
var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT](functions="Batterie")');
kommt gar nichts mehr.
Das habe ich gemeint.
Mit "alt" kommt Warnung wg. cuxd.
Und mit "neu" kommt nichts mehr.
mfg
-
Wenn ich den selektor ändere auf:
var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT](functions="Batterie")');
kommt gar nichts mehr. `
Lautet die ID "enum.functions.Batterie" oder "enum.functions.batterie" ?https://forum.iobroker.net/viewtopic.php?f=21&t=12677&p=134465#p134465, dass man nach Anlegen eines neuen Gewerkes erst ioBroker (Host) neu starten muss, damit es mit dem neuen Gewerk funktioniert.
@bahnuhr:Folglich cuxd Geräte erzeugen Warnung
javascript.0 2018-03-19 19:37:27.389 warn at script.js.Scripte.test1:7:20 javascript.0 2018-03-19 19:37:27.389 warn getState "hm-rpc.1.CUX0200010.0.LOWBAT" not found (3) states[id]=null javascript.0 2018-03-19 19:37:27.389 info script.js.Scripte.test1: Geräte Nr. 3: CUX: Wassertränke-Nachlauf:0.LOWBAT: null ```` `
Das sieht danach aus, dass es zwar das Objekt "hm-rpc.1.CUX0200010.0.LOWBAT" gibt, aber noch kein Zustand (state) existiert, da noch nie ein Wert gesendet wurde. Ich würde mit einem Hilfsscript die Zustände erzeugen (Script danach wieder löschen / deaktivieren):
setState("hm-rpc.1.CUX0200010.0.LOWBAT", false);
Entsprechend für die anderen 4 Datenpunkte.
-
iobroker hab ich komplett neu gestartet.
Batterie ist bei enum vorhanden; und ja B wird groß geschrieben.
Und state erzeugen geht nicht; weil es doch den Datenpunkt gar nicht gibt.
mfg
-
Und state erzeugen geht nicht; weil es doch den Datenpunkt gar nicht gibt. `
Wirklich nicht ? Wie kommt es dann zu der Warnung ?
@bahnuhr:Batterie ist bei enum vorhanden; und ja B wird groß geschrieben. `
Die ID ist "enum.functions.Batterie" ? Was ergibt das Log ?var cacheSelectorLOWBAT = $('channel[state.id=*.LOWBAT](functions=Batterie)'); log(JSON.stringify(cacheSelectorLOWBAT));
-
Wirklich nicht ? Wie kommt es dann zu der Warnung ? `
Du hast recht; diesen Punkt gibt es tatsächlich.
Hab ich übersehen; komisch!?!?!?
var cacheSelectorLOWBAT = $('channelstate.id=*.LOWBAT');
log(JSON.stringify(cacheSelectorLOWBAT)); `
Ergibt:
javascript.0 2018-03-19 21:38:44.500 info script.js.Scripte.test2: {"length":0}
Ehrlich gesagt; ich versteh es nicht.
unter Aufzählung sind bei "enum.functions.Batterie" zahlreiche Geräte ersichtlich.
Und dann kommt 0.
Ist mir zu hoch.
Vielleicht ist ja die Lösung mit dem "false" schreiben die richtige.
Oder man lässt es so; ist ja nur ne Warnung. Und das Script läuft ja.
mfg und Danke für deine Hilfe und Unterstützung.
-
unter Aufzählung sind bei "enum.functions.Batterie" zahlreiche Geräte ersichtlich.
Und dann kommt 0. `
Das stimmt. Allerdings ist LOWBAT bei allen Geräten, die ich kenne, dem Kanal 0 zugeordnet. In der Liste ist aber kein Kanal 0 dabei. Ich vermute, dass es damit zusammen hängt. Das Problem ist, dass der Kanal 0 auf der CCU unsichtbar ist (zumindest war es auf meiner CCU1 so).