Hallo an alle,
das Widget Last Change war genau das richtige.
Danke an alle.
Gruß Martin
Hallo an alle,
das Widget Last Change war genau das richtige.
Danke an alle.
Gruß Martin
@paul53 ```
javascript.0 (476) script.js.common.Servicemeldungen_Lichter_zählen: { '0': 'wled.0.40f5203efbxx.on', '1': 'wled.0.483fda4caaxx.on', '2': 'wled.0.500291da9fxx.on', '3': 'wled.0.98f4abbee4xx.on', '4': 'wled.0.c82b96207bxx.on', '5': 'wled.0.cc50e325d1xx.on', '6': 'wled.0.d8bfc0c030xx.on', '7': 'wled.0.e098069246xx.on', '8': 'wled.0.e868e789e9xx.on', '9': 'wled.0.f4cfa25d63xx.on', '10': 'wled.0.f4cfa266edxx.on', '11': 'wled.0.f4cfa26c0axx.on', '12': 'wled.0.f4cfa2da2cxx.on', '13': 'wled.0.fcf5c4a304xx.on', length: 14, each: [Function (anonymous)], getState: [Function (anonymous)], getStateAsync: [AsyncFunction (anonymous)], getBinaryState: [Function (anonymous)], getBinaryStateAsync: [Function (anonymous)], setState: [Function (anonymous)], setStateAsync: [AsyncFunction (anonymous)], setStateDelayed: [Function (anonymous)], setBinaryState: [Function (anonymous)], setBinaryStateAsync: [AsyncFunction (anonymous)], on: [Function (anonymous)], [Symbol(Symbol.iterator)]: [GeneratorFunction (anonymous)] }
20:21:59.474 info javascript.0 (476) script.js.common.Servicemeldungen_Lichter_zählen: Text: EZ Lava,WZ Pineapple
20:21:59.474 info javascript.0 (476) script.js.common.Servicemeldungen_Lichter_zählen: Anzahl Lichter: 31 # davon Lichter an: 2
Hallo zusammen,
aktuell lasse ich ein Skript laufen, um mir alle eingeschalteten Lichter (Homematic, Lichter über Shelly, Hue ...) mit Namen anzeigen zu lassen.
var cacheSelectorwled = $('state[id=*.on](functions=Licht)[role=switch]');
Bei wLED wird in den Objekten bei "on" die role=switch.light ausgegeben. Dadurch funktioniert der Teil des Skripts nicht.
Ich kann natürlich bei role es von switch.light auf switch händisch umstellen, was allerdings umständlich ist, wenn es sich nach einem Reset wieder zurückstellt.
Was muss ich im Code ändern, um es auf switch.light eingestellt lassen zu können?
Der Versuch mit
var cacheSelectorwled = $('state[id=*.on](functions=Licht)[role=switch.light]');
klappte nicht.
Sollten Infos fehlen bitte kurz melden.
Schon mal tausend Dank und ein schönes Wochenende
Lenus
@paul53
Vielen Dank. Ich habe das vorletzte Skript nun am laufen und werde schauen ob alles funktioniert.
Echt klasse wie du immer wieder hilfst
@paul53 Hatte deine Änderung nicht gesehen.
Mit deinem letzten Stand des Skriptes bekomme ich dies hier:
14:43:41.400 info javascript.0 (744) Stop script script.js.common.DeviceCounter_Kopie
14:43:41.489 info javascript.0 (744) Start javascript script.js.common.DeviceCounter_Kopie
14:43:41.497 info javascript.0 (744) script.js.common.DeviceCounter_Kopie: registered 325 subscriptions and 1 schedule
14:43:41.497 error javascript.0 (744) script.js.common.DeviceCounter_Kopie: TypeError: selector.each is not a function
14:43:41.497 error javascript.0 (744) at countDevs (script.js.common.DeviceCounter_Kopie:43:22)
14:43:41.497 error javascript.0 (744) at addDeviceCounter (script.js.common.DeviceCounter_Kopie:68:9)
14:43:41.498 error javascript.0 (744) at script.js.common.DeviceCounter_Kopie:14:1
14:43:41.498 error javascript.0 (744) at script.js.common.DeviceCounter_Kopie:71:3
@paul53
ich sage doch, ich hab keine Ahnung vom Programmieren
Hier das Skript:
//Add device rules
const ids = [];
$('hm-rpc.*.0.LOWBAT').each(function(id, i) {ids.push(id);});
$('deconz.*.battery').each(function(id, i) {ids.push(id);});
$('hm-rpc.*.0.STICKY_UNREACH').each(function(id, i) {ids.push(id);});
$('hm-rpc.*.0.UNREACH').each(function(id, i) {ids.push(id);});
$('hm-rpc.*.0.CONFIG_PENDING').each(function(id, i) {ids.push(id);});
const idsService = {};
for(let i =0; i < ids.length; i++) {
idsService[i] = ids[i];
}
idsService.length = ids.length;
addDeviceCounter('Servicemeldungen', idsService, true); // Ersatz für Zeilen 2 - 6
/******************************************
* Code - do not change anything bellow this line *
******************************************/
function addDeviceCounter(name, selector, val_to_count) {
//Total amount of devices found by selector
var state_total = 'deviceCounter.' + name + '.total';
createState(state_total, 0);
//List of devices that match condition
var state_list = 'deviceCounter.' + name + '.list';
createState(state_list, "");
//Number of devices that match condition
var state_counter = 'deviceCounter.' + name + '.counter';
createState(state_counter, 0);
function countDevs(obj) {
var d_count = 0;
var d_list = [];
selector.each(function (id, i) {
var status = getState(id).val;
var obj = getObject(id);
if ((typeof val_to_count === 'function' && val_to_count(status)) ||
(typeof val_to_count === 'boolean' && val_to_count == status)) {
//Get parent object
var parentChannelId = id.slice(id.lastIndexOf("."));
var parentDevicelId = id.split(".").slice(0,-2).join(".");
var deviceObject = getObject(parentDevicelId);
//remember device name
d_list.push(deviceObject.common.name);
}
++d_count; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
});
log(name + "(" + d_count + "): " + d_list);
setState(state_list, d_list.join(''));
setState(state_counter, d_list.length);
setState(state_total, d_count);
}
//Re-evaluate when a device status changes
selector.on(function(obj) { // bei Zustandänderung *. LOWBAT in allen Gewerken
countDevs(obj);
});
//Re-evaluate each 5 Minutes
schedule("*/5 * * * *", countDevs);
//Evaluate for the first time
countDevs();
}
... und nun folgender Fehler:
14:11:40.090 info javascript.0 (744) Stop script script.js.common.DeviceCounter_Kopie
14:11:40.177 info javascript.0 (744) Start javascript script.js.common.DeviceCounter_Kopie
14:11:40.182 info javascript.0 (744) script.js.common.DeviceCounter_Kopie: registered 0 subscriptions and 0 schedules
14:11:40.182 error javascript.0 (744) script.js.common.DeviceCounter_Kopie: TypeError: selector.on is not a function
14:11:40.182 error javascript.0 (744) at addDeviceCounter (script.js.common.DeviceCounter_Kopie:62:18)
14:11:40.183 error javascript.0 (744) at script.js.common.DeviceCounter_Kopie:16:1
14:11:40.183 error javascript.0 (744) at script.js.common.DeviceCounter_Kopie:72:3
@paul53
Bekomme folgende Fehlermeldung beim Ausführen:
14:02:40.741 info javascript.0 (744) Stop script script.js.common.Test
14:02:40.829 info javascript.0 (744) Start javascript script.js.common.Test
14:02:40.834 info javascript.0 (744) script.js.common.Test: registered 0 subscriptions and 0 schedules
14:02:40.835 error javascript.0 (744) script.js.common.Test: ReferenceError: addDeviceCounter is not defined
14:02:40.835 error javascript.0 (744) at script.js.common.Test:14:1
14:02:40.835 error javascript.0 (744) at script.js.common.Test:16:3
@paul53 Servus Paul, erst einmal danke. Aber ich glaube ich hänge mal besser das ganze Skript an, weil ich nicht weiß wie ich deinen Code in den alten implementieren soll. So fit bin ich leider nicht.
//Add device rules
addDeviceCounter("lowbat", $('channel[state.id=*0.LOWBAT]'), true);
addDeviceCounter("battery_deconz", $('channel[state.id=*.battery]'), true);
addDeviceCounter("sticky_unreach", $('channel[state.id=*.STICKY_UNREACH]'), true);
addDeviceCounter("unreach", $('channel[state.id=*.UNREACH]'), true);
addDeviceCounter("config_pending", $('channel[state.id=*.CONFIG_PENDING]'), true);
//addDeviceCounter("open_windows", $('channel{TYPE=SHUTTER_CONTACT}[state.id=*.STATE]'), true);
//addDeviceCounter("on_lights", $('channel{TYPE=DIMMER}[state.id=*.LEVEL]'), function(state){return state>0;});
//addDeviceCounter("open_shutters", $('channel{TYPE=BLIND}[state.id=*.LEVEL]'), function(state){return state>0;});
//addDeviceCounter("playing_music", $('channel[state.id=*audio-*.playing]'), true);
/******************************************
* Code - do not change anything bellow this line *
******************************************/
function addDeviceCounter(name, selector, val_to_count) {
//Total amount of devices found by selector
var state_total = 'deviceCounter.' + name + '.total';
createState(state_total, 0);
//List of devices that match condition
var state_list = 'deviceCounter.' + name + '.list';
createState(state_list, "");
//Number of devices that match condition
var state_counter = 'deviceCounter.' + name + '.counter';
createState(state_counter, 0);
function countDevs(obj) {
var d_count = 0;
var d_list = [];
selector.each(function (id, i) {
var status = getState(id).val;
var obj = getObject(id);
if ((typeof val_to_count === 'function' && val_to_count(status)) ||
(typeof val_to_count === 'boolean' && val_to_count == status)) {
//Get parent object
var parentChannelId = id.slice(id.lastIndexOf("."));
var parentDevicelId = id.split(".").slice(0,-2).join(".");
var deviceObject = getObject(parentDevicelId);
//remember device name
d_list.push(deviceObject.common.name);
}
++d_count; // Zählt die Anzahl der vorhandenen Geräte unabhängig vom Status
});
log(name + "(" + d_count + "): " + d_list);
setState(state_list, d_list.join(''));
setState(state_counter, d_list.length);
setState(state_total, d_count);
}
//Re-evaluate when a device status changes
selector.on(function(obj) { // bei Zustandänderung *. LOWBAT in allen Gewerken
countDevs(obj);
});
//Re-evaluate each 5 Minutes
schedule("*/5 * * * *", countDevs);
//Evaluate for the first time
countDevs();
}
Hallo zusammen,
eine kurze Frage. Ich benutze ein Skript zur Abfrage der Batteriestatus der Komponenten von HM und Osram (zigbee).
//Add device rules
addDeviceCounter("lowbat", $('channel[state.id=*0.LOWBAT]'), true);
addDeviceCounter("battery_deconz", $('channel[state.id=*.battery]'), true);
Ist es möglich die Zeilen 2+3 zusammenzufassen, so dass alle z.B. unter einem DP angezeigt werden? Momentan sehen die DP so aus.
Liebe Grüße und einen schönen 2. Weihnachtsfeiertag
Martin
@paul53 Funktioniert super. Vielen Dank