Ankündigung
Einklappen
Keine Ankündigung bisher.
Python 3.2 Migration in develop bzw. 1.0 Release
Einklappen
X
-
Hi,
in develop ist das Verhalten nun so:
Code:# etc/plugin.conf [visu] acl = ro # oder rw
Bis baldCode:# items/myitem.conf [item] visu_acl = rw # oder ro oder no
Marcus
Einen Kommentar schreiben:
-
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
patchCode:[visu] class_name = WebSocket class_path = plugins.visu [B]all_items_rw = yes[/B]
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.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'
Grüße
Einen Kommentar schreiben:
-
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.
Bis baldCode:visu = ro # neuer Default visu = rw visu = yes # entspricht rw visu = no # verhindert das auslesen
Marcus
Einen Kommentar schreiben:
-
Hallo Robert,
danke für den Patch. Ist übernommen.
Bis bald
Marcus
Einen Kommentar schreiben:
-
Hi!Zitat von Apollo Beitrag anzeigendie Idee finde ich gut, ich auf meiner Seite kann da nur wenig tun.
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:
-
Hi Robert,
die Idee finde ich gut, ich auf meiner Seite kann da nur wenig tun.
Gruss
Einen Kommentar schreiben:
-
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.
Konzeptionell aber trotzdem unglücklich.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,6 +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'] = [(ts, self.items[path]())]
if reply['series'] is not None:
self.json_send(reply)
else:
Einen Kommentar schreiben:
-
Zitat von Robert Beitrag anzeigenAch 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?Hi Marcus,Zitat von mknx Beitrag anzeigenSicher? Ich habe das die Tage aufgeräumt, er bekommt nichts mehr zurück.
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:
-
ist ein Argument und spart mir Arbeit. :-)Zitat von Robert Beitrag anzeigenUngeachtet 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
Bis bald
Marcus
Einen Kommentar schreiben:
-
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.htmlZitat von mknx Beitrag anzeigendas 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.
Frage: Soll man dafür jetzt eine Logik bauen?
Mir egal, schreib ich halt "else self()" - funktioniert genauso.
Einen Kommentar schreiben:
-
Hallo,
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.Zitat von mknx Beitrag anzeigenIch habe gerade Code eingecheckt für den Fall. Wenn None, dann wird kein Update durchgeführt.
Daher werde ich die Änderung demnächst wieder rückgängig machen, da sie überflüssig ist.
Bis bald
Marcus
Einen Kommentar schreiben:
-
Kann ich nur zustimmen
läuft alles wieder echt klasse
Grüße Ronny
Einen Kommentar schreiben:
-
Hi noch mal,Zitat von mknx Beitrag anzeigenWenn 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.
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:
-
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:


Einen Kommentar schreiben: