Seite 1 von 1

#1 Benutzung von Funktionen im Logic Tab

Verfasst: Mi 29. Jan 2014, 22:29
von Hat
Hallo,

Ich habe folgende einfache Aufgabe, die ich jedoch leider nicht erfolgreich umsetzen kann.
Ich möchte in Remote eine Statusangabe machen ob ein odere mehrere Leuchten in einem bestimmten Stockwerk brennen.
Dazu habe ich folgende Einträge unter dem Tab Logic im Base Modul erzeugt. Dei Variable VAR.Licht_UG sollte dabei
einen Wert 0 erhalten wenn keine Leuchten brennen. Das funktioniert jedoch offenbar nicht. Ein Einschalten oder Ausschalten von Leuchten
in diesem Stockwerk führt nicht zu einer Aktualisierung der Variabele. Der Wert ist immer 1. Was läuft hier schief? Vielleicht verstehe ich nicht
wann dieses onchange zu einer Ausführung der Funktion Status-Licht_UG führt.
Herzlichen Dank für Kommentare und Hilfe.



-- Licht UG --
Licht_UG = use 'VAR.Licht_UG'
Licht_UG_Hobby = use 'LCN.output.0.11.1'
Licht_UG_Abstellraum = use 'LCN.output.0.11.2'
Licht_UG_Flur = use 'LCN.relay.0.19.2'

function Status_Licht_UG()
if Licht_UG_Flur == 0 and Licht_UG_Hobby == 0 and Licht_UG_Abstellraum == 0
then Licht_UG:set(0)
else Licht_UG:set(1) end
end

Licht_UG_Flur.onchange = Status_Licht_UG()
Licht_UG_Hobby.onchange = Status_Licht_UG()
Licht_UG_Abstellraum.onchange = Status_Licht_UG()

Gruß

Hat

#2 RE: Benutzung von Funktionen im Logic Tab

Verfasst: Mi 29. Jan 2014, 22:44
von Thomas
Ein Beispiel,

die Funktion wird alle 60 Sekunden per Timer aufgerufen :

Code: Alles auswählen

------------------------------------------------------------------------
--     
-- Base Laufzeit in Minuten
lzm = use 'VAR.laufzeit'
lzs = use 'VAR.laufzeit_std'
function laufzeit()
local m,s
   m = lzm.value + 1 
   if m == 60 then
    m=0
    s = lzs.value + 1
   end
   set ('VAR.laufzeit',m)   
   set ('VAR.laufzeit_std',s)   
end
------------------------------------------------------------------------


lg thomas

#3 RE: Benutzung von Funktionen im Logic Tab

Verfasst: Do 30. Jan 2014, 01:21
von Wowbagger
Hallo Hat,

Die Abfrage müsste meiner Meinung nach lauten:

if Licht_UG_Flur.value == 0 and ...

Gruss,

Ueli

#4 RE: Benutzung von Funktionen im Logic Tab

Verfasst: Do 30. Jan 2014, 21:25
von Hat
Vielen Dank für den Hinweis. Das .value ist natürlich notwendig. Die Funktion ist nun syntaktisch korrekt. Allerdings ist mein wesentliches Problem
noch nicht gelöst, da der Wert von VAR.Licht_UG erst dann aktualisiert wird wenn ich diesen Kode erneut abspeichere. Ich würde eigentlich erwarten, dass wenn eine Lampe ein- oder ausgeschaltet wird die Variable VAR.Licht_UG aktualisiert wird , aufgrund der letzten Zeilen mit '.onchange' (Das habe ich aus dem Tutorial für "Shutters") . Dem ist jedoch nicht so. Wo finde ich mehr Info über .onchange? Muss ich das Aktualisieren über Events realisieren?

Gruß

Hat

#5 RE: Benutzung von Funktionen im Logic Tab

Verfasst: Do 30. Jan 2014, 23:03
von Hat
Dieses .onchange verstehe ich nach wie vor nicht, aber habe mein Ziel nun doch hinbekommen über Events.
Dazu nun eine Frage:
Wie kann man ein Event triggern wenn ein output sich von 0 auf einen beliebigen Wert ändert?
Kann man unter Data ein Range angeben, statt nur einen Wert?

Channel E.LCN.output.0.(%d+).(%d)
Data 100 (hier möchte ich aber alle möglichen Werte außer 0, da ein Ausgang nicht unbedingt Vollast liefert).

Vielen Dank im vorraus.

Gruß

Hat

#6 RE: Benutzung von Funktionen im Logic Tab

Verfasst: Fr 31. Jan 2014, 09:20
von Beleuchtfix
Hast du es schon einmal mit >0 versucht? Allerdings wird er auch erst einmal ausgelöst, wenn sich der Wert von 50 auf 80 ändert oder von 80 auf 50.

Viel Erfolg
Florian

#7 RE: Benutzung von Funktionen im Logic Tab

Verfasst: Fr 31. Jan 2014, 09:35
von Beleuchtfix
onchange
Bei mir ist onchange immer innerhalb einer function, also so:

Code: Alles auswählen

function brenner:onchange(new) 
    if 
(brenner.value == 1) then
        brenner_text
:set ('An')
    else
        brenner_text
:set ('Aus')
    end
end


Bei den set Befehlen musst du leider davon ausgehen, dass die etwas Zeit brauchen. Ein geänderte Variable stimmt leider nicht innerhalb eine Funktion (hast du nicht, aber hat mich schon zur Verzweiflung gebracht). Da muss man dann lokale Zwischenvariablen benutzen.

Viel Erfolg
Florian

#8 RE: Benutzung von Funktionen im Logic Tab

Verfasst: Fr 31. Jan 2014, 15:18
von Hat
Hallo Florian,

Domiq hat aber ein Tutorial für Shutters/Jalousien und da wird das .onchange so verwendet wie in der von mir geposteten LUA Kode.
Das mit ">0" habe ich versucht, aber hat nicht zum Erfolg geführt. Events wäre nochmals deutlich leistungsfähiger wenn man zum Triggern
unter DATA logische Operatoren verwenden könnte. Geht das denn nicht? Vielleicht etwas was nur Filip beantworten kann.

Gruß

Hat

#9 RE: Benutzung von Funktionen im Logic Tab

Verfasst: Fr 31. Jan 2014, 16:56
von Beleuchtfix
was mir auffällt, das die Funktion wird in dem shutters Beispiel ohne () aufgerufen

Code: Alles auswählen

shutter1.onchange = shutters

Empfinde ich zwar nicht als logisch, aber wer weiß....
Viel Erfolg
Florian

#10 RE: Benutzung von Funktionen im Logic Tab

Verfasst: Fr 31. Jan 2014, 18:16
von Hat
Tatsächlich, man sollte genau lesen können. Nun brauche ich kein Event mehr!
Es würde mich dennoch weiterhin interessieren ob man neben einfache Werte auch eine Berechnung oder Funktion bei der Eventsteuerung unter Daten
benutzen kann. Kurz oder lang werde ich sonst wieder auf diese Einschränkung stoßen.

Vielen Dank, Florian.

Gruß

Hat