Ankündigung

Einklappen
Keine Ankündigung bisher.

Tag/Nacht-Objekt mit externer Zeit realisieren

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

    Tag/Nacht-Objekt mit externer Zeit realisieren

    Hallo zusammen,

    ich bin noch neu mit smarthomeng. Ich möchte ein Tag/Nacht-Objekt erstellen, das jeden Tag - ggf. abhängig vom Wochentag - zu einer bestimmten Uhrzeit einen 1 bit-Telegramm auf den Bus sendet. Damit will ich Präsenzmelder sperren und ähnliches. Ferner möchte ich die Zeit von meiner Wetterstation nutzen, weil mein smarthomeng-Rechner nicht online ist und damit die Zeit nicht aus dem Netz beziehen kann. Die Zeit kommt als KNX-Telegramm dpt 10 von der Wetterstation auf den Bus. Item dafür habe ich angelegt und sehe ich auch in der Visu.

    Habe in der Doku gesehen, dass man items mit cycle oder autotimer-Attributen versehen kann. Das kommt mir aber etwas unpraktisch vor, besonders wenn der Server mal neu gestartet werden muss. Also den sh.scheduler bzw. sh.trigger? Aber wie kriege ich es hin, dass der die richtige Zeit nimmt? Wie gehe ich denn da jetzt ran?

    Zur Info: ich lese die Infos aus der Dokumentation hier. Gibt es eine Seite, die die Verwendung von sh.trigger ausführlicher erklärt?

    Danke für ein paar Hinweise.
    Cheers
    Art Mooney

    #2
    Mit cycle, autotimer und sh.trigger bist Du vollständig auf dem falschen Dampfer.

    Du brauchst nur eval und eval_trigger.

    Im groben so:

    Code:
    wohnung:
        zeit:
            knx_listen: 1/2/3
            knx_dpt: 10
            ...
        tag:
            type: bool
            eval: 1 if (sh.wohnung.zeit() == <zeit für tag>) else 0 if (sh.wohnung.zeit() == <zeit für nacht>) else None
            knx_send: 1/2/4
            knx_dpt: 1
    Auf den Bus wird nur gesendet, wenn das Item Tag einen Wert zugewiesen bekommt, also wenn das Item zeit einem der beiden Zeitpunkte entspricht. Sonst ergibt die Expression None, wodurch das Item tag unverändert bleibt.
    Viele Grüße
    Martin

    There is no cloud. It's only someone else's computer.

    Kommentar


      #3
      Hi,

      Mir würde noch folgendes einfallen:
      Beim empfangen einer Zeit von Bus per Logik die Systemzeit setzen. Und so dann die standard - Zeit - Funktionen nutzen zu können. Allerdings weiß ich nicht ob shNG entsprechend auf Änderungen der Systemzeit reagiert.
      Wäre aber einen Versuch wert, alleine schon, damit du nach einem Neustart alle logs zeitlich synchronisiert hast ...

      Gruß Waldemar
      OpenKNX www.openknx.de

      Kommentar


        #4
        Danke Msinn ! Das werde ich ausprobiern.

        mumpf : die Idee finde ich gut, habe aber nicht die leiseste Idee, wie ich das machen soll. Ich möchte tatsächlich, dass der smarthomeng-Server die Zeit von der Wetterstation als "seine" Zeit annimmt.
        Cheers
        Art Mooney

        Kommentar


          #5
          Guten Abend!

          Ich habe es nun wie folgt versucht:

          HTML-Code:
          zeit:
              uhrzeit:
                  type: foo
                  knx_dpt: 10
                  knx_listen: 7/0/211
                  visu_acl: rw
              tagobjekt:
                  type: bool
                  eval: 1 if (sh.zeit.uhrzeit() <20:30) else 0
                  eval_trigger: zeit.uhrzeit
                  knx_dpt: 1
                  knx_send: 0/0/222
                  visu_acl: rw
          Leider ist mir nicht klar, wie ich die Bedingung richtig formuliere. Die Zeit soll eigentlich nach 6:30 und vor 20:30 sein. Wie ist denn hier die Syntax? "==6:30-20:30"?

          In diesem Beispiel wollte ich, dass immer wenn eine Uhrzeit von der Wetterstation kommt, das Tagobjekt ausgewertet wird, daher der eval_trigger-Eintrag. Das Beispiel fragt nur, ob der Wert kleiner als 20:30 ist. Es kommt aber nichts auf den Bus.
          Cheers
          Art Mooney

          Kommentar


            #6
            Msinn : jetzt verstehe ich erst Deinen Ansatz. Du lässt quasi das Item sich ändern, wenn genau ein bestimmter Wert erreicht ist, sonst gibt es keine Änderung. Das ist nicht sehr praktikabel, da die Uhrzeit mit Nachkommastellen von der Wetterstation kommt. Ich müsste schon mit "größer" bzw. "kleiner" arbeiten.
            Cheers
            Art Mooney

            Kommentar


              #7
              Ich würde sagen:
              Code:
              eval: value > 06:30 and value < 20:30
              Das if kannst du dir sparen, weil der Ausdruck bereits zu einem bool evaluiert. value verwendet den Wert des Items aus eval_trigger.

              Das Zeitformat ist aber sicherlich noch falsch. Ich kenne das richtige aber nicht, vielleicht kann da jemand anderes helfen.

              Kommentar


                #8
                Danke! Muss ich denn noch ein "else" einfügen? Oder sendet er jetzt eine 0, wenn die Bedingungen für value nicht erfüllt sind?
                Cheers
                Art Mooney

                Kommentar


                  #9
                  Ich habe es jetzt so versucht:
                  HTML-Code:
                      tagobjekt:
                          type: bool
                          eval: value > 21 and value < 22
                          eval_trigger: zeit.uhrzeit
                          knx_dpt: 1
                          knx_send: 0/0/222
                          visu_acl: rw
                  Die Zeiten habe ich geändert, um die Änderung jetzt beim Testen auf dem Bus sehen zu können. Habe zum Test einmal ganze Zahlen eingetragen. Es passiert aber nichts. Auch im Backendplugin steht um 21:10 noch "false", obwohl es eigentlich "true" sein müsste.

                  Wäre klasse, wenn jemand etwas zum Zeitformat sagen könnte.
                  Cheers
                  Art Mooney

                  Kommentar


                    #10
                    Kein else, weil kein if.

                    Noch etwas Klugscheisserei:
                    Genau genommen setzt er True und False, nicht 1 und 0.
                    Auch wenn man 1 if foo else 0 eingibt, wird dies aufgrund des Item-Typs "bool" implizit zu True/False casted.

                    Kommentar


                      #11
                      Zitat von Art Mooney Beitrag anzeigen
                      Ich habe es jetzt so versucht:
                      Hi,

                      so wird das nichts. Schau mal ins Log, Dein eval schmeißt bestimmt Fehler. Das Item zeit.uhrzeit und somit value hat einen bestimmten python-Datentyp (irgendwas zeitbezogenes). Im allgemeinen musst Du nicht raten, was man ins eval schreiben kann, es ist die python-Syntax, das kannst Du nachlesen.

                      Der Punkt bei Dir ist, dass value > 21 nicht funktionieren kann, weil value irgendwas ist, das Zeit repräsentiert (eben so, wie python es macht) und 21 einfach in integer, also eine Zahl. Du vergleichst somit Äpfel mit Birnen.

                      Was im value genau drin steht, kann ich Dir nicht sagen, aber das wird in der Fehlermeldung im Log stehen, wenn er versucht, das eval auszuwerten. Du musst dann auf der rechten Seite das passende (den passenden Typ) haben, damit es verglichen werden kann.

                      Du kannst ja mal die Fehlermeldung posten, dann finden wir schon eine Lösung (auch wenn ich nicht besonders gut python kann).

                      Gruß, Waldemar
                      OpenKNX www.openknx.de

                      Kommentar


                        #12
                        Die Frage ist, welchen Typ das KNX-Plugin schreibt.
                        Die Antwort findet man in plugins/knx/dpts.py Zeilen 174-178: Es ist datetime.time

                        Ich bin nicht sicher, ob datetime in eval verfügbar ist. Wenn ja, kannst du deine Zeit folgendermassen bilden: datetime.time(20, 30)

                        Kommentar


                          #13
                          smai : meinst Du in etwa so:

                          HTML-Code:
                          zeit:
                              datum:
                                  type: foo
                                  knx_dpt: 11
                                  knx_listen: 7/0/212
                                  visu_acl: rw
                              uhrzeit:
                                  type: foo
                                  knx_dpt: 10
                                  knx_listen: 7/0/211
                                  visu_acl: rw
                              tagobjekt:
                                  type: bool
                                  eval: value > datetime.time(6, 30) and value < datetime.time(20, 30)
                                  eval_trigger: zeit.uhrzeit
                                  knx_dpt: 1
                                  knx_send: 0/0/222
                                  visu_acl: rw
                          Cheers
                          Art Mooney

                          Kommentar


                            #14
                            Hier die relevante Zeile aus dem Log:

                            HTML-Code:
                            2018-10-16  02:00:58 WARNING  zeit.tagobjekt Item zeit.tagobjekt: problem evaluating value > 21 and value < 22: unorderable types: datetime.time() > int()
                            Und nun mit der neuen Schreibweise bekomme ich:

                            HTML-Code:
                            2018-10-16  22:26:02 WARNING  zeit.tagobjekt Item zeit.tagobjekt: problem evaluating value > datetime.time(6, 30) and value < datetime.time(23, 0): unorderable types: bool() > datetime.time()
                            Cheers
                            Art Mooney

                            Kommentar


                              #15
                              Hi,

                              warum jetzt value plötzlich zu bool wird, kann ich Dir auch nicht sagen. Das einzige, was mir noch einfallen würde, ist folgendes:
                              Code:
                              eval: sh.zeit.uhrzeit() > datetime.time(6,30) and sh.zeit.uhrzeit() < datetime.time(20,30)
                              Gruß, Waldemar
                              OpenKNX www.openknx.de

                              Kommentar

                              Lädt...
                              X