Ich würde auch einfach die nicht genormten Datapoints mit aufnehmen. Als Name kann man dann ein Herstellkürzel als Präfix verwenden, dazu noch ein Kommentar, bei welchem Gerät/Hersteller der benutzt wird und gut ist.
Grüße,
Thomas
Ankündigung
Einklappen
Keine Ankündigung bisher.
RGBW Item Konvertierung in beide Richtungen
Einklappen
X
-
Die data points sind genormt. Ein PR für neue genormte data points, die in der dpts.py noch fehlen, macht sicher Sinn. Wenn wir unsere "privaten" data points ins develop schieben, ist das aber irgendwann nicht mehr beherrschbar (bei mir ist es ein altes Hager Tebis TS, das keine genormten Datenpunkte verwendet).
Die lokalen Änderungen immer wieder lokal mit den neuen shNG-Versionen zu mergen, habe ich bisher noch nicht hinbekommen.
Gruß
Wolfram
Einen Kommentar schreiben:
-
Könnt ihr dafür nicht einfach einen PR gegen develop stellen?Zitat von wvhn Beitrag anzeigenDas Dumme ist, dass Du die Änderungen beim nächsten Update von shNG neu einpflegen musst. Deswegen hatte ich mal ein "Plugin" für die Datenpunkte vorgeschlagen und als Prototyp umgesetzt, über das man seine eigenen dpts integrieren kann. Daraus ist aber nichts geworden.
- Likes 1
Einen Kommentar schreiben:
-
Am Ende der dpts.py musst Du die Datenpunkte nochmal in die "decode" und "encode" Arrays eintragen. Dann sollte es gehen.
Das Dumme ist, dass Du die Änderungen beim nächsten Update von shNG neu einpflegen musst. Deswegen hatte ich mal ein "Plugin" für die Datenpunkte vorgeschlagen und als Prototyp umgesetzt, über das man seine eigenen dpts integrieren kann. Daraus ist aber nichts geworden.
Gruß
Wolfram
Einen Kommentar schreiben:
-
Einen wunderschönen,
ich habe es mit on_Change lösen können. Falls noch jemand ein ähnliches Problem hat, hilft das hier vielleicht
Um das jetzt vollumfänglich nutzen zu können, würde ich gerne noch fragen, ob und falls ja wie ich das knx plugin erweitern kann, um den 4 Byte Typ zu senden und zu lesen.Code:Test: name: Test type: bool knx_dpt: 1 rgbwLevel: name: rgbwLevel type: list on_change: - "sh..rgbLevel([sh..self()[0], sh..self()[1], sh..self()[2]])" - "sh..rgbLevel.rLevel(sh..self()[0])" - "sh..rgbLevel.gLevel(sh..self()[1])" - "sh..rgbLevel.bLevel(sh..self()[2])" - "sh..wLevel(sh..self()[3])" rgbLevel: name: rgbLevel type: list on_change: - "sh....rgbwLevel([sh..self()[0], sh..self()[1], sh..self()[2], sh....rgbwLevel()[3]])" - "sh..rLevel(sh..self()[0])" - "sh..gLevel(sh..self()[1])" - "sh..bLevel(sh..self()[2])" rLevel: name: rLevel type: num on_change: - "sh.....rgbwLevel([sh..self(), sh.....rgbwLevel()[1], sh.....rgbwLevel()[2], sh.....rgbwLevel()[3]])" - "sh....rgbLevel([sh..self(), sh....rgbLevel()[1], sh....rgbLevel()[2]])" gLevel: name: gLevel type: num on_change: - "sh.....rgbwLevel([sh.....rgbwLevel()[0], sh..self(), sh.....rgbwLevel()[2], sh.....rgbwLevel()[3]])" - "sh....rgbLevel([sh....rgbLevel()[0], sh..self(), sh....rgbLevel()[2]])" bLevel: name: bLevel type: num on_change: - "sh.....rgbwLevel([sh.....rgbwLevel()[0], sh.....rgbwLevel()[1], sh..self(), sh.....rgbwLevel()[3]])" - "sh....rgbLevel([sh....rgbLevel()[0], sh....rgbLevel()[1], sh..self()])" wLevel: name: wLevel type: num on_change: - "sh....rgbwLevel([sh....rgbwLevel()[0], sh....rgbwLevel()[1], sh....rgbwLevel()[2], sh..self()])"
Reicht eine Erweiterung wie folgt? (in dpts.py)
Code:def en251(value): return [0, int(value[0]) & 0xff, int(value[1]) & 0xff, int(value[2]) & 0xff, int(value[3]) & 0xff] def de251(payload): if len(payload) != 4: return None return list(struct.unpack('>BBBB', payload))Zuletzt geändert von aldaris; 20.04.2020, 20:14.
Einen Kommentar schreiben:
-
Dadurch dass Du nicht den 4-Byte Wert nimmst, löst sich Dein Problem der "Konvertierung in beide Richtungen" in Luft auf, weil Du dann keine rdb Representation brauchst. Also wieso ist das dann schade?
Zu Alexa kann ich nichts sagen, da ich weder Alexa noch das Plugin nutze.
Den rgbw Controller der in meiner Installation sein ca. 8 Jahren seinen Dienst versieht, spreche ich so an:
also als wären das 4 von einander unabhängige Dimmer. Die level Items übergebe ich dann an das von mir genutzte Widget für die smartVISU.Code:wohnung: dusche: spiegelleuchte_weiss: name: Spiegelleuchte weiss type: bool knx_dpt: 1 knx_send: 1/1/38 knx_cache: 1/2/38 level: type: num visu: 'yes' knx_dpt: 5 knx_send: 1/4/38 knx_cache: 1/5/38 spiegelleuchte_rot: name: Spiegelleuchte LED farbig type: bool knx_dpt: 1 knx_send: 1/1/35 knx_cache: 1/2/35 level: type: num visu: 'yes' knx_dpt: 5 knx_send: 1/4/35 knx_cache: 1/5/35 spiegelleuchte_gruen: name: Spiegelleuchte grün type: bool knx_dpt: 1 knx_send: 1/1/36 knx_cache: 1/2/36 level: type: num visu: 'yes' knx_dpt: 5 knx_send: 1/4/36 knx_cache: 1/5/36 spiegelleuchte_blau: name: Spiegelleuchte blau type: bool knx_dpt: 1 knx_send: 1/1/37 knx_cache: 1/2/37 level: type: num visu: 'yes' knx_dpt: 5 knx_send: 1/4/37 knx_cache: 1/5/37 comment: Abluft
Einen Kommentar schreiben:
-
Hallo,
ich weiß nicht, warum unsere Kommunikation nicht recht funktionieren will. Ich habe den items.yaml Abschnitt noch nicht fertig, da ich eben nicht weiß, wie der aufgebaut werden soll. Aber ich kann gerne nochmal versuchen, das an oben dem Beispiel weiter zu spezifieren, wie es, meiner Meinung nach, aussehen könnte.
a) rgb bekommt genau oben das colordisk ding
b) Ausserdem hätte ich gern getrennte slider für jede Farbe (eigentlich 4, aber in dem RGB Beispiel nur 3)
c) Für die Farbsteuerung brauch ich den ColorController, also Alexa4p3. Hier eben das list Item mit 3 Werten.
So, der Controller ist ein MDT AKD 0424R02.2. In der Tat habe ich aber übersehen, dass der 4 Byte Typ nicht unterstützt wird. Der Controller kann umgestellt werden zwischen einzeln (4 x 1 Byte), RGB + Weiss (3 Byte + 1 Byte) und RGBW (4 Byte). Schade dass 4 Byte nicht geht, dann muss ich eben RGB + W nehmen, wenn man das nicht erweitern kann.Code:rgb: name: RGB type: list cache: yes sv_widget: {{ basic.colordisc('somedisk', 'item.r', 'item.g', 'item.b') }} (a) alexa_actions = "SetColor" (c) alexa_color_value_type = RGB alexa_icon = "LIGHT" eval: "[sh..r(), sh..g(), sh..b()]" eval_trigger: - .r - .g - .b r: name: Wert für Rot type: num cache: yes sv_widget: {{ basic.slider('redslider', 'item') }} (b) visu_acl: rw g: ....
Was will ich eigentlich: Es gibt zwei gleichwertig Repräsenationen im obigen Beispiel: RGB oder eben r, g, und b getrennt. Ich will davon einen über KNX mit dem Controller per send und listen verbinden, die andere Repräsentation über smarthomeng, also ohne den KNX bus, synchronisieren. Für meinen konkreten Fall mit RGBW ist es nochmal der weiß Kanal dazu, aber wenn mir das prinzip klar ist, hoffe ich das zu erweitern.
Mir ist klar, wie ich das mit logiken machen würde:
Eine Logik, die auf Änderung von RGB horcht und r, g und b daraus umsetzt und eine andere logik, die auf r, g und b horcht und RGB berechnet.
Ich interessiere mich aber dafür, ob dass nicht auch ohne logik geht.
Einen Kommentar schreiben:
-
Lass Dir nicht alles aus der Nase ziehen. Du sprichst von KNX und von der smartVISU. Für keines von beiden hast Du in Deinem obigen Beispiel Attribute angegeben.Zitat von aldaris Beitrag anzeigenich habe die Glaskugel bemüht. Ich kopiere das Item aus dem Link, damit du siehst, das ich sehe:
Und: Was machst Du mit der Liste die eval erzeugt? Für das von Dir angegebene basic.colordisc brauchst Du es jedenfalls nicht. Siehe smartVISU Doku:
Dort übergibst Du die einzelnen Farben und die Visu gibt Dir dann die veränderten Werte zurück.Code:{{ basic.colordisc(id, item_r, item_g, item_b, min, max, step, colors) }}
Du solltest schauen wie Du Deinen RGBW Controller (welchen überhaupt?) anders ansprichst, zumal das knx Plugin das DPT 251.600 nicht unterstützt, wie Dir ein Blick in die Doku verraten hätte.
Einen Kommentar schreiben:
-
Das mit dem Enforce_Updates habe ich auch gesehen. Ich denke das "on_change" der richtige Weg sein könnte, um die jeweils andern Items anzupassen. Passt wird ebenfalls nur bei Wertänderung gefeuert
Einen Kommentar schreiben:
-
Hallo,
ich habe die Glaskugel bemüht. Ich kopiere das Item aus dem Link, damit du siehst, das ich sehe:
Code:rgb: name: RGB type: list cache: yes eval: "[sh..r(), sh..g(), sh..b()]" eval_trigger: - .r - .g - .b r: name: Wert für Rot type: num cache: yes visu_acl: rw g: name: Wert für Grün type: num cache: yes visu_acl: rw b: name: Wert für Blau type: num cache: yes visu_acl: rw
Einen Kommentar schreiben:
-
Wenn du kein enforce_updates nutzt, wird beim Schreiben von 240, wenn das Item schon 240 ist, nichts passieren.Zitat von aldaris Beitrag anzeigenIst das der Fall, oder wird eval_trigger Wert sich nicht auslösen, wenn ein Wert von 240 auf 240 geändert wird? Gibt es sonst Lösungen?
Einen Kommentar schreiben:
-
Meinst Du mit basic.colordisk ein Widget aus der SmartVISU? Ich kenne das nicht. Vermutlich kann Dir da eher im smartVISU Forum jemand weiterhelfen der das Widget einsetzt.
Mit solchen Antworten kann ich nichts anfangen. Oben steht keine Item Definition!Zitat von aldaris Beitrag anzeigenWie ist das Item definiert? ) => siehe oben
Vieleicht nichts, aber ohne vernünftige Beschreibung von Dir hilft nur die hier:Zitat von aldaris Beitrag anzeigenHast Du Dir mal angeschaut was enforce_updates tut? => Ja, habe den Nutzen für das Problem aber nicht verstanden.

Einen Kommentar schreiben:
-
Hallo,
vielen Dank für die schnelle Antwort. Ich habe vielleicht etwas schneller geschrieben, ich veruch es mal einfacher, mit Beispiel:
Ich beziehe mich auf diese Seite: https://www.smarthomeng.de/user/beispiele/eval.html
Das Beispiel "Erzeugen einer Liste aus den Werten anderer Items" ist das Item Beispiel, bei dem der RGB Wert aus Einzelerten zusammengesetzt wird.
Das ist aber eben nur in eine Richtung. Wenn die die r(), g(), b() items z.B. mit basic.colordisk verbinde werden diese z.B. über die Visu verändert. Diese Veränderung müsste aber nun auf das Hauptitem zurückübertragen werden, um es z.B. mit KNX an den Aktor zu senden.
- Wie ist das Item definiert? ) => siehe oben
- Was meinst Du mit (251.600)? => Das ist der KNX Typ für 4 Byte. Für smarthomeng ist vermutlich eher die Info "list" wichtig.
- Du sprichst von mehreren Items. Welche Items, wie definiert und wofür genutzt? => RGBW für KNX, RGB für Alexa, R, G, B, W für Slider an der UI
- Hast Du "Ist das der Fall, oder wird eval_trigger Wert sich nicht auslösen, wenn ein Wert von 240 auf 240 geändert wird?" das mal ausprobiert? => Nein, wollte erstmal Infos sammeln und das Gerät nicht aufhängen
- Hast Du Dir mal angeschaut was enforce_updates tut? => Ja, habe den Nutzen für das Problem aber nicht verstanden.
Gruß
aldaris
Einen Kommentar schreiben:
-
Ich verstehe die Frage nicht:
Da fehlen Informationen:Zitat von aldaris Beitrag anzeigenDas kann man jetzt mit eval und eval_trigger bauen, nur baue ich dann ja "Endlosschleifen". Ist das der Fall, oder wird eval_trigger Wert sich nicht auslösen, wenn ein Wert von 240 auf 240 geändert wird? Gibt es sonst Lösungen?
- Wie ist das Item definiert?
- Was meinst Du mit (251.600)?
- Du sprichst von mehreren Items. Welche Items, wie definiert und wofür genutzt?
- Hast Du "Ist das der Fall, oder wird eval_trigger Wert sich nicht auslösen, wenn ein Wert von 240 auf 240 geändert wird?" das mal ausprobiert?
- Hast Du Dir mal angeschaut was enforce_updates tut?
Einen Kommentar schreiben:
-
RGBW Item Konvertierung in beide Richtungen
Guten morgen zusammen,
die habe einen RGBW Controller, der ein 4 Byte Element fordert und als Status liefert. Items.yaml kann ich dazu anlegen (251.600). Nun brauch ich aber nur Visu, Alexa, anderes auch die R G B W Einzelelemente sowie ein RGB Element (ohne Weiß dann). Diese subelement werden auch verändert. Nun sollen alle Items syncronisiert werden. Also bei Änderung von RGBW wird B geändert und bei Änderung von R RGB etc.
Das kann man jetzt mit eval und eval_trigger bauen, nur baue ich dann ja "Endlosschleifen". Ist das der Fall, oder wird eval_trigger Wert sich nicht auslösen, wenn ein Wert von 240 auf 240 geändert wird? Gibt es sonst Lösungen?
Gruß
aldariStichworte: -


Einen Kommentar schreiben: