Abfrage Türkontakt

Moin Gemeinschaft,

ich habe ein Verständnis-Problem mit LUA und einem Türkontakt :slight_smile:

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

Danke!

Guten Morgen

Ich denke mal du hast den HC2 oder HCL.

Versuche mal

if fibaro:getValue(330,„value“) == true then

oder

if fibaro:getValue(330,„value“) then

Dann klappts auch mit dem Nachbarn ! :wink:

Da es nur ein ein/aus ist und kein Wertebereich wie beim Hellichkeitsmesser oder Thermometer usw. musst du mit true oder false abfragen.

Beim HC3 müsste das dann

if fibaro.getValue(330,„value“) == true then

heisen.

Grüße F.B.

Hi!

Ja, es ist ein HC2, sorry für die fehlende Information.
Ich versuche es heute Abend mal umzusetzen, meld mich wieder!

Gruß
Rik

Nabend!

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 :wink: , 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

Gruß
Rik

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.

Hi Rik,

ich habe Dir mal was vorbereitet:

--[[
%% 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```

moin und sorry für die späte Antwort!

Habe das Script nun ein paar Tage im Einsatz, funktioniert so wie ich es benötige - Danke!