Umsetzung von Befehlen in kaskadierten Skripten sinnvoll??

Ok, soweit glaube ich es verstanden zu haben.
Hab jetzt mal alle meine IDs hinterlegt und die Variablen für mich etwas angepasst.
Das Skript läuft jetzt durch und erstellt die Variablen, das passt!
Wenn ich das richtig verstanden habe sind die Inhalte der Variablen nicht “prüfbar”, da sehe ich überall nur ein “[”

Das 2.Skript habe ich ebenfalls mit den entsprechenden Variablen Namen ausgerüstet.
Da kommt bei der Ausführung noch ein Fehler:
[DEBUG] 13:49:43: 2018-11-30 13:49:43.784363 [ fatal] Unknown exception: /usr/share/lua/5.2/json/decode.lua:91: Unclosed elements present

Das 2.Skript sieht jetzt so aus:

----------------------------------------------------------
local DeviceGroups  = {'IDS_WOHNZIMMER','IDS_KUECHE','IDS_NEBENRAEUME_EG','IDS_AUSSEN','IDS_NEBENRAEUME_OG','IDS_ARBEITSZIMMER','IDS_BADEZIMMER','IDS_SCHLAFZIMMER'}
------------------------------------------------------------
for i = 1,#DeviceGroups do
  vIN =fibaro:getGlobal(DeviceGroups[i])
  IDs = json.decode(vIN)
    for j = 2,#IDs do
    fibaro:debug('Group:' ..DeviceGroups[i] ..' - ID:' ..IDs[j])
  end
end

Hab den Fehler schon selber gefunden!
Bei einem der local mySensors = {'LIGHTS_ROOM_KUECHE',300,302,303, 304} – IDs der Sensoren war ein Space zwischen den IDs, das mag das 2. Skript nicht :wink:

vielen Dank für diese tolle Vorgabe, @mdietinger
Werde jetzt mal weiterbasteln und sehen wie ich die Abschaltung umsetze…

Auf die Gefahr hin das ich etwas Nerve :slight_smile:

Habe das Script weiter ausgebaut und das Mangement von Raumvariablen und Device Groupierungsvariablen getrennt.
Werde es so wahrscheinlich bei mir einbauen.
Jetzt gibt es ein Script um alle Devices in allen Räumen anzulegen:

----------------------------------------------------------- MANAGE ROOMS START
--[[
%% properties
%% events
%% globals
--]]
 
function globalVar(var,val) 
 
	if (fibaro:getGlobal(var) ~= nil) then
       fibaro:debug('Benötigte Variable ' ..var.. ' erkannt.')
       fibaro:setGlobal(var,'')
       fibaro:setGlobal(var,val)
	else
	  local http = net.HTTPClient()
	  http:request("http://127.0.0.1:11111/api/globalVariables", {
		options = {
		method = 'POST',
		headers = {},
		data = '{"name":"'..var..'","value":"'..val..'"}',
		timeout = 10000
	  },
	  success = function(response)
				local result = response.data;
				if response.status == 200 or response.status == 201 then
				  fibaro:debug('Status: ' ..response.status.. ' - Variable wurde angelegt')
				else
				  fibaro:debug('Error: ' ..response.status.. ' - Zugriff verweigert')
				end
				end,
	  error = function(err)
			  fibaro:debug('[ERROR] ' .. err)
			  end
	  })
	end
end 
 
mySensors = {'room','door','window','motion','light','energy'}
mySensors.room = 'ROOM_WOHNZIMMER'
mySensors.door = {}
mySensors.window = {}
mySensors.motion = {}
mySensors.light = {1,2,3,100,300} -- IDs der Sensoren
mySensors.energy = {}
vOUT = json.encode(mySensors)
globalVar(mySensors.room, vOUT)

mySensors.room = 'ROOM_VORZIMMER'
mySensors.door = {}
mySensors.window = {}
mySensors.motion = {}
mySensors.light = {203,204} -- IDs der Sensoren
mySensors.energy = {}
vOUT = json.encode(mySensors)
globalVar(mySensors.room, vOUT)
 
mySensors.room = 'ROOM_KUECHE'
mySensors.door = {}
mySensors.window = {}
mySensors.motion = {}
mySensors.light = {300,302,303,304,305} -- IDs der Sensoren
mySensors.energy = {}
vOUT = json.encode(mySensors)
globalVar(mySensors.room, vOUT) 
----------------------------------------------------------- MANAGE ROOMS END

Das Script verarbeitet die gewünschten Devices in verschiedenen Räumen und legt Variablen an welche dann in den diversen Scripten abgearbeitet werden können:

----------------------------------------------------------- MANAGE GROUPS START
--[[
%% properties
%% events
%% globals
--]]
 
function globalVar(var,val) 
	if (fibaro:getGlobal(var) ~= nil) then
       fibaro:debug('Benötigte Variable ' ..var.. ' erkannt.')
       fibaro:setGlobal(var,'')
       fibaro:setGlobal(var,val)
	else
	  local http = net.HTTPClient()
	  http:request("http://127.0.0.1:11111/api/globalVariables", {
		options = {
		method = 'POST',
		headers = {},
		data = '{"name":"'..var..'","value":"'..val..'"}',
		timeout = 10000
	  },
	  success = function(response)
				local result = response.data;
				if response.status == 200 or response.status == 201 then
				  fibaro:debug('Status: ' ..response.status.. ' - Variable wurde angelegt')
				else
				  fibaro:debug('Error: ' ..response.status.. ' - Zugriff verweigert')
				end
				end,
	  error = function(err)
			  fibaro:debug('[ERROR] ' .. err)
			  end
	  })
	end
end 

function StoreGroup(vType)
      for i, Value in pairs (myGroups.room) do 
          vIN =fibaro:getGlobal(myGroups.room[i])
          vRooms = json.decode(vIN)
        if vType == 'door' then
      		for j, Value in pairs (vRooms.door) do 
        		table.insert(myGroups.ID, vRooms.door[j])
        	end
        elseif vType == 'window' then
      		for j, Value in pairs (vRooms.window) do 
        		table.insert(myGroups.ID, vRooms.window[j])
        	end
        
        elseif vType == 'motion' then
      		for j, Value in pairs (vRooms.motion) do 
        		table.insert(myGroups.ID, vRooms.motion[j])
        	end
  
        elseif vType == 'light' then
      		for j, Value in pairs (vRooms.light) do 
        		table.insert(myGroups.ID, vRooms.light[j])
        	end

        elseif vType == 'energy' then
      		for j, Value in pairs (vRooms.energy) do 
        		table.insert(myGroups.ID, vRooms.energy[j])
        	end
        end
 	 end
      vOUT = json.encode(myGroups)
      --fibaro:debug(vOUT)
      globalVar(myGroups.name, vOUT)  
end

myGroups = {'name','type','room','ID'}
--########### USER CONFIGURATION START ############# 

myGroups.name = 'LIGHT_ONOFF_WOHNZIMMER'
myGroups.type = 'light'
myGroups.room = {'ROOM_VORZIMMER','ROOM_WOHNZIMMER'}
myGroups.ID = {}
StoreGroup(myGroups.type)

myGroups.name = 'LIGHT_ONOFF_ALL'
myGroups.type = 'light'
myGroups.room = {'ROOM_VORZIMMER','ROOM_WOHNZIMMER','ROOM_KUECHE'}
myGroups.ID = {}
StoreGroup(myGroups.type)
----------------------------------------------------------- MANAGE GROUPS END

Das letzte Scriptbeispiel benützt die vordefinierten Device ID’s einer oder mehrer Gruppen:

----------------------------------------------------------- USE GROUPS START

----------------------------------------------------------
local DeviceGroups  = {'LIGHT_ONOFF_WOHNZIMMER'} 
------------------------------------------------------------
  
for i = 1,#DeviceGroups do
	vIN =fibaro:getGlobal(DeviceGroups[i])
	IDs = json.decode(vIN)
-- INFORMATION START  
    fibaro:debug('Group:' ..IDs.name)
    fibaro:debug('Type:' ..IDs.type)
  for j, Value in pairs (IDs.room) do 
		fibaro:debug('Room:' ..IDs.room[j])
  end
--INFORMATION END
  
 for j, Value in pairs (IDs.ID) do 
       -- PUT HERE YOUR ACTIONS
		fibaro:debug('ID:' ..IDs.ID[j])
 end
end	
----------------------------------------------------------- USE GROUPS END

Pblacky,

weis nicht wie weit du schon beim Umbau bist.
Könntest relativ leicht deinen Code mit wenig Änderungen anpassen:
Du hast ja schon Variablen am Anfang definiert welche du abarbeitest:
DevIDs = {147, 185, 453, 454, 418}
Wenn du DevIDs mit den Variablenwerten befüllst brauchst du sonst keine Änderungen machen.
Ersetze die Zeile mit DevIDs mit:

---------------------------------------------------------
local DeviceGroups  = {'IDS_WOHNZIMMER','IDS_KUECHE','IDS_NEBENRAEUME_EG','IDS_AUSSEN','IDS_NEBENRAEUME_OG','IDS_ARBEITSZIMMER','IDS_BADEZIMMER','IDS_SCHLAFZIMMER'}
DevIDs = {}

for i = 1,#DeviceGroups do
  vIN =fibaro:getGlobal(DeviceGroups[i])
  IDs = json.decode(vIN)
    for j = 2,#IDs do
     table.insert(DevIDs, IDs[j])
  end
end
----------------------------------------------------------

Hoffe ich habe keinen Fehler gemacht :slight_smile:

Hallo @mdietinger,
Ich habe gerae ein Skript zum Abruf fertiggestellt und begonnen es zu testen.
Wobei ich die Variablen etwas verändert hab um die Übersicht nicht zu verlieren.

----------------------------------------------------------
local DeviceGroups  = {'IDS_WOHNZIMMER','IDS_KUECHE','IDS_SCHLAFZIMMER'}
------------------------------------------------------------
local OnCount = 0
local Counter = 0
for i = 1,#DeviceGroups do
  vIN = fibaro:getGlobal(DeviceGroups[i])
  IDs = json.decode(vIN)
  for j = 2,#IDs do
    DeviceValue = tonumber(fibaro:getValue(IDs[j],"value"))
    DeviceName = fibaro:getName(IDs[j])
    DeviceRoom = fibaro:getRoomNameByDeviceID(IDs[j])
    Counter = j-1
    if (DeviceValue > 0) then
      fibaro:call(IDs[j], "turnOff")
      Debug("green",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." wurde ausgeschaltet")))
      OnCount = OnCount+1
    else
      Debug("grey",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." ist schon AUS")))
    end
  end
end

Aber ich glaube ich sehe mir deine neuen Skripte auch noch an, denn nach meinen ersten Tests bin ich richtig interressiert!!
Die Lösung ist nicht nur superschnell, sondern macht auch einen stabilen ersten Eindruck!!
Aber das erst morgen Abend, sonst krieg ich Ärger daheim :wink:

Freud mich das es so gut funktioniert, habe mir aber auch nichts anderes erwartet, hatte beim Variablen lesen nie Performance Probleme.
Wahrscheinlich musst die Sensor Typen noch erweitern.
z.B. wenn du eine Alarmanlage hast möchtest du nicht alle Türen und Motion Sensoren eines Raumes scharf schalten.
Oder du möchtest Dimmer anders behandeln als Switches.
statt:
mySensors = {'room','door','window','motion','light','energy'}
könntest auch folgendes verwenden:

mySensors = {'room','door','window','motion','light','dimmer','energy','arming'}
mySensors.room = 'ROOM_WOHNZIMMER'
mySensors.door = {}
mySensors.window = {}
mySensors.motion = {}
mySensors.light = {} 
mySensors.dimmer = {} 
mySensors.energy = {}
mySensors.arming = {} 

musst dann noch die elseif’s im Code anpassen.

Hi zurück,
Habe den restlichen Abend sturmfreie Bude und habe deine beiden Skripte gerade im Test @mdietinger,
Hab die Raum Variablen von DIR übernommen, somit weniger Arbeit beim Ändern :wink:
Das MANAGE ROOMS klappt hervorragend!

Das MANAGE_GROUPS melde noch einen Fehler:
[DEBUG] 18:58:59: 2018-12-01 18:58:59.694932 [ fatal] Unknown exception: /usr/share/lua/5.2/json/decode.lua:91: Unclosed elements present
Der Fehler kommt auch in deinem Originalskript, wenn ich nur die GROUP Variablen anpasse, also vermute ich keinen Tippfehler beim Anpassen…

Auf den ersten Blickt kann ich den Fehler nicht finden, habe allerdings die Kernfunktion deines Skriptes (noch) nicht wirklich durchschaut :wink:

Um 100% sicher zu sein dass kein Fehler im Posting ist, poste ich hier nochmal funktionierende BSP. aus der HC2. (ID’s sind Blödsinn, aber Code geht)

RAUM:

--[[
%% properties
%% events
%% globals
--]]
 
function globalVar(var,val) 
 
	if (fibaro:getGlobal(var) ~= nil) then
       fibaro:debug('Benötigte Variable ' ..var.. ' erkannt.')
       fibaro:setGlobal(var,'')
       fibaro:setGlobal(var,val)
	else
	  local http = net.HTTPClient()
	  http:request("http://127.0.0.1:11111/api/globalVariables", {
		options = {
		method = 'POST',
		headers = {},
		data = '{"name":"'..var..'","value":"'..val..'"}',
		timeout = 10000
	  },
	  success = function(response)
				local result = response.data;
				if response.status == 200 or response.status == 201 then
				  fibaro:debug('Status: ' ..response.status.. ' - Variable wurde angelegt')
				else
				  fibaro:debug('Error: ' ..response.status.. ' - Zugriff verweigert')
				end
				end,
	  error = function(err)
			  fibaro:debug('[ERROR] ' .. err)
			  end
	  })
	end
end 
globalVar('triggerGroup', '')

mySensors = {'room','door','window','motion','light','energy'}
mySensors.room = 'ROOM_WOHNZIMMER'
mySensors.door = {}
mySensors.window = {}
mySensors.motion = {}
mySensors.light = {1,2,3,100,300} -- IDs der Sensoren
mySensors.energy = {}
vOUT = json.encode(mySensors)
globalVar(mySensors.room, vOUT)

mySensors.room = 'ROOM_VORZIMMER'
mySensors.door = {}
mySensors.window = {}
mySensors.motion = {}
mySensors.light = {203,204} -- IDs der Sensoren
mySensors.energy = {}
vOUT = json.encode(mySensors)
globalVar(mySensors.room, vOUT)
 
mySensors.room = 'ROOM_KUECHE'
mySensors.door = {}
mySensors.window = {}
mySensors.motion = {}
mySensors.light = {300,302,303,304,305} -- IDs der Sensoren
mySensors.energy = {}
vOUT = json.encode(mySensors)
globalVar(mySensors.room, vOUT) 

GROUPS:

--[[
%% properties
%% events
%% globals
--]]
 
function globalVar(var,val) 
	if (fibaro:getGlobal(var) ~= nil) then
       fibaro:debug('Benötigte Variable ' ..var.. ' erkannt.')
       fibaro:setGlobal(var,'')
       fibaro:setGlobal(var,val)
	else
	  local http = net.HTTPClient()
	  http:request("http://127.0.0.1:11111/api/globalVariables", {
		options = {
		method = 'POST',
		headers = {},
		data = '{"name":"'..var..'","value":"'..val..'"}',
		timeout = 10000
	  },
	  success = function(response)
				local result = response.data;
				if response.status == 200 or response.status == 201 then
				  fibaro:debug('Status: ' ..response.status.. ' - Variable wurde angelegt')
				else
				  fibaro:debug('Error: ' ..response.status.. ' - Zugriff verweigert')
				end
				end,
	  error = function(err)
			  fibaro:debug('[ERROR] ' .. err)
			  end
	  })
	end
end 

function StoreGroup(vType)
      for i, Value in pairs (myGroups.room) do 
          vIN =fibaro:getGlobal(myGroups.room[i])
          vRooms = json.decode(vIN)
        if vType == 'door' then
      		for j, Value in pairs (vRooms.door) do 
        		table.insert(myGroups.ID, vRooms.door[j])
        	end
        elseif vType == 'window' then
      		for j, Value in pairs (vRooms.window) do 
        		table.insert(myGroups.ID, vRooms.window[j])
        	end
        
        elseif vType == 'motion' then
      		for j, Value in pairs (vRooms.motion) do 
        		table.insert(myGroups.ID, vRooms.motion[j])
        	end
  
        elseif vType == 'light' then
      		for j, Value in pairs (vRooms.light) do 
        		table.insert(myGroups.ID, vRooms.light[j])
        	end

        elseif vType == 'energy' then
      		for j, Value in pairs (vRooms.energy) do 
        		table.insert(myGroups.ID, vRooms.energy[j])
        	end
        end
 	 end
      vOUT = json.encode(myGroups)
      --fibaro:debug(vOUT)
      globalVar(myGroups.name, vOUT)  
end

myGroups = {'name','type','room','ID'}
--########### USER CONFIGURATION START ############# 

myGroups.name = 'LIGHT_ONOFF_WOHNZIMMER'
myGroups.type = 'light'
myGroups.room = {'ROOM_VORZIMMER','ROOM_WOHNZIMMER'}
myGroups.ID = {}
StoreGroup(myGroups.type)

myGroups.name = 'LIGHT_ONOFF_ALL'
myGroups.type = 'light'
myGroups.room = {'ROOM_VORZIMMER','ROOM_WOHNZIMMER','ROOM_KUECHE'}
myGroups.ID = {}
StoreGroup(myGroups.type)


Test Abfrage:


----------------------------------------------------------
local DeviceGroups  = {'LIGHT_ONOFF_WOHNZIMMER'} 
------------------------------------------------------------
  
for i = 1,#DeviceGroups do
	vIN =fibaro:getGlobal(DeviceGroups[i])
	IDs = json.decode(vIN)
-- INFORMATION START  
    fibaro:debug('Group:' ..IDs.name)
    fibaro:debug('Type:' ..IDs.type)
  for j, Value in pairs (IDs.room) do 
		fibaro:debug('Room:' ..IDs.room[j])
  end
--INFORMATION END
  
 for j, Value in pairs (IDs.ID) do 
       -- PUT HERE YOUR ACTIONS
		fibaro:debug('ID:' ..IDs.ID[j])
 end
end	

Hab den Fehler schon gefunden, in dem ersten ROOMS Script hat die Zeile
globalVar('triggerGroup', '')
gefehlt, jetzt hat er die GROUP Variablen auch erstellt!

Nun gehts weiter, vielen Dank!..

Nun hab ich den gleichen Fehler in der Testabfrage (Skript3) ;-(
Das kann aber jetzt nur mehr eine Kleinigkeit sein, oder?

Ich werd mal versuchen selbst draufzukommen…

Hab jetzt alle Skripte nochmal NEU reinkopiert und meine Variablen angepasst, jetzt läufts!!
Hab für das letzte Skript noch ein bisschen Debug dazugetan, läuft jetzt auch schön :wink:

Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end

local DeviceGroups  = {'GROUP_TEST_AUS'}
local OnCount = 0
local Counter = 0
for i = 1,#DeviceGroups do
  vIN =fibaro:getGlobal(DeviceGroups[i])
  IDs = json.decode(vIN)
  for j, Value in pairs (IDs.ID) do 
    DeviceValue = tonumber(fibaro:getValue(IDs.ID[j],"value"))
    DeviceName = fibaro:getName(IDs.ID[j])
    DeviceRoom = fibaro:getRoomNameByDeviceID(IDs.ID[j])
    Counter = j
    if (DeviceValue > 0) then
      fibaro:call(IDs.ID[j], "turnOff")
      Debug("green",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." wurde ausgeschaltet")))
      OnCount = OnCount+1
    else
      Debug("grey",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." ist schon AUS")))
    end
  end
  Debug("white",(os.date("%d.%m.%Y - "..OnCount.." von "..Counter.." Geräten ausgeschaltet")))
end

Vielen Dank @mdietinger für die Hilfe und die Inspiration !!!
Jetzt werd ich damit beginnen meine Testscripte in den Echtbetrieb zu integrieren, mal sehen welche neuen Ideen für Gruppen da beim Einbauen noch rauskommen dürfen;-)

Nur zur Sicherheit gefragt:
Die Skripte für die Räume und die Gruppen müssen nur laufen, wenn sich an den IDs in den Räumen oder den Gruppen was ändert, oder ?

Wenn ich RollerShutter schliessen will, wo muss ich die IDs eintragen?
In “mySensors.windows” oder geht das nicht so einfach ?

Vielleicht eine blöde Frage, aber so 100% hab ich die Trennung der Räume und Gruppen noch nicht verstanden:
Gibt es jetzt eigentlich auch eine Möglichkeit die festgelegten Räume einzeln oder gruppiert aufzurufen und abzuschalten OHNE eine Gruppe anzulegen?

Wenn du Rollershutter auch verwalten willst musst du nur z.b. blind in die Variablen Struktur aufnehmen. Das muss dann im Raum und den Groups gemacht werden. Bei den Groups musst du auch den elseif Teil erweitern. Falls du Probleme hast kann ich es später in den Bsp.Code einfügen.
Trennung von Raum und Gruppen ist nicht zwingend notwendig, erleichtert aber die Lesbarkeit.
Räume sind strikt alle Sensoren. Gruppen ist Zusammenfassung von Typen. Entweder du erzeugst pro Raum und verwendeter Type eine Gruppe, oder du fasst sie so zusammen wie du sie Code brauchst. Da die Struktur minimal anders ist musst du aber einen ähnlichen Code wie bei der Gruppenerzeugungs Funktion verwenden und .light oder .blind direkt ansprechen.

Das Raum und Gruppenskript müssen nur bei Änderungen Laufen.
Sollte nicht so oft vorkommen, aber dann Laufen alle Skripte sofort mit den geänderten Device IDs.
Nur jene Szenen müssen modifiziert werden wo ein Device als Trigger verwendet wird.Dann aber auch nur im Header wenn du es sauber programmiert hast.

Also das mit der Erweiterung der Struktur für die Rollershutter hab ich verstanden, ist vorerst nur so eine Idee, aber da ich derzeit nur 2 Rollershutter habe, nicht meine Priorität. Aber das würde ich selbst hinbringen :wink:

Ich habe nun mal alle Skripte abgelöst, die eine gesamte Ebene, oder ALLES Ausschalten.
Dazu habe ich nur die entsprechenden alten Skripte mit dem neuen und der passenden Group Variable (siehe Post #100740) ersetzt.
Das klappt über die Gruppen in ersten Tests gut!

Nun überlege ich, in meinen Remote Skripten der diversen Fernbedienungen das selektive Abschalten einzelner Räume regeln soll.
Zum Beispiel habe ich eine Fernbedienung die schaltet 4 von 5 Räume aus und zwar GENAU die IDs die unter “mySensors.light” eingetragen sind.
Das sollte doch direkt über die Raum Variablen OHNE Group Definition auch gehen, oder hab ich da einen Denkfehler?
Wenn ja, such ich gerade nach einer Möglichkeit, wie ich sowas mit möglichst wenig Code auslösen kann?

Ich glaube mir fehlt noch etwas das Verständnis für das Potential des “USE GROUPS START” Teils dieser genialen Idee :wink:

Direkt Räume abfragen sollte so gehen:

myRoom = {'ROOM_VORZIMMER','ROOM_WOHNZIMMER'}
for i, Value in pairs (myRoom) do 
	vIN =fibaro:getGlobal(myRoom[i])
	vRooms = json.decode(vIN)
	fibaro:debug(myRoom[i])
	for j, Value in pairs (vRooms.light) do 
		fibaro:debug(vRooms.light[j])
	end
end

Alles klar, vielen Dank!

Hab ich das richtig verstanden, dass
myGroups.type = 'light'
auch mit mehreren Typen funktionieren kann?
zum Beispeil:
myGroups.type = '{'light','window','motion'}

Ich versuche gerade eine Variante mit Räumen und erweiterten Eigenschaften, das würde möglicherweise einige Gruppen obsolet machen.
Nur mal als Gedankenmodell :wink:
Sollte was sinvolles dabei rauskommen, melde ich mich wieder…

Gruppenvariablen sind Sorten rein!
Entweder nur light oder nur window oder nur motion.
Wenn du mehrere Type verknüpfen willst musst du eine Gruppe mit light, eine mit window und eine mit motion anlegen.
z.B. DOOR_EG und WINDOW_EG
Im Zielskript verknüpfst du dann die beiden DOOR_EG, WINDOW_EG und kannst alle Sensoren ansprechen.
Könnte man umbauen, kann aber sein dass dadurch die Einfachheit verloren geht.