Prüfung Garagentor auf

hallo zusammen,

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 

Danke

Mit freundlichen Grüßen
bademeister

Hallo Bademeister!

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

Gruß
DeMaulwurfn

@Bademeister:

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.

Gruß

Hallo DeMaulwurfn
hallo boomx,

danke für die hilfe.

was bewirkt der teil
function tempFunc() ?
wenn ich die zeile 11 in meinem skript weglasse läufts dann auch?

@demaulwurfn: warum hast du “weather” im header?

danke
Mit freundlichen Grüßen
bademeister

Hi,

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.

Gruß

hallo boomx,

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?

danke
Mit freundlichen Grüßen
bademeister

Hi,

autostart-Szenen sind so aufgebaut, damit die Prüfung nur jede Minute erfolgt. Macht schon Sinn so :slight_smile:

Genau, in Zeile 10 deklariert und in Zeile 28 wird die Funktion dann ausgeführt und wartet dann 60 Sekunden bis zur nächsten Ausführung.

Die Funktion ist so benannt (kommt von der Umwandlung der Blockszene zu LUA). Kann natürlich auch anders benannt werden.

Gruß

Hi,

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 ...)

hallo zusammen,

danke jeep, für die erklärungen.

denke ich hab es jetzt verstanden.

die function bestimmt wie oft die szene laufen soll und die timeCheck etc bestimmt was zu der zeit passierenbzw. geprüft werden soll.

Mit freundlichen Grüßen
bademeister