Inzwischen gibt es ein zweites Modul, dass Rollläden an Relais positioniert.
Die Hauptfunktionen sind universell und können für alle Rollläden gleichzeitig genommen werden. Einige Events und Hilfsfunktionen müssen aber für jeden Rollladen einzeln angelegt werden.
Zunächst bestimmt man Laufzeiten des Rollladens getrennt für auf und ab (Beispielhaft für Modul 91 und 121) und trägt sie in die Datei user.lua (Domiq im Tab Logic)ein. Alle Werte werden in Millisekunden angegeben.
Code: Alles auswählen
-- Laufzeiten der Rollläden
set ('t_auf.91',15000) --SZ
set ('t_ab.91',14500)
set ('t_auf.121',15900) --Bibl.
set ('t_ab.121',15000)
Die Position kann z.B. in Remote angezeigt werden.
Der eigentlich Einstieg geht immer über die nachfolgende Funktion, Übergabewerte sind die Modulnummer, die gewünschte Position (0=offen, 100 = geschlossen) und ein Zwangssteuerungswert (0= normal, 1 = Fahrt über die Endlagen)
Code: Alles auswählen
function roll_pos(mod,pos,force) -- position 100 = geschlossen, 0 = offen, modul , Zwangssteuerung über Endlage
local t_auf = get('t_auf.'..mod)
local t_ab = get('t_auf.'..mod)
local position = get ('VAR.roll_position.'..mod)
local oben = get('LCN.output.0.'..mod..'.1')
local unten = get('LCN.output.0.'..mod..'.2')
local position_alt = get ('VAR.roll_position.'..mod)
local b = type(position_alt)
if (b ~= 'number' or force > 0) then
position_alt = 'n/a'
end
if (oben == 2 ) then
position_alt = 0
roll_pos_absolut(mod,pos)
set ('VAR.roll_position.'..mod,pos)
elseif unten == 2 then
position_alt = 100
roll_pos_absolut(mod,pos)
set ('VAR.roll_position.'..mod,pos)
elseif position_alt == "n/a" then
roll_pos_absolut(mod,pos)
else -- Zwischenposition direkt anfahren
relpos = pos - position_alt
if relpos >0 then
delay_ab = ((t_ab/100)*(relpos))
command ('C.LCN.output.0.'..mod..'.2=100')
command ('DELAY.'..delay_ab..'ms.C.LCN.output.0.'..mod..'.2=0')
set ('VAR.roll_position.'..mod,pos)
elseif relpos = 96 then
command ('C.LCN.output.0.'..mod..'.2=100')
elseif pos =40 then
-- über unteren Stop
command ('C.LCN.output.0.'..mod..'.2=100')
command ('DELAY.'..(t_ab+1000)..'ms.C.LCN.output.0.'..mod..'.1=100') -- unten
command ('DELAY.'..(t_ab+1000+delay_auf)..'ms.C.LCN.output.0.'..mod..'.1=0')
else -- über oberen Stop
command ('C.LCN.output.0.'..mod..'.1=100')
command ('DELAY.'..(t_auf+1000)..'ms.C.LCN.output.0.'..mod..'.2=100') -- unten
command ('DELAY.'..(t_auf+1000+delay_ab)..'ms.C.LCN.output.0.'..mod..'.2=0')
end
command ('DELAY.'..(t_auf*1.5)..'ms.C.LOGIC=roll_set_value('..mod..','..pos..')')
endCode: Alles auswählen
function roll_set_value(mod,pos)
set ('VAR.roll_position.'..mod,pos)
local textvalue = tostring(pos)..'%'
set ('VAR.roll_position.text.'..mod,textvalue)
end
Code: Alles auswählen
function roll_91_flag:onchange(new) --SZ
if (new == 'n/a') then
set ('VAR.roll_posflag.91',1)
else
set ('VAR.roll_posflag.91',0)
end
end
function roll_121_flag:onchange(new) -- Bibl
if (new == 'n/a') then
set ('VAR.roll_posflag.121',1)
else
set ('VAR.roll_posflag.121',0)
end
end
Code: Alles auswählen
function roll_na(mod,motor) -- Position + Text speichern,
local x = get('LCN.output.0.'..mod..'.'..motor)
local value
local textvalue
-- print ('Modul: '..mod..' Pos: '..x..' Motor: '..motor)
if motor == 1 then -- auf
if x == 2 then
value = 0
textvalue = 'oben'
else
value = 'n/a'
textvalue = 'n/a'
end
else -- motor 2 ab
if x == 2 then
value = 100
textvalue = 'unten'
else
value = 'n/a'
textvalue = 'n/a'
end
end
-- speichern und Umwandlung Text
set ('VAR.roll_position.'..mod,value)
set ('VAR.roll_position.text.'..mod,textvalue)
end
Code: Alles auswählen
Beschreibung: SZ.Position1
Kanal: E.LCN.output.0.91.1
Befehl:
Name: C.LOGIC
Wert: roll_na(91,1)
Beschreibung: SZ.Position2
Kanal: E.LCN.output.0.91.2
Befehl:
Name: C.LOGIC
Wert: roll_na(91,2)
Code: Alles auswählen
Label: Lüften
Befehl:
Name: C.LOGIC
Wert: roll_pos(91,80,0) -- Fährt den Rollladen des Moduls 91 auf Position 80%Zur Anzeige der Position erzeugt man ein Textfeld
Code: Alles auswählen
Kanal: VAR.roll_position.text.91Geändert: Link zu Rollläden an Relais

Offizieller KNX Partner 

