Hallo Niko
Zitat von 2ndsky
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
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
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
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