Die Bedienung in der CometVisu kann frei gestaltet werden. Meine Lösung sieht wie folgt aus (einmal als Infotrigger, einmal als Slider; in der Praxis wird selbstverständlich nur eine Darstellungsform benötigt): Diese Darstellung erreicht man über folgenden Code:
Code: Alles auswählen
<mapping name="ZeitAutomatik">
<entry value="0"><icon name="control_x" color="red"/></entry>
<entry value="1"><icon name="control_on_off" color="green"/></entry>
</mapping>
<styling name="RedGreen">
<entry value="0">red</entry>
<entry value="1">green</entry>
</styling>
<group name="Licht zeitgesteuert ausschalten">
<layout colspan="3"/>
<group name=" " flavour="black" nowidget="true" >
<layout rowspan="3" colspan="1"/>
<switch on_value="1" off_value="0" mapping="ZeitAutomatik" styling="RedGreen">
<layout colspan="1"/>
<address transform="DPT:1.001" mode="readwrite">10/0/63</address>
</switch>
</group>
<group name="Stunde" flavour="black" nowidget="true">
<layout colspan="1"/>
<infotrigger format="%02s:" uplabel="+" downlabel="-" upvalue="1" downvalue="-1" align="right" change="absolute" min="0" max="23" infoposition="middle">
<layout colspan="1"/>
<address transform="DPT:7.007" mode="readwrite">10/0/61</address>
</infotrigger>
</group>
<group name="Minute" flavour="black" nowidget="true">
<layout colspan="1"/>
<infotrigger format="%02s" uplabel="+" downlabel="-" upvalue="5" downvalue="-5" align="right" change="absolute" min="0" max="55" infoposition="middle">>
<layout colspan="1"/>
<address transform="DPT:7.006" mode="readwrite">10/0/62</address>
</infotrigger>
</group>
</group>
<group name="Licht zeitgesteuert ausschalten">
<layout colspan="3"/>
<group name=" " flavour="black" nowidget="true">
<layout colspan="1"/>
<switch on_value="1" off_value="0" mapping="ZeitAutomatik" styling="RedGreen">
<layout colspan="1"/>
<address transform="DPT:1.001" mode="readwrite">8/2/60</address>
</switch>
</group>
<break/>
<group name="Stunde" flavour="black" nowidget="true">
<layout colspan="3"/>
<slide min="0" max="23" step="1" format="%02sh">
<layout colspan="3"/>
<address transform="DPT:7.007" mode="readwrite">8/2/61</address>
</slide>
</group>
<group name="Minuten" flavour="black" nowidget="true">
<layout colspan="3"/>
<slide min="0" max="55" step="5" format=":%02s">
<layout colspan="3"/>
<address transform="DPT:7.006" mode="readwrite">8/2/62</address>
</slide>
</group>
</group>
Code: Alles auswählen
{
"Module": [
["Clocksignal","$Aktiv",0,"$Period"], // Triggert die Logik, sofern diese über $Aktiv eingeschaltet worden ist
["Localtime",0,0,0,"$Min","$Hour",0,0,0,0,0,0], // Zeit einlesen
["Limiter","$Stunde",0,"$StundeOK",["$Hour","$Hour"]], //Gleichheit der Stunde prüfen
["Limiter","$Minute",0,"$MinuteOK",["$Min","$Min"]], //Gleichheit der Minute prüfen
["And",["$StundeOK", "$MinuteOK"],"$ZeitOK"], //Prüfen, ob Zeit gegeben ist
["Break",["-$ZeitOK"]], // Abbruch wenn Zeit nicht gegeben, somit wird nur an Ausgang gesendet, wenn Zeit gegeben ist
["Latch","$SendeBefehl","$Out","$true",0] //Sendebefehl an Ausgang übergeben
],
"Input": [
["Aktiv", "1 aktiviert die ZSU, 0 deaktiviert", "$Aktiv", "a"],
["Stunde", "Stunde der Uhrzeit, an der Befehl ausgeführt werden soll", "$Stunde", "a"],
["Minute", "Stunde der Uhrzeit, an der Befehl ausgeführt werden soll", "$Minute", "a"],
["SendeBefehl", "Befehl, der zu Senden ist, in der Regel als Parameter definiert", "$SendeBefehl", "a"],
["Abfrageintervall", "Intervall, in welchem die Logik getriggert werden soll, in der Regel als Parameterdefiniert", "$Period", "a"]
],
"Output": [
["Ausgang","","$Out","a"]
],
"Level": [
["$true","bool",true],
["$false","bool",false],
["$Aktiv","bool",false],
["$StundeOK","bool",false],
["$MinuteOK","bool",false],
["$ZeitOK","bool",false],
["$Stunde","int",0],
["$Minute","int",0],
["$Min","int",0],
["$Hour","int",0],
["$Period","int",31], // Takt, in welchem die Logik getriggert wird
["$SendeBefehl","bool",false],
["$Out","bool",false]
]
}
und führt zu folgender Logikzelle: In der Logikzelle können namentlich der Sendebefehl (hier false für Ausschalten) und das Abfrageintervall (hier 30 Sekunden, d.h. der Befehl wird von der Logik - zur Sicherheit [Angsthaseneinstellung] zweimal gesendet) als Parameter eingestellt werden. Wichtig: Es handelt sich nicht um einen Cron-gesteuerten Trigger, d.h. er wird nicht zur Sekunde 00 ausgeführt, sondern irgendeinmal, d.h. die die Logik löst nicht zur 0-Sekunde aus, sondern irgendeinmal (oder wie hier zweimal) während der eingestellten Minute.
Für den Datenaustausch zwischen CometVisu und der Logik werden für jede Logik drei GA benötigt:
- Zeitschaltfunktion ein/aus (DPT 1.001)
- Zeitschaltfunktion Stunde (DPT 7.007)
- Zeitschaltfunktion Minute (DPT 7.006)
Und der gute Ordnung halber: Der Schöpfer dieser Custom Logik überträgt die Nutzungsrechte gemäss der TOLL ("Timberwolf Open Logikblock License"), die unter https://wrgt.news/TOLL zum Download zur Verfügung steht.
Viel Spass, Diego
Edit: TOLL eingefügt.