NEWS
[ gelöst ]Osram Plug in Script „Lichter zählen“ einfügen
-
durch den Einsatz von dem Ziggbe Adapter mit einem CC2531 USB Stick nutze ich mittlerweile auch einige Osram Plug Steckdosen um die Reichweite zu erhöhen. Da die Steckdosen nun schon mal im Einsatz sind, nutze ich diese auch als Aktor für Licht.
Ich würde diese jetzt gerne in das Script „ Lichter zählen“ einbauen damit diese in meiner VIS angezeigt werden.Nur, ich weis nicht wie.
Ich nutze folgendes Script:
/* Status Zahl Lichter zählt die Lichter in allen Räumen und meldet die Eingeschalteten namentlich Daten kommen vom Gewerk "licht" erstellt: 17.06.2015 nach diesem Vorbild: viewtopic.php?f=21&t=869&sid=f9ba5657489ff431a1990884f90779c1#p6564 23.06.2015 globale Variablendefinition zählen_Lichter.textLichterAn fehlte und wurde hinzugefügt Log Ausgabe auskommentiert 05.08.2015 STATE aus der Ausgabe entfernt nach Idee von stephan61 http://forum.iobroker.org/viewtopic.php ... t=20#p9267 24.03.2016 keine Anzeigen von virtuellen Kanälen mehr (in Abhängigkeit der Abfrage des Namens) 06.05.2016 Datenpunkt für Ansagen zugefügt 02.07.2016 abgeschaltet, da Fehler 03.07.2016 Zähl-Funktion getrennt nach Schalter und Dimmer search statt indexOf und RegEx für Suche nach Virtuellen Kanälen 27.11.2016 Verschoben in Status Code optimiert 23.12.2016 Räume eingebaut Sonoff hinzugefügt */ var logging = true; var idAnzahlEin = 'javascript.0.Status.Lichter.Anzahl_ein', idAnzahl = 'javascript.0.Status.Lichter.Anzahl', idText = 'javascript.0.Status.Lichter.Text', idRaum = 'javascript.0.Status.Lichter.Raum', // <---- NEU idAnsage = 'javascript.0.Status.Lichter.Ansage'; // Ab hier nix mehr ändern 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' }); var cacheSelectorState = $('channel[state.id=*.STATE](functions="Licht")'); // Gewerk licht var cacheSelectorLevel = $('channel[state.id=*.level](functions="Licht")'); var cacheSelectorPOWER = $('channel[state.id=*.POWER](functions="Licht")'); // Sonoff Lampen (müssen im Gewerk Licht sein) 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 ##### '); } cacheSelectorState.each(function (id, i) { // Schleife für jedes gefundenen Element *.STATE 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(".STATE")); //.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 }); if (logging) log('#### DIMMER ##### '); cacheSelectorLevel.each(function (id, i) { // Schleife für jedes gefundenen Element *.LEVEL im Gewerk Licht var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; // Zustand *.LEVEL abfragen (jedes Element) var devicename = name.substring(0, name.indexOf(".LEVEL")); //.state aus Text entfernen var raumname = getObject(id, "rooms"); // <---- NEU // ########## Abfrage ob Virtueller Kanal? VK oder : im Namen) // if ( (devicename.search(/(CUX)|(K2)|(K3)|(V10)|(VK)|(:)/ig) == -1) ) { // Geräte mit diesen Strings im namen nicht beachten /* if (logging) { log('-------'); log('Kanal: ' + name); log('Status: ' + status + '%'); } */ if (parseFloat(status) > 0) { // Wenn Dimmwert über 0 ++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 Abfrage VK }); if (logging) { log('++++++ Lichter Anzahl ++++ '); log('#### SCHALTER ##### '); } cacheSelectorPOWER.each(function (id, i) { // Schleife für jedes gefundenen Element *.POWER 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("POWER")); //.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 }); // 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(', ')); // Räume, in denen Licht brennt // <---- NEU setState(idRaum, textRaum.join(', ')); // Räume, in denen Licht brennt // <---- NEU } // Trigger cacheSelectorState.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(); }); cacheSelectorLevel.on(function(obj) { // bei Zustandänderung *.LEVEL im Gewerk licht if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); // Info im Log, welcher Zustand sich geändert hat checkDevices(); }); cacheSelectorPOWER.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(); }); 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 sind ausgeschaltet'; setState(idAnsage, text); });
Hier noch ein Screenshot des Osram Plug
PS: Leider habe ich in der Suche nichts entsprechendes gefunden.
3933_osram_plug.png -
Probier mal beim Selector den State Wert "klein" zu schreiben:
var cacheSelectorState = $('channelstate.id=*.state');
-
https://forum.iobroker.net/viewtopic.php?f=21&t=16963&p=178783#p178783.
const osram = $('state[id=*.state](functions="Licht")');
-
Hallo Paul53, vielen Dank für deinen Vorschlag. Leider bin ich aber zu blöd, deinen Code in mein Script zu integrieren.
Auch den Link zu den Fensterscript verstehe ich nicht wirklich oder willst du mir damit sagen, das das was ich vorhabe, mit dem Script "Lichter zählen" nicht möglich ist. Ich würde mich freuen, wenn du mir das ganze kurz erklären könntest.
Gruß Baerny
-
Mit dem Selektor osram musst Du eine weitere Schleife
osram.each(function(id, i) { // Schleifen-Operationen });
innerhalb der Funktion checkDevices() erstellen und außerdem einen zusätzlichen Trigger
osram.on(function(obj) {});
Das Fensterskript zeigt, wie es prinzipiell funktioniert.
-
Vielen Dank, schau mal ob Ichs hinbekomme
Baerny
-
Habe jetzt einige Tage alles mögliche ausprobiert, leider werden meine Osram Plug + von dem Lichterscript nicht gefunden.
Ich habe zuletzt dieses Script benutzt da es für mich übersichtlicher ist die das bereits oben gepostete
// Tread: https://forum.iobroker.net/viewtopic.php?t=18239&p=190534#p190534 var logging = true; //Variablen deklarieren var idAnzahlEin = 'Beleuchtung.Anzahl_ein', idAnzahl = 'Beleuchtung.Anzahl', idText = 'Beleuchtung.Text', idRaum = 'Beleuchtung.Raum', idAnsage = 'Beleuchtung.Ansage'; // Status erstellen createState(idAnzahl, { type: 'number', name: 'Anzahl aller Lichter', min: 0, def: 0, role: 'value' }); createState(idAnzahlEin, { type: 'number', name: 'Anzahl der eingeschalteten Lichter', min: 0, def: 0, role: 'value' }); createState(idText, { 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, { type: 'string', name: 'Räume mit eingeschalteten Lichter', desc: 'Namen der Räume, in denen Lichter eingeschaltet sind', def: ' ', role: 'value' }); //Variablen der Geräte deklarieren var cacheSelectorState = $('channel[state.id=*.STATE](functions="Licht")'); var cacheSelectorLevel = $('channel[state.id=*.LEVEL](functions="Licht")'); var cacheSelectorHue = $('channel[state.id=*.ON](functions="Licht")'); var cacheSelectorOsram = $('channel[state.id=*.state](functions="Licht")'); // Osram var cacheSelectorPOWER = $('channel[state.id=*.POWER](functions="Licht")'); // Sonoff function checkDevices(obj) { var anzahlLichterAn = 0; var anzahlLichter = 0; var textLichterAn = []; var textRaum = []; if (logging) { log('++++++ Lichter Anzahl ++++ '); log('#### SCHALTER ##### '); } cacheSelectorState.each(function(id, i) { var obj = getObject(id); var name = getObject(id).common.name; var status = getState(id).val; var devicename = name.substring(0, name.indexOf(".STATE")); 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; }); 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; }); cacheSelectorPOWER.each(function(id, i) { // Sonoff 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; }); // Array mit Lichternamen sortieren textLichterAn.sort(); textRaum.sort(); if (logging) log("Text: " + textLichterAn); if (logging) log("Anzahl Lichter: " + anzahlLichter + " # davon Lichter an: " + anzahlLichterAn); setState(idText, textLichterAn.join(', ')); setState(idAnzahlEin, textLichterAn.length); setState(idAnzahl, anzahlLichter); setState(idRaum, textRaum.join(', ')); } // Trigger cacheSelectorState.on(function(obj) { if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); checkDevices(); }); cacheSelectorOsram.on(function(obj) { // Osram Plug if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); checkDevices(); }); cacheSelectorPOWER.on(function(obj) { // Sonoff if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); checkDevices(); }); cacheSelectorHue.on(function(obj) { if (logging) log('Auslösende HUE: ' + obj.id + ': ' + obj.state.val); checkDevices(); }); cacheSelectorLevel.on(function(obj) { if (logging) log('Auslösender Dimmer: ' + obj.id + ': ' + obj.state.val); checkDevices(); }); 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 sind ausgeschaltet'; setState(idAnsage, text); });
In diesem Script habe ich folgendes geändert:
var cacheSelectorOsram = $('channel[state.id=*.state](functions="Licht")'); ````und```` 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; }); ````und```` cacheSelectorOsram.on(function(obj) { // Osram Plug if (logging) log('Auslösender Schalter: ' + obj.id + ': ' + obj.state.val); checkDevices(); }); ````woran könnte es denn liegen. Die Abfrage von HM und Sonoff Geräten funktioniert Über Hilfe würde ich mich freuen. Baerny
-
Die Osram-Geräte haben keinen Channel. Das Gewerk ist laut Deinem ersten Post dem Datenpunkt zugeordnet. Das ist beim Selector zu berücksichtigen. Versuche es mal so:
var cacheSelectorOsram = $('state[id=*.state](functions="Licht")'); // Osram
Außerdem verpasse den Datenpunkten .state sinnvolle Namen, da sie sonst nicht unterscheidbar sind.
-
Möchtest Du den Gerätenamen (z.B. "Plug 03") verwenden, muss die Schleifenfunktion geändert werden.
cacheSelectorOsram.each(function(id, i) { // Osram Plug var status = getState(id).val; var deviceid = id.substring(0, id.indexOf('.state')); //.state aus ID entfernen var devicename = getObject(deviceid).common.name; var raumname = getObject(id, "rooms"); if (logging) { log('-------'); log('Gerät: ' + devicename); log('Status: ' + status); } if (status) { ++anzahlLichterAn; textLichterAn.push(devicename); textRaum.push(raumname.enumNames); } ++anzahlLichter; });
-
ja würde ich gerne, muss natürlich noch sinnvoll geändert werden
-
ganz herzlichen Dank für deine Hilfe
-
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); });
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