Hi Leute,
Ich habe mir für größere Räume Ausschalteskripte erstellt, die ich bei Verlassen des Hauses aktiviere.
Ich habe bemerkt, dass oft Geräte zwar ausgeschaltet werden, aber trotzdem bei der im Skript vorhandenen Prüfung als EINgeschaltet gemeldet werden.
Leider habe ich keinen Fehler in meinem Skript gefunden.
Vermutlich sehe ich auch das Problem nun nicht !?
Hat vielleicht irgend jemand von euch eine Idee?
Ziel:
Ich will alle eingeschaltetnen Geräte ausschalten und einen Nachricht bekommen, wenn DANACH noch Geräte eingeschaltet bleiben!
Hier mein Beispiel:
if (fibaro:countScenes()>1) then fibaro:debug("zu viele Szenen, gelöscht!!") fibaro:abort() end
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
DevIDs = {148,186,450,456,432}
function CheckDev(IDs)
for i=1, #IDs do
local DeviceValue = tonumber(fibaro:getValue(IDs[i],"value"))
DeviceName = fibaro:getName(IDs[i])
DeviceRoom = fibaro:getRoomNameByDeviceID(IDs[i])
if (DeviceValue == 1) then
fibaro:call(IDs[i], "turnOff")
Debug("green",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." wurde ausgeschaltet")))
fibaro:sleep(700)
local DeviceValue = tonumber(fibaro:getValue(IDs[i],"value"))
if (DeviceValue == 1) then
Debug("red",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." konnte nicht ausgeschaltet werden")))
fibaro:setGlobal("PushOver","Fibaro Alarm!,".. DeviceName .. " im Raum: " .. DeviceRoom .. " konnte nicht ausgeschaltet werden..,0,intermission")
fibaro:sleep(200)
end
else
Debug("grey",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." ist schon AUS")))
end
end
end
CheckDev(DevIDs)
Die 700ms dürften nicht ausreichen um den Status sauber auf aus zu bringen.
Würde vorschlagen dass du die Schleife zweimal ausführst.
1.Schleife) Prüfen ob an und Geräte ausschalten
Delay z.B. 2000
2.Schleife) Prüfen ob noch an und Meldung
Viele Dank für diesen Tipp, werd ich gleich mal probieren!
Guten morgen @mdietinger,
Habe deinen Tipp probiert. Du hattest recht, jetzt ist zwar mein Skript größer, aber es funktioniert
Hier mal mein neuer Code:
Für Verbesserungsvorschläge bin ich gerne zu haben
if (fibaro:countScenes()>1) then fibaro:debug("zu viele Szenen, gelöscht!!") fibaro:abort() end
Debug = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end
DevIDs = {38,330,254,425}
function OffDev(IDs)
local OnCount = 0
local Counter = 0
for i=1, #IDs do
DeviceValue = tonumber(fibaro:getValue(IDs[i],"value"))
DeviceName = fibaro:getName(IDs[i])
DeviceRoom = fibaro:getRoomNameByDeviceID(IDs[i])
Counter = i
if (DeviceValue == 1) then
fibaro:call(IDs[i], "turnOff")
Debug("green",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." wurde ausgeschaltet")))
OnCount = OnCount+1
fibaro:sleep(200)
else
Debug("grey",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." ist schon AUS")))
end
end
if (OnCount ~= 0) then
Debug("yellow",(os.date("%d.%m.%Y - "..OnCount.." von "..Counter.." Geräten wurden ausgeschaltet!" )))
else
Debug("grey",(os.date("%d.%m.%Y - alle Geräten - sind bereits AUS.")))
fibaro:abort()
end
end
function CheckDev(IDs)
local OnCount = 0
local Counter = 0
local Status = ''
for j=1, #IDs do
DeviceValue = tonumber(fibaro:getValue(IDs[j],"value"))
DeviceName = fibaro:getName(IDs[j])
DeviceRoom = fibaro:getRoomNameByDeviceID(IDs[j])
Counter = j
if(DeviceValue == 1) then
Status = Status..DeviceRoom .. " - " ..DeviceName.. "\n"
OnCount = OnCount+1
fibaro:sleep(100)
Debug("red",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." nicht ausgeschaltet")))
else
Debug("grey",(os.date("%d.%m.%Y - "..DeviceRoom.." - "..DeviceName.." Prüfung erfolgreich = AUS")))
end
end
-- hier kann man auch ein Email versenden oder andere Signalisierungen einbauen
fibaro:setGlobal('PushOver',"Fibaro-Info,"..OnCount.." von "..Counter.." Geräten nicht ausgeschaltet:\n\n "..Status.." " ,-1,none")
if (OnCount ~= 0) then
Debug("red",(os.date("%d.%m.%Y - "..OnCount.." von "..Counter.." Geräten - nach Prüfung weiterhin nicht AUS!" )))
else
Debug("grey",(os.date("%d.%m.%Y - alle Geräten - nach Prüfung AUS.")))
end
end
OffDev(DevIDs)
fibaro:sleep(2000)
CheckDev(DevIDs)