ich habe ein Verständnis-Problem mit LUA und einem Türkontakt
Folgendes möchte ich erreichen: jeden Tag um X-Uhr soll überprüft werden ob der Türkontakt „363“ offen ist. Wenn ja, dann soll eine Aktion durchgeführt werden (eigentlich Device 330 schalten, zur Zeit ersetzt durch Push-Nachricht".
Nun habe ich mit einer Blockszene alles erstellt, habe die Wochentage gelöscht, aber trotzdem funktioniert das Script nicht, egal ob ich es manuell starte, welche Zeit ich angebe oder welchen Wert ich bei Value eintrage (">0" oder „==0“)
Kann mir einer auf den richtigen Weg helfen? Wo liegt mein Problem?
hier der Code:
--[[
%% autostart
%% properties
363 value
%% weather
%% events
%% globals
--]]
local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
( (string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "08:41") and
tonumber(fibaro:getValue(363, "value")) == 0 )
)
then
-- fibaro:call(330, "turnOn");
fibaro:call(174, "sendPush", "Garagentor ist noch auf", "Garagentor"); -- Push Handy Rik
end
setTimeout(tempFunc, 60*1000)
end
Bin gestern ein wenig zum Probieren gekommen, aber leider alles ohne Erfolg. Ich hänge mal meine Szene an, die drei Varianten meiner Versuche ebenfalls, alle ohne Ergebnis. Ich habe wohl zu wenig Ahnung von LUA , aber vielleicht kann mir von Euch doch noch jemand helfen?! Danke!
--[[
%% autostart
%% properties
363 value
%% weather
%% events
%% globals
--]]
local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
--fibaro:getValue(363,"value") == false
--tonumber(fibaro:getValue(363, "value"))
fibaro:getValue(363,"value")
and
(string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "21:45")
)
then
-- fibaro:call(330, "turnOn");
fibaro:call(174, "sendPush", "Garagentor ist noch auf", "Garagentor"); -- Push Handy Rik
end
setTimeout(tempFunc, 60*1000)
end
Ich kann dir leider nur wenig helfen da ich einen HC3 habe.
Ich würde aber wenn eine „If“ Abfrage nicht funktioniert print Anweisungen einfügen um den Zustand der Abfragen analysieren zu können.
beim HC3 würde das so aussehen
print(" 363 = „,fibaro.getValue(363,„value“))
print(“ 363 tonum =", tonumber(fibaro.getValue(363, „value“))
usw.
Das hilft bei der Fehlersuche und man muss nicht rumrätzel warum und wieso.
Versuche das mal um den Fehler zu lokalisieren.
So lernt man immer wie sich die Programmteile verhalten und wie sich Abfragen verändern wen man dieses oder jenes macht.
Überlege mal was das den machen soll?
tonumber(fibaro.getValue(363, „value“)
Da versuchst du eine Boolsche/Logische Variabel (true/false) in einen Numerischen Abfrage umzuwandeln.
Das Tut nun wirklich nicht!
Versuche die Print Anweisungen und schau was da passiert.
Fange klein an und steigere dich sonst sitzt du vor einem Heuhaufen und versuchst die Stecknadel zu finden.
Ja ich weis das klingt Schulmeisterlich, ist aber nur Gut gemeint und ich möchte dir nur helfen.
Gruß F.B.
--[[
%% autostart
%% properties
%% globals
--]]
-------------------------
--- ### Variablen ### ---
-------------------------
garage2check = {363};
currentDate = os.date("*t");
sourceTrigger = fibaro:getSourceTrigger();
fibaro:debug(os.date("Szene wurde erstmals am %d.%m.%Y um %H:%M Uhr gestartet."))
---- ### Debug Funktionen ### ----
function debug(message)
if (vardebug) then fibaro:debug(message); end
end
function extradebug(color, message)
if (varextradebug) then fibaro:debug(string.format('<%s style="color:%s;">%s<!--%s-->', "span", color, message, "span")); end
end
function specialdebug(color, message)
if (varspecialdebug) then fibaro:debug(string.format('<%s style="color:%s;">%s<!--%s-->', "span", color, message, "span")); end
end
--- ### Debug-Modus ### ---
vardebug = true
varextradebug = true
varspecialdebug = true
-------------------------------
--- ### Schleifenschutz ### ---
-------------------------------
if (fibaro:countScenes()>1) then
fibaro:abort();
end
------------------------
--- ### Funktion ### ---
------------------------
-------------------------------------------------------
---- ### checkGarage Funktion ### ----
function checkGarage(array)
specialdebug("grey", "Check der Garage...");
for j=1, #garage2check do
status = fibaro:getValue(garage2check[j], "value")
sensorname = fibaro:getName(garage2check[j])
if status == "1" then
specialdebug("yellowgreen", "Garage: " ..sensorname .. " offen.");
fibaro:call(174, "sendPush", "Garagentor ist noch auf", "Garagentor"); -- Push Handy Rik
garageOpen = true;
elseif status == "0" then
specialdebug("tomato","" ..sensorname .. " ist zu.");
garageOpen = false; break
end
end
end
-------------------------------------------------------
function timeCheck()
local sunsetHour = fibaro:getValue(1, "sunsetHour");
local currentDate = os.date('*t');
--- ### Skript Anfang ### ---
--- ### Es ist 18:30 Uhr ### ---
if ( ((string.format("%02d", currentDate.hour) .. ":" .. string.format("%02d", currentDate.min) == "18:30") ))
then
debug(os.date("--- %d.%m.%Y ---"))
debug('Es ist 18:30')
checkGarage()
end
--- ### Skript Ende ### ---
setTimeout(timeCheck, 59*1000);
end
if (sourceTrigger['type'] == 'autostart') then
timeCheck();
end```