Hallo zusammen,
ich versuche gerade die Anpassung für die Osram Steckdosen zu übernehmen. Irgendwie mag es bei mir aber nicht funktionieren. Kann jemand mal über die Anpassung schauen?
var logging = true;
var idAnzahlEin = 'javascript.0.Buero.Steckdose.Anzahl_ein',
idAnzahl = 'javascript.0.Buero.Steckdose.Anzahl',
idText = 'javascript.0.Buero.Steckdose.Text',
idRaum = 'javascript.0.Buero.Steckdose.Raum', // <---- NEU
idAnsage = 'javascript.0.Buero.Steckdose.Ansage';
createState(idAnzahl, { // wenn benötigt: Anzahl der vorhandenen Lichter
type: 'number',
name: 'Anzahl aller Lichter',
min: 0,
def: 0,
role: 'value'
});
createState(idAnzahlEin, { // Anzahl der Lichter, die auf sind als Variable unter Javascript.0 anlegen
type: 'number',
name: 'Anzahl der eingeschalteten Lichter',
min: 0,
def: 0,
role: 'value'
});
createState(idText, { // Anzahl der brennenden Lichter und deren Namen als Variable unter Javascript.0 anlegen
type: 'string',
name: 'Eingeschaltete Lichter',
desc: 'Namen der eingeschalteten Lichter',
def: ' ',
role: 'value'
});
createState(idAnsage, {
type: 'string',
name: 'Eingeschaltete Lichter (Ansage)',
desc: 'Namen der eingeschalteten Lichter (für Ansage aufbereitet)',
def: ' ',
role: 'value'
});
createState(idRaum, { // Räume, in denen Lichter brennen // <---- NEU
type: 'string',
name: 'Räume mit eingeschalteten Lichter',
desc: 'Namen der Räume, in denen Lichter eingeschaltet sind',
def: ' ',
role: 'value'
});
/* ------------------------- Selektor Start ------------------------------------------------------*/
var cacheSelectorSwitch = $('state[id=*.Switch](functions="onbuerosocket")'); // Shelly
var cacheSelectorOsram = $('state[id=*.available](functions="onbuerosocket")'); // Osram
/* ------------------------- Selektor Ende ------------------------------------------------------*/
function checkDevices(obj) {
// Setzt die Zähler vor dem Durchlauf aller Elemente *.STATE im Gewerk licht auf 0
var anzahlLichterAn = 0;
var anzahlLichter = 0;
var textLichterAn = [];
var textRaum = [];
if (logging) {
log('++++++ Lichter Anzahl ++++ ');
log('#### SCHALTER ##### ');
}
/* -----------------------Schleife Start -----------------------------------------------------*/
if (logging) {
log('++++++ Lichter Anzahl ++++ ');
log('#### SCHALTER ##### ');
}
//osram//
cacheSelectorOsram.each(function(id, i) { // Osram Plug
var obj = getObject(id);
var name = getObject(id).common.name;
var status = getState(id).val;
var devicename = name;
var raumname = getObject(id, "rooms");
if (logging) {
log('-------');
log('Kanal: ' + name);
log('Status: ' + status);
}
if (status) {
++anzahlLichterAn;
textLichterAn.push(devicename);
textRaum.push(raumname.enumNames);
}
++anzahlLichter;
});
//shelly//
cacheSelectorSwitch.each(function (id, i) { // Schleife für jedes gefundenen Element *.On im Gewerk Licht
var obj = getObject(id);
var name = getObject(id).common.name;
var status = getState(id).val; // Zustand *.STATE abfragen (jedes Element)
var devicename = name.substring(0, name.indexOf(" Switch ON/OFF")); //.state aus Text entfernen
var raumname = getObject(id, "rooms"); // <---- NEU
// ########## Abfrage ob Virtueller Kanal? VK oder : im Namen)
// if ( (devicename.search(/(CUX)|(K2)|(K3)|(VK)|(:)/ig) == -1) ) {
/*
if (logging) {
log('-------');
log('Kanal: ' + name);
log('Status: ' + status);
}
*/
if (status) { // wenn Zustand = true, dann wird die ANzahl der Lichter hochgezählt
++anzahlLichterAn;
textLichterAn.push(devicename); // Zu Array hinzufügen
textRaum.push(raumname.enumNames); // <---- NEU
}
++anzahlLichter; // Zählt die Anzahl der vorhandenen Lichter unabhängig vom Status
// } // ENDE VK-Abfrage
});
/* -----------------------Schleife Ende -----------------------------------------------------*/
// Array mit Lichternamen sortieren
textLichterAn.sort();
textRaum.sort(); // <---- NEU
// Schleife ist durchlaufen. Im Log wird der aktuelle Status (Anzahl, davon an) ausgegeben
if (logging) log("Text: " + textLichterAn);
if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn);
// die ermittelten Werte werden als javascript.0. Variable in ioBroker gespeichert (z.B. für die Verarbeitung in VIS)
setState(idText, textLichterAn.join(', ')); // Schreibt die aktuelle Namen der eingeschalteten Lichter
setState(idAnzahlEin, textLichterAn.length); // Schreibt die aktuelle Anzahl der eingeschalteten Lichter
setState(idAnzahl, anzahlLichter); // Schreibt die aktuelle Anzahl der vorhandene Elemente im Gewerk Licht
// setState(idRaum, textRaum.join(',<br>')); // Räume, in denen Licht brennt // <---- NEU
setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU
}
/* ----------------- Trigger Start ------------------------------------------------------------*/
cacheSelectorSwitch.on(function(obj) { // bei Zustandänderung *.STATE im Gewerk licht
if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat
checkDevices();
});
/* ----------------- Trigger Ende ------------------------------------------------------------*/
function main() {
setTimeout(function(){
if (logging) log('Auslöser Skriptstart');
checkDevices();
}, 2000);
}
main(); // Skriptstart-Auslöser
// Aufbereitung für Ansage
function strip_tags(data) {
var rueckgabe = data.replace(/( |<([^>]+)>)/ig, " ");
return(rueckgabe);
}
on(idText, function (obj) {
var text = obj.state.val;
text = (getState(idAnzahl).val > 0 ) ? 'Lichter eingeschaltet: ' + strip_tags(text) : 'Alle Lichter ausgeschaltet';
setState(idAnsage, text);
});
enums - ioBroker 2019-06-03 20-24-27.png
objects - ioBroker 2019-06-03 20-24-54.png
Ich versuche das Script so anzupassen das nur die "Steckdosen" gezählt werden. Da ich mir für jeden Raum einzelnt eine Übersicht basteln möchte welche Steckdosen eingeschaltet sind. Darum gibt es mehrere Gewerke bei mir.
Die Shellys werden erkannt und gezählt, die Osram leider nicht 😞