Guten Tag die Herren,
ich habe seit letzer Woche das Home Center 2 erworben und langsam aber sicher stellen sich mir die ersten Fragen. Es wäre super, wenn irh mir bei folgendem Problem weiterhelfen könntet:
Ich möchte meinen Badlüfter über den Feuchtigkeitssensor (Multi-Sensor 6 (22)) ansteuern. Dabei soll der Lüfter(32) angeschaltet werden, wenn die Luftfeuchtigkeit gleich oder höher als 57% liegt. Jetzt mein Problem: Der Lüfter soll ausgehen, wenn die Luftfeuchtigkeit unter 65% fällt.
Könntet ihr bitte das folgende Script anschauen und mir den Fehler nennen.
Vielen Dank!
--[[
%% autostart
%% properties
22 value
%% weather
%% events
%% globals
--]]
local startSource = fibaro:getSourceTrigger();
if (
( tonumber(fibaro:getValue(22, "value")) >= 57 )
or
startSource["type"] == "other"
)
then
fibaro:call(32, "turnOn");
if (
( tonumber(fibaro:getValue(22, "value")) <= 65 )
)
then
fibaro:call(32, "turnOff");
end
Bei deinem sind auf jeden Fall die Trigger falsch, da es sich hierbei nicht um eine Autostart-Szene handelt. Da solltest du dich noch ein wenig schlau lesen Dies kannst du hier tun:
vielen Dank für eure Hilfe. Ich habe das script vom BOOMX verwendet und angepasst:
--[[
%% autostart
%% properties
22 value
%% globals
--]]
local humID = 22
local pro = 60
function actionToHigh()
fibaro:call(32, "turnOn")
end
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
local hum = tonumber(fibaro:getValue(humID, "value"))
fibaro:debug('Check Luftfeuchtigkeit v.01 gestartet.')
if (hum > pro) then
local room = fibaro:getRoomNameByDeviceID(humID)
Debug( 'blue', 'Luftfeuchtigkeit im Raum: ' .. room .. ' ist mit ' ..hum.. ' % zu hoch.')
actionToHigh()
else
local room = fibaro:getRoomNameByDeviceID(humID)
Debug( 'green', 'Luftfeuchtigkeit im Raum: ' .. room .. ' ist mit ' ..hum.. ' % ok.')
end
Frage dazu: Muss denn die Aktion (32 ist der Lüfter):
function actionToHigh()
fibaro:call(32, "turnOn")
denn nicht wieder aktiv beendet werden?
Gibt es keinen Befehl: fibaro:call(32, "turnOff")
wenn die Luftfeuchtigkeit unter 60 sinkt?
--[[
%% properties
22 value
%% globals
--]]
local humID = 22
local pro = 65
function actionToHigh()
fibaro:call(32, "turnOn")
end
Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
local hum = tonumber(fibaro:getValue(humID, "value"))
fibaro:debug('Check Luftfeuchtigkeit v.01 gestartet.')
if (hum > pro) then
local room = fibaro:getRoomNameByDeviceID(humID)
Debug( 'blue', 'Luftfeuchtigkeit im Raum: ' .. room .. ' ist mit ' ..hum.. ' % zu hoch.')
actionToHigh()
else
local room = fibaro:getRoomNameByDeviceID(humID)
Debug( 'green', 'Luftfeuchtigkeit im Raum: ' .. room .. ' ist mit ' ..hum.. ' % ok.')
fibaro:call(32, "turnOff")
end
Hallo,
ich möchte mich gern an dieses Thema “ranhängen”.
Vielen Dank für das Script, was erfolgreich in meinem Waschkeller läuft und zuverlässig die Luftfeuchte reguliert.
Mein Erweiterungsgedanke besteht darin, eine Bedingung einzuführen. Wenn das Fenster geöffnet ist, soll der Fensterkontakt die Szene anhalten bzw. wenn wieder geschlossen, dann wird die Szene fortgesetzt.
Könnt Ihr mir dazu helfen?
Vielen Dank, Nils.
die Szene wird durch die Änderung der Luftfeuchte getriggert. Ich würde von daher die Szene nicht noch zusätzlich vom Fensterkontakt triggern lassen, sondern stattdessen die Bedingungen (Zeile 22) entsprechend anzupassen und dort den Fensterkontakt abzufragen.
Vielen Dank für die schnelle Rückmeldung.
Ich bin nicht der Programmiereier, wie Du vielleicht bereits gemerkt hast. Kannst Du mir helfen, wie das Script ab Zeile 22 aussehen soll?
Vielen Dank, Nils.
Hallo,
ich habe das Script ein bisschen angepasst.
Leider habe ich das Problem, das ich immer alte werte auf das Handy gesendet bekomme.
Wenn der wert unter 60% ist, schreibt er Luftfeuchtigkeit im Bart mit 62% wieder gut.
Also den letzten hohen wert den er gemessen hatte. Denke ich! Ich weis leider nicht was ich ändern muss?
--[[
%% properties
89 value
%% globals
--]]
------------- Module ----------------
local scene = 31 -- ID dieser Szene
local switchID1 = 141 -- ID des Schalter
local senID = 89 -- ID des Feuchtigkeitssensor
local phoneID = {95} -- Handy IDs für Nachrichten senden
------------- Werte -------------------
local nas = 60 -- hier wird die feuchtigkeit eingegeben
local run = 0
local counter = 0
local hum = tonumber(fibaro:getValue(senID, "value"))
local room = fibaro:getRoomNameByDeviceID(senID)
local currentDate = os.date('*t')
local version = "0.6"
------------------ Debug Farben --------------------------------------
local Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
-- Lösche doppelte Szene(n)
if (fibaro:countScenes()>1) then
fibaro:debug('Beende Doppelte Szene');
fibaro:abort();
end
------------ Aktionen ---------------------
-- Funktion zum Versenden der Push Handy nachrichten
function sendPush(text)
if (phoneID[1] ~= nil) then
for i=1, #phoneID do
local phoneName = fibaro:getName(phoneID[i])
if phoneID[i] ~= nil then
fibaro:debug("Versende nachricht an "..phoneName .." Handy: " .. text)
fibaro:call(phoneID[i],"sendPush", text, "alarm")
end
end
end
end
-- Funktion zum anschalten der Lüfter bei zu hoher Luftfeuchtigkeit
function actionToHigh()
-- Sende Push an alle Handys
sendPush ("Luftfeuchtigkeit im Raum: ".. room .." ist mit "..hum.."% zu hoch.")
Debug("blue","sendet Handy nachrichten: Luftfeuchtigkeit zu hoch");
-- Macht Lüfter an
fibaro:call(switchID1, "turnOn");
Debug("red","Der Lüfter im Badezimmer ist eingeschaltet")
end
-- Funktion zum abschalten der Lüfter wenn Luftfeuchtigkeit wieder OK ist
function actionToOK()
-- Sende Push an alle Handys
sendPush("Luftfeuchtigkeit im "..room.." mit "..hum.."% wieder gut")
Debug("blue","sendet Handy nachrichten: Wieder OK")
-- Macht Lüfter aus
fibaro:call(switchID1, "turnOff");
Debug("green","Der Lüfter im Badezimmer ist ausgeschaltet");
fibaro:killScenes(scene);
end
---------------- Luftfeuchtigkeitsmessung ----------------
if (hum > nas) then
Debug("tan","Check Luftfeuchtigkeit Version ".. version.." gestartet.")
Debug("red", "Luftfeuchtigkeit im Raum: ".. room .." ist mit "..hum.."% zu hoch.")
actionToHigh()
fibaro:sleep(10*1000);
run = 1
end
-- Startet timmer für Lüfter wenn die luftfeuchtigkeit zuhoch --
while run == 1 do
if (tonumber(fibaro:getValue(senID, "value")) < nas) then
if (counter == 20) then
Debug("green","Luftfeuchtigkeit im "..room.." mit "..hum.."% wieder gut");
actionToOK()
run = 0
end
counter = counter + 1
fibaro:debug(counter)
-------- Luftfeuchtig Prüfung stellt timmer neu --------
elseif (tonumber(fibaro:getValue(senID, "value")) > nas ) then
Debug("tan","Luftfeuchtigkeit ist wieder zuhoch")
Debug("red","Luftfeuchtigkeit im Raum "..room.." mit "..hum.."% zuhoch");
counter = 0
end
fibaro:sleep(30*1000)
end
Die Variable hum wird nur ganz am Anfang deines Skriptes belegt und später nicht mehr geändert. Kann sich also gar nicht ändern/aktualisieren.
Du müsstes diese Zeile: hum = tonumber(fibaro:getValue(senID, “value”))
Irgendwo in deiner Schleife einbauen. Z.B. vor Zeile 73. Dann kannst Du auch alle Sensorabfragen tonumber(fibaro:getValue(senID, “value”)) in der Schleife durch hum ersetzen. Wär die “saubere” Lösung.
Hallo Flummi01
Wäre sehr interessiert an dieser Szene, möchtest Du die funktionierende Variante zur Verfügung stellen?
Vielen Dank schonmal…
Gruss fastsnake
--[[
%% properties
89 value
%% globals
--]]
------------- Module ----------------
local scene = 31 -- ID dieser Szene
local switchID1 = 141 -- ID des Schalter
local senID = 89 -- ID des Feuchtigkeitssensor
local phoneID = {95} -- Handy IDs für Nachrichten senden
------------- Werte -------------------
local nas = 60 -- hier wird die feuchtigkeit eingegeben
local run = 0
local counter = 0
local hum = tonumber(fibaro:getValue(senID, "value"))
local room = fibaro:getRoomNameByDeviceID(senID)
local currentDate = os.date('*t')
local version = "0.6"
------------------ Debug Farben --------------------------------------
local Debug = function ( color, message )
fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end
-- Lösche doppelte Szene(n)
if (fibaro:countScenes()>1) then
fibaro:debug('Beende Doppelte Szene');
fibaro:abort();
end
------------ Aktionen ---------------------
-- Funktion zum Versenden der Push Handy nachrichten
function sendPush(text)
if (phoneID[1] ~= nil) then
for i=1, #phoneID do
local phoneName = fibaro:getName(phoneID[i])
if phoneID[i] ~= nil then
fibaro:debug("Versende nachricht an "..phoneName .." Handy: " .. text)
fibaro:call(phoneID[i],"sendPush", text, "alarm")
end
end
end
end
-- Funktion zum anschalten der Lüfter bei zu hoher Luftfeuchtigkeit
function actionToHigh()
-- Sende Push an alle Handys
sendPush ("Luftfeuchtigkeit im Raum: ".. room .." ist mit "..hum.."% zu hoch.")
Debug("blue","sendet Handy nachrichten: Luftfeuchtigkeit zu hoch");
-- Macht Lüfter an
fibaro:call(switchID1, "turnOn");
Debug("red","Der Lüfter im "..room.." ist eingeschaltet")
end
-- Funktion zum abschalten der Lüfter wenn Luftfeuchtigkeit wieder OK ist
function actionToOK()
-- Sende Push an alle Handys
sendPush("Luftfeuchtigkeit im "..room.." mit "..hum.."% wieder gut")
Debug("blue","sendet Handy nachrichten: Wieder OK")
-- Macht Lüfter aus
fibaro:call(switchID1, "turnOff");
Debug("green","Der Lüfter im Badezimmer ist ausgeschaltet");
fibaro:killScenes(scene);
end
---------------- Luftfeuchtigkeitsmessung ----------------
if (hum > nas) then
Debug("tan","Check Luftfeuchtigkeit Version ".. version.." gestartet.")
Debug("red", "Luftfeuchtigkeit im Raum: ".. room .." ist mit "..hum.."% zu hoch.")
actionToHigh()
fibaro:sleep(10*1000);
run = 1
end
-- Startet timmer für Lüfter wenn die luftfeuchtigkeit zuhoch --
while run == 1 do
hum = tonumber(fibaro:getValue(senID, "value"))
if (hum < nas) then
if (counter == 20) then
Debug("green","Luftfeuchtigkeit im "..room.." mit "..hum.."% wieder gut");
actionToOK()
run = 0
end
counter = counter + 1
fibaro:debug(counter)
-------- Luftfeuchtig Prüfung stellt timmer neu --------
elseif (hum > nas ) then
Debug("red","Luftfeuchtigkeit im Raum "..room.." mit "..hum.."% immer noch zuhoch");
counter = 0
end
fibaro:sleep(30*1000)
end