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

    Hi,

    in develop ist das Verhalten nun so:

    Code:
    # etc/plugin.conf
    [visu]
    acl = ro # oder rw
    Code:
    # items/myitem.conf
    [item]
    visu_acl = rw # oder ro oder no
    Bis bald

    Marcus

    Kommentar


      Super, die Lösung gefällt mir sehr gut! Danke!

      Kommentar


        Zitat von mknx Beitrag anzeigen
        Hi,

        in develop ist das Verhalten nun so:

        [...]
        gefällt mir auch sehr gut - aber in den Items echt nur "acl =" oder "visu_acl =". Wäre es da nicht mit steigender Plugin-Anzahl sinnvoll den Plugin-Namen vornedran "mandatory" zu machen?

        /edit: aaaaaaaaarg - Marcus war schneller - erledigt...

        Kommentar


          Hallo Marcus,

          zunächst einmal: Vielen Dank, für die Arbeit und Mühe, die Du Dir mit der Weiterentwicklung von SmartHome.py und der Portierung nach Python-3.2 machst.

          Nachdem SmartHome.py nun das letzte halbe Jahr mit einem git/master-Stand von kurz vor 0.8 einwandfrei lief, bin ich gestern mit meiner Produkiv-Installation auf den git/develop-Stand umgezogen.

          Folgendes ist mir aufgefallen:

          Im mpd-Plugin bekomme ich bei einem aufruf von play_file("http://mp3-live.swr3.de/swr3_m.m3u") eine Exception "startswith first arg must be bytes or a tuple of bytes, not str". Ausgelöst wird diese in der Funktion _parse_url():

          Code:
              def _parse_url(self, url):
                  name, sep, ext = url.rpartition('.')
                  ext = ext.lower()
                  play = []
                  if ext in ('m3u', 'pls'):
                      content = self._sh.tools.fetch_url(url, timeout=4)
                      if content is False:
                          return play
                      if ext == 'pls':
                          for line in content.splitlines():
                              if line.startswith('File'):
                                  num, tmp, url = line.partition('=')
                                  play.append(url)
                      else:
                          for line in content.splitlines():
                              if line.startswith('http://'):
                                  play.append(line)
                  else:
                      play.append(url)
                  return play
          Nach dem Aufruf von "content = self._sh.tools.fetch_url(url, timeout=4)" ist type(content) == <class 'bytes'> und damit ist auch line weiter unten vom Typ 'bytes', welches wiederum startswith('...') mit einem String-Argument nicht mag.

          Nachdem ich einen Aufruf von "content = content.decode()" eingefügt habe, funktioniert der Aufruf nun ohne Exception:

          Code:
          ...
                      content = self._sh.tools.fetch_url(url, timeout=4)
                      if content is False:
                          return play
                      content = content.decode()
                      if ext == 'pls':
          ...
          Allerdings bin ich nicht sicher, ob diese Änderung wirklich die korrekte Fehlerkorrektur darstellt. Es wäre also nett, wenn Du Dir das bei Gelegenheit mal ansehen würdest.

          Und dann ist mir noch im russound-Plugin folgendes aufgefallen:
          Code:
          import lib.connections
          
          logger = logging.getLogger('')
          
          REQ_DELIMITER = b'\r'
          RESP_DELIMITER = b'\r\n'
          
          class Russound(lib.connections.Client):
          
              def __init__(self, smarthome, host, port=9621):
                  lib.connections.Client.__init__(self, host, port, monitor=True)
          Kann es sein, dass hier an drei Stellen "lib.connection" ohne das 's' stehen sollte?

          bye, Alex

          Kommentar


            Nicht Marcus, aber beides korrekt.

            Kommentar


              Hi!

              Kann es sein, dass der aktuelle "develop"-Code "orb" vorraussetzt? Stat.py (Zeile 38) wirft nämlich aufgrund des fehlenden orb Fehler...

              Bitte nicht solche Abhängigkeiten... :-(

              Grüße
              Robert

              Kommentar


                Hallo Robert,

                es wäre schön wenn Du den Fehler posten könntest. stat.py hat nur 33 Zeilen.

                Bis bald

                Marcus

                Kommentar


                  Hallo Alex,

                  danke für das Testen und das Feedback.

                  Ist beides korrekt & gefixed.

                  Bis bald

                  Marcus

                  Kommentar


                    Zitat von mknx Beitrag anzeigen
                    Hallo Robert,

                    es wäre schön wenn Du den Fehler posten könntest. stat.py hat nur 33 Zeilen.

                    Bis bald

                    Marcus
                    PHP-Code:
                    2013-11-02 20:31:03 ERROR    env_stat     Logicenv_statFile: /usr/local/smarthome/lib/env/stat.pyLine33Method: <module>, Exception'Orb' object has no attribute 'light'
                    Traceback (most recent call last):
                      
                    File "/usr/local/smarthome/lib/scheduler.py"line 327in _task
                        exec
                    (obj.bytecode)
                      
                    File "/usr/local/smarthome/lib/env/stat.py"line 33in <module>
                        
                    sh.env.location.moonlight(sh.moon.light())
                    AttributeError'Orb' object has no attribute 'light' 

                    Kommentar


                      Hallo Robert,

                      hast Du lob und lat in der etc/smarthome.conf gesetzt? Dann löschen die bitte.

                      Danke

                      Marcus

                      Kommentar


                        Hi Marcus, stimmt. Danke! Ohne kommen die Fehler nicht mehr. Hm, fehlerträchtig. Kann man nicht beim fehlendem "orb" das Gemüse abschalten?

                        Grüße
                        Robert

                        Kommentar


                          Hallo,

                          das hier habe ich gerade in meinem Log entdeckt. Das Log endet damit:
                          Code:
                          2013-11-02 22:22:09 ERROR    count_1w     Logic: count_1w, File: /usr/lib/python3.2/subprocess.py, Line: 522, Method: check_output, Exception: Command '['owdir', '/uncached/bus.2']' returned non-zero exit status 1
                          Traceback (most recent call last):
                            File "/usr/local/smarthome/lib/scheduler.py", line 327, in _task
                              exec(obj.bytecode)
                            File "/usr/local/smarthome/logics/count_1w_items.py", line 41, in <module>
                              dirs = subprocess.check_output(["owdir", "/uncached/bus.2"])
                            File "/usr/lib/python3.2/subprocess.py", line 522, in check_output
                              raise CalledProcessError(retcode, cmd, output=output)
                          subprocess.CalledProcessError: Command '['owdir', '/uncached/bus.2']' returned non-zero exit status 1
                          2013-11-02 22:22:16 WARNING  aktuelles_wetter.relative_luftfeuchte-eval Item aktuelles_wetter.relative_luftfeuchte: problem evaluating sh.aktuelles_wetter.relative_luftfeuchte_perc() * 0.01: 'Item' object has no attribute 'relative_luftfeuchte_perc'
                          q^C
                          root@homeserver:/usr/local/smarthome/items# owdir /uncached/bus.2
                          /uncached/bus.2/interface
                          Danach passiert im Log nix mehr, auch wenn ich im Busmonitor etwas mache.

                          Klar könnte/sollte ich in der Logik etwas abfangen, aber kann man verhindern, dass sh.py dadurch (scheinbar) so aus dem Tritt gebracht wird?

                          Hier noch die Logik:
                          Code:
                          more logics/count_1w_items.py
                          #!/usr/bin/python
                          import os
                          import subprocess
                          
                          logger.debug('Counting 1w devices')
                          
                          #pfad="/mnt/1wire/uncached/bus.0/bus.0/"
                          #path, dirs, files = os.walk(pfad).next()
                          #file_count = len(dirs)
                          #sh.Daten.Anzahl_Bus_0(file_count-3)
                          #logger.debug(file_count-3)
                          
                          #pfad="/mnt/1wire/uncached/bus.0/bus.1/"
                          #path, dirs, files = os.walk(pfad).next()
                          #file_count = len(dirs)
                          #sh.Daten.Anzahl_Bus_1(file_count-3)
                          #logger.debug(file_count-3)
                          
                          #pfad="/mnt/1wire/uncached/bus.0/bus.2/"
                          #path, dirs, files = os.walk(pfad).next()
                          #file_count = len(dirs)
                          #sh.Daten.Anzahl_Bus_2(file_count-3)
                          #logger.debug(file_count-3)
                          
                          pfad="/uncached/bus.0/"
                          #logger.debug("owdir "+pfad)
                          dirs = subprocess.check_output(["owdir", "/uncached/bus.0"])
                          dirs=dirs.split()
                          file_count = len(dirs)
                          sh.Daten.Anzahl_Bus_0(file_count-3)
                          logger.debug(file_count-3)
                          
                          pfad="/uncached/bus.1/"
                          dirs = subprocess.check_output(["owdir", "/uncached/bus.1"])
                          dirs=dirs.split()
                          file_count = len(dirs)
                          sh.Daten.Anzahl_Bus_1(file_count-3)
                          logger.debug(file_count-3)
                          
                          pfad="/uncached/bus.2/"
                          dirs = subprocess.check_output(["owdir", "/uncached/bus.2"])
                          dirs=dirs.split()
                          file_count = len(dirs)
                          sh.Daten.Anzahl_Bus_2(file_count-3)
                          logger.debug(file_count-3)
                          Gruß,
                          Hendrik

                          Kommentar


                            Hallo Hendrik,

                            die Meldung habe ich in Deinem Log sehr häufig gesehen und SH.py läuft weiter (es gibt noch mehr Meldungen danach).
                            SH.py ist, was fehlerhafte Logiken angeht, sehr tolerant.

                            Bist Du wirklich sicher das nichts mehr geht? Hast Du evtl. wieder mal ein KillerPlot angefragt ;-)

                            Bis bald

                            Marcus

                            Kommentar


                              Hallo,

                              ich werde es mal beobachten. Vielleicht war ich nur zu ungeduldig...
                              Den Killer hab ich nicht angefortert :-)

                              Gruß,
                              Hendrik

                              Kommentar


                                Hallo,

                                ein Wort der Warnung. Ich checke gleich eine wesentliche Änderung am SQLite Plugin ein, dabei wird die Datenbank gelöscht. Ich habe das Plugin und den Prozess verschlankt. Leider unterstützt die DB die Änderungen an der Tabellenstruktur nicht, sonst hätte ich sie migriert.

                                Dadurch wird die Darstellung der Plots wesentlich schneller.

                                EDIT: und man kann die DB mit zig Werten/s vollpumpen. Das ist speziell für Marco und Hendrik.

                                Bis bald

                                Marcus

                                Kommentar

                                Lädt...
                                X