Geräte Auschalten - Prüfung per Skript?

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 :wink:
Hier mal mein neuer Code:
Für Verbesserungsvorschläge bin ich gerne zu haben :wink:

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)