Einzelnen Beitrag anzeigen
  #4  
Alt 02.01.2013, 18:32
Alex Alex ist offline
Benutzer
 
Registriert seit: 19.11.2008
Ort: Gaggenau
Beiträge: 22
Alex ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo Niko

Zitat von 2ndsky Beitrag anzeigen
Hier mal ein kleiner Statusbericht. Ich bin zwar glaub der einzige hier, der das Plugin wirklich einsetzt, ...
Nicht mehr :-)
Falls jemand von euch das Plugin verwendet, würde ich mich über einen kurzen Erfahrungsbericht freuen.
Da ich ein paar (zu unterschiedlichen Zeitpunkten in den letzten Jahren entstandene) Provisorien beseitigen und 'unter ein gemeinsames Dach' bringen möchte, beschäftige ich mich seit wenigen Tagen mit SmartHome.py. Eines dieser Provisorien war ein von mir auf die Schnelle zusammen gehacktes C++-Progrämmchen, welches eine Abbildung RIO <-> KNX macht (ähnlich Makkis russconnectd für RNet <-> KNX).

Also habe ich dieser Tage SmartHome.py installiert und mit Deinem russound-Plugin experimentiert und bin begeistert! Wie Du oben geschrieben hast: Einschalten der Zonen per KNX-PM oder Taster, wie auch weitere Funktionen wie Mute, Lautstärkeänderungen, wechseln der Quelle, etc., funktionieren einwandfrei und ohne spürbaren Verzögerungen.

Vielen Dank also, für das tolle Plugin!

Welche Werte für das von Dir kürzlich eingeführte "relativevolume" zu verwenden sind, habe ich allerdings auf der Home-Page SmartHome.py - Russound Plugin nicht beschrieben gefunden. Erst das Stichwort "Dimmer" weiter oben, haben mich auf die Spur geführt, wie "relativevolume" wohl anzuwenden (foo, dpt 3) ist.

Leider sind meine Taster anders belegt: Um die Lautstärke relativ um einen Schritt zu ändern, würde ich gerne ein DPT 1 (bool) verwenden. Ich würde also gerne bei jedem KNX-Telegramm mit Wert X ein RIO Kommando "KeyPress VolumeUp" und bei jedem Wert !X ein "KeyPress VolumeDown" verschicken.

Ob die Belegung (also die KNX-Werte) nach DPT 1.007 "DPT_Step" mit 0 = Decrease und 1 = Increase oder nach DPT 1.008 "DPT_UpDown" mit 0 = Up und 1 = Down (leider genau gegensätzlich) erfolgt, wäre mir egal.

Natürlich könnte ich dies auch mit zwei Items pro Zone und ein wenig Logik hinbekommen:

Items:
Code:
['eg']
   ['az']
     ['audio']
       [[[['knxrelativevolume']]]]
         type            = bool
         enforce_updates = On
         knx_dpt         = 1
         knx_listen      = 10/1/22

       [[[['riorelativevolume']]]]
         type            = foo
         enforce_updates = On
         rus_path        = 1.1.relativevolume
logic.conf:

Code:
[RioVolRelAZ]
  filename   = rio_volrel_az.py
  watch_item = eg.az.audio.knxrelativevolume
logics/rio_volrel_az.py:
Code:
#!/usr/bin/env python

if not sh.eg.az.audio.knxrelativevolume():
       sh.eg.az.audio.riorelativevolume([1, 1])

if     sh.eg.az.audio.knxrelativevolume():
       sh.eg.az.audio.riorelativevolume([0, 1])
Daran gefällt mir aber nicht so recht, dass ich für die relative Lautstärke-Steuerung für 8 Zonen dann 2*8 Items, 8 Logic-Einträge und 8 Logic-Scripte benötige.

Hieltest Du es für sinnvoll/möglich, das Russound-Plugin so zu erweiteren, dass es ein neues Attribut (nennen wir es mal 'relativevolumebool') gibt, das direkt mit einem KNX-DPT1 verküpft werden kann und bei KNX Wert 1 "KeyPress VolumeUp" und bei jedem Wert 0 ein "KeyPress VolumeDown" verschickt (oder eben umgekehrt)?

Die Änderungen im Plugin-Source wären wohl eher gering, vielleicht etwa so:
Code:
diff --git a/plugins/russound/__init__.py b/plugins/russound/__init__.py
index 0fd16fb..ec490bc 100755
--- a/plugins/russound/__init__.py
+++ b/plugins/russound/__init__.py
@@ -74,7 +74,7 @@ class Russound(lib.my_asynchat.AsynChat):
                 logger.warning("No parameter specified for zone {0} on controller {1} in config of item {2}".format(z,c,item))
                 return None
 
-            if param == 'relativevolume':
+            if param == 'relativevolume' or param == 'relativevolumebool':
                 item._enforce_updates = True
 
             item.conf['rus_path'] = path
@@ -118,6 +118,8 @@ class Russound(lib.my_asynchat.AsynChat):
                 self.send_event(c, z, 'SelectSource', item())
             elif cmd == 'mute':
                 self.send_event(c, z, 'KeyRelease', 'Mute')
+            elif cmd == 'relativevolumebool':
+                self.send_event(c, z, 'KeyPress', 'VolumeDown' if item() else 'VolumeUp')
             elif cmd == 'relativevolume' and item()[1] != 0:
                 if item()[0] == 1:
                     self.send_event(c, z, 'KeyPress', 'VolumeUp')
Damit käme ich komplett ohne Einträge in logic.conf und logic/*.py-Scripte aus und könnte einfach pro Zone folgendes schreiben:
Code:
['eg']
  [['az']]
    [[['audio']]]
      [[[['relativevolume']]]]
        type            = bool
        enforce_updates = On
        knx_dpt         = 1
        knx_listen      = 10/1/22
        rus_path        = 1.1.relativevolumebool
Was meinst Du dazu?

Das steuern des internen Tuners steht noch auf meiner TODO Liste.
Hast Du in der Richtung schon etwas gemacht?

Wobei mich mehr als die Steuerung des Tuners der Empfang der Status-Nachrichten von den Quellen interessieren würde - insbesondere vom internen Tuner (also "WATCH S[1] ON'). Die anderen Quellen liefern bei mir sowieso nur die beiden Attribute "NAME" und "TYPE" (logisch, wenn an diesen Quellen nur Line-In Signale verwendet werden und nicht etwa andere Russound-Geräte).

Zugegebenermaßen habe ich in diese Richtung ein wenig in Deinem Plugin herumgebastelt und es funktioniert auch schon ganz ordentlich. Ich hadere allerdings noch ein wenig mit der Zeichencodierung der empfangenen Texte in "radioText" (und auch mit den Namen der Zonen). Ich sollte mich also wohl eher mal hinsetzen und mir ein wenig Python-Grundlagenwissen aneignen, bevor ich hierzu vorzeigbaren Code produzieren kann...

Viele Grüße,
Alex
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten