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

  • macflei
    antwortet
    Zitat von mknx Beitrag anzeigen
    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.
    Jetzt sag bloß nicht das das für Euch kein Anreiz oder keine "Herausforderung" war
    Das Ergebnis und der der damti verbundenen Faktor xx kann sich auf alle Fälle sehen lassen.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Danke!

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    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

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

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

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    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

    Einen Kommentar schreiben:


  • henfri
    antwortet
    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

    Einen Kommentar schreiben:


  • Robert
    antwortet
    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

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    Hallo Robert,

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

    Danke

    Marcus

    Einen Kommentar schreiben:


  • Robert
    antwortet
    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' 

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    Hallo Alex,

    danke für das Testen und das Feedback.

    Ist beides korrekt & gefixed.

    Bis bald

    Marcus

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    Hallo Robert,

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

    Bis bald

    Marcus

    Einen Kommentar schreiben:


  • Robert
    antwortet
    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

    Einen Kommentar schreiben:


  • Robert
    antwortet
    Nicht Marcus, aber beides korrekt.

    Einen Kommentar schreiben:


  • Alex
    antwortet
    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

    Einen Kommentar schreiben:


  • Robert
    antwortet
    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...

    Einen Kommentar schreiben:

Lädt...
X