Pusch Nachricht wenn Fenster länger als 15 Min offen...

Hallo Zusammen,

ich möchte eine Pusch Nachricht bekommen wenn ein Fenster z.Bp. länger als 15 Minuten offen ist…
“Das BAD FENSTER ist AUF > 15 Min!”

ich habe versucht das ganze mit Block Scenen zu basteln aber es ist viel zu viel Aufwand (jedes Fenster muss eigene Scene haben) :frowning:

Kann mir bitte jemand helfen?

Danke! :slight_smile:

Fenster-AUF-15-Min.jpg

Hi,
Ich kann heute Abend eine LUA Szene posten, die das in Abhängigkeit der Außentemperatur macht.
Allerdings nutze ich für die Ausgabe kein Push, sondern TTS über Sonos.

Viele Grüße Hoggle

Hallo Gregor,

müsste so klappen:

--[[
%% properties
%% globals
--]]

fenster = yy
phone = xx;
local var = 0

while ( tonumber(fibaro:getValue(fenster, "value")) > 0 )  do

 var = var+1
 fibaro:debug(var)
	if var == 450000 then
	fibaro:call(phone, "sendPush", "Das BAD FENSTER ist AUF > 15 Min");
    	break
  	end
  fibaro:sleep(2000)
end
fibaro:debug("Ende")

Hallo Hoogle,

Deine Szene wurde mich interessieren. Kannst Du sie bitte posten.

Gruß
ChrisBeat

Hi,

klar.
In die Szene habe ich aber auch mein Rollo integriert:

--[[
%% properties
358 value
%% events
%% globals
--]]

--Wenn das Fenster geöffnet wird, startet ein Timer in Abhängigkeit 
--der Außentemperatur und gibt über Sonos einen Hinweis auf das offene Fenster
--Bei EVENING und nach 120 Sek geöffent, fährt das Rollo beim Fensterschließen ganz runter
--Nach dem Zwangs-Schluießen fährt das Rollo bei Day und Morning automatisch wieder hoch

if fibaro:countScenes() > 1 then
   fibaro:abort()
  	fibaro:debug("Szene abgebrochen")
end

local FensterID = 358    --und im Header anpasen
local RolloID = 171
local ZwangsZUValue = 30 --Wenn das Rollo >= diesem Wert ist, erfolgt u.a. die Zwangsschließung des Rollo
local ZwangsZu = 0 --verhindert das dauernde Z-Wave-Befehle geschickt werden
local TempUntergrenze1 = 3 --in Grad
local TempUntergrenze2 = 9 --in Grad
local TTSID = 279 --ID der TTSSayAll-Szene

local room = fibaro:getRoomNameByDeviceID(FensterID)
local Temperatur = tonumber(fibaro:getValue(144, "value"))  --ID von Netatmoprint("Temperatur: "..Temperatur)
local temp = tostring(fibaro:getValue(144, "value"))
local tempcurr = string.gsub(temp, "%.", ",", 1); --wegen TTS

------------------------------------------------------------------
print("Temperatur: "..Temperatur)

if tonumber(fibaro:getValue(FensterID, "value")) == 0 then
	fibaro:debug(room.."-Fenster  ist ZU")
elseif tonumber(fibaro:getValue(FensterID, "value")) == 1 then
	fibaro:debug(room.."-Fenster ist AUF")
end  

------------eigentliches Script
if tonumber(fibaro:getValue(FensterID, "value")) == 1 then

		if Temperatur <= TempUntergrenze1 then
      		fibaro:debug("Fenster offen und Außentemp kleiner "..TempUntergrenze1.." Grad")
      		local counter = 0
   			local counterRollo = 0
    		local Intervall = 300  --fünf Minuten 
			while counter <= Intervall do
				fibaro:sleep(1000)
				counter = counter + 1
      			counterRollo = counterRollo + 1 --zählt Gesamt SChleifen und nach einem Min-Wert wird beim Fensterschließen das Rollo geschlossen
					if counter == Intervall then
						--fibaro:setGlobal("SONOS_MUSIC", "Fritz-nas/fritz.nas/General-USBFlashDisk-01/Die_Fenster_oben_sind_noch_offen.mp3");
						--fibaro:call(206, "pressButton", "2"); --Kueche
        				min = tonumber(string.format("%.0f", (counterRollo/60)))
        				fibaro:setGlobal("TTSSayAll", "Das "..room.."-Fenster ist seit "..min.." Minuten auf und es sind "..tempcurr.." Grad.")
        				fibaro:startScene(TTSID)
        				fibaro:debug("TTS-Szene gestartet")
        				counter = 0 --damit Intervall erneut läuft und neien weitere Ansage kommt
					end
      				--Zwangsschließung des Rollo, auch wenn Fenster noch offen
      				if (counterRollo >= Intervall*2 and tonumber(fibaro:getValue(RolloID, "value")) >= ZwangsZUValue 
          				and ZwangsZu == 0) then
        				fibaro:call(RolloID, "close")
        				fibaro:debug("Rollo zwangsgeschlossen")
        				ZwangsZu = 1
      				end
					if tonumber(fibaro:getValue(FensterID, "value")) == 0 then
        				min = tonumber(string.format("%.0f", (counterRollo/60)))
   						fibaro:debug("Fenster wurde nach "..counterRollo.." Sekunden ("..min..") Minuten geschlossen. ") 
		   					if (fibaro:getGlobalValue("TimeOfDay") == "Evening" and 
            					counterRollo >= 120) then
          					 	fibaro:call(RolloID, "close")
          					end
                			if ((fibaro:getGlobalValue("TimeOfDay") == "Day" or fibaro:getGlobalValue("TimeOfDay") == "Morning") and 
          						ZwangsZu == 1) then
          						fibaro:call(RolloID, "open")
          						print("Rollo nach ZwangsZu wieder geöffnet.")
          					end
        				break
					end
			end  --der while-do-Schleife
----------------------------------------------
      	elseif Temperatur <= TempUntergrenze2 then
      		fibaro:debug("Fenster offen und Außentemp kleiner "..TempUntergrenze2.." Grad.")
    		local counter = 0
    		local counterRollo = 0
    		local Intervall = 600  --10 Minuten 
			while counter <= Intervall do
				fibaro:sleep(1000)
				counter = counter + 1
      			counterRollo = counterRollo + 1 --zählt Gesamt SChleifen und nach einem Min-Wert wird beim Fensterschließen das Rollo geschlossen
					if counter == Intervall then
						--fibaro:setGlobal("SONOS_MUSIC", "Fritz-nas/fritz.nas/General-USBFlashDisk-01/Die_Fenster_oben_sind_noch_offen.mp3");
						--fibaro:call(206, "pressButton", "2"); --Kueche
        				min = tonumber(string.format("%.0f", (counterRollo/60)))
						fibaro:setGlobal("TTSSayAll", "Das "..room.."-Fenster ist seit "..min.." Minuten auf und es sind "..tempcurr.." Grad.")
        				fibaro:startScene(TTSID)
        				fibaro:debug("TTS-Szene gestartet")
        				counter = 0 --damit Intervall erneut läuft und neien weitere Ansage kommt
					end
      				--Zwangsschließung des Rollo, auch wenn Fenster noch offen
      				if (counterRollo >= Intervall*2 and tonumber(fibaro:getValue(RolloID, "value")) >= ZwangsZUValue
        				and ZwangsZu == 0) then
        				fibaro:call(RolloID, "close")
        				fibaro:debug("Rollo zwangsgeschlossen")
        				ZwangsZu = 1
      				end
      				if tonumber(fibaro:getValue(FensterID, "value")) == 0 then
   						min = tonumber(string.format("%.0f", (counterRollo/60)))
        				fibaro:debug("Fenster wurde nach "..counterRollo.." Sekunden ("..min..") Minuten geschlossen.") 
		   					if (fibaro:getGlobalValue("TimeOfDay") == "Evening" and 
            					counterRollo >= 120) then
          					 	fibaro:call(RolloID, "close")
          					end
                			if ((fibaro:getGlobalValue("TimeOfDay") == "Day" or fibaro:getGlobalValue("TimeOfDay") == "Morning") and 
          						ZwangsZu == 1) then
          						fibaro:call(RolloID, "open")
          						print("Rollo nach ZwangsZu wieder geöffnet.")
          					end
        				break
					end
			end  --der while-do-Schleife
----------------------------------------------
		else 
      		fibaro:debug("Fenster abends offen und Außentemp ist größer 9 Grad.")
	   		local counterRollo = 0
			while true do
				fibaro:sleep(1000)
      			counterRollo = counterRollo + 1 --zählt Gesamt-Schleifen und nach einem Min-Wert (120 Sekunden) wird beim Fensterschließen das Rollo geschlossen
      			--Zwangsschließung des Rollo, auch wenn Fenster noch offen
      			if (fibaro:getGlobalValue("Jahreszeit") == "Winter" 
          			and tonumber(fibaro:getValue(RolloID, "value")) >= ZwangsZUValue and ZwangsZu == 0
        			and counterRollo >= 1800) then -- 30 Minuten
         			fibaro:call(RolloID, "close")
        			fibaro:debug("Rollo zwangsgeschlossen")
        			ZwangsZu = 1
      			end				
      			if tonumber(fibaro:getValue(FensterID, "value")) == 0 then
					min = tonumber(string.format("%.0f", (counterRollo/60)))
        			fibaro:debug("Fenster wurde nach "..counterRollo.." Sekunden ("..min..") Minutengeschlossen.") 
	   					if (fibaro:getGlobalValue("TimeOfDay") == "Evening" and 
          					counterRollo >= 120) then
       					 	fibaro:call(RolloID, "close")
       					end
                		if ((fibaro:getGlobalValue("TimeOfDay") == "Day" or fibaro:getGlobalValue("TimeOfDay") == "Morning") and 
          					ZwangsZu == 1) then
          					fibaro:call(RolloID, "open")
          					print("Rollo nach ZwangsZu wieder geöffnet.")
          				end
       				break
				end
			end  --der while-do-Schleife

----------------------------------------------    
  
  		end
end


Für TTS nutzte ich dann einen RPI3:

--[[
%% properties
%% events
%% globals
--]]

-----TTS-Szene für Sonos SayAll über VoiceRSS und RPI
-----Diese Szene wird zB aus der Fenstzer-Checker-Szene heraus gestartet

if fibaro:countScenes() > 1 then
   fibaro:abort()
  --fibaro:debug("Szene abgebrochen")
end

local VolumeAnsage = 25  -- Lautsärke für Ansage
local message = fibaro:getGlobalValue("TTSSayAll")
local RPIIP = tostring("192.168.178.40")  --IP des Resberry PI

--------Aufbereitung der Ansage für TTS
fibaro:debug("Original Message: " .. message)
function urlencode(str)
  if (str) then
      str = string.gsub (str, "([^%w])",
      function (c) return string.format ("%%%02X", string.byte(c)) end)
  end
  return str 
end
encodemessage = urlencode(message)
local encodemessage2 = tostring(encodemessage.."/de-de/"..VolumeAnsage)
--fibaro:debug("encoded message2 = " .. encodemessage2)

local code = tostring(RPIIP..":5005/sayall/"..encodemessage2)
--print("Code: "..code)

-------Absetzen der formartierten Ansage an den RPI und VoiceRSS zu Sonos  
local http = net.HTTPClient()  
      http:request('http://'..code, {
        options={ 
              method ='GET', 
              --timeout =5000
             }, 
      success = function(resp)
        if resp.status == 200 then
          --fibaro:debug(resp.status)
          	fibaro:debug("Erfolgreich Pause")
        	fibaro:debug(resp.data)
        else
          	fibaro:debug(resp.status)
        	fibaro:debug("FEHLER Stop")
        end
      end
    })

print("Ansage gemacht")

VG Hoggle

Hallo Hoggle,

super vielen dank. Werde es am Wochenende testen. Danke für das Teilen Deiner Scripte.

Gruß
ChrisBeat

Hallo, ich nutze diese Szene, um eine Push-Nachricht auf mein Handy zu bekommen, wenn das Bad Fenster länger als 15 min offen ist. Leider bekomme ich aber keine
Nachricht!?! Weiss nicht was ich falsch gemacht habe, ferne würde ich diese Szene gerne automatisch starten lassen, sobald das Bad Fenster geöffnet wird.

Vielen Dank für eure Unterstützung

Marcel

--[[
%% properties
%% globals
--]]
 
fenster = 56
phone = 29;
local var = 0
 
while ( tonumber(fibaro:getValue(fenster, "value")) > 0 )  do
 
 var = var+1
 fibaro:debug(var)
	if var == 500 then
	fibaro:call(phone, "sendPush", "Das BAD FENSTER ist AUF > 15 Min");
    	break
  	end
  fibaro:sleep(2000)
end
fibaro:debug("Ende")

Hi,

dann muss die ID des Fenstersensors in den Header eingetragen werden. Ist die ID des Handys korrekt?

Gruß

Danke für deine schnelle Antwort?
Hi ja die ist korrekt! Kannst du mir die Szene umschreiben, habe noch keine Ahnung von LUA?
Vielen Dank schonmal

Du musst doch nur den Trigger eintragen, mehr nicht:

https://www.siio.de/fibaro-homecenter-guide-teil-3-trigger-auswerten/