Prüfung offene Fenster nach Uhrzeit

Ich hatte mich mal dafür interessiert, nicht in Abhängigkeit vom Sturm, sondern in Abhängigkeit von einer Uhrzeit den Öffnungszustand von Türen und Fenstern zu prüfen. Danke an Hans-Ulrich Tag für den Vorschlag, dies mit Variablen zu realisieren. Das schöne an dem Sturmwarnungsscript ist aber, dass es automatisch nach Tür-/Fenstersensoren sucht. Füge ich also neue Tür-/Fenstersensoren hinzu, muss ich keine Scriptanpassung mehr vornehmen. Ich bekomme immer auch sofort angezeigt, welches Fenster/ welche Tür offen steht.

Habe mich jetzt mal selbst an dem Script versucht und habe ein bisschen Bastelarbeit aus diesem Script und einem Script, welches in Abhängigkeit von der Uhrzeit triggert, betrieben. Hat sogar funktioniert :slight_smile: . Ist wie gesagt durch „Copy-Paste“ – Technik entstanden, kann daher überflüssige Angaben enthalten.

Es ist im Prinzip einzurichten wie das Sturmwarnungsscript. Die Uhrzeit ist hier auf 22:00 eingestellt, es prüft also abends um 22:00 Uhr, ob noch eine Tür oder ein Fenster offen ist. Wird eine andere Zeit gewünscht, einfach 22:00 gegen eine andere gewünschte Uhrzeit austauschen. Gruß, Norbert

--[[
%% autostart
%% properties
%% events
%% globals
--]]
local phoneID = {252, 379} — Handy-IDs
local maxID = 1000

Debug = function ( color, message )
fibaro:debug(string.format(‚%s‘, „span“, color, message, „span“))
end

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date(„*t“);
local startSource = fibaro:getSourceTrigger();
if (
( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format(„%02d“, currentDate.hour) .. „:“ .. string.format(„%02d“, currentDate.min) == „22:00“) )
)
then
Debug(‚white‘, „Prüfe offene Fenster“)
for id = 1, maxID do
local deviceType = fibaro:getType(id)
if (deviceType == ‚com.fibaro.windowSensor‘ or deviceType == ‚com.fibaro.doorSensor‘) then
if (tonumber(fibaro:getValue(id, ‚value‘)) == 1) then
local name = fibaro:getName(id)
local room = fibaro:getRoomNameByDeviceID(id)
Debug(‚red‘, „ACHTUNG! “ ..name.. “ im Raum “ ..room.. “ ist offen!“)
for k=1, maxID do
if phoneID[k] ~= nil then
fibaro:call(phoneID[k], ’sendPush‘, ‚ACHTUNG: ‚ ..name.. ‚ im Raum ‚ ..room.. ‚ ist offen!‘)
end
end
end
end
end
end

setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger[„type“] == „autostart“) then
tempFunc()
else

local currentDate = os.date(„*t“);
local startSource = fibaro:getSourceTrigger();
if (
startSource[„type“] == „other“
)
then
fibaro:call(195, „turnOff“);
end

end

Hallo boomx,

das scheint mir ja genau das zu sein, was ich gesucht habe!
Kannst du erklären was die ID 195 ganz am Ende ist?

Danke und Gruß,
Daniel

Hi,

das ist das von boomx erwähnte

kann daher überflüssige Angaben enthalten

sein. Wenn die Szene nicht durch Autostart getriggert wird wurde hier ggf. eine Lampe oä ausgeschaltet.

VG Hoggle

Hab die Szene nicht erstellt, sondern ein Nutzer von unserer Seite. Daher hier nochmal ein Dankeschön :slight_smile:

Die ID ist nur betroffen, wenn die Szene manuell gestartet wird. Kannst du also theoretisch ignorieren, entfernen.

Gruß

habe die Scene grad mal in meine HC2 reinkopiert. Irgendwie kommen hier nur Fehler line 11 unexpected symbol near char(226). Hat das Skript schon mal jemand durchlaufen lassen?

bei mir lautet die 11. Zeile anders und zwar wie folgt:

fibaro:debug(string.format(’<%s style=“color:%s;”>%s’, “span”, color, message, “span”))

falls es damit nicht funktionieren sollte, werde ich noch mal das komplette Script kopieren.
Gruß, Norbert

Ich bekomme auch die Fehlermeldung “[DEBUG] 21:37:13: line 11: unexpected symbol near char(226)”.
Hab diese auch schon durch die Zeile von Norbert ersetzt. Klappt auch nicht.

Hinter der 2. Klamme ist bei dem Post von Norbert ein Komma, was ein Hochkomma sein sollte:

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

Zweiter Versuch, dass Script in korrekter Version zu übertragen. Bei mir endet es in Zeile 57, oben in der online gestellten Version aber in Zeile 55. Wenn das Script online ist, werde ich es bei mir selber dann auch noch mal installieren und prüfen, ob es geklappt hat. Gruß, Norbert

–[[
%% autostart
%% properties
%% events
%% globals
–]]
local phoneID = {252, 379} – Handy-IDs
local maxID = 1000

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

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) and string.format("%02d", currentDate.hour) … “:” … string.format("%02d", currentDate.min) == “22:00”) )
)
then
Debug(‘white’, “Prüfe offene Fenster”)
for id = 1, maxID do
local deviceType = fibaro:getType(id)
if (deviceType == ‘com.fibaro.windowSensor’ or deviceType == ‘com.fibaro.doorSensor’) then
if (tonumber(fibaro:getValue(id, ‘value’)) == 1) then
local name = fibaro:getName(id)
local room = fibaro:getRoomNameByDeviceID(id)
Debug(‘red’, “ACHTUNG! " …name… " im Raum " …room… " ist offen!”)
for k=1, maxID do
if phoneID[k] ~= nil then
fibaro:call(phoneID[k], ‘sendPush’, ‘ACHTUNG: ’ …name… ’ im Raum ’ …room… ’ ist offen!’)
end
end
end
end
end
end

setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger[“type”] == “autostart”) then
tempFunc()
else

local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
startSource[“type”] == “other”
)
then
fibaro:call(195, “turnOff”);
end

end

habe jetzt das Script nun von der siio Seite zurück kopiert und erhalte die gleiche Fehlermeldung. Werde heute Abend mal Schritt für Schritt vergleichen, was bei mir auf der HC2 installiert ist und wo das online Script davon abweicht. Melde mich, Gruß, Norbert

Hallo,

hab das Script angepasst so das es auch jetzt ohne Fehlermeldungen laufen sollte. Zusätzlich habe ich noch die Variable “timeCheck” eingefügt. Hier kommt die Uhrzeit rein, wann auf geöffnete Türen (einmalig) geprüft werden soll.


--[[
%% autostart
%% properties
%% events
%% globals
--]]
local phoneID = {68} -- Handy-IDs
local maxID = 1000
local timeCheck = "08:00"

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

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
  local currentDate = os.date("*t");
  local startSource = fibaro:getSourceTrigger();
  if (
      ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) 
          and string.format("%02d:%02d", currentDate.hour, currentDate.min) == timeCheck ))
    )
    then
    Debug('white', "Prüfe offene Fenster")
    for id = 1, maxID do
      local deviceType = fibaro:getType(id)
      if (deviceType == 'com.fibaro.windowSensor' or deviceType == 'com.fibaro.doorSensor') then
        if (tonumber(fibaro:getValue(id, 'value')) == 1) then
          local name = fibaro:getName(id)
          local room = fibaro:getRoomNameByDeviceID(id)
          Debug('red', "ACHTUNG! " ..name.. " im Raum " ..room.. " ist offen!")
          for k=1, maxID do
            if phoneID[k] ~= nil then
              fibaro:call(phoneID[k], 'sendPush', 'ACHTUNG: ' ..name.. ' im Raum ' ..room.. ' ist offen!')
            end
          end
        end
      end
    end
end

  setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
  tempFunc()
else

  local currentDate = os.date("*t");
  local startSource = fibaro:getSourceTrigger();
  if (
      startSource["type"] == "other"
    )
    then
    fibaro:call(195, "turnOff");
  end
end

@Valle, funktioniert super, habe es gerade getestet. Allerdings wäre es noch von Vorteil wenn man eine Meldung in Form einer Push oder Popup und im debug eine grüne Meldung wenn alle Fenster und Türen geschlossen sind und alles gut ist bekommt. So eine Meldung beruhigt ungemein.

Kannst Du dies noch einbauen?

Hi,

kannst du doch selber… :slight_smile: Im Code sind alle benötigten Infos enthalten :stuck_out_tongue:

Gruß

Oder Du schaust hier mal rein:
http://www.siio.de/board/thema/abfrage-fenster-aufzu/page/2/#post-36195

schau mal ob es läuft.


--[[
%% autostart
%% properties
%% events
%% globals
--]]
local phoneID = {68} -- Handy-IDs
local maxID = 1000
local timeCheck = "10:00"
local warning = 0

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

local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
  local currentDate = os.date("*t");
  local startSource = fibaro:getSourceTrigger();
  if (
      ( ((currentDate.wday == 1 or currentDate.wday == 2 or currentDate.wday == 3 or currentDate.wday == 4 or currentDate.wday == 5 or currentDate.wday == 6 or currentDate.wday == 7) 
          and string.format("%02d:%02d", currentDate.hour, currentDate.min) == timeCheck ))
    )
    then
    Debug('white', "Prüfe offene Fenster")
    for id = 1, maxID do
      local deviceType = fibaro:getType(id)
      if (deviceType == 'com.fibaro.windowSensor' or deviceType == 'com.fibaro.doorSensor') then
        if (tonumber(fibaro:getValue(id, 'value')) == 1) then
          local name = fibaro:getName(id)
          local room = fibaro:getRoomNameByDeviceID(id)
          Debug('red', "ACHTUNG! " ..name.. " im Raum " ..room.. " ist offen!")
		  warning = warning + 1
          for k=1, maxID do
            if phoneID[k] ~= nil then
              fibaro:call(phoneID[k], 'sendPush', 'ACHTUNG: ' ..name.. ' im Raum ' ..room.. ' ist offen!')
            end
          end
        end
      end
    end
	if warning == 0 then
      for k=1, maxID do
        if phoneID[k] ~= nil then
          fibaro:call(phoneID[k], 'sendPush', 'alle Fenster und Türen geschlossen')
        end
       end
          Debug('green', "alle Fenster und Türen geschlossen!")
	end	  
end

  setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
  tempFunc()
else

  local currentDate = os.date("*t");
  local startSource = fibaro:getSourceTrigger();
  if (
      startSource["type"] == "other"
    )
    then
    fibaro:call(195, "turnOff");
  end
end

Da bin ich ja froh, dass doch noch etwas Brauchbares daraus geworden ist. Hat jemand eine Vorstellung, was beim Hochladen schief gelaufen sein könnte. Habe für das Hochladen einen Apple-Computer benutzt und wie bei der Entstehung der bei mir lauffähigen Scriptversion (Zusammensetzung aus dem Sturmwarnungsscript und einem Script für die Zeitabfrage nebst kleineren Anpassungen) die Kopier- und Einsetzfunktion des Betriebssystems benutzt. Als Browser habe ich Safari verwendet. Würde natürlich bei einem eventuellen “nächsten Mal” eine solche Panne vermeiden wollen, Gruß, Norbert

Dank an Valle, funktioniert einwandfrei.

Danke noch mal.

Ich habe es auch selbst probiert, aber nur Fehler bekommen. Ich denke mal es macht schon Sinn, das hier Leute sitzen die dann fertige Produkte reinstellen, ansonsten ist der Frust dann doch zu hoch, wenn man nicht gerade Beruflich mit Programmierung zu tun hat.

Trixxon: Bei mir hat das Script funktioniert und funktioniert immer noch, ein “Programmierfehler” lag nicht vor. Woran eine 1:1 Übertragung auf die siio - Seite danach gescheitert ist, ist mir allerdings ein Rätsel, Gruß, Norbert

Hab jetzt schon öfter mal beobachtet, dass beim Kopieren Zeichen verändert werden. Hab bei deinem Skript nicht drübergeschaut, ob dies der Fall ist/war. Wenn es so ist, dann tut es mir leid.

Gruß

Könnte es an falsch inteprtierten Zeichen liegen, die beim hin und her kopieren durch andere Zeichen ersetzt werden? Ich habe auch einen Mac und hier ist mir aufgefallen, das manchmal beim kopieren z.B. die Hochkommas durch Gänsefüßchen ersetzt werden. Evtl. kommen da auch noch andere Zeichen manchmal durcheinander. Nur so ein Gedanke.