Ankündigung

Einklappen
Keine Ankündigung bisher.

Timeout für gelesene GAs

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Timeout für gelesene GAs

    Gibt es eine Möglichkeit, GAs mit einem Timeout zu überwachen. Mein Problem: Wenn ein KNX-Gerät, das z.B. Temperaturdaten liefert, "hängt" und damit keinen Update des vorher gesendeten Wertes mehr kommt, bleibt der "alte" Wert stehen. Für meine Anwendung wäre ein Farbumschlag z.B. nach "rot" (oder blinken) als Signalisierung, dass der entsprechende Wert ausbleibt eine gute Funktion.
    Gibt es dazu Beispiele, oder wäre dazu eine Änderung in der CometVisu nötig/möglich?
    Gruß
    Hans

    #2
    Hi,

    Ich würde so etwas eher auf der Logik- und nicht auf der Visu-Ebene sehen. Ich habe für jedes Objekt, das zyklisch gesendet wird, auch ein "valid"-Objekt, dass nach überschreiten der doppelten Zykluszeit false wird. In der Visu wird die Anzeigefarbe (rot, grün) durch valid bestimmt

    Gruß Waldemar
    OpenKNX www.openknx.de

    Kommentar


      #3
      das Problem hier wäre auch das die meisten CV-Installationen wohl den EIBD (wenige auch KNXD) und der cacht die Infos, d.h. die CV fragt und dass Backend liefert eine Antwort, auch wenn die schon "etwas älter" ist... Die CV hat also realistisch keine Chance festzustellen ob Werte aktuell sind.

      Gruss,
      Michael

      Kommentar


        #4
        Hallo Waldemar,
        hast Du ein Beispiel, wie Du das "valid"-Object aufgebaut hast und wie ich es in der CV einbinde?
        Gruß
        Hans

        Kommentar


          #5
          Hi,

          hängt davon ab, was für eine Logikengine Du hast. Ich habe das in smarthome.py realisiert.

          Grundidee ist: Immer wenn ein Telegramm (z.B. einem Temperatursensor mit der neuen Temperatur) kommt, wird Valid auf true gesetzt und ein Timer gestartet, der der nach der doppelten Wiederholzeit (z.B. bei Wiederholzeit von 5 Minuten nach 10 Minuten) Valid wieder auf false setzt. Der Timer ist nachtriggerbar, wird also immer neu gestartet (auch wenn er nicht abgelaufen ist), wenn ein neues Telegramm kommt. Somit läuft der Timer im Normalfall nie ab, außer der Temperatursensor sendet keine Werte mehr. Nachteil dieses Ansatzes: Nach dem Neustart meiner Logikengine sind erstmal alle Objekte "Invalid", bis die ersten Telegramme eintrudeln...

          Gruß, Waldemar

          P.S.: Solltest Du auch smarthome.py einsetzen, kann ich gerne coding posten...
          OpenKNX www.openknx.de

          Kommentar


            #6
            Hallo Waldemar,
            ich habe zZt. beide Systeme laufen. Einmal Smarthome mit SmartVisu 2.9 und auf dem anderen System CometVisu. Mich würde deshalb Dein coding für mein Problem sehr interessieren.
            Gruß nach Walldorf - und einen schönen Abend
            Hans

            Kommentar


              #7
              Hi Hans,

              hier ein Beispiel für meine Luftfeuchte:
              Code:
                          Feuchte: 
                              name: Luftfeuchte
                              type: num
                              value: 50
                              visu_acl: ro
                              enforce_updates: True
                              knx_dpt: 5.001
                              knx_listen: 2/2/1
                              Valid: 
                                  name: Gültig?
                                  type: bool
                                  eval: 1 if int(value) < 300 else 0
                                  eval_trigger: ..
                                  autotimer: 6m = 500
              Die Luftfeuchte wird normal per knx geliefert. enforce_updates ist wichtig, damit jedes zyklische telegramm auch das "Valid"-Item triggert.
              Bei "Valid" gehe ich davon aus, dass Luftfeuchte immer zwischen 0 und 100 liegt, es somit keinen Wert 500 geben kann. Das bedeutet, dass alle "normalen" Telegramme < 300 sind und das Item auf true setzen. Dabei wird jedesmal der autotimer angestoßen, der nach 6 minuten den Wert 500 sendet. Wenn also 6 Minuten lang keine neue Luftfeuchte gesendet wurde, wird vom autotimer eine 500 gesendet, die vom if dann zu einem Valid=False gemacht wird.

              Wie Du das "Valid" in der CometVisu nutzen kannst, kann ich Dir nicht sagen. Bei der smartvisu hatte ich mir ein widget geschrieben:
              Code:
              /**
               * A float with validity information (red if not valid)
               *
               * @param       unique id for this widget
               * @param       the item to display its value
               * @param       the item representing the validity (bool)
               * @param        a unit, tries to get the format for that unit from the language-file (optional)
               * @param        the parent html-tag for the value (optional, default 'span')
               */
              {% macro float(id, gad, gad_valid, unit, tag) %}
              
              <{{ tag|default('span') }} id="{{ uid(page, id) }}" data-widget="custom.float" data-item="{{ gad }}, {{ gad_valid }}"
                                         data-unit="{{ unit }}">-.-{{ unit }}</{{ tag|default('span') }}>
              
              {% endmacro %}
              Code:
              //--------------------------------------------------------------------------------------------------------
              //
              // custom.float - Fließkommaanzeige mit Güeltigkeitsanzeige
              //
              //--------------------------------------------------------------------------------------------------------
              $(document).delegate('[data-widget="custom.float"]', {
                  'update': function (event, response) {
                      //response: {{ gad }}, {{ gad_valid }}
                      if ($(this).attr('data-unit') != '') {
                          $('#' + this.id).html(parseFloat(response[0]).transUnit($(this).attr('data-unit')));
                      } else {
                          $('#' + this.id).html(parseFloat(response[0]).transFloat());
                      }
                      if (response[1]) {
                          $('#' + this.id).css("color", "black");
                      } else {
                          $('#' + this.id).css("color", "red");
                      }
                  }
              });
              Allerdings war das noch sv 2.7... hab ich eben mal aus meinem Backup rauskopiert. Weiß nicht, inwiefern man das noch in der SV 2.9 nutzen kann.

              Gruß, Waldemar
              OpenKNX www.openknx.de

              Kommentar


                #8
                Vielen Dank!

                Kommentar


                  #9
                  Zitat von Tontechniker Beitrag anzeigen
                  hast Du ein Beispiel, wie Du das "valid"-Object aufgebaut hast und wie ich es in der CV einbinde?
                  Stand jetzt kann die CV ein Styling nur auf den Wert selbst basieren, z.B. um eine kalte Temperatur blau und eine warme rot darzustellen. Oder eine Wert-Überschreitung ("zu heiß") in einer Warn-Farbe darzustellen.

                  Grundsätzlich ist es natürlich denkbar über ein weiteres <address> Element mit einer Steuerung z.B. über ein variant-Attribut den Wert und das Styling zu trennen. Dann wäre genau so eine Darstellung mit einem "valid"-Objekt möglich.

                  Tip, falls hier jemand Code beisteuern möchte: wir gehen sehr bald in den nächsten Release-Zyklus. Was vorher da ist wird auch in das nächste Release kommen
                  TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

                  Kommentar


                    #10
                    Vielen Dank Chris M. ,
                    vielleicht schafft es das "valid"-Objekt ja in die nächste Release.
                    Gruß
                    Hans

                    Kommentar

                    Lädt...
                    X