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

    #16
    Ja, mach's mit sh.zeit.uhrzeit()
    Hast du noch irgend eine Logik oder sonst etwas, was zeit.tagobjekt beschreibt?

    Evtl. wird das eval auch beim Starten von SHNG mit dem initialen Wert getriggert (wäre mir zwar neu).

    Kommentar


      #17
      Danke! Nein, im Moment wird zeit.tagobjekt nur hier benutzt und von einigen Meldern etc. auf dem Bus ausgewertet.
      Cheers
      Art Mooney

      Kommentar


        #18
        So, mit

        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: sh.zeit.uhrzeit() > datetime.time(6, 30) and sh.zeit.uhrzeit() < datetime.time(20, 30)
                eval_trigger: zeit.uhrzeit
                knx_dpt: 1
                knx_send: 0/0/222
                visu_acl: rw
        bekomme ich folgendes im log:

        HTML-Code:
        2018-10-17  20:45:14 WARNING  zeit.tagobjekt Item zeit.tagobjekt: problem evaluating sh.zeit.uhrzeit() > datetime.time(6, 30) and sh.zeit.uhrzeit() < datetime.time(20, 30): unorderable types: NoneType() > datetime.time()
        Ideen?
        Cheers
        Art Mooney

        Kommentar


          #19
          Kriegst du das nur beim Start oder jedes Mal wenn du zeit.uhrzeit empfängst?

          Kommentar


            #20
            Ich kriege das nur beim Start. "zeit.uhrzeit" scheint es nicht zu triggern.
            Cheers
            Art Mooney

            Kommentar


              #21
              Triggert zeit.uhrzeit das tagobjekt nicht oder führt es nicht zu dieser Warning und es funktioniert alles?

              Kommentar


                #22
                Es triggert das Tagobjekt nicht, so dass das Warning nur einmal beim Start kommt. Danach wird das Tagobjekt nicht mehr getriggert, es kommt also keine Warnung mehr, aber es funktioniert auch nicht.
                Cheers
                Art Mooney

                Kommentar


                  #23
                  Habt Ihr noch eine Idee? Es muss sich doch dieses Item irgendwie auswerten lassen...

                  Habe versucht, etwas über "unorderable types" heraus zu bekommen. Offenbar bedeutet dieser Fehler, dass Python die Datentypen nicht vergleichen kann. In meiner Fehlermeldung oben bezeichnet er ja "sh.zeit.uhrzeit" als "NonType()". Bedeutet das vielleicht, dass "zeit.uhrzeit" doch nicht "datetime.time" ist? Das würde erklären, warum der Vergleich nicht gelingt.
                  Cheers
                  Art Mooney

                  Kommentar


                    #24
                    Aber die Uhrzeit selbst wird gesetzt? Anscheinend wird ja der eval_trigger gar nicht ausgelöst.


                    Zitat von Art Mooney Beitrag anzeigen
                    In meiner Fehlermeldung oben bezeichnet er ja "sh.zeit.uhrzeit" als "NonType()". Bedeutet das vielleicht, dass "zeit.uhrzeit" doch nicht "datetime.time" ist?
                    Nein, das bedeutet, dass zeit.uhrzeit keinen Wert hat.
                    Deshalb bin ich auf die Frage gekommen, ob dies nur beim Start geschieht. Beim Starten ist ziemlich sicher zeit.uhrzeit noch nicht gesetzt.

                    Die Fehlermeldung kannst du mit folgendem eval umgehen, aber funktionieren tut es ja dann trotzdem noch nicht.
                    Code:
                    eval: sh.zeit.uhrzeit() > datetime.time(6, 30) and sh.zeit.uhrzeit() < datetime.time(20, 30) if sh.zeit.uhrzeit() is not None else None
                    Evtl. liesse sich dieses Problem auch durch ein knx_init in zeit.uhrzeit lösen. Ich bin aber nicht sicher, ob der Wert dann tatsächlich rechtzeitig drin steht.

                    Zuerst würde ich aber das eval_trigger Problem lösen.
                    Zuletzt geändert von smai; 19.10.2018, 12:01.

                    Kommentar


                      #25
                      Richtig. Wenn noch nichts angekommen ist, dann kannste auch nichts auswerten. Ich weiß ohnehin nicht, warum Du das nicht einfach in eine kleine Logik packst und gut ist es. Da kannst Du prüfen ob sh.zeit.uhrzeit() eben None liefert oder nicht und wenn nicht, kannst Du prüfen wie die Zeit ist.

                      Kommentar


                        #26
                        OK. Habe mich mit Logiken noch nicht befasst. Das schaue ich mir an.
                        Cheers
                        Art Mooney

                        Kommentar


                          #27
                          Nun habe ich folgendes zusammengebastelt:

                          Item:
                          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
                                  knx_dpt: 1
                                  knx_send: 0/0/222
                                  visu_acl: rw
                          tagobjekt.py:

                          Code:
                          #Tagobjekt ist 1 am Tag und 0 bei Nacht
                          if sh.zeit.uhrzeit() > datetime.time(6, 30) and sh.zeit.uhrzeit() < datetime.time(20, 30):
                              sh.zeit.tagobjekt('true')
                          else:
                              sh.zeit.tagobjekt('false')
                          logic.yaml:

                          Code:
                          tagobjekt:
                              filename: tagobjekt.py
                              watch_item: zeit.uhrzeit
                          Leider passiert hier im Moment nichts. Ich sehe im Log auch keine Fehlermeldung... Offenbar wird auch diese Logik nicht getriggert. Ist die Angabe "watch_item" nicht richtig?
                          Zuletzt geändert von bmx; 19.10.2018, 22:09.
                          Cheers
                          Art Mooney

                          Kommentar


                            #28
                            Ob Logik oder eval spielt IMHO keine Rolle.
                            Hast du nun geprüft, ob überhaupt eine Zeit ankommt?

                            Kommentar


                              #29
                              Meinst Du, ob eine Zeit vom Bus kommt? Ja, die kommt. Hier Log:

                              HTML-Code:
                              2018-10-19  22:45:33 INFO     Main         KNX[default]: 1.1.254 set 7/0/211 to 22:45:32
                              2018-10-19  22:45:33 INFO     Main         KNX[default]: 1.1.254 set 7/0/212 to 2018-10-19
                              Cheers
                              Art Mooney

                              Kommentar


                                #30
                                OK, das ist das Busmonitor-File, richtig?
                                Hat das Item zeit.uhrzeit auch den Wert (z.B. in Backend oder CLI prüfen)

                                Kommentar

                                Lädt...
                                X