Hallo David
Zitat von DK178
Hallo Niko,
|
Ich bin zwar nicht Niko, da ich mich aber derzeit auch mit dem RIO-Plugin beschäftige, versuche ich mich mal mit einem Kommentar: So, wie ich das Typ-Handling in
Python/SmartHome.py bisher verstanden habe, würde bei den numerischen Attributen vermutlich jeweils ein
DPT passen, der den entsprechenden Wertebereich abdecken kann. Sollte ein
DPT mit einem größeren Wertebereich verwendet werden, als die Definition des Attributs vorsieht, musst Du halt darauf achten, nur gültige Werte über die
GA zu schicken.
Wie wird folgendes übersetzt?
...
- volume = num [0..255] -> DPT = ???
- turnonvolume = num [0..255] -> DPT = ???
|
Der Wertebereich legt ein
DPT-5 (8-Bit vorzeichenlos) nahe.
- bass = num [-128..127] -> DPT = ???
- treble = num [-128..127] -> DPT = ???
- balance = num [-128..127] -> DPT = ???
|
Hier suggeriert der Wertebereich
IMHO einen
DPT-6 (8-Bit vorzeichenbehaftet).
Niko, ich bin an dieser Stelle jedoch etwas unsicher, ob die Abbildung des Wertebereichs [-128..127] auf den Wertebereich [-10..10], den der C5 per RIO erwartet/liefert, korrekt ist.
Aus dem Plugin: RIO-Wert [-10..10] -> Wert laut Plugin-Doku [-128..127]:
Code:
def _decode(self, cmd, value):
cmd = cmd.lower()
if cmd == 'bass' or cmd == 'treble' or cmd == 'balance':
return int(round(float(value) * (128.0 / 10.0)))
Würde der C5 per RIO einen Wert von 10 an das Plugin liefern, so ergäbe sich für das Item m.E. ein Wert von 10 * 128 / 10 = 128 -> Ausserhalb des Wertebereichs.
Das Gegenstück sieht so aus:
Code:
def update_item(self, item, caller=None, source=None):
...
if cmd == 'bass':
self.send_set(c, z, cmd, int(round(float(item()) / (128.0 / 10.0))))
elif cmd == 'treble':
self.send_set(c, z, cmd, int(round(float(item()) / (128.0 / 10.0))))
elif cmd == 'balance':
self.send_set(c, z, cmd, int(round(float(item()) / (128.0 / 10.0))))
Wäre es nicht besser, die 128 jeweils durch 127 zu ersetzen und als Wertebereich Item: [-127..127] für RIO: [-10..10] zu definieren?
(Tatsächlich hielte ich einen Attribut-Wertebereich -10..10 oder -100..100 sogar für 'schöner'.)
<Einschub> Ich vermute ausserdem ein Problem in der Kodierung/Dekodierung von
DPT-6/DPT-8-Werten /
KNX-Telegrammen, weswegen ich bereits eine E-Mail an Marcus geschrieben habe.</Einschub>
- source = num -> DPT = ???
|
Hier verwende ich ebenfalls ein
DPT 5.
- partymode = string [ON/OFF/MASTER] -> DPT = ???
- donotdisturb = type must be string -> DPT = ??? und was für nen String wird erwartet
|
Verwende ich beides nicht.
HTH, Alex