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

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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • callidomus
    antwortet
    Hallo Robert,

    danke für den Patch. Ist übernommen.

    Bis bald

    Marcus

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • Apollo
    antwortet
    Hi Robert,

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

    Gruss

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • stromie
    antwortet
    Kann ich nur zustimmen

    läuft alles wieder echt klasse

    Grüße Ronny

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:

Lädt...
X