Seite 1 von 1

Einfache, über CometVisu gesteuerte Zeitschaltuhr

Verfasst: Di Jun 09, 2020 10:58 am
von fechter65
Vor Jahren hatte ich einmal ein Wiregate-Plugin publiziert, welches es erlaubte, zu einer in der CometVisu über einen Slider oder Trigger eingestellten Uhrzeit einen Befehl auszulösen; Details dazu siehe https://knx-user-forum.de/forum/support ... ate-plugin

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):
image_35533.png
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>
Die Logik besteht aus folgendem Code:

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:
Logikzelle.png
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.

Re: Einfache, über CometVisu gesteuerte Zeitschaltuhr

Verfasst: Di Jun 09, 2020 1:21 pm
von StefanW
Hallo Diego,

danke sehr für die tolle Arbeit und die wunderbaren Logikelemente.

Leider ist die rechtliche Situation wegen dem Urheberrecht für die Nutzer dieser Logikdefinition unklar.

Wir haben eine Lizenz mit dem Namen TOLL (Timberwolf Open Logikblock License") entwickelt. Magst Du Dir mal das folgende ansehen und womöglich den empfohlenen Satz in eine Bemerkung zu Deinen Logikbausteinen schreiben, damit deine Freigabe für die Nutzer klar ist? Du kannst natürlich auch eine eigene Lizenzbedingung formulieren:


TOLL: viewtopic.php?f=65&t=1583

Merci für Deine tolle Arbeit

lg

Stefan