Ich hab ein Problem mit dem Fibaro fgdw-001 Fensterkontakt.
Meine Jalousiemotoren von Jalousiescout geben leider keine Position zurück und können nur mit den Funktionen hoch, runter, stopp gesteuert werden.
Aus diesem Grund habe ich diese lediglich über einen Relayschalter mit Fibaro verbunden und lasse die Jalousien zeitgesteuert hoch und runter.
Das funktioniert auch tip top.
Nur jetzt ist Sommer und meine Frau lässt die Jalousien am Nachmittag schon runter. Fibaro erkennt das nicht und sendet dann zum Zeitpunkt, an welchem die Jalousien runter gehen sollten, ein Signal. Obwohl sie schon unten sind. Resultat: Die Jalousie fährt hoch, statt unten zu bleiben.
Wenn nun aber die Jalousien schon unten sind, wollte ich mit dem Fensterkontakt an Fibaro mitteilen, dass das Signal nicht mehr gesendet werden muss.
Also sind die Storen unten dann mach nichts.
Sind die Storen oben, dann sende das Signal.
Leider komme ich da mit den Grafischen Szenen nicht weiter.
Vielleicht hat schon mal jemand etwas ähnliches im LUA geschrieben?
um runter fahren, zu unterbinden?
eventuell verstehe ich Dein Problem nicht. Warum steuerst Du Deine Jalousiemotoren mit einem Relais und nicht mit einem Fibaro Roller Shutter? Den die geben nach korrekter Kalibrierung die Position zurück und nicht die Motoren.
Das wär die einfachste Lösung.
Das Problem ist nur, dass die Motoren nur eine Steuerleitung haben und diese nur jeweils mit dem Impuls die Funktion wechselt.
erster Impuls = runter, nächster Impuls = Stopp, nächster Impuls = hoch, nächster Impuls wieder runter usw…
nur über die Funkfernsteuerung werden die Funktionen einzeln angesteuert.
Daher kann ich das ganze leider nicht mit Rollershutter Steuern.
Alle Motoren zu ersetzen wär leider auch wieder ein riesen Aufwand.
Daher dachte ich, ich kann mit dem Fensterkontakt feststellen, wenn die Jalousie unten ist, wenn ich die Szene am Abed starte um die Jalousie nach unten zu lassen.
Sind die Jalousien schon unten,gehen sie dann nämlich wieder hoch.
So ,möchte ich also quasi den Befehl geben: 15 Minuten nach Sonnenuntergang Jalousien Impuls auslösen wenn der Fesnterkontakt nicht geschlossen ist.
So könnte ich mein Problem lösen.
Leider schaff ich das aber nicht und vermute, dass dies nur mit LUA möglich ist.
LUA behersche ich aber leider nicht
Daher hoffe ich, es hat schon mal jemand etwas ähnliches gemacht oder hat ne Idee, wie ich das in LUA umsetzen kann.
OK, Du hast also Funkmotoren. Das ist natürlich ein Problem. Denke dass ich Dir das in LUA machen kann, aber erst am Wochenende. Sollte kein Problem darstellen.
@rcschoeni
so, ich hoffe Du kannst mit dem Code was anfangen und in Deinem Script verwenden. Es wird im Prinzip nur die Position des Sensor (Auf/Zu) abgefragt.
--[[
%% properties
000 value
%% events
--]]
-- Wenn man das Script bei Änderungen des Sensors Triggern will, dann auch oben
-- im Header die ID bei value eintragen
local sensor = 000-- ID des Tür/Fenstersensors
if (tonumber(fibaro:getValue(sensor, 'value')) == 0)
then
print('Rolladen ist geschlossen')
print('Keine Ansteuerung des Relais notwendig')
else
print('Rolladen ist noch offen')
print('Impuls zum Relais schicken')
end
Super, vielen Dank.
Es läuft schon mal so weit, dass ich die Meldung erhalte dass die Store offen ist oder dass sie geschlossen ist und kein Impuls gesendet werden soll.
Nur wie schick ich das Signal an das Relay?
Wenn ich das unter 000 Value eintrage geschieht nichts.
Auch wenn ich die ID der Szene (Store einschalten) Eintrage passiert nichts.
Vielen Dank für Deine sehr geschätzte Unterstützung und einen schönen Sonntagabend
@rcschoeni
Hi,
hab gedacht Du hast das schon angesteuert. Aber vermutlich mit Blockszene. Wenn man die in LUA umwandelt kann man die Befehle sehen.
Hab mal noch 2 Zeilen eingefügt.
--[[
%% properties
000 value
%% events
--]]
-- Wenn man das Script bei Änderungen des Sensors Triggern will, dann auch oben
-- im Header die ID bei value eintragen
local sensor = 000 -- ID des Tür/Fenstersensors
local relais = 111 -- ID des Relais
if (tonumber(fibaro:getValue(sensor, 'value')) == 0)
then
print('Rolladen ist geschlossen')
print('Keine Ansteuerung des Relais notwendig')
else
print('Rolladen ist noch offen')
print('Impuls zum Relais schicken')
fibaro:call(relais, 'turnOn')
end
Hab gedacht, ich kann das dann in mein bestehendes Script einfügen.
Scheint aber nicht ganz so einfach zu sein…
Das wurde mit Blockszenen erstellt:
--[[
%% autostart
%% properties
%% weather
%% events
%% globals
--]]
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 os.date("%H:%M", os.time()-15*60) == fibaro:getValue(1, "sunsetHour")) )
)
then
fibaro:call(93, "turnOn");
setTimeout(function()
fibaro:call(106, "turnOn");
end, 200000)
setTimeout(function()
fibaro:call(102, "turnOn");
end, 280000)
setTimeout(function()
fibaro:call(112, "turnOn");
end, 340000)
setTimeout(function()
fibaro:call(124, "turnOn");
end, 405000)
end
setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
tempFunc()
else
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if (
startSource["type"] == "other"
)
then
fibaro:call(93, "turnOn");
setTimeout(function()
fibaro:call(106, "turnOn");
end, 200000)
setTimeout(function()
fibaro:call(102, "turnOn");
end, 280000)
setTimeout(function()
fibaro:call(112, "turnOn");
end, 340000)
setTimeout(function()
fibaro:call(124, "turnOn");
end, 405000)
end
end
Ist das relativ einfach möglich oder soll ich vieleicht einfach für die 6 Storen 6 Szenen machen?
Dann wäre es aber super, wenn ich den Faktor Sonnenuntergang noch rein kriegen würde.
Sorry. Aber LUA scheint doch etwas komplizierter als HTML
@rcschoeni,
Sorry für die späte Antwort. War die letzten beiden Wochen viel unterwegs.
Also 6 Szenen würde ich auf alle Fälle vermeiden, ich denke das Du auch keine 6 Fenstersensoren einsetzen
willst. Wenn Du noch Hilfe benötigst bitte hier melden.
Die Abfrage könnte so aussehen:
if ( os.date("%H:%M", os.time()-15*60) == fibaro:getValue(1, "sunsetHour")
and tonumber(fibaro:getValue(sensor, 'value')) == 1 ) then
fibaro:call(93, "turnOn");
setTimeout(function()
fibaro:call(106, "turnOn");
end, 200000)
setTimeout(function()
fibaro:call(102, "turnOn");
end, 280000)
setTimeout(function()
fibaro:call(112, "turnOn");
end, 340000)
setTimeout(function()
fibaro:call(124, "turnOn");
end, 405000)
end
Kein Problem… Bin froh um deine Hilfe.
Es ist so, dass ich tatsächlich 5 Fenstersensoren einsetzen möchte.
Deshalb müsste das tonumber(fibaro:getValue(187, 'value')) == 1 ) then
vor die Relay 93, 102, 106, 112, 124. Hab eben probiert, komme aber nicht auf die Lösung.
Vielen Dank für Deine Unterstützung Jepp und einen schönen Sonntag Nachmittag
OK, dann muss man halt für jeden Sensor eine Abfrage machen, ungefähr so:
--[[
%% autostart
%% properties
--]]
local sourceTrigger = fibaro:getSourceTrigger();
function tempFunc()
local currentDate = os.date("*t");
local startSource = fibaro:getSourceTrigger();
if ( os.date("%H:%M", os.time()-15*60) == fibaro:getValue(1, "sunsetHour"))
then
if tonumber(fibaro:getValue(sensor1, 'value')) == 1 then
fibaro:call(93, "turnOn");
end
if tonumber(fibaro:getValue(sensor2, 'value')) == 1 then
setTimeout(function()
fibaro:call(106, "turnOn");
end, 200000)
end
if tonumber(fibaro:getValue(sensor3, 'value')) == 1 then
setTimeout(function()
fibaro:call(102, "turnOn");
end, 280000)
end
if tonumber(fibaro:getValue(sensor4, 'value')) == 1 then
setTimeout(function()
fibaro:call(112, "turnOn");
end, 340000)
end
if tonumber(fibaro:getValue(sensor5, 'value')) == 1 then
setTimeout(function()
fibaro:call(124, "turnOn");
end, 405000)
end
end
setTimeout(tempFunc, 60*1000)
end
if (sourceTrigger["type"] == "autostart") then
tempFunc()
else
local startSource = fibaro:getSourceTrigger();
if ( startSource["type"] == "other")
then
fibaro:debug('Start geklickt!')
if tonumber(fibaro:getValue(sensor1, 'value')) == 1 then
fibaro:call(93, "turnOn");
end
if tonumber(fibaro:getValue(sensor2, 'value')) == 1 then
setTimeout(function()
fibaro:call(106, "turnOn");
end, 200000)
end
if tonumber(fibaro:getValue(sensor3, 'value')) == 1 then
setTimeout(function()
fibaro:call(102, "turnOn");
end, 280000)
end
if tonumber(fibaro:getValue(sensor4, 'value')) == 1 then
setTimeout(function()
fibaro:call(112, "turnOn");
end, 340000)
end
if tonumber(fibaro:getValue(sensor5, 'value')) == 1 then
setTimeout(function()
fibaro:call(124, "turnOn");
end, 405000)
end
end
end
Musst halt die Werte für sensor1 bis sensor5 ändern. Dadurch dass Du nach jedem Rolladen ein paar Sekunden
Verzögerung eingebaut hast, sieht es ein wenig kompliziert aus. Wenn ich keine Tippfehler reingebracht habe
könnte es so funktionieren.
Wow Jeep, Du bist genial!
Hab es mal testweise laufen lassen und es scheint durchzulaufen.
Dienstag sollten die weiteren Sensoren kommen, dann kann ich den definitiven Test vornehmen.
Vielen, vielen Dank für Deine sehr geschätzte Unterstützung.