Ankündigung

Einklappen
Keine Ankündigung bisher.

Python 3.2 Migration in develop bzw. 1.0 Release

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

    Danke für eure Antworten,
    Zitat von mknx Beitrag anzeigen
    es sind alles drei keine Bugs auf SH.py Seite. Das sind Probleme auf Deiner Seite.
    Vllt. würde es Dir helfen Logiken zu schreiben, anstelle alles in ein eval zu quetschen.
    Zum Ersten meiner Punkte: was würde in einer Logik anders sein?
    Das Problem ist, dass er "none" nicht durch "float" teilen möchte. Und die Logik lief wenn mich nicht alles täuscht bis vorgestern.

    Beim dpt gucke ich noch einmal nach. Mir war es bisher nicht aufgefallen und du weißt ja am Besten, an welchen Baustellen du gerade tüftelst, und ob es ein Bug sein kann.

    _ und __variablen sind ein NoGo. Da bist Du auf Dich alleine gestellt. Ach ja, return_parent() gibt es schon sehr lange.
    Ok, das wusste ich nicht. Ist aber schade, denn so war die Logik schön kompakt -siehe Stromzähler-Thread.

    Warum ist parent() privat? Ist doch praktisch!

    Gruß,
    Hendrik

    Kommentar


      Hi Hendrik,

      Zitat von henfri Beitrag anzeigen
      Hm, auch das folgende
      das ist doch genau die gleiche (veraltete) Codestelle. Ich habe das in develop optisch entschärft. Du musst natürlich git pull machen um davon zu profitieren.

      Bis bald

      Marcus

      Kommentar


        Hallo Hendrik,

        in einer Logik kann man übersichtlicher Programmieren, als in einer eval Zeile.
        Keine Ahnung warum die db None zurück liefert. Wahrscheinlich weil keine Werte vorhanden sind.

        "Man" greift nicht auf Variablen einer Klasse direkt zu. Das soll über Methoden erfolgen.
        Über return_parent() kannst Du die Referenz auf das Item-Parente nicht kaputt machen. Mit item._parent = Foo schon. Deshalb gibt es für alles wesentlich klare Schnittstellen.

        Bis bald

        Marcus

        Kommentar


          Zitat von mknx Beitrag anzeigen
          Wenn das eval nichts zurück liefert, dann ist das None. Ich habe gerade Code eingecheckt für den Fall. Wenn None, dann wird kein Update durchgeführt.
          Hi noch mal,

          Code ist super, allerdings musste ich feststellen, das Python zumindest bei einem "x if foo" scheinbar auf den "else"-Zweig besteht. Ergo geht nur "x if foo else None". Aber auch das spart schon Ressourcen und ist übersichtlicher. Nur als Hinweis.

          Grüße
          Robert

          Kommentar


            Kann ich nur zustimmen

            läuft alles wieder echt klasse

            Grüße Ronny

            Kommentar


              Hallo,

              Zitat von mknx Beitrag anzeigen
              Ich habe gerade Code eingecheckt für den Fall. Wenn None, dann wird kein Update durchgeführt.
              das ist Blödsinn. eval "muss" einen Wert zurück liefern, sonst wird das Item nicht aktualisiert. eval ist nur für die Aufbereitung von Werten gedacht, nicht um irgendwelche Logiken in eine eval-Zeile zu quetschen.
              Daher werde ich die Änderung demnächst wieder rückgängig machen, da sie überflüssig ist.

              Bis bald

              Marcus

              Kommentar


                Zitat von mknx Beitrag anzeigen
                das ist Blödsinn. eval "muss" einen Wert zurück liefern, sonst wird das Item nicht aktualisiert. eval ist nur für die Aufbereitung von Werten gedacht, nicht um irgendwelche Logiken in eine eval-Zeile zu quetschen.
                Ungeachtet der Frage "warum nicht?" gehört zu den wichtigsten Funktionen bei logischen Verknüpfungen das "Tor". Siehe Google oder diverse KNX-Logikbausteine. Oder hier im Forum: https://knx-user-forum.de/knx-eib-fo...logik-tor.html

                Frage: Soll man dafür jetzt eine Logik bauen?

                Mir egal, schreib ich halt "else self()" - funktioniert genauso.

                Kommentar


                  Zitat von Robert Beitrag anzeigen
                  Ungeachtet der Frage "warum nicht?" gehört zu den wichtigsten Funktionen bei logischen Verknüpfungen das "Tor". Siehe Google oder diverse KNX-Logikbausteine. Oder hier im Forum: https://knx-user-forum.de/knx-eib-fo...logik-tor.html
                  ist ein Argument und spart mir Arbeit. :-)

                  Bis bald

                  Marcus

                  Kommentar


                    Zitat von Robert Beitrag anzeigen
                    Ach so: Ich glaube wenn ein Item existiert, aber (noch) keine History dafür existiert, dann liefert "Series" was zurück, was smartVISU 2.6 veranlasst, den Plot gar nicht zu zeichnen. Gibt es dafür eine elegante Lösung?
                    Zitat von mknx Beitrag anzeigen
                    Sicher? Ich habe das die Tage aufgeräumt, er bekommt nichts mehr zurück.
                    Hi Marcus,

                    ich hatte ja angedroht es im Auge zu behalten. Nachdem ich jetzt meine SQLite-Datenbank entsorgt hatte (also keine mehr existent ist), habe ich einen frisch geupdateten "develop" gestartet -> Mit smartVISU Release 2.6 bekomme ich dann nur die Plots angezeigt, die bereits kurz nach dem Start in allen SERIES Einträge haben. Alle anderen werden nicht angezeigt.

                    Ist natürlich ärgerlich, wenn ich z.B. einen Windalarm habe, der typischerweise '0' ist - für den Plot der dieses Item enthält müsste ich jetzt bis zum nächsten Windalarm warten... Irgendwie müsste immer das aktuelle Itemvalue noch angefügt werden...

                    Grüße
                    Robert

                    /edit: Scheinbar sind fehlende "bool"-Items nicht das Problem!? Da habe ich einen Plot, der trotzdem angezeigt wird. Könnte das obige nur auf "num"-Items zutreffen? Ach so: Browser: Chrome - Version 30.0.1599.101

                    /edit: mit smartVISU 2.7 trunk genau das gleiche.

                    Kommentar


                      Hi!

                      Ohne Einträge, kein "reply['series']". Aber auch mit leeren series wird nix gezeichnet. Workaround: wenn "end == 'now'", zumindest den aktuellen Wert mit aktuellen Timestamp senden -> funktioniert.

                      PHP-Code:
                      diff --git a/plugins/visu/__init__.py b/plugins/visu/__init__.py
                      index 9520ec2
                      ..05b868d 100755
                      --- a/plugins/visu/__init__.py
                      +++ b/plugins/visu/__init__.py
                      @@ -322,+322,10 @@ class WebSocketHandler(lib.connection.Connection):
                                                   
                      self._series_lock.release()
                                                   
                      del(reply['update'])
                                                   
                      del(reply['params'])
                      +                        if (
                      reply['series'is None) and (end == 'now'):
                      +                            
                      dt self._sh.now()
                      +                            
                      ts int(time.mktime(dt.timetuple()) * 1000 dt.microsecond 1000)
                      +                            
                      reply['series'] = [(tsself.items[path]())]
                                               if 
                      reply['series'is not None:
                                                   
                      self.json_send(reply)
                                               else: 
                      Konzeptionell aber trotzdem unglücklich.

                      Kommentar


                        Hi Robert,

                        die Idee finde ich gut, ich auf meiner Seite kann da nur wenig tun.

                        Gruss
                        Join smartVISU on facebook. Web: smartvisu.de.
                        Dir gefällt smartVISU? Bitte spenden für die Weiterentwicklung.

                        Kommentar


                          Zitat von Apollo Beitrag anzeigen
                          die Idee finde ich gut, ich auf meiner Seite kann da nur wenig tun.
                          Hi!

                          Ohne mich da jetzt auszukennen und das Gesamtkonzept zu kennen:

                          Könnte man denn wenn nichts, oder ein JSON mit leerer Series zurückkommt, das betreffende Item Ausblenden? Also in einem Plot aus mehreren Items einzelne weglassen, bevor gar nicht gezeichnet wird?

                          Viele Grüße
                          Robert

                          Kommentar


                            Hallo Robert,

                            danke für den Patch. Ist übernommen.

                            Bis bald

                            Marcus

                            Kommentar


                              VISU: Zugriff geändert!

                              Hallo,

                              ich habe das Default-Verhalten des Visu Plugins geändert.

                              Wenn man kein visu Attribut angibt, dann kann man die Werte nun zumindest lesen.

                              Code:
                              visu = ro # neuer Default
                              visu = rw
                              visu = yes # entspricht rw
                              visu = no  # verhindert das auslesen
                              Bis bald

                              Marcus

                              Kommentar


                                Gefällt mir ehrlich gesagt trotzdem nicht.
                                Ich sehe immer noch den Bedarf einer globalen config-Zeile mit der ich alles für die Visu freigebe.
                                Hatte mir das hier gestern mal eingebaut. Jetzt müsste ich ja doch wieder alle items die in Frage kommen pflegen. Hier mal ein Patch-Vorschlag.

                                plugin.conf
                                Code:
                                [visu]
                                    class_name = WebSocket
                                    class_path = plugins.visu
                                    [B]all_items_rw = yes[/B]
                                patch
                                Code:
                                --- __init__.py.orig	2013-10-29 18:10:31.274279382 +0100
                                +++ __init__.py.patch	2013-10-29 18:09:29.294743505 +0100
                                @@ -45,7 +45,7 @@
                                 
                                 class WebSocket(lib.connection.Server):
                                 
                                -    def __init__(self, smarthome, visu_dir=False, generator_dir=False, ip='0.0.0.0', port=2424, tls='no', smartvisu_dir=False):
                                +    def __init__(self, smarthome, visu_dir=False, generator_dir=False, ip='0.0.0.0', port=2424, tls='no', smartvisu_dir=False, all_items_rw=False):
                                         lib.connection.Server.__init__(self, ip, port)
                                         self._sh = smarthome
                                         smarthome.add_event_listener(['log'], self._send_event)
                                @@ -64,6 +64,7 @@
                                         if generator_dir:  # transition feature
                                             self.generator_dir = generator_dir
                                         self.smartvisu_dir = smartvisu_dir
                                +        self.all_items_rw = smarthome.string2bool(all_items_rw)
                                 
                                     def _smartvisu_pages(self, directory):
                                         from . import smartvisu
                                @@ -142,6 +143,8 @@
                                         self.close()
                                 
                                     def parse_item(self, item):
                                +        if self.all_items_rw == True:
                                +            acl = 'rw'
                                         if 'visu' in item.conf:
                                             if item.conf['visu'] in ('yes', 'rw'):
                                                 acl = 'rw'
                                Damit bleibt visu=no auch erhalten auch wenn all_items_rw=yes ist. Das Verhalten ist noch mal diskussionswürdig. Aber grundsätzlich überschreibt das item die globale Einstellung.

                                Grüße
                                Umgezogen? Ja! ... Fertig? Nein!
                                Baustelle 2.0 !

                                Kommentar

                                Lädt...
                                X