Einzelnen Beitrag anzeigen
  #15  
Alt 14.01.2013, 20:31
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
Hallo,

numerische Werte die nur positiv sind (wie z.B. Volume und Source) sollten als DPT 5001 verwenden,
Hmm, DPT 5.001 (0..100%) - also im items.conf als knx_dpt = 5001" konfiguriert - würde ich tatsächlich auch für naheliegender halten.

Aber: nach meinem Verständnis - das natürlich auch falsch sein kann - wird in DPT-5.001-KNX-Telegrammen der Wertebereich 0..100% auf die 0x00..0xFF des unsigned 8-Bit abgebildet (ansonsten könnte DPT-5.001 nicht eine Genauigkeit von ~0.4% liefern).

Konfiguriere ich in items.conf "knx_dpt = 5001", dann macht Smarthome.py genau diese Abbildung - wie erwartet - und liefert einen Int-Wert von 0..100 (%).
Code:
def en5001(value):
    return [0, int(int(value) * 255 / 100) & 0xff]


def de5001(payload):
    if len(payload) != 1:
        return None
    return struct.unpack('>B', payload)[0] * 100 / 255
Allerdings machst Du im Russound-Plugin nochmals eine Abbildung von 0..255 auf den RIO-Wertebereich von 0..50:

Code:
    def update_item(self, item, caller=None, source=None):
...
            elif cmd == 'turnonvolume':
                self.send_set(c, z, cmd, int(round(float(item()) / (255.0 / 50.0))))
...
    def _decode_zone(self, cmd, value):
...
        elif cmd == 'turnonvolume' or cmd == 'volume':
            return int(round(float(value) * (255.0 / 50.0)))
Hier im Russound-Plugin müsste nach meinem Verständnis, wenn Du DPT-5.001 (bzw. "knx_dpt = 5001") in der items.conf konfiguriert haben möchtest, eine Abbildung von 0..100 auf die RIO-Werte 0..50 statt finden.

Deswegen funktioniert meine Aussage mit "knx_dpt= 5" (da hier SmartHome.py eben 0..255 liefert) mit dem Russound-Plugin, wohingegen "knx_dpt = 5001" eben nicht über den vollen Wertebereich funktioniert.

Werte die auch negativ sein können (Bass etc.) sollten DPT 5 verwenden.
Echt jetzt? DPT-5 ist doch laut ETS "8-Bit vorzeichenlos", bzw. laut Telegramm-Doku "8-Bit Unsigned Value".
Für den von Dir in der Doku festgelegten Wertebereich für "bass", "treble" und "balance" von "[-128..127]" käme doch m.E. eher DPT-6 (8-Bit vorzeichenbehaftet) bzw. genauer 6.001 ("Prozent (-128..127%)") in Frage, d.h. in items.conf "dpt = 6" und KNX-Seitig DPT-6.001.

Zitat von DK178 Beitrag anzeigen
Allerdings fällt es mir schwer Bass, Treble and Balance vernünftig zu setzen. Ich würde da auch klar einen Wertebereich -10..10 favorisieren. Das ist dann geanu was der C5 erwartet. Bei einer Bereichsüberschreitung würde ich einfach den Wert ignorieren.
Das fände ich zugegebenermassen auch besser.
Meine Begründung hierfür wäre u.A. wie folgt: Wird der RIO-Wertebereich -10..10 auf -127..128 (bzw. wenn's schon sein muss auf -127..127) abgebildet, so haben wir KNX-seitig bzw. SmartHome.py-seitig ein relativ großes Intervall, auf welches ein RIO-Wert abgebildet wird (nämlich ungefähr 12).

Könnte ich nun in einer Visu einen Slider zum Einstellen der Lautstärke bzw. für Bass/Treble/Balance bewegen (dieser Slider hätte den KNX-Wertebereich -127..127) und dieser Slider würde während der Finger-Bewegung jeden geänderten Int-Wert (aus -127..127) verschicken wollen, so kämen in einem 12-Integer-Werte breiten Slider-Bereich stets dieselben RIO-Werte heraus. Wenn nun über RIO vom C3/C5 die Rückmeldung über den geänderten Wert eintrifft, würde der Slider seine Position aktualisieren und würde m.E. unerwartete Sprünge machen. Hmm, ich hoffe, ich konnte halbwegs verständlich machen, was ich damit meine...

Bei der Lautstärke dürfte der Effekt nicht ganz so heftig sein, da hier der RIO-Wertebereich 0..50 auf 0..100% abgebildet wird, d.h. die Intervallgröße nur 2 beträgt.

Zitat von 2ndsky Beitrag anzeigen
Muss aber gestehen, dass das alles nicht wirklich getestet ist, da ich das nicht in KNX integriert benutze
Nun, ich teste das derzeit intensiv und zwar KNX-seitig mit ein paar Tastern und mit einer selbstgestrickten Visu, die ausschließlich mit dem eibd kommuniziert und als Gegenkontrolle mit einer weiteren kleinen Applikation, welche ausschließlich RIO spricht. So kann ich von beiden Seiten (KNX und RIO) Zustände ändern und beobachten, was auf der jeweils anderen Seite ankommt ;-)

Zitat von 2ndsky Beitrag anzeigen
Die Einwände von Alex sind gut, werde das bei Gelegenheit überarbeiten.
Das ist nett von Dir.

Das noch undokumentierte Feature "relativevolume" wurde nun in DPT1 geändert. Bei Wert 1 wird einmal VolumeUp bei 0 einmal VolumeDown gesendet. "enforce_updates" muss gesetzt sein, damit es funktioniert.
Super! Habe gerade mein SmartHome.py aktualisiert, getestet und bin begeistert - vielen Dank, für diese Änderung.

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