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