habe versucht mir aus einigen Codeschnipseln der “Fenster offen” Prüfungsscripte eins zu basteln welches mir ne push nachricht schickt, wenn mein Garagentor abends um 22 uhr noch geöffnet ist.
bin leider kläglich gescheitert…
kann evtl. jemand mal hier drüber schauen?
--[[
%% autostart
%% properties
%% events
%% globals
--]]
local timeCheck = "22:05"
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
if (tonumber(fibaro:getValue(283, 'value')) == 1) then
fibaro:call(129, 'sendPush', 'ACHTUNG: Garagentor ist offen!')
end
end
end
ich habe es etwas anders gemacht. Das ist eine Teilkonvertierung mit div.Anpassungen. Deine ID´s sind schon drin.
--[[
%% autostart
%% properties
%% weather
%% events
%% globals
--]]
local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
local TimeCheck = "22:15"
local garage = 283 --Id des Tor Sensors
local phone = 129 -- Id des Telefons
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) == TimeCheck) )
and
( tonumber(fibaro:getValue(garage, "value")) > 0 )
)
then
fibaro:call(phone, 'sendPush', 'ACHTUNG: Garagentor ist offen!');
fibaro:debug("Die Garage war am " ..os.date("%x").. " um " ..os.date("%X").. " nicht zu!");
end
setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
tempFunc()
end
Du hast eine Function deklariert, welche aber an keiner Stelle des Skriptes ausgeführt wird. Schau dir mal das gepostet Beispiel an und Vergleich es mit deinem.
nein, das kannst du nicht weglassen. Wenn du es nicht als Funktion deklarierst, dann wird das Skript jede Millisekunde ausgeführt und könnte die Last auf dem HC stark ansteigen lassen. Damit deklarierst du die Funktion, welche dann über den Aufruf tempfunc() aufgerufen wird.
wofür benötige ich die “Funktion”?
im maulwurfskript sieht es so aus, als ob in Zeile 10 die Funktion deklariert wird und dann erst in zeile 28 darauf bezug genommen wird?
wofür steht tempFunc? temporäre Function?
ich kann also eine ausführung zu einer bestimmten uhrzeit in lua nicht nur mit local currentDate = os.date("*t"); und local TimeCheck = “22:15” bestimmen?
ich gebe auch noch ein wenig Senf dazu ;). Sehe ich bei LUA-Einsteiger sehr oft.
Wenn man die Abfrage jeden Tag machen will, kann der Teil wegbleiben, kommt immer von der Umwandlug der Blockszene nach lua. Da muss die CPU dann weniger rechnen.
(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)
Oder man kann dass ein wenig optmieren, sieht dann nicht so aufgeblasen auf:
-- Beispiel
local weekDay = currentDate.wday;
if ((weekDay== 1 or weekDay== 2 or weekDay== 3 or weekDay== 4 or weekDay== 5 or weekDay== 6 or weekDay== 7) and ...)