Hi,
ich versuche gerade WLED per MQTT anzusprechen (https://github.com/Aircoookie/WLED/wiki/MQTT).
Das funktioniert auch soweit ich in rgb #hexwert gebe.
Geliefert wird von WLED auch wieder #hexwert.
Nun wollte ich gern den Colorpicker verwenden. Der schein nur hexwert zu liefern.
Ich habe mich in den mqtt2.templates umgesehen und da bin ich bei zigbee auch fündig geworden und habe etwas in dieser Art gefunden:
hex:colorpicker,HEX,0,15,255 BASE_TOPIC/DEV_ID/set {"color":{"$EVTPART0":"#$EVTPART1"}}
Das habe ich versucht für mein Device in
rgb:colorpicker,HEX wled/TestLED/col {"#$EVTPART1"}
anzupassen. Leider funktioniert das nicht.
Kann mir jemand bitte auf die Sprünge helfen?
Das List meines MQTT Devices, funktionsfähig ohne Colorpicker sieht so aus:
Internals:
CID a020a621c6c3
DEF a020a621c6c3
DEVICETOPIC MQTT2_a020a621c6c3
FHEM_MQTT2_MSGCNT 16
FHEM_MQTT2_TIME 2019-03-22 21:13:47
FUUID 5c93e232-f33f-0c45-f528-70f8b16469d9e705
IODev FHEM_MQTT2
LASTInputDev FHEM_MQTT2
MSGCNT 16
NAME MQTT2_a020a621c6c3
NR 1213
STATE rgb
TYPE MQTT2_DEVICE
OLDREADINGS:
READINGS:
2019-03-22 21:13:47 pct 127
2019-03-22 21:13:47 rgb #FF9F99
2019-03-22 21:13:47 state rgb
Attributes:
IODev FHEM_MQTT2
devStateIcon {Color::devStateIcon( $name, "rgb" );}
readingList a020a621c6c3:wled/TestLED/g:.* pct
a020a621c6c3:wled/TestLED/c:.* rgb
room MQTT2_DEVICE
setList rgb wled/TestLED/col
pct wled/TestLED
Gruß und Danke,
Stefan
Versuch's mal mit
rgb:colorpicker,HEX wled/TestLED/col #$EVTPART1
Erläuterung: zigbee&Co wollen die Anweisungen als JSON verpackt. Das scheint bei dir nicht erforderlich zu sein. Das ist aber ausdrücklich eine Annahme und kann auch falsch sein. Solltest du dann noch was brauchen, wäre es hilfreich, wenn du eine komplette Sendeanweisung liefern könntest.
Hi Beta-User,
super das wars!
Vielen Dank für die Erklärung.
Gruß,
Stefan
Ich habe auch ein WLED-Objekt (ein umgebauter Leuchtspiegel aus den 60ern, sieht schweinegeil aus). Eine FHEM-Anbindung habe ich dafür noch nicht gebaut, weil mir "There is no support for authentication/encryption at this time" nicht wirklich behagt.
Inzwischen hat WLED aber auch eine JSON-API, die man bestimmt gut via HTTPMOD ansprechen kann (wenn man nicht gleich ein eigenes Modul bauen möchte).
Hat da vielleicht schon jemand etwas fertig?
@f-zappa:
Was spricht dagegen, das mit MQTT anzusprechen? Wenn ich das richtig deute, funktioniert das im Prinzip problemlos bei stefanru...
Wären genau 2 Devices: Ein MQTT2_SERVER (auch für anderes zu nutzen) und ein MQTT2_DEVICE.
Zitat von: Beta-User am 28 März 2019, 13:23:45
Was spricht dagegen, das mit MQTT anzusprechen? Wenn ich das richtig deute, funktioniert das im Prinzip problemlos bei stefanru...
Noch mal das Zitat: "There is no support for authentication/encryption at this time"
Ich muss meinen MQTT-Server dann für unauthentifizierte Zugriffe öffnen. Jeder darf dran, ohne Credentials angeben zu müssen. Das widerstrebt mir.
Ah ok, irgendwie hatte ich den Link zwischen dem MQTT2_SERVER und diesem Text noch nicht...
Könntest du diesem speziellen Client ein eigenes allowed gönnen?
Hi,
hätte noch eine kleine Frage:
Das mit RGB senden geht nun super.
Leider ist es so das WLED in einem Topic die RGB Farbe liefert und in einem anderen kann ich sie setzen.
Also mit
rgb:colorpicker,HEX wled/a020a621c6c3/col #$EVTPART1
setze ich zur Zeit die RGB Farbe.
Ändere ich sie nun an der Lampe direkt bekomme ich das über
a020a621c6c3:wled/a020a621c6c3/c:.* rgb
mitgeteilt.
Hier wird der Wert auch wieder mit # gesendet.
Leider kann damit der colorpicker wieder nix anfangen.
Kann man das # am Anfang beim Empfangen auch irgendwie wegschneiden?
Gruß und Danke,
Stefan
Das Wegschneiden sollte gehen, du brauchst aber "hinten" dann Perl:
Würde mal folgendes testen:
a020a621c6c3:wled/a020a621c6c3/c:.* {{"rgb"=>substr($EVENT,1,6)}}
Kann aber sein, dass du den substr erst in eine Variable packen mußt usw..
Bei der Gelegenheit:
Scheint ein Device zu sein, für den es noch kein attrTemplate gibt. Vielleicht magst du was beisteuern? Wenn du Hilfe benötigst, würde mich neben ein paar Infos zum Gerät selbst eine RAW-Definition hier weiterbringen, optimalerweise mit den unveränderten default-Topic-Strukturen.
Hi Beta-User,
super hat geklappt.
Natürlich, sehr gerne steuer ich ein attrTemplate bei.
Muss das aber erstmal zum laufen bringen. An / Aus fehlt mir noch.
Sollte gehen in dem man on/off an das main topic sendet.
Ich melde mich bei fragen oder wenn ich es soweit zusammen habe.
Ansteuern tue ich einen ESP8622 auf dem WLED läuft:
https://github.com/Aircoookie/WLED/wiki/MQTT
WLED ist ziemlich gut für RGB Stripes WS2812.
Gruß,
Stefan
Hallo Stefan,
ich habe auch eine WS218B-LED-Streifen mit der WLED-Software ausgestattet. Läuft sehr gut über das Webinterface. Allerdings habe ich es bisher noch nicht in FHEM integriert. Deswegen wäre ich sehr dankbar für Deine Unterstützung. Kannst Du vielleicht Dein Template mit einer kurzen Anleitung posten, auch wenn es noch nicht ganz perfekt ist?
Da wäre ich Dir sehr dankbar!
LG
Michael
Hallo,
ich würde mich auch über ein template freuen. Helligkeit setzen klappt, on/off senden bewirkt nur einen toggle und RGB macht mir nur schwarz, also aus
Wenn jemand ein list (bitte nur mit dem, was funktioniert bzw. Hinweisen, was ggf. nicht) beitragen könnte, wäre das schon mal hilfreich. Die Kommandos an sich scheinen (bis auf den col-Teil) recht einfach zu sein.
Allerdings steht da auf der Seite "MQTT-Interface wird grade überarbeitetet (breaking change)". Das hat demnach eher vorläufigen Charakter...
Hi,
sorry ich war eine Zeitlang nicht mehr hier.
Habe jetzt erst gesehen dass hier Interesse besteht.
Ich bin sehr zufrieden mit der MQTT implementierung, mittlerweile läuft es super stabil.
Ich weiß leider nicht wie ich so ein attrTemplate aus meinen Daten erstellen kann.
Hier erstmal ein List in dem alles drinsteht. Bei Gelegenheit schaue ich mal wie ich ein attrTemplate erzeugen kann.
Internals:
CID a020a621c6c3
DEF a020a621c6c3
DEVICETOPIC KuechenLicht
FUUID 5cd1d0d2-f33f-0c45-e918-02b2175584076a07
IODev myMQTT2Client
LASTInputDev myMQTT2Client
MSGCNT 1286
NAME KuechenLicht
NR 1231
STATE brightness
TYPE MQTT2_DEVICE
myMQTT2Client_MSGCNT 1286
myMQTT2Client_TIME 2019-11-21 08:08:22
READINGS:
2019-11-21 08:08:22 api <?xml version="1.0" ?><vs><ac>0</ac><cl>255</cl><cl>191</cl><cl>0</cl><cs>0</cs><cs>0</cs><cs>0</cs><ns>0</ns><nr>1</nr><nl>0</nl><nf>1</nf><nd>60</nd><nt>0</nt><fx>0</fx><sx>75</sx><ix>128</ix><fp>0</fp><wv>-1</wv><ws>0</ws><md>1</md><cy>0</cy><ds>Kuechenlicht</ds></vs>
2019-08-31 21:00:06 bewegung 0
2019-11-21 08:08:22 brightness 0
2019-11-21 08:08:22 rgb FFBF00
2019-11-13 01:14:50 state brightness
Attributes:
IODev myMQTT2Client
devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" );}
group Licht
icon hue_filled_iris
readingList myMQTT2Client:wled/kuechenlicht/g:.* brightness
myMQTT2Client:wled/kuechenlicht/c:.* {{"rgb"=>substr("$EVENT",1,6)}}
myMQTT2Client:wled/kuechenlicht/v:.* api
room EG,MQTT2_DEVICE
setList rgb:colorpicker,RGB wled/kuechenlicht/col #$EVTPART1
brightness:colorpicker,BRI,0,1,255 wled/kuechenlicht
status:on,off,t wled/kuechenlicht
webCmd rgb:brightness
widgetOverride rgb:colorpicker,HSV
Danke für das list (für attrTemplate-Erstellung ist RAW tendenziell einfacher, hätte ich deutlicher sagen sollen...).
Würde das mal "auf Verdacht" so einchecken, aber wenn es jemand testen würde und kurzfristig Rückmeldung geben, wenn was verbessert werden kann: Danke...
Versuchsweise Änderungen gg. das list:
- Das widgetOverride sollte jetzt direkt in der readingList stecken
- getrennte on/off/toggle (?)-setter
#source post: https://forum.fhem.de/index.php/topic,98880.msg995308.html#msg995308
name:wled_controller
filter:TYPE=MQTT2_DEVICE
desc:To control a WLED device, see https://github.com/Aircoookie/WLED/wiki for details).
order:W_01
par:BASE_ID;BASE_ID typically is wled;{ AttrVal("DEVICE","readingList","") =~ m,([^:]+)[/][^/]+[/].*:, ? $1 : undef }
par:DEVNAME;Device name as configured;{ AttrVal("DEVICE","readingList","") =~ m,([^:]+)[/]([^/]+)[/].*:, ? $1 : undef }
par:ICON;ICON as set, defaults to hue_filled_iris;{ AttrVal("DEVICE","icon","hue_filled_iris") }
attr DEVICE icon ICON
attr DEVICE setList\
on:noArg BASE_ID/DEVNAME status on\
off:noArg BASE_ID/DEVNAME status on\
toggle:noArg BASE_ID/DEVNAME status t\
rgb:colorpicker,HSV BASE_ID/DEVNAME/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME
attr DEVICE readingList \
BASE_ID/DEVNAME/g:.* brightness\
BASE_ID/DEVNAME/c:.* {{"rgb"=>substr("$EVENT",1,6)}}\
BASE_ID/DEVNAME/v:.* api
deletereading -q DEVICE (?!associatedWith).*
attr DEVICE devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
attr DEVICE webCmd rgb:brightness
attr DEVICE model wled_controller
Hi Beta-User,
ich teste das sehr gerne.
Habe gerade ein Update gemacht aber noch kein Template gefunden.
Gib mal bescheid wenn du es fertig hast dann teste ich es mit meinen WLEDs.
Habe gerade alle auf die neueste Version gehoben.
P.S.: Hier ist die MQTT beschreibung von Wled. Ist aber mittlerweile etwas outdated. Es geht mittlerweile auch mit secure connection.
Gruß und Danke,
Stefan
Hi Stefan,
die Frage war eigentlich, ob es getestet werden kann vor der Verteilung via update ;D .
Zum Testen findest du unter https://wiki.fhem.de/wiki/AttrTemplate#Eigene_Templates_entwickeln (https://wiki.fhem.de/wiki/AttrTemplate#Eigene_Templates_entwickeln) eine kurze Anleitung mit weiteren Links.
Sollte in deinem letzten Post eigentlich ein Link sein?
Hi Beta-User,
:-) jetzt verstehe ich erst. Dein Post ist das attrTemplate. Da war ich ja voll auf dem schlauch gestanden.
Klar ich teste es und melde mich.
Ja ich wollte einen link mit rein hängen:
https://github.com/Aircoookie/WLED/wiki/MQTT
Wie gesagt leider zur Zeit nicht ganz aktuell.
Gruß,
Stefan
Ok habs ausprobiert.
Hast noch nen kleinen bug drin bei off steht am ende on, da muss auch off hin.
Ansonsten tut es, gefällt mir gut.
Hast du noch eine Idee wegen des colorpickers?
Im Device Overview tut es wie gewünscht. Aber wenn man RGB bei set auswählt und dort etwas einstellt kommt folgende Meldung:
fhemweb_colorpicker.js line 85:
Uncaught TypeError: cmd is not a function
Gruß,
Stefan
Sorry wg. dem off, das korrigiere ich direkt...
Was den Colorpicker angeht: Funktioniert das, wenn man das via widgetOverride einstellt wie in deinem List?
(Wenn auch da ein Bug ist, sollte sich das Rudi (?) mal ansehen (=> gesonderte Meldung bei FHEMWEB). MMn. sollte es keinen Unterschied machen, an welcher Stelle das widget definiert wird; wenn doch, wäre das ggf. was, was hier als "feature" von MQTT2_DEVICE beschrieben werden sollte...)
Hi Beta-User,
nein das tut auch bei mir nicht. Gleicher Fehler.
Das Thema wird hier schon diskutiert, die Diskussion ist aber alt. Rudi war da auch schon kurz dabei.
https://forum.fhem.de/index.php?topic=90589.0
Irgendwie fehlen wohl parameter, mir ist aber nicht klar welche.
Danke und Gruß,
Stefan
Ich bin eigentlich nicht zustaendig, da colorpicker nicht meine Baustelle ist.
Wenn ich https://wiki.fhem.de/wiki/Color und die verlinkte Firmware-Seite anschaue, dann sollte setList die Zeile
rgb:colorpicker,RGB BASE_ID/DEVNAME/col #$EVTPART1
enthalten. Ohne Gewähr, da ich kein Geraet zum Testen habe.
Hi Rudi,
ja das funktioniert.
Ist dann halt ein reiner RGB Colorpicker, und nicht der mit den 3 Schiebern von HSV.
Aber ich denke das passt auch besser das Gerät hat ja nur ein RGB reading.
Hier der angepasste Code Beta-User:
#source post: https://forum.fhem.de/index.php/topic,98880.msg995308.html#msg995308
name:wled_controller
filter:TYPE=MQTT2_DEVICE
desc:To control a WLED device, see https://github.com/Aircoookie/WLED/wiki for details).
order:W_01
par:BASE_ID;BASE_ID typically is wled;{ AttrVal("DEVICE","readingList","") =~ m,([^:]+)[/][^/]+[/].*:, ? $1 : undef }
par:DEVNAME;Device name as configured;{ AttrVal("DEVICE","readingList","") =~ m,([^:]+)[/]([^/]+)[/].*:, ? $1 : undef }
par:ICON;ICON as set, defaults to hue_filled_iris;{ AttrVal("DEVICE","icon","hue_filled_iris") }
attr DEVICE icon ICON
attr DEVICE setList\
on:noArg BASE_ID/DEVNAME status on\
off:noArg BASE_ID/DEVNAME status off\
toggle:noArg BASE_ID/DEVNAME status t\
rgb:colorpicker,RGB BASE_ID/DEVNAME/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME
attr DEVICE readingList \
BASE_ID/DEVNAME/g:.* brightness\
BASE_ID/DEVNAME/c:.* {{"rgb"=>substr("$EVENT",1,6)}}\
BASE_ID/DEVNAME/v:.* api
deletereading -q DEVICE (?!associatedWith).*
attr DEVICE devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
attr DEVICE webCmd rgb:brightness
attr DEVICE model wled_controller
Den sollte man so einchecken können.
Richtig cool. Danke euch für eure Hilfe.
Gruß,
Stefan
Danke für die Rückmeldung, ist eingecheckt (=>via update ab morgen kurz vor 8:00 Uhr verfügbar).
@Rudi: Sorry, hatte irgendwie nicht auf dem Schirm, dass das (ggf. indirekt) zu Color.pm gehört...
Soweit ich es sehe, implementiert Color.pm "nur" eine Menge von Funktionen, die von einem Farbschema ins Andere konvertieren.
Das hier referenzierte Widget ist in fhemweb_colorpicker.js implementiert, und bei FHEMWEB dokumentiert (https://fhem.de/commandref_modular.html#widgetOverride)
Ich gehe davon aus, dass die HSV Variante ohne Parameter nicht fuer widgetOverride vorbereitet ist, auf die Schnelle konnte ich aber nicht die Ursache finden.
Hmm, wie auch immer, evtl. sollte man den alten Thread reaktivieren oder was neues dazu starten.
(Das betrifft mich aber wenn überhaupt, dann nur indirekt, daher bleibe ich dazu schlicht still, auch wenn ich grundsätzlich die HUE-Slider-Lösung angenehmer zu bedienen finde wie den RGB-Picker. Von daher wäre das nicht schlecht, wenn man (wer auch immer) sowas (ohne die beiden anderen Slider) irgendwie auch für "klassische" RGB-Geräte bereitstellen könnte.
(Das ist aber nur aus der Erinnerung rekonstruiert, kann sein, dass ich dabei was übersehen hatte; das stammt aus der Zeit, als ich die templates für milight entwickelt habe, und da gab es dann den einfachen Ausweg nach hue und auch meine Kenntnisse in FHEMWEB-Design waren da noch andere...).)
ein widgetOverride mit <cmd>:colorpicker,HSV sollte problemlos funktionieren. gerade mit einem HUEDevice und dark style getestet.
was genau geht denn nicht? kannst du ein minimal beispiel mit einem dummy bauen bei dem das problem
zu sehen ist?
Mit
attr global logfile -
attr global modpath .
define w FHEMWEB 8083 global
define d dummy
attr d setList rgb:colorpicker,HSV
bekommt man die Fehlermeldung:
Zitatfhemweb_colorpicker.js line 85:
Uncaught TypeError: cmd is not a function
falls man mit einem der Regler herumspielt.
dto., wenn man dasselbe via widgetOverride macht (das ist optisch dasselbe wie das MQTT2_DEVICE, um das es hier eigentlich geht, daher die weiteren Readings usw.):
defmod Test_rgb dummy
attr Test_rgb readingList brightness\
rgb\
api
attr Test_rgb setList on:noArg\
off:noArg\
toggle:noArg\
rgb:colorpicker,RGB\
brightness:colorpicker,BRI,0,1,255
attr Test_rgb widgetOverride rgb:colorpicker,HSV
Das Testsystem läuft auf einem strawberry-Perl@Win7
ok. ich das ganze bisher immer nur als webcmd verwendet. da geht es.
nicht als set in der detail ansicht.
fix kommt nachher.
sollte im svn repariert sein.
Danke für's fixen :) .
@stefanru:
Soll dann in das template jetzt die HSV-Variante rein?
@justme1968:
Gäbe es die Option, sich noch einen reinen RGB-Slider zu wünschen? Wäre vermutlich zukünftig noch für ein paar Geräte interessant, die RGB und PCT/brightness getrennt verwalten und in FHEMWEB dann für beides slider-widgets vertragen würden. (Das hier ist für MQTT-Gerät m.E. nicht ungewöhnlich) (Oder übersehe ich mal wieder was?)
naja... ein rgb wert der nicht die helligkeit beeinflusst gibt es erst mal nicht. die helligkeit ist hier implizit immer mit drin.
rgb über einen einzigen slider geht nicht.
das wäre dann hue.
aber zusätzlich zum colorpicker für die farbe noch einen slider für die helligkeit anzuzeigen geht doch jetzt schon.
oder verstehe ich etwas falsch?
Das mit der Helligkeit ist richtig ??? , Kopfkratz .
Worum es geht: In der Regel will man für farbige Leuchten zwei bzw. drei slider haben; zwei, wenn man Farbe und Helligkeit einstellen kann hat, drei, wenn man zusätzlich eine ct-Option hat.
Hier hat man einen separaten Slider für die Helligkeit, was demnach benötigt würde, wäre einer, der (auf derselben Helligkeitsstufe, die grade gilt) einen RGB-Wert liefert. Der HUE-Slider macht ja einen Zahlenwert, oder liege ich da falsch? Daher kann man den für diejenigen Geräte nicht verwenden, die den HUE-Wert nicht "verstehen".
(Für sowas wäre dann nur die Frage, wo der Slider den aktuellen Helligkeitswert hernimmt, und welche Skalierung für den gilt (100% oder 0-255); könnte man durch weitere Argumente lösen? EDIT: Oder den vorherigen RGB-Wert auswerten?)
Die Alternative wäre, den HUE-Slider anzubieten, und eine der Funktionen aus Color zu nutzen, um den Wert vor dem Senden zu beeinflussen; dann wird aber der Informationsfluss rückwärts gestört, weil was anderes zurückkommt, als gesendet wurde.
wenn das device ein set kommando nur für die helligkeit hat -> einfach den hier: https://wiki.fhem.de/wiki/Color#Helligkeit (https://wiki.fhem.de/wiki/Color#Helligkeit) verwenden.
wenn das device keinen eigenes set kommando hat und nur rgb kann -> den colorpicker im rgb oder hsv mode nutzen. da gibt es jeweils einen slider der nur die helligkeitsstufe komponente ändert.
wenn du noch etwas anderes meinst -> bitte noch mal beschrieben :(.
der dritte slider im rgb mode ist nicht für die farbtemperatur sonder für die sättigung. schau mal hier: https://wiki.fhem.de/wiki/Hue#Grundlagen_-_Farbmodelle (https://wiki.fhem.de/wiki/Hue#Grundlagen_-_Farbmodelle). das mischen von komponenten aus unterschiedlichen farbmodellen ist normalerweise nicht sinnvoll.
der slider für die farbtemperatur ist noch mal etwas anderes: https://wiki.fhem.de/wiki/Color#Farbtemperatur (https://wiki.fhem.de/wiki/Color#Farbtemperatur).
es gibt devices die automatisch den weiss anteil mit steuern wenn man eine farbe setzt und die automatisch in einen nur weiss modus wechseln wenn man die farbtemperatur explizit setzt (fast alle zigbee devices mit ausnahme der de geräte mit neurer firmware). hier kann man im frontend den colorpicker und den ct slider anzeigen aber beide beeinflussen sich automatisch gegenseitig durch die rückmeldung vom device.
und es gibt devices bei denen beides völlig getrennt ist. hier kann man beides anzeigen und getrennt voneinander bedienen.
Na ja, was stefanru gerne haben wollte, ist nach meinem Verständnis ein Device, das in etwa so aussieht bzw. sich so steuern läßt:
defmod dummy_test dummy
attr dummy_test readingList brightness rgb
attr dummy_test setList brightness:colorpicker,BRI,0,15,255 rgb:colorpicker,HUE,0,1,359
attr dummy_test webCmd brightness:rgb
Aber der HUE-Slider liefert leider eben Zahlenwerte, die man nicht sinnvoll an das konkrete Device via MQTT versenden kann, denn das mag ausschließlich RGB-Werte im RRGGBB-Format. Das sollte der Slider liefern...
Dass es andere Widgets gibt, die das hergeben, ist klar, aber der Mechanismus mit dem Aufklappen vom RGB-Widget ist nicht sooo schön, wenn man daneben sowieso einen Slider für die Helligkeit hat.
Sorry für die Ungenauigkeit, was die anderen Optionen/Begrifflichkeiten betr. Farbe usw. angeht. Es geht einfach nur darum, (genau nur) das anzuzeigen, was dann auch das (Ziel-) Device versteht/verarbeiten kann. Hier ist das eben nur brightness und rgb.
Hoffe, das ist nun etwas klarer?
wenn du den colorpicker im HSV mode verendest klappt nichts auf. die drei regler sind immer sichtbar.
das problem ist: ein oder zwei regler sind nicht genug um eine farbe im rgb oder hsv raum zu bestimmen. es sind drei komponenten nötig. d.h. um rgb einzustellen reicht ein regler nicht.
#FF0000 und #FFFFFF und #FF9999 sind auf hue ebene alles die gleiche farbe. reines rot. und haben alle 100% helligkeit. sie unterscheiden sich nur in der sättigung die du als dritten regler unterschlagen hast.
auch wenn das device nur rgb und helligkeit kann brauchst du im gui alle drei regler um alle möglichen farben einzustellen. genau dafür ist der HSV mode vom colorpicker da.
Hi Beta-User,
ich denke den Hue Slider hätte ich dann lieber.
@justme:
Sieh dir mal den Anhang an.
So sieht so ein Device dann in der Übersicht aus.
Die vorne sind die HUE, der hinten ist das Brightness-Reading des Devices, wobei Brightness von 0 - 255 geht.
Irgendwie ist die Helligkeit doch jetzt 2 mal vorhanden.
Einmal im Hue von 0 - 100 und einmal im Brightness-Reading von 0 - 255.
Nochmal vielen Dank für eure Hilfe.
Gruß,
Stefan
wenn du nur eins von beiden willst darfst du in deinem webCmd auch nur eins von beiden einbauen.
@justme1968: Danke nochmal für die Infos.
@stefanru:
Läßt sich das Device denn über den HSV (? nicht HUE, oder?) -Slider auch Helligkeitsmäßig gut bedienen? Der mittlere slider sollte auch irgendwelche Auswirkungen auf das Device haben? Dann würde ich (nur) den in webCmd anbieten, doppeln macht keinen Sinn.
Wenn einer der slider funktionslos sein sollte, dann bleiben wir beim aktuellen Stand.
Hi,
ich glaub ich hab das nicht so gut ausgedrückt.
Der vordere ist HSV und alles funktioniert, der hintere ist Brightness, auch diese funktioniert.
Ist Brightness 0, kann ich an HSV drehen wie ich will es tut sich nichts.
Hat Brightness einen Wert größer 0 kann ich HSV benutzen.
Auch den unteren der drei Slider von HSV der ja auch von Schwarz bis volle Farbe geht.
Ich kann also mit dem unteren vom HSV Slider die Helligkeit von 0 bis 100 einstellen, wobei 100 maximal die Helligkeit von Brightness haben kann.
Bsp: Brightness 50.
Unterer HSV Slider ist bei 0 aus und bei 100 hat die Lampe eine Brightness von 50.
Ein Problem hat der HSV Slider aber.
Slide ich den unteren Slider wirklich auf 0 wird RGB 000000.
Das heißt alle Slider in HSV gehen auf Anfangsposition.
Farbe und Sättigung ändern sich also plötzlich.
Bin mir nicht sicher woran das liegt.
Ich denke aber dass der HSV Slider wenn der untere Slider auf 0 steht alles auf 0 setzt.
Somit geht die Farbe und Sättigung verloren.
Ich würde den HSV Slider gern behalten.
Ist irgendwie besser zu bedienen als die RGB Auswahl.
Außerdem hat RGB ja das selbe. Man kann von oben nach unten auch immer dunkler werden.
Extremfall also eine schwarze Farbe und die LED ist aus obwohl Brightness auf 255 steht.
Ich denke wir sollten HSV nehmen.
Das einzige Problem ist wenn man den unteren HSV Slider auf 0 stellt.
Vielleicht kann justme was dazu sagen?
Gruß,
Stefan
jedes farbmodell hat gewisse nachteile. bei hsv geht bei sättigung 0 oder helligkeit 0 die farbe 'verloren'. bei rgb kann man nicht einfach durch die farben scrollen.
wenn man die farmodelle auch noch kombinieren muss weil in einem die einstellung einfacher geht, dieses aber vom device nicht direkt unterstützt wird verstärken sie die probleme gegenseitig.
d.h. für hsv: wenn man die helligkeit auf 0 dreht gehen bei der hin- und rückrechnung über rgb die beiden anderen kanäle verloren weil sich aus rgb 000000 nichts mehr rekonstruieren lässt. ähnliches gilt für ffffff d.h. weiß.
bei einem device das direkt in hsv arbeitet würde das nicht passieren weil nicht hin und her gerechnet werden muss und im device bzw. reading die original werte erhalten bleiben.
Ah ok, danke für die Erklärung.
Hmm, dann fällt es mir schwer zu sagen ob HSV oder RGB für die WLED.
Sie hat nur ein RGB und ein Brightness reading.
Dann wäre wohl RGB das korrekte.
Gruß,
Stefan
Dann lassen wir das im template wie es ist. Zumindest die Beschreibung verweist nach hierher, ggf. bzw. bei Gelegenheit nehme ich noch einen comment dazu auf, dass man es auch danach noch wiederfindet, wenn man sich intensiver mit seinem device beschäftigt.
Finde es besser, man hat eine etwas "umständliche" Bedienung (@justme1968: das ist ausdrücklich keine Kritik, die Hintergründe, warum das so sein muss, hast du ja nochmal ausführlich dargelegt) wie irritierende Verhaltensweisen bei einem "mißbrauchten" widget.
(@stefanru: Du kannst das bei dir ja trotzdem so lassen; du kennst ja die Einschränkungen, und wenn du ein paar "Farb-Buttons" dazupackst, die rgb liefern, ist das auch einfach zu überspielen...).
Hi,
nein das passt. Ich denke ich nehme dann auch RGB. Ich benutze das FHEM WebUI eh fast nicht zum steuern.
Läuft alles automatisiert mit Bewegungsmelder usw.
Also alles super.
Vielen dank nochmal!
Gruß,
Stefan
Hallo
Wollte da auch mal testen da ich einige WS2812 rumliegen hatte.
Nach flashen der firmware auf meinen esp8266 und mqtt Aktivierung
wird bei mir dieses Device per template angelegt
defmod MQTT2_WLED_vitrine MQTT2_DEVICE WLED_vitrine
attr MQTT2_WLED_vitrine DbLogExclude .*
attr MQTT2_WLED_vitrine IODev MQTTServer
attr MQTT2_WLED_vitrine comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
attr MQTT2_WLED_vitrine devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
attr MQTT2_WLED_vitrine genericDeviceType light
attr MQTT2_WLED_vitrine homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
attr MQTT2_WLED_vitrine icon hue_filled_iris
attr MQTT2_WLED_vitrine model wled_controller
attr MQTT2_WLED_vitrine readingList wled/wled/g:.* brightness\
wled/wled/c:.* {{"rgb"=>substr("$EVENT",1,6)}}\
wled/wled/v:.* api
attr MQTT2_WLED_vitrine room MQTT2_DEVICE
attr MQTT2_WLED_vitrine setList on:noArg wled/wled status on\
off:noArg wled/wled status off\
toggle:noArg wled/wled status t\
rgb:colorpicker,RGB wled/wled/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 wled/wled
attr MQTT2_WLED_vitrine webCmd rgb:brightness
funktionierte aber nicht
colorpicker wollte selbst nach Anpassung der Pfade
nicht funtionieren.
Firmware ist die letzte vom Dezember 2019
defmod MQTT2_WLED_vitrine MQTT2_DEVICE WLED_vitrine
attr MQTT2_WLED_vitrine DbLogExclude .*
attr MQTT2_WLED_vitrine IODev MQTTServer
attr MQTT2_WLED_vitrine comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
attr MQTT2_WLED_vitrine devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
attr MQTT2_WLED_vitrine genericDeviceType light
attr MQTT2_WLED_vitrine homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
attr MQTT2_WLED_vitrine icon hue_filled_iris
attr MQTT2_WLED_vitrine model wled_controller
attr MQTT2_WLED_vitrine readingList wled/vitrine/g:.* brightness\
wled/vitrine/c:.* {{"rgb"=>substr("$EVENT",1,6)}}\
wled/vitrine/v:.* api\
WLED_vitrine:wled/vitrine/g:.* g\
WLED_vitrine:wled/vitrine/c:.* c\
WLED_vitrine:wled/vitrine/status:.* status\
WLED_vitrine:wled/vitrine/v:.* v
attr MQTT2_WLED_vitrine room MQTT2_DEVICE
attr MQTT2_WLED_vitrine setList on:noArg wled/vitrine status on\
off:noArg wled/vitrine status off\
toggle:noArg wled/vitrine status t\
rgb:colorpicker,RGB wled/vitrine/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 wled/vitrine
attr MQTT2_WLED_vitrine webCmd rgb:brightness
attr MQTT2_WLED_vitrine widgetOverride rgb:colorpicker,HSV
attr vitrinenlicht_wled webCmd rgb:brightness
attr vitrinenlicht_wled widgetOverride rgb:colorpicker,HSV
Was ich mir noch wünschen würde die Effekte irgenwie mit
einzubauen habe aber leider null Plan wie das anzustellen ist.
Mein Plan wäre alle meine Milight durch diese zu ersetzen da die WS2811
gefühlt smoother laufen.
Andre
Hi Andre,
eigentlich sollte die ReadingsList so aussehen, hier für mein kuechenlicht:
readingList
wled/kuechenlicht/g:.* brightness
wled/kuechenlicht/c:.* {{"rgb"=>substr("$EVENT",1,6)}}
wled/kuechenlicht/v:.* api
Hast du den bei der Wled auf dem Web Ui unter Config -> MQTT angeschaltet und dort auch ein Device Topic Vergeben?
Für mein Beispiel wäre das wled/kuechenlicht
Kann dir da nur recht geben WLEd läuft super smooth und ist richtig cool.
Ja du kannst auch die Effekte über MQTT ansprechen und zwar über die API, dort kannst du alle Befehler der HTTP API übergeben.
Siehe:https://github.com/Aircoookie/WLED/wiki/MQTT
Z.b. für mein Küchenlicht:
set myMQTT2Client publish wled/kuechenlicht/api CL=#98F3F9&A=255&TT=1000
CL ist Farbe, A ist Helligkeit und TT ist die dauer des Übergangs.
Für eine Effekt würdest du noch &FX=10 setzen.
Das würde Effekt Nummer 10 laufen lassen.
Gruß,
Stefan
In der Web UI habe ich bei Device Topic: wled/vitrine eingetragen
Group Tropic steht auf wled/all
Client ID steht auf WLED-vitrine und Mqtt aktiviert
den rest habe ich erst mal nicht verändert.
Welche Firmware hast du drauf vielleicht liegt es ja daran das das falsch
angelegt wird.
set mqttserver publish wled/vitrine/api CL=#98F3F9&A=255&TT=1000 &FX=2
funtioniert wunderbar... :)
Andre
Hab die neuste Firmware drauf.
Hatte aber auch die vorher drauf.
Benutze das schon ne Zeit lang.
Wo ist denn dein Problem genau?
Wenn das "set mqttserver publish wled/vitrine/api CL=#98F3F9&A=255&TT=1000 &FX=2" geht sollte doch auch der rest gehen.
Hast du in deiner ReadingsList:
wled/vitrine/g:.* brightness
wled/vitrine/c:.* {{"rgb"=>substr("$EVENT",1,6)}}
wled/vitrine/v:.* api
Gruß,
Stefan
Problem eigentlich nicht nach anpaasung der Pfade läuft es ja erst mal
es wird nur falsch vom template angelegt vieleicht liegt es nur an meiner
Konfiguration das das so passiert.
defmod MQTTServer MQTT2_SERVER 1884 global
attr MQTTServer DbLogExclude .*
attr MQTTServer autocreate simple
attr MQTTServer icon mqtt
attr MQTTServer rawEvents 1
attr MQTTServer room MQTT2_DEVICE,Mqtt
Internals:
.FhemMetaInternals 1
CID WLED_vitrine
DEF WLED_vitrine
DEVICETOPIC MQTT2_WLED_vitrine
FUUID 5e4ae9f3-f33f-0b03-84fc-e1c0e1eb40de45a0
FVERSION 10_MQTT2_DEVICE.pm:0.211680/2020-02-10
IODev MQTTServer
LASTInputDev MQTTServer
MQTTServer_MSGCNT 16
MQTTServer_TIME 2020-02-17 21:43:03
MSGCNT 16
NAME MQTT2_WLED_vitrine
NR 766
STATE toggle
TYPE MQTT2_DEVICE
.attraggr:
.attrminint:
READINGS:
2020-02-17 21:43:02 api <?xml version="1.0" ?><vs><ac>0</ac><cl>152</cl><cl>243</cl><cl>249</cl><cs>0</cs><cs>0</cs><cs>0</cs><ns>1</ns><nr>1</nr><nl>0</nl><nf>1</nf><nd>60</nd><nt>132</nt><fx>2</fx><sx>128</sx><ix>128</ix><fp>0</fp><wv>-1</wv><ws>0</ws><cy>0</cy><ds>WLED</ds><ss>0</ss></vs>
2020-02-17 21:43:02 brightness 0
2020-02-17 21:43:02 c #98F3F9
2020-02-17 21:43:02 g 0
2020-02-17 21:43:02 rgb 98F3F9
2020-02-17 21:43:02 state toggle
2020-02-17 21:43:02 status online
2020-02-17 21:43:02 v <?xml version="1.0" ?><vs><ac>0</ac><cl>152</cl><cl>243</cl><cl>249</cl><cs>0</cs><cs>0</cs><cs>0</cs><ns>1</ns><nr>1</nr><nl>0</nl><nf>1</nf><nd>60</nd><nt>132</nt><fx>2</fx><sx>128</sx><ix>128</ix><fp>0</fp><wv>-1</wv><ws>0</ws><cy>0</cy><ds>WLED</ds><ss>0</ss></vs>
helper:
bm:
MQTT2_DEVICE_Get:
cnt 14
dmx -1000
dtot 0
dtotcnt 0
mTS 18.02. 10:39:46
max 7.20024108886719e-05
tot 0.000534772872924805
mAr:
HASH(0x564100625a48)
MQTT2_WLED_vitrine
brightness
MQTT2_DEVICE_Set:
cnt 30
dmx -1000
dtot 0
dtotcnt 0
mTS 17.02. 21:43:02
max 0.0286839008331299
tot 0.0400433540344238
mAr:
HASH(0x564100625a48)
MQTT2_WLED_vitrine
toggle
Attributes:
DbLogExclude .*
IODev MQTTServer
comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
genericDeviceType light
homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
icon hue_filled_iris
model wled_controller
readingList wled/vitrine/g:.* brightness
wled/vitrine/c:.* {{"rgb"=>substr("$EVENT",1,6)}}
wled/vitrine/v:.* api
WLED_vitrine:wled/vitrine/g:.* g
WLED_vitrine:wled/vitrine/c:.* c
WLED_vitrine:wled/vitrine/status:.* status
WLED_vitrine:wled/vitrine/v:.* v
room MQTT2_DEVICE
setList on:noArg wled/vitrine status on
off:noArg wled/vitrine status off
toggle:noArg wled/vitrine status t
rgb:colorpicker,RGB wled/vitrine/col #$EVTPART1
brightness:colorpicker,BRI,0,1,255 wled/vitrine
webCmd rgb:brightness
widgetOverride rgb:colorpicker,HSV
Erklär mir mal was falsch angelegt wird.
Bei mir ist das passt alles wenn ich ein Device neu anlege.
Was musstest du denn aus welchem Grund anpassen?
Gruß,
Stefan
Hallo
Sorry das ich mich erst jetzt melde.
defmod MQTT2_WLED_vitrine MQTT2_DEVICE WLED_vitrine
attr MQTT2_WLED_vitrine DbLogExclude .*
attr MQTT2_WLED_vitrine IODev MQTTServer
attr MQTT2_WLED_vitrine comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
attr MQTT2_WLED_vitrine devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
attr MQTT2_WLED_vitrine genericDeviceType light
attr MQTT2_WLED_vitrine homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
attr MQTT2_WLED_vitrine icon hue_filled_iris
attr MQTT2_WLED_vitrine model wled_controller
attr MQTT2_WLED_vitrine readingList wled/vitrine/wled/vitrine/g:.* brightness\
wled/vitrine/wled/vitrine/c:.* {{"rgb"=>substr("$EVENT",1,6)}}\
wled/vitrine/wled/vitrine/v:.* api
attr MQTT2_WLED_vitrine room MQTT2_DEVICE
attr MQTT2_WLED_vitrine setList on:noArg wled/vitrine/wled/vitrine status on\
off:noArg wled/vitrine/wled/vitrine status off\
toggle:noArg wled/vitrine/wled/vitrine status t\
rgb:colorpicker,RGB wled/vitrine/wled/vitrine/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 wled/vitrine/wled/vitrine
attr MQTT2_WLED_vitrine webCmd rgb:brightness
Und so habe ich es dann abgeändert.
defmod MQTT2_WLED_vitrine MQTT2_DEVICE WLED_vitrine
attr MQTT2_WLED_vitrine DbLogExclude .*
attr MQTT2_WLED_vitrine IODev MQTTServer
attr MQTT2_WLED_vitrine comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
attr MQTT2_WLED_vitrine devStateIcon {Color::devStateIcon( $name, "rgb","rgb", "brightness", "state" )}
attr MQTT2_WLED_vitrine genericDeviceType light
attr MQTT2_WLED_vitrine homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
attr MQTT2_WLED_vitrine icon hue_filled_iris
attr MQTT2_WLED_vitrine model wled_controller
attr MQTT2_WLED_vitrine readingList wled/vitrine/g:.* brightness\
wled/vitrine/c:.* {{"rgb"=>substr("$EVENT",1,6)}}\
wled/vitrine/v:.* api\
WLED_vitrine:wled/vitrine/g:.* g\
WLED_vitrine:wled/vitrine/c:.* c\
WLED_vitrine:wled/vitrine/status:.* status\
WLED_vitrine:wled/vitrine/v:.* v
attr MQTT2_WLED_vitrine room MQTT2_DEVICE
attr MQTT2_WLED_vitrine setList on:noArg wled/vitrine status on\
off:noArg wled/vitrine status off\
toggle:noArg wled/vitrine status t\
rgb:colorpicker,RGB wled/vitrine/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 wled/vitrine
attr MQTT2_WLED_vitrine webCmd rgb:brightness
attr MQTT2_WLED_vitrine widgetOverride rgb:colorpicker,HSV
Wie du siehst legt er die Pfade wled/vitrine doppelt an.
Auch der Colorpicker funktioniert bei mir so nicht
Andre
Hi Andre,
ah ok.
Das sieht ja seltsam aus. Ich probiere das heute mal.
Als ich meine Device angelegt hatte war nichts doppelt.
Gruß,
Stefan
Hm, das ist zwar einerseits klar, dass das attrTemplate kaputt war (Korrektur ist seit eben im svn), aber diesen Effekt hätte der bug nicht haben sollen...
(Wenn testen, bitte mit der version aus dem svn bzw. mit der kleinen Änderung von eben).
Habs eben getestet funktioniert
Diese Meldung kommt aber beim anlegen....
Unknown command WLED_vitrine:wled, try help.
Unknown command WLED_vitrine:wled, try help.
Unknown command WLED_vitrine:wled, try help.
Unknown command WLED_vitrine:wled/col, try help.
Unknown command WLED_vitrine:wled, try help.
Unknown command WLED_vitrine:wled/g:.*, try help.
Unknown command WLED_vitrine:wled/c:.*, try help.
Unknown command WLED_vitrine:wled/v:.*, try help.
Colorpicker arbeitet auch wieder ohne Änderung
Hmm, bin grade etwas am Rätseln, wo das herkommen könnte.
Wichtig ist erst mal, dass die Parameter sauber aufgelöst werden. Das scheint der Fall zu sein?
Alles andere _könnte_ auch von irgendeiner "Altlast" her kommen. Von daher würde es mich interessieren, ob diese Meldungen auch kommen, wenn man ein "neues" Device hat, wie autocreate es erstellt hatte?
Ich habe ein zweites neues Device angelegt selbige Fehlermeldung erscheint
Hmm, aus dieser Beschreibung alleine werde ich leider nicht schlau. Ich vermute (?), diese Fehlermeldungen "unknown command.." erscheinen, wenn du das attrTemplate anwendest?
Bitte (sofern ich dem auf den Grund gehen soll, muß ich das bei Gelegenheit 1:1 nachvollziehen...): Ein (vollst.) RAW von dem, was autocreate erstellt, dann eine genaue Angabe, wie du welches attrTemplate anwendest.
Also ich habe gerade auch ein neues Device angelegt.
Habe ein AlleLeds device angelegt.
Als Baseid "wled" und als Devname "all".
Ging ohne Probleme.
Folgendes Vorgehen:
define AlleLeds mqtt2_device
set AlleLeds attrTemplate wled_controller wled all
Alles perfekt danach.
Gruß,
Stefan
Hallo,
beschäftige mich auch seit 2-3 Tagen mit WLED.
Bescheidene Frage, wo gibts denn das Template
wled_controller wled all ?
Selbst wenn ich ein update verpasst hätte find ich es hier (https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/lib/AttrTemplate/mqtt2.template) nicht.
Angelegt wir bei mir folgendes Device:
defmod MQTT2_WLED_538e36 MQTT2_DEVICE WLED_538e36
attr MQTT2_WLED_538e36 IODev MQTT2_Server
attr MQTT2_WLED_538e36 readingList WLED_538e36:wled/538e36/g:.* g\
WLED_538e36:wled/538e36/c:.* c\
WLED_538e36:wled/538e36/status:.* status\
WLED_538e36:wled/538e36/v:.* v
attr MQTT2_WLED_538e36 room MQTT2_DEVICE
setstate MQTT2_WLED_538e36 2020-02-29 16:11:55 c #FF0000
setstate MQTT2_WLED_538e36 2020-02-29 16:11:55 g 41
setstate MQTT2_WLED_538e36 2020-02-29 16:11:55 status online
setstate MQTT2_WLED_538e36 2020-02-29 16:11:55 v <?xml version="1.0" ?><vs><ac>41</ac><cl>255</cl><cl>0</cl><cl>0</cl><cs>0</cs><cs>0</cs><cs>0</cs><ns>0</ns><nr>1</nr><nl>0</nl><nf>1</nf><nd>60</nd><nt>0</nt><fx>27</fx><sx>128</sx><ix>128</ix><fp>0</fp><wv>0</wv><ws>0</ws><ps>0</ps><cy>0</cy><ds>WLED</ds><ss>0</ss></vs>
Wende ich darauf das
wled_controller-Template an:
Zitatattr DEVICE icon ICON
attr DEVICE setList\
on:noArg BASE_ID/DEVNAME status on\
off:noArg BASE_ID/DEVNAME status off\
toggle:noArg BASE_ID/DEVNAME status t\
rgb:colorpicker,RGB BASE_ID/DEVNAME/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME
attr DEVICE readingList \
BASE_ID/DEVNAME/g:.* brightness\
BASE_ID/DEVNAME/c:.* {{"rgb"=>substr("$EVENT",1,6)}}\
BASE_ID/DEVNAME/v:.* api
deletereading -q DEVICE (?!associatedWith).*
attr DEVICE devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
attr DEVICE webCmd rgb:brightness
attr DEVICE comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
set DEVICE attrTemplate mqtt2_speech_recognition_type_light_255
attr DEVICE model wled_controller
Das ist noch ein Fehler drin.
bekomme ich auch die Unknown command Meldungen:
Unknown command WLED_538e36:wled, try help.
Unknown command WLED_538e36:wled, try help.
Unknown command WLED_538e36:wled, try help.
Unknown command WLED_538e36:wled/col, try help.
Unknown command WLED_538e36:wled, try help.
Unknown command WLED_538e36:wled/g:.*, try help.
Unknown command WLED_538e36:wled/c:.*, try help.
Unknown command WLED_538e36:wled/v:.*, try help.
Das Device sieht dann so aus, nachdem man den die Meldungen mit OK bestätigt hat.
defmod MQTT2_WLED_538e36 MQTT2_DEVICE WLED_538e36
attr MQTT2_WLED_538e36 IODev MQTT2_Server
attr MQTT2_WLED_538e36 comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
attr MQTT2_WLED_538e36 devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
attr MQTT2_WLED_538e36 genericDeviceType light
attr MQTT2_WLED_538e36 homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
attr MQTT2_WLED_538e36 icon hue_filled_iris
attr MQTT2_WLED_538e36 model wled_controller
attr MQTT2_WLED_538e36 readingList wled/538e36/g:.* g
attr MQTT2_WLED_538e36 room MQTT2_DEVICE
attr MQTT2_WLED_538e36 setList on:noArg wled/538e36/g:.* g
attr MQTT2_WLED_538e36 webCmd rgb:brightness
off:noArg BASE_ID/DEVNAME status off\
toggle:noArg BASE_ID/DEVNAME status t\
rgb:colorpicker,RGB BASE_ID/DEVNAME/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME
werden nicht angelegt, nur on.
Auch die ReadingList aus dem Template wird nicht angelegt, wie zu sehen ist.
Nach einmal ein/ausschalten im UI von WLED erweitert sich die ReadingList wieder um:
wled/538e36/g:.* g
WLED_538e36:wled/538e36/c:.* c
WLED_538e36:wled/538e36/status:.* status
WLED_538e36:wled/538e36/v:.* v
Passe ich alles händisch so an:
defmod MQTT2_WLED_538e36 MQTT2_DEVICE WLED_538e36
attr MQTT2_WLED_538e36 IODev MQTT2_Server
attr MQTT2_WLED_538e36 comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
attr MQTT2_WLED_538e36 devStateIcon {Color::devStateIcon( $name, "rgb", "brightness", "state" )}
attr MQTT2_WLED_538e36 genericDeviceType light
attr MQTT2_WLED_538e36 homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
attr MQTT2_WLED_538e36 icon hue_filled_iris
attr MQTT2_WLED_538e36 model wled_controller
attr MQTT2_WLED_538e36 readingList wled/538e36/wled/538e36/c:.* {{"rgb"=>substr("$EVENT",1,6)}}\
wled/538e36/wled/538e36/v:.* api\
wled/538e36/c:.* c\
wled/538e36/status:.* status\
wled/538e36/g:.* brightness\
WLED_538e36:wled/538e36/v:.* v
attr MQTT2_WLED_538e36 room MQTT2_DEVICE
attr MQTT2_WLED_538e36 setList on:noArg wled/538e36/g:.* g\
off:noArg wled/538e36 status off\
toggle:noArg wled/538e36 status t\
rgb:colorpicker,RGB wled/538e36/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 wled/538e36
attr MQTT2_WLED_538e36 webCmd rgb:brightness
setstate MQTT2_WLED_538e36 rgb
setstate MQTT2_WLED_538e36 2020-02-29 17:02:10 brightness 82
setstate MQTT2_WLED_538e36 2020-02-29 17:02:10 c #4E21FF
setstate MQTT2_WLED_538e36 2020-02-29 17:02:09 state rgb
setstate MQTT2_WLED_538e36 2020-02-29 17:02:10 status online
setstate MQTT2_WLED_538e36 2020-02-29 17:02:10 v <?xml version="1.0" ?><vs><ac>82</ac><cl>78</cl><cl>33</cl><cl>255</cl><cs>0</cs><cs>0</cs><cs>0</cs><ns>0</ns><nr>1</nr><nl>0</nl><nf>1</nf><nd>60</nd><nt>0</nt><fx>0</fx><sx>128</sx><ix>128</ix><fp>0</fp><wv>0</wv><ws>0</ws><ps>0</ps><cy>0</cy><ds>WLED</ds><ss>0</ss></vs>
passt alles, bis auf das es kein rgb-Reading gibt.
Habs auch schon mit nur 2 statt 4 {} probiert bei {{"rgb"=>substr("$EVENT",1,6)}}
Woran liegt das ?
so kann man übrigens einen Effect auswählen, das wurde, mein ich, bisher noch nicht erwähnt.
effect:colorpicker,BRI,0,1,79 wled/538e36/api http://192.168.188.50/win&FX=$EVTPART1
Gruß
Thomas
Hm, das Problem war das ".*:" am Ende. Hab's jetzt gegen "[^/]+:" getauscht, das sollte das korrekte Ergebnis bringen...
Das .* hat dazu geführt, dass Teile des topic-Trees doppelt verwendet wurden, deswegen geht auch rgb nicht.
Wenn man attrTemplate mit weiteren Parametern aufruft, werden die par-Anweisungen dadurch überschrieben.
Sorry, hoffe, das paßt nun.
Super. Danke. Klappt alles.
Dann nehm ich das mit dem Fehler in devStateIcon wieder zurück ::), hätte man auch nachlesen können was korrekt ist.
Das mit
Zitat$EVENT direkt mit Perl auswerten
hängt mir einfach
noch zu hoch (da warte ich noch auf den
Eureka effect, hab mir die vorgeschlagenen verwandten Beispiele aber noch gar nicht im Detail angeschaut), das wär doch hier das gleiche wenn man zu dem vorgeschlagenen effect-setter eine Rückmeldung bauen wollte !?
Hmm,
warum ging es bei mir?
Habe ich noch irgendwo ein Template vom Testen das vom Update nicht überschrieben wird?
Gruß,
Stefan
Zu dem effect-setter hier (https://forum.fhem.de/index.php/topic,108737.msg1028382.html#msg1028382) würd ich gerne noch 3 weitere vorschlagen, sofern das im Template erwünscht ist.
speed:colorpicker,BRI,0,1,255 wled/538e36/api http://192.168.188.50/win&SX=$EVTPART1
intensity:colorpicker,BRI,0,1,255 wled/538e36/api http://192.168.188.50/win&IX=$EVTPART1
palette:selectnumbers,0,1,46,0,lin wled/538e36/api http://192.168.188.50/win&FP=$EVTPART1
die zugehörige readingList
wled/538e36/v:.* {$EVENT =~ m,((?<=<sx>).*?(?=<\/sx>)), ? {"speed"=>"$1"} : undef }
wled/538e36/v:.* {$EVENT =~ m,((?<=<ix>).*?(?=<\/ix>)), ? {"intensity"=>"$1"} : undef }
wled/538e36/v:.* {$EVENT =~ m,((?<=<fp>).*?(?=<\/fp>)), ? {"palette"=>"$1"} : undef }
Das ein/ausschalten und die Duration einstellen von Nightlight fänd ich auch noch toll, allerdings hat das beim ersten mal nicht genauso geklappt wie hier (https://github.com/Aircoookie/WLED/wiki/HTTP-request-API) in der Doku beschrieben, da ist was durcheinander denke ich (duration mit delay vertauscht).
Gruß
Thomas
Hi TomLee,
Das gefällt mir!
Dann hätte ich gern noch FX.
Wäre dann:
effect:selectnumbers,0,1,101,0,lin wled/538e36/api http://192.168.188.50/win&FX=$EVTPART1
wled/538e36/v:.* {$EVENT =~ m,((?<=<fx>).*?(?=<\/fx>)), ? {"effect"=>"$1"} : undef }
Gruß,
Stefan
Kann das gerne einpflegen, denke aber, dass wir noch eine Sache berücksichtigen sollten: Wenn ich diese etwas seltsame Form der Datenübertragung aus dem anderen Thread richtig deute, kommt "immer alles" zurück, ganz gleich, ob geändert oder nicht (und dazu in einem eigenen Format, das nicht JSON ist...)? (und: Es kommen immer ganze Zahlen zurück?)
Dann sollten wir das noch etwas dahingehend verfeinern, dass wir auf Änderungen checken, ergäbe als readingList:
wled/538e36/v:.* {$EVENT =~ m,(?<=<sx>)([\d]+)(?=<\/sx>), ? $1 eq ReadingsVal($NAME,"speed","unknown") ? undef : {"speed"=>$1} : undef }
wled/538e36/v:.* {$EVENT =~ m,(?<=<ix>)([\d]+)(?=<\/ix>), ? $1 eq ReadingsVal($NAME,"intensity","unknown") ? undef : {"intensity"=>$1} : undef }
wled/538e36/v:.* {$EVENT =~ m,(?<=<fp>)([\d]+)(?=<\/fp>), ? $1 eq ReadingsVal($NAME,"palette","unknown") ? undef : {"palette"=>$1} : undef }
wled/538e36/v:.* {$EVENT =~ m,(?<=<fx>)([\d]+)(?=<\/fx>), ? $1 eq ReadingsVal($NAME,"effect","unknown") ? undef :{"effect"=>"$1"} : undef }
und setList:
speed:colorpicker,BRI,0,1,255 wled/538e36/api http://192.168.188.50/win&SX=$EVTPART1
intensity:colorpicker,BRI,0,1,255 wled/538e36/api http://192.168.188.50/win&IX=$EVTPART1
palette:selectnumbers,0,1,46,0,lin wled/538e36/api http://192.168.188.50/win&FP=$EVTPART1
effect:selectnumbers,0,1,100,0,lin wled/538e36/api http://192.168.188.50/win&FX=$EVTPART1
Dazu evtl. noch eine eventMap und webCmd als Beispiele:
attr DEVICE eventMap /effect 2:Breathe/effect 8:Colorloop/effect 95:Popcorn/
attr DEVICE webCmd rgb:brightness:Breathe:Colorloop
Hi Beta-User,
ja leider kommt noch kein JSON.
Wird irgendwann kommen.
Zur Zeit finde ich die Idee gut das so zu Lösen wie du beschrieben hast.
FX hat laut Doku 0 - 101.
Eine Eventmap für 102 Effekte wird doch etwas heftig oder?
Aber eine kleine Liste finde ich sinnvoll.
Man kann sich seine lieblings Effekte ja dann noch adden.
Gruß,
Stefan
Die readinglist mit ReadingsVal hab ich getestet, passt.
Was die MQTT-Implemetierung angeht einfach hier (https://github.com/Aircoookie/WLED/wiki/MQTT) den ersten Satz lesen und bei mehr Interesse dem Link in dem Satz folgen.
Ah ok,
cool.
Danke für die Info TomLee.
Gruß,
Stefan
Hab das jetzt mal für mein Schranklicht eingebaut.
Ist echt super. Funktioniert 1A.
Habs noch hübscher gemacht mit Hostname usw.
readingList:
wled/schranklicht/g:.* brightness
wled/schranklicht/c:.* {{"rgb"=>substr("$EVENT",1,6)}}
wled/schranklicht/v:.* api
wled/schranklicht/v:.* {$EVENT =~ m,(?<=<sx>)([\d]+)(?=<\/sx>), ? $1 eq ReadingsVal($NAME,"speed","unknown") ? undef : {"speed"=>$1} : undef }
wled/schranklicht/v:.* {$EVENT =~ m,(?<=<ix>)([\d]+)(?=<\/ix>), ? $1 eq ReadingsVal($NAME,"intensity","unknown") ? undef : {"intensity"=>$1} : undef }
wled/schranklicht/v:.* {$EVENT =~ m,(?<=<fp>)([\d]+)(?=<\/fp>), ? $1 eq ReadingsVal($NAME,"palette","unknown") ? undef : {"palette"=>$1} : undef }
wled/schranklicht/v:.* {$EVENT =~ m,(?<=<fx>)([\d]+)(?=<\/fx>), ? $1 eq ReadingsVal($NAME,"effect","unknown") ? undef :{"effect"=>"$1"} : undef }
setList:
on:noArg wled/schranklicht status on
off:noArg wled/schranklicht status off
toggle:noArg wled/schranklicht status t
rgb:colorpicker,RGB wled/schranklicht/col #$EVTPART1
brightness:colorpicker,BRI,0,1,255 wled/schranklicht
speed:colorpicker,BRI,0,1,255 wled/schranklicht/api http://schranklicht/win&SX=$EVTPART1
intensity:colorpicker,BRI,0,1,255 wled/schranklicht/api http://schranklicht/win&IX=$EVTPART1
palette:selectnumbers,0,1,46,0,lin wled/schranklicht/api http://schranklicht/win&FP=$EVTPART1
effect:selectnumbers,0,1,101,0,lin wled/schranklicht/api http://schranklicht/win&FX=$EVTPART1
eventMap und webCmd:
eventMap /effect 0:Solid/effect 2:Breathe/effect 63:Pride/effect 48:Police/
webCmd rgb:brightness:Solid:Breathe:Pride:Police
Find ich echt super!
Danke und Gruß,
Stefan
Was meinst du mit noch hübscher gemacht usw.. .?
Sehe nix, was schon geposted wurde ?
Meinst du mit Hostname <ds>WLED</ds> ?
Meine Hoffnung war jetzt zu lesen -> Hey, so und so klappt das mit den (bis zu 4 ) nightlight-settern. Thomas du warst bloß zu doof das zu verstehen. :P
Aber warten wir mal ab was die nächsten Updates bezüglich MQTT zeigen.
Sorry, wollte nicht für Verwirrung sorgen.
Kam jetzt erst zum Testen und finde das echt gut.
Ich wollte es nur nochmal sauber hinschreiben. Und anstelle von der http://IP habe ich den Hostnamen den du ja auch vergeben kannst verwendet.
Was meinst du mit Nightlight settern?
Wenn du 4 vordefinierte Nightlight nehmen willst kannst du doch Presets speichern und mit &PL laden.
Das geht auch wunderbar.
Bin selbst gerade am überlegen ob ich zum speichern eines Zustandes lieber mit &PS ein Preset speichere und später mit &PL wieder lade,
oder in FHEM die ganzen werte auslese und danach wieder setze.
Wenn man öfter presets ändert ist nur das Problem dass sie ins ROM geschrieben werden und der irgendwann kaputt geht.
Aber auch das kann man im Coding so anpassen das sie nur im RAM gespeichert werden.
Eigentlich ist &PL und &PS die geschicktere Lösung zum Abspeichern und setzen eines kompletten Sets an Werten.
Oder hab ich da was missverstanden mit den 4 Nighlight Timern?
Gruß,
Stefan
Hab auch gerade Mal einen Esp auf Wled umgestellt, das mit dem Template hat gut geklappt, danke für die Arbeit.
Bei den Api Befehlen reicht die Angabe aber auch so:
effect:selectnumbers,0,1,101,0,lin wled/538e36/api FX=$EVTPART1
Etwas mehr ließe sich ja möglicherweise aus der MQTT Steuerung noch rausholen, aber wahrscheinlich wird man ja eh das meiste über das Webinterface einstellen.
Was mir noch aufgefallen ist, state bleibt ja auf set_on usw stehen und bekommt auch nicht mit wenn man das Gerät über brightness einschaltet, dafür hab ich Mal das eingefügt:
wled/64b5f5/g:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }
Der Status ist im Template auch noch nicht berücksichtigt
wled/64b5f5/status:.* LWT
Unter setList reicht es laut Doku auch so, statt "status on"
on:noArg wled/64b5f5 on
off:noArg wled/64b5f5 off
toggle:noArg wled/64b5f5 t
Habe mal versucht, das in die template-file zu integrieren, bitte um Rückmeldung, ob das so klappt bzw. ob noch was fehlt...
Danke, die Api Befehle könnte aber alle angepasst werden, hab das hier mal gemacht und auch noch dimup und dimdown Befehle hinzugefügt.
#source post: https://forum.fhem.de/index.php/topic,98880.msg995308.html#msg995308
name:wled_controller
filter:TYPE=MQTT2_DEVICE
desc:To control a WLED device, see https://github.com/Aircoookie/WLED/wiki for details).
order:W_01
par:BASE_ID;BASE_ID typically is wled;{ AttrVal("DEVICE","readingList","") =~ m,([^:]+)[/][^/]+[/][^/]+:, ? $1 : undef }
par:DEVNAME;Device name as configured;{ AttrVal("DEVICE","readingList","") =~ m,[^:]+[/]([^/]+)[/][^/]+:, ? $1 : undef }
par:ICON;ICON as set, defaults to hue_filled_iris;{ AttrVal("DEVICE","icon","hue_filled_iris") }
attr DEVICE icon ICON
attr DEVICE setList\
on:noArg BASE_ID/DEVNAME on\
off:noArg BASE_ID/DEVNAME off\
toggle:noArg BASE_ID/DEVNAME t\
rgb:colorpicker,RGB BASE_ID/DEVNAME/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME\
speed:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME/api SX=$EVTPART1\
intensity:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME/api IX=$EVTPART1\
palette:selectnumbers,0,1,46,0,lin BASE_ID/DEVNAME/api FP=$EVTPART1\
effect:selectnumbers,0,1,101,0,lin BASE_ID/DEVNAME/api FX=$EVTPART1\
loadPreset:selectnumbers,0,1,3,0,lin BASE_ID/DEVNAME/api PL=$EVTPART1\
dimup:noArg BASE_ID/DEVNAME/api A=~10\
dimdown:noArg BASE_ID/DEVNAME/api A=~-10
attr DEVICE readingList \
BASE_ID/DEVNAME/status:.* LWT\
BASE_ID/DEVNAME/g:.* brightness\
BASE_ID/DEVNAME/g:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }\
BASE_ID/DEVNAME/c:.* { {"rgb"=>substr("$EVENT",1,6)} }\
BASE_ID/DEVNAME/v:.* api\
BASE_ID/DEVNAME/v:.* { $EVENT =~ m,(?<=<sx>)([\d]+)(?=<\/sx>), ? $1 eq ReadingsVal($NAME,"speed","unknown") ? return : {"speed"=>$1} : return; }\
BASE_ID/DEVNAME/v:.* {$EVENT =~ m,(?<=<ix>)([\d]+)(?=<\/ix>), ? $1 eq ReadingsVal($NAME,"intensity","unknown") ? return : {"intensity"=>$1} : return }\
BASE_ID/DEVNAME/v:.* {$EVENT =~ m,(?<=<fp>)([\d]+)(?=<\/fp>), ? $1 eq ReadingsVal($NAME,"palette","unknown") ? return : {"palette"=>$1} : return }\
BASE_ID/DEVNAME/v:.* {$EVENT =~ m,(?<=<fx>)([\d]+)(?=<\/fx>), ? $1 eq ReadingsVal($NAME,"effect","unknown") ? return :{"effect"=>"$1"} : return }
deletereading -q DEVICE (?!associatedWith).*
attr DEVICE devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
attr DEVICE eventMap /effect 0:Solid/effect 2:Breathe/effect 63:Pride/effect 48:Police/
attr DEVICE webCmd rgb:brightness:Solid:Breathe:Pride:Police
attr DEVICE setStateList on off toggle
attr DEVICE comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
set DEVICE attrTemplate speechcontrol_type_light_255
farewell:template has been applied successfully. <br>Note: webCmd and eventMap are just examples; adopt this to your needs.
attr DEVICE model wled_controller
THX, hatte sowas schon vermutet ::) ...
Ist seit eben im svn!
wie ich sehe gibs wieder neue Funktionen wie effects gleich mal testen nur schade das die Änderungen erst aktiv werden nachdem man das template neu gesetzt hat so muss man halt immer am Ball
bleiben
Zitat von: andre07 am 22 Mai 2020, 01:08:24
[...] nur schade das die Änderungen erst aktiv werden nachdem man das template neu gesetzt hat so muss man halt immer am Ball
bleiben
Na ja, die (gedankliche) Alternative wäre, jeweils "automatisch" das attrTemplate anzuwenden. Mal abgesehen davon, dass das im Moment nicht vorgesehen ist, halte ich das auch nicht für wünschenswert:
- Es ist nicht ausgeschlossen, dass Fehler passieren (ich habe z.B. die wenigsten der Gadgets, für die ich die attrTemplate pflege, und alles immer (theoretisch) auszutesten, geht auch kaum).
- Was attrTemplate liefert, ist für manche auch "nur" ein Startpunkt, um dann weiter zu konfigurieren. Das ist völlig ok, aber es wäre nicht ok, die User-Settings dann jedes Mal zu überschreiben...
Ergo: Wenn es um "neue" Dinge geht, sollte man eben tatsächlich hin und wieder schauen, was es neues gibt oder aktiv mitwirken (wie hier gibt es meistens entsprechende Threads, die auch in den Beschreibungen (?) verlinkt sind...). Dann kommt das ganze "schneller in Form", und danach besteht meistens dann kein Anlaß mehr, irgendwas zu ändern.
(Es sei denn, die API oä. ändert sich, aber dann merkt man ja auch, wenn manches nicht mehr so funktioniert wie vorher).
Just my2ct.
(Aber Danke für das implizite Lob, dass es ganz brauchbar ist, was via attrTemplate so im allg. kommt 8) ).
Zitat... nur schade das die Änderungen erst aktiv werden nachdem man das template neu gesetzt hat so muss man halt immer am Ball
bleiben
Man kann bestimmt etwas basteln was auf global:UPDATE reagiert, und anhand das model Attribut "set device attrTemplate model" absetzt.
Bin nur nicht sicher, ob die Templates immer alle Parameter bestimmen koennen, damit kein Dialog geoeffnet werden muss.
Nicht falsch verstehen: das ist keine Empfehlung, weil sinnvoll, nur eine Ueberlegung, ob es technisch machbar ist.
Na ja, aber das wäre dann auch eher sehr global und würde potentiell "alles" erfassen, selbst wenn die attrTemplate-file gar nicht geändert wäre - ganz abgesehen davon, dass es dann immer noch schwierig wäre rauszufinden, ob denn nun gerade ein bestimmtes template geändert wurde...
Ich könnte ja ggf. die "Meldekultur" noch verbessern, aber bisher war mir das zu aufwändig.
Das "Problem" der User kann ich aber nachvollziehen: Man sieht nirgends, wann ein einzelnes Template das letzte Mal angefaßt wurde. Man müßte also entweder "auf Verdacht" anwenden oder manuell Checken, ob und was sich ggf. geändert hat.
Dazu mal in den Raum geworfen: Es wäre kein Ding der Unmöglichkeit, (nach und nach bzw. eben bei allen künftigen updates) ggf. Infos zur letzten Änderung (z.B. als "lastupdate:", "date:" oder "version:") einzupflegen. Die Frage wäre dann nur, wie der User an die Info kommt. Das könnte man über einen/mehrere setter ("?lastupdate" bzw. "?lastupdates") erledigen: ?lastupdate gäbe das update-Datum des Model des aktuellen Devices aus, ?lastupdates das aller "model" des aktuellen Device-TYPE? Immer vorausgesetzt, die Info ist überhaupt vorhanden?
Vorschlag: Man baut im Befehlsabschnitt des Templates "setreading DEVICE attrTemplateVersion X.YY" ein.
Da der Benutzer diese Befehle nach Template-Auswahl in FHEMWEB sieht, kann er feststellen, ob er die letzte Version hat.
Man sieht auch, wann das Template angewendet wurde.
Das reicht zwar fuer eine automatische Pruefung noch nicht, ich kann aber was einbauen, wenn jemand das haben will.
Klingt nach einem Weg :) .
Wie bereits geschrieben, _glaube_ ich, dass ein Automatismus _in der Anwendung_ keine wirklich gute Lösung ist und sowas am Ende eher Frust erzeugen könnte. Aber das mit der Anzeige des update-Datums auf diesem Weg dürften einige User hilfreich finden, und uns Helfern dürfte das auch weiterhelfen. (Hast du auf die Schnelle eine Idee, wie wir das in den aktuellen files direkt und automatisiert reinlasen könnten? Also immer vor attr DEVICE[^\b]* model bla eine Zeile rein mit "set $1 attrTemplateVersion 20200522 or prior" (mit $1 = DEVICE[^\b]*)?)
(Es gab in letzter Zeit allerdings gar nicht mehr so viel Bewegung, eigentlich kommen wir mit dem feature etwas zu spät, um das gleich ins Bewußtsein der User zu bringen...).
ZitatHast du auf die Schnelle eine Idee, wie wir das in den aktuellen files direkt und automatisiert reinlasen könnten? Also immer vor attr DEVICE[^\b]* model bla eine Zeile rein mit "set $1 attrTemplateVersion 20200522 or prior" (mit $1 = DEVICE[^\b]*)?)
In vim:
:%s/attr \(.*\) model \(.*\)/attr \1 model \2^Msetreading \1 attrTemplateVersion 20200522 or prior<return>
(wobei ^M mit CTRL-V <return> zu erzeugen ist).
Zitat... eigentlich kommen wir mit dem feature etwas zu spät...
Lieber zu spaet als nie :)
Zitat von: rudolfkoenig am 22 Mai 2020, 13:27:04
In vim:
Danke (auch wenn ich vim schon immer "komisch" fand, aber man lernt ja nie aus...).
War revision 22000 :) .
Hallo Stefan,
Zitat von: stefanru am 02 März 2020, 21:30:41
Hab das jetzt mal für mein Schranklicht eingebaut.
Ist echt super. Funktioniert 1A.
ich habe mir auch mal WLED 0.1 auf einen Wemos D1 Mini gepackt, funktioniert soweit.
Nun soll das ganze natürlich aus FHEM heraus über MQTT2_Server angesprochen werden (funktioniert bei mir schon mit zahlreichen tasmota-Aktoren).
Ich habe mir deine Code-Beispiele genommen, allerdings reagiert WLED gar nicht auf diese Kommandos.
Ist denn mein MQTT-Topic so korrekt?
WLED01/Statusdisplay/
(d.h. ich ersetze wled/schranklicht/ durch WLED01/Statusdisplay/)
In WLED habe ich unter Config -> Sync Interfaces folgendes eingetragen:
- Client ID: WLED01
- Device Topic: Statuslicht
- Group Topic: wled/all
Oder muss das Topic so heißen?
wled/WLED01/Statusdisplay/
Wenn ich mit mqtt.fx mitlausche und im WebIF von WLED z.B. Ein/Ausschalte, erscheint dort nur "Statuslicht":
2020-06-22 23:20:05,736 INFO --- MqttFX ClientModel : messageArrived() with topic: Statuslicht/g
2020-06-22 23:20:05,737 INFO --- MqttFX ClientModel : messageArrived() added: message #300 to topic 'Statuslicht/g'
2020-06-22 23:20:05,804 INFO --- MqttFX ClientModel : messageArrived() with topic: Statuslicht/c
2020-06-22 23:20:05,805 INFO --- MqttFX ClientModel : messageArrived() added: message #301 to topic 'Statuslicht/c'
2020-06-22 23:20:05,805 INFO --- MqttFX ClientModel : messageArrived() with topic: Statuslicht/Statuslicht
2020-06-22 23:20:05,805 INFO --- MqttFX ClientModel : messageArrived() added: message #302 to topic 'Statuslicht/Statuslicht'
2020-06-22 23:20:05,806 INFO --- MqttFX ClientModel : messageArrived() with topic: Statuslicht/v
2020-06-22 23:20:05,807 INFO --- MqttFX ClientModel : messageArrived() added: message #303 to topic 'Statuslicht/v'
Viele Grüße,
Heiko
Hallo, gibt es eine Möglichkeit die Segmente zu steuern?
Wenn ja, wie ist da der befehl?
@heikoh81:
Sorry habe das jetzt erst gesehen. Ich hoffe du hast dein Problem gelöst.
Wenn nicht versuch doch das Template das hier für Wled Steuerung erzeugt wurde.
Also du legst ein MQTT2_DEVICE an:
define test mqtt2_device
Dann wählst du im Device bei set test attrTemplate wled_controller
Dann füllst du alles aus und es sollte gehen.
@fabse:
Du meinst Segmente per MQTT?
Das geht indem du HTTP API sendest.
Also per MQTT dieses:
[mqttDeviceTopic]/api
-> Send an API call (using the HTTP API syntax).
Und für Segmente dann einen der HTTP API Befehle nehmen:
Parameter Value Range Description Since Version
&SM= 0 to 9 Set the main segment (values are reported to XML) 0.9.0
&SS= 0 to 9 Select segment to apply THIS api call to 0.9.0
&SV= 0, 1 or 2 Set segment selected (2 unselects others) 0.9.0
&S= 0 to ledcount-1 Set segment start 0.9.0
&S2= 0 to ledcount Set segment stop 0.9.0
&GP= 1 to 255 Set segment grouping 0.9.1
&SP= 0 to 255 Set segment spacing 0.9.1
&RV= 0 or 1 Reverse/Flip Segment direction 0.9.1
&SB= 0 to 255 Segment brightness 0.10.0
Steht alles auch im WLED Wiki.
https://github.com/Aircoookie/WLED/wiki
Gruß,
Stefan
Hallo in die Runde
Mal ne Frage.. Hat das auch schon einer mit einem normalen Mosquitto Server in FHEM eingebunden und nicht mit dem FHEM internen MQTT2-Server?
Zitat von: mbrak am 16 September 2020, 19:37:37
Mal ne Frage.. Hat das auch schon einer mit einem normalen Mosquitto Server in FHEM eingebunden und nicht mit dem FHEM internen MQTT2-Server?
Gegenfrage: Ziel ist
- MQTT_DEVICE? (=> bitte separaten Thread aufmachen, ist eine ganz andere Baustelle, aber prinzipiell _kann_ man das auch passend konfigurieren.)
- Hilfestellung beim Einsatz von MQTT2_CLIENT? (Um das vorhandene attrTemplate einfach nutzen zu können). Dann bitte nach Lektüre der commandref und des Wiki-Artikels zu diesem IO-Modul ggf. auch einen eigenen Thread aufmachen, auch das ist eine ganz andere Baustelle.
Darfst gerne von hier in den betreffenden neuen Thread verlinken ;) .
Ja, ich benutze Mosquitto auf Raspberry und in FEHM den MQTT2_CLIENT, läuft wie geschnitten Brot :-)
Gruß,
Stefan
Hallo zusammen,
ich habe WLED per mqtt2_device über den mqtt2_client an Moquitto angebunden, nach ein bisschen Verwirrung was das Topic anging läuft auch alles perfekt mit FHEM :)
Danke dafür!
Ich habe jetzt versucht das ganze mit der Homebridge zu nutzen und scheinbar klappt da was mit den Werten nicht:
[10/26/2020, 9:05:47 PM] [FHEM] wled_test-brightness not a number: 0
[10/26/2020, 9:05:47 PM] [FHEM] caching: On: false (as boolean; from 'off')
[10/26/2020, 9:05:49 PM] [FHEM] wled_test delaying command Brightness with value 100
[10/26/2020, 9:05:49 PM] [FHEM] wled_test: executing set cmd for On with value true
[10/26/2020, 9:05:49 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20on
2020-10-26 21:05:49 caching: wled_test-state: set_on
2020-10-26 21:05:49 caching: wled_test-brightness: 204
[10/26/2020, 9:05:49 PM] [FHEM] wled_test-brightness not a number: 204
2020-10-26 21:05:49 caching: wled_test-state: on
[10/26/2020, 9:05:49 PM] [FHEM] caching: On: true (as boolean; from 'on')
[10/26/2020, 9:05:50 PM] [FHEM] wled_test: executing set cmd for Brightness with value 100
2020-10-26 21:05:50 caching: wled_test-brightness: 7d52ff
[10/26/2020, 9:05:50 PM] [FHEM] caching: Brightness: 100 (as number; from '7d52ff')
[10/26/2020, 9:05:50 PM] [FHEM] value converted to 7d52ff
[10/26/2020, 9:05:50 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20brightness%207d52ff
2020-10-26 21:05:50 caching: wled_test-brightness: set
[10/26/2020, 9:05:50 PM] [FHEM] wled_test-brightness not a number: set
2020-10-26 21:05:51 caching: wled_test-brightness: 7
[10/26/2020, 9:05:51 PM] [FHEM] wled_test-brightness not a number: 7
[10/26/2020, 9:05:53 PM] [FHEM] wled_test delaying command Brightness with value 88
[10/26/2020, 9:05:53 PM] [FHEM] wled_test: executing set cmd for On with value true
[10/26/2020, 9:05:53 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20on
2020-10-26 21:05:53 caching: wled_test-state: set_on
[10/26/2020, 9:05:53 PM] [FHEM] wled_test delaying command Brightness with value 64
[10/26/2020, 9:05:53 PM] [FHEM] wled_test: executing set cmd for On with value true
[10/26/2020, 9:05:53 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20on
[10/26/2020, 9:05:53 PM] [FHEM] wled_test delaying command Brightness with value 57
[10/26/2020, 9:05:53 PM] [FHEM] wled_test: executing set cmd for On with value true
[10/26/2020, 9:05:54 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20on
[10/26/2020, 9:05:54 PM] [FHEM] wled_test: executing set cmd for Brightness with value 57
2020-10-26 21:05:54 caching: wled_test-brightness: 472f91
[10/26/2020, 9:05:54 PM] [FHEM] caching: Brightness: 56 (as number; from '472f91')
[10/26/2020, 9:05:54 PM] [FHEM] value converted to 472f91
[10/26/2020, 9:05:54 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20brightness%20472f91
2020-10-26 21:05:55 caching: wled_test-brightness: set
[10/26/2020, 9:05:55 PM] [FHEM] wled_test-brightness not a number: set
2020-10-26 21:05:55 caching: wled_test-brightness: 216
[10/26/2020, 9:05:55 PM] [FHEM] wled_test-brightness not a number: 216
2020-10-26 21:05:55 caching: wled_test-state: on
[10/26/2020, 9:05:55 PM] [FHEM] caching: On: true (as boolean; from 'on')
[10/26/2020, 9:06:53 PM] [FHEM] wled_test: executing set cmd for Saturation with value 53
2020-10-26 21:06:53 caching: wled_test-rgb: aN
[10/26/2020, 9:06:53 PM] [FHEM] wled_test-rgb not a number: aN
[10/26/2020, 9:06:53 PM] [FHEM] wled_test-rgb not a number: aN
[10/26/2020, 9:06:53 PM] [FHEM] value converted to aN
[10/26/2020, 9:06:53 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20rgb%20aN
[10/26/2020, 9:06:53 PM] [FHEM] wled_test: executing set cmd for Hue with value 347
[10/26/2020, 9:06:53 PM] [FHEM] converted value is unchanged
2020-10-26 21:06:53 caching: wled_test-rgb: set aN
[10/26/2020, 9:06:53 PM] [FHEM] wled_test-rgb not a number: set aN
[10/26/2020, 9:06:53 PM] [FHEM] wled_test-rgb not a number: set aN
2020-10-26 21:06:53 caching: wled_test-rgb: 00000A
[10/26/2020, 9:06:53 PM] [FHEM] caching: Hue: 239 (as number; from '00000A')
[10/26/2020, 9:06:53 PM] [FHEM] caching: Saturation: 100 (as number; from '00000A')
[10/26/2020, 9:06:55 PM] [FHEM] wled_test: executing set cmd for Saturation with value 95
2020-10-26 21:06:55 caching: wled_test-rgb: aN
[10/26/2020, 9:06:55 PM] [FHEM] value converted to aN
[10/26/2020, 9:06:55 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20rgb%20aN
[10/26/2020, 9:06:55 PM] [FHEM] wled_test-rgb not a number: aN
[10/26/2020, 9:06:55 PM] [FHEM] wled_test-rgb not a number: aN
[10/26/2020, 9:06:55 PM] [FHEM] wled_test: executing set cmd for Hue with value 303
[10/26/2020, 9:06:55 PM] [FHEM] converted value is unchanged
2020-10-26 21:06:55 caching: wled_test-rgb: set aN
[10/26/2020, 9:06:55 PM] [FHEM] wled_test-rgb not a number: set aN
[10/26/2020, 9:06:55 PM] [FHEM] wled_test-rgb not a number: set aN
[10/26/2020, 9:06:55 PM] [FHEM] wled_test: executing set cmd for Saturation with value 100
2020-10-26 21:06:55 caching: wled_test-rgb: aN
[10/26/2020, 9:06:55 PM] [FHEM] value converted to aN
[10/26/2020, 9:06:55 PM] [FHEM] wled_test-rgb not a number: aN
[10/26/2020, 9:06:55 PM] [FHEM] wled_test-rgb not a number: aN
[10/26/2020, 9:06:55 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20rgb%20aN
[10/26/2020, 9:06:55 PM] [FHEM] wled_test: executing set cmd for Hue with value 336
[10/26/2020, 9:06:55 PM] [FHEM] converted value is unchanged
[10/26/2020, 9:07:04 PM] [FHEM] wled_test delaying command Brightness with value 72
[10/26/2020, 9:07:04 PM] [FHEM] wled_test: executing set cmd for On with value true
[10/26/2020, 9:07:04 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20on
2020-10-26 21:07:04 caching: wled_test-state: set_on
[10/26/2020, 9:07:05 PM] [FHEM] wled_test: executing set cmd for Brightness with value 72
2020-10-26 21:07:05 caching: wled_test-brightness: aN
[10/26/2020, 9:07:05 PM] [FHEM] value converted to aN
[10/26/2020, 9:07:05 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20brightness%20aN
[10/26/2020, 9:07:05 PM] [FHEM] wled_test-brightness not a number: aN
2020-10-26 21:07:05 caching: wled_test-brightness: set
[10/26/2020, 9:07:05 PM] [FHEM] wled_test-brightness not a number: set
2020-10-26 21:07:05 caching: wled_test-brightness: 0
2020-10-26 21:07:05 caching: wled_test-state: off
[10/26/2020, 9:07:05 PM] [FHEM] caching: On: false (as boolean; from 'off')
[10/26/2020, 9:07:05 PM] [FHEM] wled_test-brightness not a number: 0
2020-10-26 21:07:05 caching: wled_test-rgb: 00000A
[10/26/2020, 9:07:05 PM] [FHEM] caching: Hue: 239 (as number; from '00000A')
[10/26/2020, 9:07:05 PM] [FHEM] caching: Saturation: 100 (as number; from '00000A')
[10/26/2020, 9:07:15 PM] [FHEM] wled_test: executing set cmd for On with value true
[10/26/2020, 9:07:15 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20on
2020-10-26 21:07:15 caching: wled_test-state: set_on
2020-10-26 21:07:15 caching: wled_test-brightness: 216
2020-10-26 21:07:15 caching: wled_test-state: on
[10/26/2020, 9:07:15 PM] [FHEM] caching: On: true (as boolean; from 'on')
[10/26/2020, 9:07:15 PM] [FHEM] wled_test-brightness not a number: 216
[10/26/2020, 9:07:21 PM] [FHEM] wled_test: executing set cmd for Saturation with value 20
2020-10-26 21:07:21 caching: wled_test-rgb: aN
[10/26/2020, 9:07:21 PM] [FHEM] wled_test-rgb not a number: aN
[10/26/2020, 9:07:21 PM] [FHEM] wled_test-rgb not a number: aN
[10/26/2020, 9:07:21 PM] [FHEM] value converted to aN
[10/26/2020, 9:07:21 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20rgb%20aN
[10/26/2020, 9:07:21 PM] [FHEM] wled_test: executing set cmd for Hue with value 222
[10/26/2020, 9:07:21 PM] [FHEM] converted value is unchanged
2020-10-26 21:07:21 caching: wled_test-rgb: set aN
[10/26/2020, 9:07:21 PM] [FHEM] wled_test-rgb not a number: set aN
[10/26/2020, 9:07:21 PM] [FHEM] wled_test-rgb not a number: set aN
[10/26/2020, 9:07:22 PM] [FHEM] wled_test delaying command Brightness with value 56
[10/26/2020, 9:07:22 PM] [FHEM] wled_test: executing set cmd for On with value true
[10/26/2020, 9:07:22 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20on
2020-10-26 21:07:22 caching: wled_test-state: set_on
[10/26/2020, 9:07:22 PM] [FHEM] wled_test delaying command Brightness with value 97
[10/26/2020, 9:07:22 PM] [FHEM] wled_test: executing set cmd for On with value true
[10/26/2020, 9:07:22 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20on
[10/26/2020, 9:07:23 PM] [FHEM] wled_test: executing set cmd for Brightness with value 97
2020-10-26 21:07:23 caching: wled_test-brightness: aN
[10/26/2020, 9:07:23 PM] [FHEM] value converted to aN
[10/26/2020, 9:07:23 PM] [FHEM] executing: http://192.168.178.xxx:xxx/fhem?cmd=set%20wled_test%20brightness%20aN
[10/26/2020, 9:07:23 PM] [FHEM] wled_test-brightness not a number: aN
2020-10-26 21:07:23 caching: wled_test-brightness: set
[10/26/2020, 9:07:23 PM] [FHEM] wled_test-brightness not a number: set
2020-10-26 21:07:23 caching: wled_test-brightness: 0
2020-10-26 21:07:23 caching: wled_test-state: off
[10/26/2020, 9:07:23 PM] [FHEM] caching: On: false (as boolean; from 'off')
[10/26/2020, 9:07:23 PM] [FHEM] wled_test-brightness not a number: 0
Lustigerweise wird die Lampe auch dunkler, wenn man Siri sagt, dass sie sie heller machen soll?!
Das Attribut homebridgeMapping ist ja per default schon gesetzt, kann es sein dass bei dem Mapping was nicht stimmt?
Liegt das an mir?
Ich habe aber außer der Raumzuweisung und dem Sirinamen nichts geändert.
defmod wled_test MQTT2_DEVICE
attr wled_test DbLogExclude .*
attr wled_test IODev mqtt2_client
attr wled_test alias wled_test
attr wled_test comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
attr wled_test devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
attr wled_test eventMap /effect 0:Solid/effect 2:Breathe/effect 63:Pride/effect 48:Police/
attr wled_test genericDeviceType light
attr wled_test homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
attr wled_test icon hue_filled_iris
attr wled_test model wled_controller
attr wled_test readingList wled/badspiegel/status:.* LWT\
wled/badspiegel/g:.* brightness\
wled/badspiegel/g:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }\
wled/badspiegel/c:.* { {"rgb"=>substr("$EVENT",1,6)} }\
wled/badspiegel/v:.* api\
wled/badspiegel/v:.* { $EVENT =~ m,(?<=<sx>)([\d]+)(?=<\/sx>), ? $1 eq ReadingsVal($NAME,"speed","unknown") ? return : {"speed"=>$1} : return;; }\
wled/badspiegel/v:.* {$EVENT =~ m,(?<=<ix>)([\d]+)(?=<\/ix>), ? $1 eq ReadingsVal($NAME,"intensity","unknown") ? return : {"intensity"=>$1} : return }\
wled/badspiegel/v:.* {$EVENT =~ m,(?<=<fp>)([\d]+)(?=<\/fp>), ? $1 eq ReadingsVal($NAME,"palette","unknown") ? return : {"palette"=>$1} : return }\
wled/badspiegel/v:.* {$EVENT =~ m,(?<=<fx>)([\d]+)(?=<\/fx>), ? $1 eq ReadingsVal($NAME,"effect","unknown") ? return :{"effect"=>"$1"} : return }
attr wled_test room System->Homekit,System->Test
attr wled_test setList on:noArg wled/badspiegel on\
off:noArg wled/badspiegel off\
toggle:noArg wled/badspiegel t\
rgb:colorpicker,RGB wled/badspiegel/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 wled/badspiegel\
speed:colorpicker,BRI,0,1,255 wled/badspiegel/api SX=$EVTPART1\
intensity:colorpicker,BRI,0,1,255 wled/badspiegel/api IX=$EVTPART1\
palette:selectnumbers,0,1,46,0,lin wled/badspiegel/api FP=$EVTPART1\
effect:selectnumbers,0,1,101,0,lin wled/badspiegel/api FX=$EVTPART1\
loadPreset:selectnumbers,0,1,3,0,lin wled/badspiegel/api PL=$EVTPART1\
dimup:noArg wled/badspiegel/api A=~10\
dimdown:noArg wled/badspiegel/api A=~-10
attr wled_test setStateList on off toggle
attr wled_test siriName Badspiegel
attr wled_test webCmd rgb:brightness:Solid:Breathe:Pride:Police
(Funfact am Rande: Man sollte nicht versuchen über Siri den Effekt "police" aufzurufen...)
Mit dem u. a. userReadings erhält man zwei zusätzliche Readings (effectname (aktuell gewählter Effekt) und effectnumber (Anzahl der verfügbaren Effekte)), ich weiß das braucht jeder ::)
Ich mein festgestellt zu haben das der Controller nicht immer unter dem Hostnamen erreichbar ist, hab aber auch keinen Kondensator und Widerstand verbaut, kann nicht ausschliessen das es daran liegt, über IP hab ich keine Erreichbarkeitsprobleme.
Bin mir nicht sicher ob userReadings mit setreading der richtige Weg ist, klappt aber alles, es gibt Events beim auswählen eines Effekts bei effectname und effectnumber mit setreading.
Wenn man mit periodicCmd in period auf Events reagieren könnte, wär es auch über einen getter umsetzbar und cool.
Schade das man in FHEM-Widget kein Perl verwenden kann, hier wär mit effectnumber sowas möglich das der setter nicht statisch ist:
effect:selectnumbers,0,1,{my $en=ReadingsVal($NAME,"effectnumber","0");$en.",0,lin wled/538e36/api FX=".$EVTPART1}
effectname:effect.* {my $h="http://".InternalVal($NAME,'CID','0')."/json";$h=~s/_/-/g; HttpUtils_NonblockingGet( {url=>"$h", callback=>sub($$$) { my ($hash, $err, $data) = @_; $data =~ m,effects..\[([^[]*?)],;my $s=$1;$s=~s/"//g;$s=~ s/\n//g;my @a= split(/,/ , $s);my $i = ReadingsNum($NAME,"effect","1");;my $an=@a;$a=$a[$i];fhem("setreading $NAME effectname $a;setreading $NAME effectnumber $an")}
Kann das mal wer testen ?
Gruß
Thomas
Hi TomLee,
teste es gerne. Bin mir gerade nicht ganz sicher wo isch das eintragen soll?
Bei userReadings oder als eventMap? Sorry für die blöde Frage.
@frakadings:
Ich habe nur Alexa. Folgendes Mapping wurde bei mir erstellt
homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
Das hast du auch. Wie kannst du damit Effekte steuern?
Das Problem das du beschreibst habe ich auch. Alexa kann zwar an und ausschalten der rest geht nicht richtig.
Seltsame Werte erscheinen im WLED Device:
brightness set
effect 0
intensity 128
palette 0
rgb set aN
Bin mir nicht ganz sicher. Eventuell sollte nur über RGB gesteuert werden.
Wenn ich das ganze HomebridgeMapping entferne und Alexa neu starte dann funktioniert es einwandfrei.
Ich glaube dann wird nur RGB als Steuerungsreading genommen.
An/Aus geht natürlich auch.
Gruß,
Stefan
ja, in userReadings.
Bei mir klappt das mit dem Hostnamen nur eine unbestimmte Zeit lang nach einem restart des Controllers.
Wenn ich die IP nehme klappts immer:
effectname:effect.* {my $h="http://192.168.XXX.XX/json";$h=~s/_/-/g; HttpUtils_NonblockingGet( {url=>"$h", callback=>sub($$$) { my ($hash, $err, $data) = @_; $data =~ m,effects..\[([^[]*?)],;my $s=$1;$s=~s/"//g;$s=~ s/\n//g;my @a= split(/,/ , $s);my $i = ReadingsNum($NAME,"effect","1");;my $an=@a;$a=$a[$i];fhem("setreading $NAME effectname $a;setreading $NAME effectnumber $an")} }) }
Ich nutze eigentlich nur einen Effekt und das auch erst seit letzter Woche, mit Alexa zu steuern bin ich noch gar nicht auf die Idee gekommen.
Hab ich jetzt mal ausprobiert, aber nicht mit alexa-fhem sondern mit dem "Emulator" der unter Config->Sync Interfaces->Alexa Voice Assistant zu aktivieren ist.
Damit klappt ein/aus, Helligkeit und Farbe.
Ich meine wenn man die Helligkeit mit alexa-fhem steuern möchte dann müssten wir einfach nur den brightness-setter in pct umbenennen, test ich aber später auch mal.
Was die Steuerung der Farben mit alexa-fhem angeht, halt ich mich raus das mir zu hoch :P
das mit dem pct-setter war Käse.
Was mir jetzt aufgefallen ist das mit dem homebridgemapping merkwürdigerweise die Sättigung statt brightness gesteuert wird.
Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
Das hab ich daran bemerkt das sich der Schieberegler bewegt hat rechts vom RGB-Widget als das "geöffnet" war.
100 % über Alexa/APP gesteuert sind 100% Sättigung, 0 % sind 0% Sättigung :o
Hi TomLee,
ja das mit der Namensauflösung habe ich bei mir auch.
Das mit brightness und saturation liegt glaube ich daran dass die Übergabe an WLED im Json dann doch nur der RGB String sein sollte.
Wie gesagt ohne Mapping geht es bei mir einwandfrei. Sowohl Farbe als auch Helligkeit.
Ich schätze dass dann nur RGB übergeben wird.
Ich verwende aber auch das WLED Interne Alexa und nicht FHEM.
Habe deine Zeile bei mir als:
userReadings
effectname:effect.* {my $h="http://192.168.69.38/json";$h=~s/_/-/g; HttpUtils_NonblockingGet( {url=>"$h", callback=>sub($$$) { my ($hash, $err, $data) = @_; $data =~ m,effects..\[([^[]*?)],;my $s=$1;$s=~s/"//g;$s=~ s/\n//g;my @a= split(/,/ , $s);my $i = ReadingsNum($NAME,"effect","1");;my $an=@a;$a=$a[$i];fhem("setreading $NAME effectname $a;setreading $NAME effectnumber $an")} }) }
eingetragen.
Was sollte da denn passieren?
Bei mir ist kein Reading dazu gekommen.
Gruß,
Stefan
Nachdem du einen Effekt ausgewählt hast mit dem effect-setter sollten die zwei erwähnten neuen Readings erstellt werden, natürlich musst du FHEMWEB beim ersten mal im Browser aktualisieren, danach sollte sich nach jeder Auswahl eines Effekts das Reading effectname aktualisieren und den aktuell gewählten Effektnamen beinhalten und auch das Reading effectnumber (abhängig von den gesetzten event-* bzw. timestamp.*-Attributen)
Hi TomLee,
ok jetzt verstehe ich.
Ja wenn ich einen Effekt auswähle kann ich nun Effectnumber und Effectname sehen.
Irgendwas läuft aber schief. Die 2 Readings aktualisieren sich ständig.
Und dann hats mir das Wled Device zerlegt.
Verstehe ich auch nicht, aber ich komm nicht mehr drauf. Neu flashen ging zwar, aber der Fehler dass es hängt und nicht mehr zugreifbar ist bleibt.
Ich werde es mal komplett löschen und neu flashen.
Sehr seltsam. Hatte noch nie solch ein Problem damit.
Dein User Reading kann das ja aber auch nicht gewesen sein.
Ich melde mich wieder wenn ich es wieder laufen habe...
Gruß,
Stefan
Ok,
habe rausgefunden was los war. Alle Einstellungen waren weg. Sehr seltsam.
@TomLee: Kannst du nochmal schauen ob ich das richtig hatte?
userReadings
effectname:effect.* {my $h="http://192.168.69.38/json";$h=~s/_/-/g; HttpUtils_NonblockingGet( {url=>"$h", callback=>sub($$$) { my ($hash, $err, $data) = @_; $data =~ m,effects..\[([^[]*?)],;my $s=$1;$s=~s/"//g;$s=~ s/\n//g;my @a= split(/,/ , $s);my $i = ReadingsNum($NAME,"effect","1");;my $an=@a;$a=$a[$i];fhem("setreading $NAME effectname $a;setreading $NAME effectnumber $an")} }) }
Hat sich irgendwie seltsam verhalten und ist immer hin und her gepingt.
Gruß,
Stefan
Hier mal meine Definition, hab keine Probleme damit:
defmod MQTT2_WLED_TV MQTT2_DEVICE WLED_538e36
attr MQTT2_WLED_TV userattr lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0
attr MQTT2_WLED_TV IODev MQTT2_Server
attr MQTT2_WLED_TV alexaName streifen
attr MQTT2_WLED_TV comment "http://".InternalVal($NAME,'CID','0')."
attr MQTT2_WLED_TV devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
attr MQTT2_WLED_TV event-on-change-reading brightness,effect,intensity,palette,rgb,speed,state,effectname,effectnumber
attr MQTT2_WLED_TV eventMap /effect 0:Solid/effect 2:Breathe/effect 63:Pride/loadPreset 1:Fire/
attr MQTT2_WLED_TV genericDeviceType light
attr MQTT2_WLED_TV group Wohnzimmer
attr MQTT2_WLED_TV homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
attr MQTT2_WLED_TV icon hue_filled_iris
attr MQTT2_WLED_TV model wled_controller
attr MQTT2_WLED_TV readingList wled/538e36/status:.* LWT\
wled/538e36/g:.* brightness\
wled/538e36/g:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }\
wled/538e36/c:.* { {"rgb"=>substr("$EVENT",1,6)} }\
wled/538e36/v:.* api\
wled/538e36/v:.* { $EVENT =~ m,(?<=<sx>)([\d]+)(?=<\/sx>), ? $1 eq ReadingsVal($NAME,"speed","unknown") ? return : {"speed"=>$1} : return;; }\
wled/538e36/v:.* {$EVENT =~ m,(?<=<ix>)([\d]+)(?=<\/ix>), ? $1 eq ReadingsVal($NAME,"intensity","unknown") ? return : {"intensity"=>$1} : return }\
wled/538e36/v:.* {$EVENT =~ m,(?<=<fp>)([\d]+)(?=<\/fp>), ? $1 eq ReadingsVal($NAME,"palette","unknown") ? return : {"palette"=>$1} : return }\
wled/538e36/v:.* {$EVENT =~ m,(?<=<fx>)([\d]+)(?=<\/fx>), ? $1 eq ReadingsVal($NAME,"effect","unknown") ? return :{"effect"=>"$1"} : return }
attr MQTT2_WLED_TV room MQTT2_DEVICE,Wohnzimmer
attr MQTT2_WLED_TV setList on:noArg wled/538e36 on\
off:noArg wled/538e36 off\
toggle:noArg wled/538e36 t\
rgb:colorpicker,RGB wled/538e36/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 wled/538e36\
speed:colorpicker,BRI,0,1,255 wled/538e36/api SX=$EVTPART1\
intensity:colorpicker,BRI,0,1,255 wled/538e36/api IX=$EVTPART1\
palette:selectnumbers,0,1,46,0,lin wled/538e36/api &T=1FP=$EVTPART1\
effect:selectnumbers,0,1,115,0,lin wled/538e36/api FX=$EVTPART1\
loadPreset:selectnumbers,0,1,3,0,lin wled/538e36/api PL=$EVTPART1\
dimup:noArg wled/538e36/api A=~10\
dimdown:noArg wled/538e36/api A=~-10\
flash:noArg {my $v=ReadingsVal($NAME,"rgb","FFA000");;ReadingsVal($NAME,"state","off") eq "on"?fhem("set $NAME rgb FFFFFF;;sleep 0.5;;set $NAME rgb $v"):fhem("set $NAME toggle;;set $NAME rgb FFFFFF;;sleep 0.5;;set $NAME toggle")}
attr MQTT2_WLED_TV setStateList on off toggle effect loadPreset dimdown dimup
attr MQTT2_WLED_TV userReadings effectname:effect.* {my $h="http://192.168.188.52/json";;$h=~s/_/-/g;; HttpUtils_NonblockingGet( {url=>"$h", callback=>sub($$$) { my ($hash, $err, $data) = @_;; $data =~ m,effects..\[([^[]*?)],;;my $s=$1;;$s=~s/"//g;;$s=~ s/\n//g;;my @a= split(/,/ , $s);;my $i = ReadingsNum($NAME,"effect","1");;;;my $an=@a;;$a=$a[$i];;fhem("setreading $NAME effectname $a;;setreading $NAME effectnumber $an")} }) }
attr MQTT2_WLED_TV webCmd rgb:brightness:effect:Solid:Breathe:Pride:Fire:flash
setstate MQTT2_WLED_TV on
setstate MQTT2_WLED_TV 2021-01-07 17:09:29 LWT online
setstate MQTT2_WLED_TV 2021-01-07 17:09:29 api <?xml version="1.0" ?><vs><ac>128</ac><cl>255</cl><cl>160</cl><cl>0</cl><cs>0</cs><cs>0</cs><cs>0</cs><ns>0</ns><nr>1</nr><nl>0</nl><nf>1</nf><nd>60</nd><nt>0</nt><fx>45</fx><sx>128</sx><ix>128</ix><fp>0</fp><wv>0</wv><ws>0</ws><ps>1</ps><cy>0</cy><ds>WLED</ds><ss>0</ss></vs>
setstate MQTT2_WLED_TV 2021-01-07 17:09:29 brightness 128
setstate MQTT2_WLED_TV 2021-01-06 00:37:37 effect 45
setstate MQTT2_WLED_TV 2021-01-06 00:37:37 effectname Fire Flicker
setstate MQTT2_WLED_TV 2021-01-06 00:37:37 effectnumber 116
setstate MQTT2_WLED_TV 2021-01-02 20:27:51 intensity 128
setstate MQTT2_WLED_TV 2021-01-02 20:27:51 palette 0
setstate MQTT2_WLED_TV 2021-01-05 19:03:31 pct set
setstate MQTT2_WLED_TV 2021-01-07 17:09:29 rgb FFA000
setstate MQTT2_WLED_TV 2021-01-02 20:27:51 speed 128
setstate MQTT2_WLED_TV 2021-01-07 17:09:29 state on
wie bringe ich den Status dazu mir den Online Status auch anzuzeigen? Wie bei den anderen MQTT2 auch?
Es gibt doch das LWT-Reading wie in den "anderen" MQTT2-Devices in irgendeiner Form auch.
Die Frage die ich mir dabei stelle ( ohne mir jetzt den Traffic angeschaut zu haben), warum der WLED-Controller kein offline in dem Zweig wled/<cid>/status "meldet", wenn man die Spannungsversorgung oder das WiFi kappt, wie bei den anderen MQTT2-Devices ?
Auf die Schnelle find ich übrigens den status-Pfad gerade gar nicht dokumentiert ?
Zitat von: TomLee am 29 Juni 2021, 17:03:52
Es gibt doch das LWT-Reading wie in den "anderen" MQTT2-Devices in irgendeiner Form auch.
Das Problem wäre dann, dass der ESP kein "echtes LWT" sendet...
Zitat
Die Frage die ich mir dabei stelle ( ohne mir jetzt den Traffic angeschaut zu haben), warum der WLED-Controller kein offline in dem Zweig wled/<cid>/status "meldet", wenn man die Spannungsversorgung oder das WiFi kappt, wie bei den anderen MQTT2-Devices ?
Bei "echtem LWT" ist es so, dass die "offline"-Meldung vom Server (!) erzeugt (genauer: dann ausgeliefert) wird, wenn sich der Client nicht rechtzeitig - wie angekündigt - meldet.
ZitatBei "echtem LWT" ist es so, dass die "offline"-Meldung vom Server (!) erzeugt (genauer: dann ausgeliefert) wird, wenn sich der Client nicht rechtzeitig - wie angekündigt - meldet.
Noch etwas genauer :)
Das vom Client hinterlegte LWT wird vom Server publiziert (publish), wenn die Verbindung zum Client unterbrochen ist.
Die Verbindung kann auch vom Server beendet werden, wenn der Client sich nicht an seinem keepalive Versprechen haelt.
Sry, das mit dem LWT hatte ich mir nicht richtig angeschaut (eigentlich war ich auf dem Weg zur Dusche und dann schnell, schnell mal am Controller gespielt wegen der Frage).
Es erfolgt doch ein offline nach Zeit X, also erster Fehler war das ich länger hätte warten sollen und zweiter Denkfehler das ich FHEMWEB hätte im Browser aktualisieren müssen (weil ich eine Liste von Readings in eor angegeben habe ohne LWT siehe #101) ::)
Zu der Frage :
Zitat
wie bringe ich den Status dazu mir den Online Status auch anzuzeigen? Wie bei den anderen MQTT2 auch?
Mit der farbigen Glühlampe könnte man es so lösen (ist nicht von mir, ist angepasst abgekupfert) und gefällt mir nicht, da bei Auswahl einer Farbe Code kurz angezeigt wird statt der Glühlampe (schließe aber nicht aus das mans auch anders/richtig/ohne dieses Verhalten lösen kann):
attr <DEVICENAME> devStateIcon {my $os = ReadingsVal($name,"LWT","offline") eq "online" ? "gruen" : "rot";;\
my $cd = Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" );;\
$cd =~ s/.*:([^:]+):.*/$1/;;\
'<div>'.FW_makeImage("10px-kreis-".$os)."<a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($cd)."</a></div>"}
Oder so, ganz simpel, ohne der farbigen Glühlampe dann halt:
attr <DEVICENAME> devStateIcon online:10px-kreis-gruen offline:10px-kreis-rot
attr <DEVICENAME> stateFormat LWT\
state
Zum ausprobieren den gezeigten Code wie er ist einfach in die Kommandozeile werfen, nur <DEVICENAME> ersetzen.
edit:
das Beispiel mit stateFormat kann man doch nicht einfach so über die Kommandozeile eingeben.
Das dann entweder über das
+ => Raw-Editor eingeben oder unten in irgendeinem Device über
Raw definition den Raw-Editor aufrufen, den kompletten Code entfernen und den gezeigten Code einsetzen und mit
execute commands bestätigen.
nochmal edit:
Bei dem Beispiel mit der farbigen Glühlampe kann man die div auch weglassen:
attr <DEVICENAME> devStateIcon {my $os = ReadingsVal($name,"LWT","offline") eq "online" ? "gruen" : "rot";;\
my $cd = Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" );;\
$cd =~ s/.*:([^:]+):.*/$1/;;\
FW_makeImage("10px-kreis-".$os)."<a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($cd)."</a>"}
Hallo zusammen,
ich würde gerne mein Wled via MQTT2 oder html einen kompletten neuen Satz an Werten übergeben.
Und zwar brightness, effect, intensity, palette, rgb, speed und state also alles, um bestimmte Effekte einzuschalten.
Kann ich das mit einem set Befehl machen?
Wenn ja, wie?
Wenn nein, wie dann? myUtils?
danke
Hallo,
an bspw. dem setList-Eintrag flash in #101 kannst dir ableiten wie man sowas in setList umsetzen könnte.
Gruß
Thomas
das habe ich schon gesehen, aber kann es nicht lesen ;)
die setList ist ja im template schon vorhanden:
on:noArg wled/garage on
off:noArg wled/garage off
toggle:noArg wled/garage t
rgb:colorpicker,RGB wled/garage/col #$EVTPART1
brightness:colorpicker,BRI,0,1,255 wled/garage
speed:colorpicker,BRI,0,1,255 wled/garage/api SX=$EVTPART1
intensity:colorpicker,BRI,0,1,255 wled/garage/api IX=$EVTPART1
palette:selectnumbers,0,1,46,0,lin wled/garage/api FP=$EVTPART1
effect:selectnumbers,0,1,101,0,lin wled/garage/api FX=$EVTPART1
loadPreset:selectnumbers,0,1,3,0,lin wled/garage/api PL=$EVTPART1
dimup:noArg wled/garage/api A=~10
dimdown:noArg wled/garage/api A=~-10
ich will jetzt folgendes schalten:
brightness 255
effect 11
intensity 125
palette 2
rgb FF0000
speed 240
state on
das ganze will ich auch noch mit 2 anderen Einstellungen machen, also insgesamt 3 voreinstellungen per set MQTT senden.
wie mach ich das?
So
deinsettername:noArg {fhem("set $NAME brightness 255;set $NAME effect 11;set $NAME intensity 125;set $NAME palette 2;set $NAME rgb FF0000;set $NAME speed 240;set $NAME on")}
?
cool, genau so.
jetzt verstehe ich auch den Beitrag #101
Danke nochmal!
Dank der von Rudi gemachten Erweiterung in MQTT2_SERVER ist nun die IP Adresse des jeweiligen MQTT2_DEVICE Teil des Internals "<IODev>_CONN".
Rudi hat auch die SetExtensions so erweitert dass man nun den Inhalt von Widgets dynamisch erstellten kann.
Ich habe Beides gleich mal dafür verwendet um bei WLED die vorhandenen "effects" und "palettes" per Namen auswählbar zu machen.
Somit ist es nun möglich die vorhandenen Effekte anhand ihrer Nummer (Setter "effect") oder anhand ihres Namens (Setter "effectname") auszuwählen. Das Gleiche auch mit den vorhandenen Paletten. Beim Setzen anhand der Nummer wird auch das Reading für den Namen richtig gesetzt und umgekehrt.
Leider ist der Code dafür etwas komplexer geworden und erfordert zwei Funktionen in der "99_myUtils.pm".
Hier mal die nötigen Anpassungen:
1. Diese beiden Funktionen in die Datei "99_myUtils.pm" am Ende vor der schliessenden "1;" einfügen:
2. Nun beim WLED MQTT2_DEVICE diese 4 Zeilen für die Setter (effect,effectname,palette,palettename) im Attribut "setList" ergänzen bzw. ändern:
3. Diese beiden Zeilen im Attribut "userReadings" hinzufügen:
Damit nun alles wie gewünscht funktioniert ist es nötig mindestens pro Palette und pro Effekt jeweils 1x eine Palette/Effekt mit ihrer Nummer aufzurufen. Also z.B.:
set <WLED> effect 1; set <WLED> palette 1
Nun können alle Effekte und Paletten mit ihren Namen (Setter "effectname" und "palettename") aufgerufen werden.
Etwas Schwierigkeiten gab es mit dem Effekt "Sparkle+" als Setter, weil das "+" am Ende natürlich in RegEx eine eigene Bedeutung hat. Deshalb habe ich das "+" kurzerhand durch "Plus" ersetzt.
Für die einfachere Bedienung in FHEMWEB kann man sich noch das Attribut "webCmd" setzen auf z.B.:
palettename:effectname:speed:intensity:rgb:brightness
Das Attribut "eventMap" kann man nun löschen.
Ich hoffe das kann noch jemand gebrauchen.
Gruß
Dan
Zitat von: DeeSPe am 05 Dezember 2021, 22:22:20
1. Diese beiden Funktionen in die Datei "99_myUtils.pm" am Ende vor der schliessenden "1;" einfügen:
sub WLED_getNames {
my $dev = shift // return;
my $na = shift // return;
my $ip = (split("_",InternalVal($dev,"m2s_CONN",undef)))[1] // return;
my $chash = $defs{$dev};
my $nas = $na."s";
HttpUtils_NonblockingGet( {
url=>"http://$ip/json",
callback=>sub($$$) {
my ($hash,$err,$data) = @_;
if ($data =~ /$nas..\[([^[]*?)]/) {
my $s = $1;
$s =~ s/["\n]//g;
$s =~ s/[\s\&]/_/g;
$s =~ s/\+/Plus/g;
my @r = split(/,/,$s);
readingsBeginUpdate($chash);
readingsBulkUpdateIfChanged($chash,".".$nas."count",(scalar @r)-1);
readingsBulkUpdateIfChanged($chash,".".$nas,$s);
readingsEndUpdate($chash,0);
readingsSingleUpdate($chash,$na."name",$r[ReadingsNum($dev,$na,0)],1);
}
}
} )
}
sub WLED_setName($$$) {
my $dev = shift // return;
my $read = shift // return;
my $val = shift // return;
my $arr = ReadingsVal($dev,".".$read."s","") // return;
my $wled = lc(InternalVal($dev,"CID",""));
$wled =~ s/_/\//;
my $top = $wled."/api F";
$top .= $read eq "effect"?"X=":"P=";
return $top.$val if ($val =~ /^\d\d?\d?$/);
my $id;
my $i = 0;
for (split(",",$arr)) {
if ($_ ne $val) {
$i++;
next;
} else {
$id = $i;
last;
}
}
return $top.$id;
}
Danke Dan!
kann es sein das in der Zeile
readingsSingleUpdate($chash,$na."name",$r[ReadingsNum($dev,$na,0)],1);
ein Fehler ist?
$r wurde nicht definiert bzw gehört da ein '.'?
Zitat von: australien am 07 Dezember 2021, 10:22:14
Danke Dan!
kann es sein das in der Zeile
readingsSingleUpdate($chash,$na."name",$r[ReadingsNum($dev,$na,0)],1);
ein Fehler ist?
$r wurde nicht definiert bzw gehört da ein '.'?
Es funktioniert so wie es soll mit diesem Code.
Oder hast du ein konkretes Problem dass es nicht funktioniert?
Es wurde doch "@r" definiert. Auf Elemente in einem Array greift man dann mit "$r[X]" zu.
Gruß
Dan
Komisch, jetzt schaut es besser aus.
Bei den Auswahlfeldern war nur verschiedener Code vorhanden, jetzt nicht mehr. Aber dafür im ersten nur mehr Default und im zweiten Solid und Police.
Keine weiteren Effecte vorhanden.
Zitat von: australien am 07 Dezember 2021, 10:45:55
Komisch, jetzt schaut es besser aus.
Bei den Auswahlfeldern war nur verschiedener Code vorhanden, jetzt nicht mehr. Aber dafür im ersten nur mehr Default und im zweiten Solid und Police.
Keine weiteren Effecte vorhanden.
Ich zitiere mich mal selbst als Antwort darauf.
Zitat von: DeeSPe am 05 Dezember 2021, 22:22:20
Damit nun alles wie gewünscht funktioniert ist es nötig mindestens pro Palette und pro Effekt jeweils 1x eine Palette/Effekt mit ihrer Nummer aufzurufen. Also z.B.:
set <WLED> effect 1; set <WLED> palette 1
Gruß
Dan
P.S. Hattest Du auch Dein FHEM aktualisiert?
Gerade ein update durchgeführt und auch der Erstbefehl aus geführt.
ein List meines Gerätes schaut so aus
Internals:
CID WLED_garage
DEF WLED_garage
DEVICETOPIC MQTT2_WLED_garage
FUUID 60ad397f-f33f-fbda-41e4-fb1449c4abcdd91d
IODev myMQTT2
LASTInputDev myMQTT2
MSGCNT 44
NAME MQTT2_WLED_garage
NR 791
STATE off
TYPE MQTT2_DEVICE
myMQTT2_CONN myMQTT2_10.68.0.165_11839
myMQTT2_MSGCNT 44
myMQTT2_TIME 2021-12-07 10:55:17
READINGS:
2021-12-07 10:23:02 IODev myMQTT2
2021-12-07 10:55:16 LWT online
2021-12-07 10:55:17 api <?xml version="1.0" ?><vs><ac>0</ac><cl>255</cl><cl>0</cl><cl>0</cl><cs>0</cs><cs>0</cs><cs>0</cs><ns>0</ns><nr>1</nr><nl>0</nl><nf>1</nf><nd>60</nd><nt>0</nt><fx>11</fx><sx>216</sx><ix>125</ix><fp>2</fp><wv>0</wv><ws>0</ws><ps>0</ps><cy>0</cy><ds>WLED</ds><ss>0</ss></vs>
2021-09-07 18:48:26 attrTemplateVersion 20200522 or prior
2021-12-07 10:55:16 brightness 0
2021-12-07 10:54:37 effect 11
2021-12-07 10:44:05 effectname set effect 48
2021-12-07 10:54:37 intensity 125
2021-12-07 10:54:37 palette 2
2021-12-06 18:49:44 palettename set "Default"))))}
2021-12-07 10:55:16 rgb FF0000
2021-12-07 10:54:37 speed 216
2021-09-10 16:11:22 spot set
2021-12-07 10:55:16 state off
2021-09-10 16:08:40 streifen_gruen set
Attributes:
alias MQTT2_WLED_garage
comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
eventMap /effect 0:Solid/effect 2:Breathe/effect 63:Pride/effect 48:Police
genericDeviceType light
homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
icon hue_filled_iris
model wled_controller
readingList wled/garage/status:.* LWT
wled/garage/g:.* brightness
wled/garage/g:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }
wled/garage/c:.* { {"rgb"=>substr("$EVENT",1,6)} }
wled/garage/v:.* api
wled/garage/v:.* { $EVENT =~ m,(?<=<sx>)([\d]+)(?=<\/sx>), ? $1 eq ReadingsVal($NAME,"speed","unknown") ? return : {"speed"=>$1} : return; }
wled/garage/v:.* {$EVENT =~ m,(?<=<ix>)([\d]+)(?=<\/ix>), ? $1 eq ReadingsVal($NAME,"intensity","unknown") ? return : {"intensity"=>$1} : return }
wled/garage/v:.* {$EVENT =~ m,(?<=<fp>)([\d]+)(?=<\/fp>), ? $1 eq ReadingsVal($NAME,"palette","unknown") ? return : {"palette"=>$1} : return }
wled/garage/v:.* {$EVENT =~ m,(?<=<fx>)([\d]+)(?=<\/fx>), ? $1 eq ReadingsVal($NAME,"effect","unknown") ? return :{"effect"=>"$1"} : return }
room 0.2.Garage,MQTT2_DEVICE
setList on:noArg wled/garage on
off:noArg wled/garage off
toggle:noArg wled/garage t
rgb:colorpicker,RGB wled/garage/col #$EVTPART1
brightness:colorpicker,BRI,0,1,255 wled/garage
speed:colorpicker,BRI,0,1,255 wled/garage/api SX=$EVTPART1
intensity:colorpicker,BRI,0,1,255 wled/garage/api IX=$EVTPART1
loadPreset:selectnumbers,0,1,3,0,lin wled/garage/api PL=$EVTPART1
dimup:noArg wled/garage/api A=~10
dimdown:noArg wled/garage/api A=~-10
effect:{"selectnumbers,0,1,".ReadingsNum($name,".effectscount",5).",0,lin"} {WLED_setName($NAME,"effect",$EVTPART1)}
effectname:{"select,".join(",",sort(split(",",ReadingsVal($name,".effects","Solid,Police"))))} {WLED_setName($NAME,"effect",$EVTPART1)}
palette:{"selectnumbers,0,1,".ReadingsNum($name,".palettescount",5).",0,lin"} {WLED_setName($NAME,"palette",$EVTPART1)}
palettename:{"select,".join(",",sort(split(",",ReadingsVal($name,".palettes","Default"))))} {WLED_setName($NAME,"palette",$EVTPART1)}
kitt:noArg {fhem("set $NAME brightness 255;set $NAME intensity 125;set $NAME palette 2;set $NAME rgb FF0000;set $NAME speed 216;set $NAME effect 11")}
streifen_gruen:noArg {fhem("set $NAME brightness 255;set $NAME effect 0;set $NAME intensity 78;set $NAME palette 2;set $NAME rgb 05FF2F;set $NAME speed 225")}
spot:noArg {fhem("set $NAME brightness 255;set $NAME intensity 30;set $NAME palette 2;set $NAME rgb FFFFFF;set $NAME speed 86;set $NAME effect 85")}
setStateList on off toggle
userReadings effectname:effect.* {WLED_getNames($name,"effect")},
palettename:palette.* {WLED_getNames($name,"palette")}
webCmd palettename:effectname:speed:intensity:rgb:brightness
Hab den Vorschlag auch noch nicht zum laufen gebracht.
Was mir bis jetzt aufgefallen ist :
my $ip = (split("_",InternalVal($dev,"m2s_CONN",undef)))[1] // return;
Sollte doch so lauten:
my $ip = (split("_",InternalVal($dev,"MQTT2_Server_CONN",undef)))[1] // return;
Das Internal m2s_CONN heiß bei mir MQTT2_Server_CONN.
Dann klappts aber immer noch nicht.
@Australien
Ich mein in der setList dürfen keine Leerzeilen vorkommen, die musst du definitiv rausnehmen.
edit:
Ach, eben verstehe ich das mit dem Internal, das heißt immer so wie man den MQTT2_SERVER benannt hat.
mit der Umbenennung des m2s_CONN in den eigenen MQTT2 Server gehen jetzt die Paletten, aber die Effecte sind immer nur noch bei Police und Solid.
Sorry, ich hatte nicht gesehen dass das Internal mit der IP den Namen basierend auf dem IODev hat.
Habe die Funktion "WLED_getNames" nun oben nochmal entsprechend angepasst.
Nun sollte es klappen.
Gruß
Dan
EDIT: Musste noch eine kleine Änderung in WLED_getNames machen.
EDIT2: Musste die Ermittlung der IP Adresse auch noch einmal anpassen.
Ähm, kurz der Hinweis: Ich lese mit Interesse mit, habe aber im Moment noch keine Idee, wie man daraus eine sinnvolle attrTemplate-Erweiterung basteln könnte...
Hinfreich wäre es aber in jedem Fall, wenn man die IP-Adresse auch in einem Reading "verewigen" könnte, dann können es auch Leute nutzen, die MQTT2_CLIENT als IO verwenden, und den Zugriff auf den IODev-Namen könnte man über über eine etwas andere Auswertung dynamisieren. Steinbruch-Schnipsel:
InternalVal('DEVICE','LASTInputDev',AttrVal('DEVICE','IODev',InternalVal('DEVICE','IODev',undef)->{NAME})) }
müßte angepaßt also sowas ergeben:
InternalVal($dev,'LASTInputDev',AttrVal($dev,'IODev',InternalVal($dev,'IODev',undef)->{NAME})) }
Zitat von: Beta-User am 07 Dezember 2021, 12:09:50
Ähm, kurz der Hinweis: Ich lese mit Interesse mit, habe aber im Moment noch keine Idee, wie man daraus eine sinnvolle attrTemplate-Erweiterung basteln könnte...
Hinfreich wäre es aber in jedem Fall, wenn man die IP-Adresse auch in einem Reading "verewigen" könnte, dann können es auch Leute nutzen, die MQTT2_CLIENT als IO verwenden, und den Zugriff auf den IODev-Namen könnte man über über eine etwas andere Auswertung dynamisieren. Steinbruch-Schnipsel:
InternalVal('DEVICE','LASTInputDev',AttrVal('DEVICE','IODev',InternalVal('DEVICE','IODev',undef)->{NAME})) }
müßte angepaßt also sowas ergeben:
InternalVal($dev,'LASTInputDev',AttrVal($dev,'IODev',InternalVal($dev,'IODev',undef)->{NAME})) }
Ich hatte auch schon überlegt wie das in ein AttrTemplate zu gießen wäre. Bisher bin ich aber nicht auf eine Lösung gekommen wie man durch AttrTemplate die benötigten Funktionen in die "99_myUtils.pm" bekommt. Oder hast Du da eine Idee?
Bei MQTT2 steht das IODev doch im Reading IODev. So habe ich es jetzt zumindest im Code umgesetzt.
Gruß
Dan
Readings sind uU. trügerisch, insbes. was IODev angeht (siehe andere Diskussion dazu).
myUtils-Code dazu zur Verfügung zu stellen ist kein Problem, das passiert an anderer Stelle auch "ständig"... (ebus, Sauger, z2m-Thermostate, sonos2mqtt...). Allerdings gleich die Warnung: Jedenfalls ich werde den nicht so "dreckig" einchecken ;D , wenn, dann muss der auf ein "akzeptables Qualitäts-Level" wie in etwa die anderen Beispiele auch, die in https://svn.fhem.de/trac/browser/trunk/fhem/contrib/AttrTemplate/ zu finden sind :P .
Weniger sauber oder nicht solange das nicht vertemplated ::) worden ist, gehört die Variablendeklaration von $chash wieder ergänzt die bei der letzten Änderung untergegangen ist.
my $chash = $defs{$dev};
Oh, das wusste ich bisher nicht dass man Code so für AttrTemplate zur Verfügung stellen kann.
Was meinst Du mit "dreckig" und "akzeptables Qualitäts-Level"? Dass ich den Code in so eine Datei auslagern soll?
Denn ich habe mir beim Code schreiben Mühe gegeben und finde ihn alles andere als "dreckig".
Gruß
Dan
Zitat von: TomLee am 07 Dezember 2021, 13:25:24
Weniger sauber oder nicht solange das nicht vertemplated ::) worden ist, gehört die Variablendeklaration von $chash wieder ergänzt die bei der letzten Änderung untergegangen ist.
my $chash = $defs{$dev};
Danke für den Hinweis.
Habe ich wohl versehentlich vorhin beim ändern der $ip Variablen mit rausgelöscht.
Ist wieder eingefügt. ;)
Gruß
Dan
P.S. Danke für's Testen und Probleme finden.
Zitat von: DeeSPe am 07 Dezember 2021, 13:29:06
Oh, das wusste ich bisher nicht dass man Code so für AttrTemplate zur Verfügung stellen kann.
Dann mal Willkommen an Bord :) .
Zitat
Was meinst Du mit "dreckig" und "akzeptables Qualitäts-Level"? Dass ich den Code in so eine Datei auslagern soll?
Denn ich habe mir beim Code schreiben Mühe gegeben und finde ihn alles andere als "dreckig".
War nicht persönlich gemeint, und das sieht auch prinzipiell "ganz ok" aus, erfüllt aber nicht diese beiden "essentials" (aus meiner Warte):
- gepackaged
- perlcritic meckert höchstens bei Kleinigkeiten auf Level 3 rum (Pflaster sind nur erlaubt, was den package-Namen angeht; hier sollte das ohne weitere Meckereien gehen, "verhauen lassen" geht kostenlos online unter perlcritic.com)
Zitat von: DeeSPe am 07 Dezember 2021, 13:31:20
P.S. Danke für's Testen und Probleme finden.
Wieso steht eigentlich bei setList
effectname:{"select,".join(",",sort(split(",",ReadingsVal($name,".effects","Solid,Police"))))} {WLED_setName($NAME,"effect",$EVTPART1)}
"Solid,Police", dass sind die einzigen Effecte die ich sehe!?
Also warum die im ReadinsVal sind, ist mir schon klar, aber warum wird sonst nichts gefunden, bei den Paletten funktioniert es.
Zitat von: australien am 07 Dezember 2021, 14:45:05
Wieso steht eigentlich bei setList
effectname:{"select,".join(",",sort(split(",",ReadingsVal($name,".effects","Solid,Police"))))} {WLED_setName($NAME,"effect",$EVTPART1)}
"Solid,Police", dass sind die einzigen Effecte die ich sehe!?
Also warum die im ReadinsVal sind, ist mir schon klar, aber warum wird sonst nichts gefunden, bei den Paletten funktioniert es.
Das ist nur als Fallback angegeben damit das neu entstandene Dropdown schon einen Inhalt hat bevor man 1x einen Effekt per Nummer ausgewählt hat.
Hast Du denn schon 1x einen Effekt per Nummer aufgerufen (z.B. "set <WLED> effect 10")? Denn nur so entsteht der richtige Inhalt der Dropdowns.
Gruß
Dan
Zitat von: Beta-User am 07 Dezember 2021, 13:37:56
Dann mal Willkommen an Bord :) .
War nicht persönlich gemeint, und das sieht auch prinzipiell "ganz ok" aus, erfüllt aber nicht diese beiden "essentials" (aus meiner Warte):
- gepackaged
- perlcritic meckert höchstens bei Kleinigkeiten auf Level 3 rum (Pflaster sind nur erlaubt, was den package-Namen angeht; hier sollte das ohne weitere Meckereien gehen, "verhauen lassen" geht kostenlos online unter perlcritic.com)
Ich versuche mal Deine Punkte umzusetzen und gebe Dir dann wieder Bescheid.
Gruß
Dan
Zitat von: DeeSPe am 07 Dezember 2021, 14:54:18
Das ist nur als Fallback angegeben damit das neu entstandene Dropdown schon einen Inhalt hat bevor man 1x einen Effekt per Nummer ausgewählt hat.
Hast Du denn schon 1x einen Effekt per Nummer aufgerufen (z.B. "set <WLED> effect 10")? Denn nur so entsteht der richtige Inhalt der Dropdowns.
Gruß
Dan
Ich hatte es mehrmals, wie beschrieben, mit
set MQTT2_WLED_garage effect 1; set MQTT2_WLED_garage palette 1
gemacht, kein Erfolg.
Nun hab ich es mit
set MQTT2_WLED_garage effect 11
alleine probiert, siehe da, alles da!
Warum, keine Ahnung, aber ist so.
Sorry für meine Nachfragen und danke für die Hilfe!
Robert
Kommt bei irgendwem der hier mitliest und WLED auch nutzt in dem Info-Objekt des JSON die IP mit ?
Ich nutze noch 0.12.0, da kommt zwar lip mit ist aber leer
"lip":""
und ip gibts gar nicht.
Bei irgendeiner Version muss sie ja mal dabei gewesen sein:
Info-Objekt (https://kno.wled.ge/interfaces/json-api/#info-object)
ZitatNo value may be changed by means of this API.
Zitat von: TomLee am 07 Dezember 2021, 17:18:43
Ich nutze noch 0.12.0, da kommt zwar lip mit ist aber leer "lip":""
und ip gibts gar nicht.
Ist bei mir auch so.
Gruß
Dan
Was für eine Version nutzt du denn ?
Es steht zwar nix dazu in der Doku, aber es wär auch toll (ich brauchs nicht) die Presets mit dem vergebenen Namen setzen zu können, in dem state-Objekt kommt zwar die ID mit, aber nicht der Name, - Wunschdenken on - in der neuesten Version vlt. doch aber noch nicht dokumentiert ?
Ich nutze 0.13.0-b5. Ist die letzte Beta.
Wollte die Presets natürlich auch gern per Namen aufrufbar machen aber hier sind sie auch nicht mit Namen enthalten.
Gruß
Dan
Gerade meinen WLED zusammengelötet, Template eingespielt, geärgert dass Effekte und Paletten nur als Zahlen kommen, diesen Post gefunden. Funktioniert :-) Klasse Erweiterung, Dan!
@Beta-User:
Ich habe soeben mal das AttrTemplate für WLED angepasst:
#source post: https://forum.fhem.de/index.php/topic,98880.msg995308.html#msg995308
name:wled_controller
filter:TYPE=MQTT2_DEVICE
desc:To control a WLED device, see https://github.com/Aircoookie/WLED/wiki for details).
order:W_01
{ Svn_GetFile("contrib/AttrTemplate/99_attrT_WLED_Utils.pm", "FHEM/99_attrT_WLED_Utils.pm", sub(){ CommandReload(undef, "99_attrT_WLED_Utils") }) }
par:BASE_ID;BASE_ID typically is wled;{ AttrVal("DEVICE","readingList","") =~ m,([^:]+)[/][^/]+[/][^/]+:, ? $1 : undef }
par:DEVNAME;Device name as configured;{ AttrVal("DEVICE","readingList","") =~ m,[^:]+[/]([^/]+)[/][^/]+:, ? $1 : undef }
par:ICON;ICON as set, defaults to hue_filled_iris;{ AttrVal("DEVICE","icon","hue_filled_iris") }
attr DEVICE icon ICON
attr DEVICE setList\
on:noArg BASE_ID/DEVNAME on\
off:noArg BASE_ID/DEVNAME off\
toggle:noArg BASE_ID/DEVNAME t\
rgb:colorpicker,RGB BASE_ID/DEVNAME/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME\
speed:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME/api SX=$EVTPART1\
intensity:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME/api IX=$EVTPART1\
effect:{"selectnumbers,0,1,".ReadingsNum($name,".effectscount",5).",0,lin"} BASE_ID/DEVNAME/api FX=$EVTPART1\
effectname:{"select,".join(",",sort(split(",",ReadingsVal($name,".effects","Solid,Police"))))} {WLED_setName($NAME,"effect",$EVTPART1)}\
palette:{"selectnumbers,0,1,".ReadingsNum($name,".palettescount",5).",0,lin"} BASE_ID/DEVNAME/api FP=$EVTPART1\
palettename:{"select,".join(",",sort(split(",",ReadingsVal($name,".palettes","Default,Party"))))} {WLED_setName($NAME,"palette",$EVTPART1)}\
loadPreset:selectnumbers,0,1,3,0,lin BASE_ID/DEVNAME/api PL=$EVTPART1\
dimup:noArg BASE_ID/DEVNAME/api A=~10\
dimdown:noArg BASE_ID/DEVNAME/api A=~-10
attr DEVICE readingList \
BASE_ID/DEVNAME/status:.* LWT\
BASE_ID/DEVNAME/g:.* brightness\
BASE_ID/DEVNAME/g:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }\
BASE_ID/DEVNAME/c:.* { {"rgb"=>substr("$EVENT",1,6)} }\
BASE_ID/DEVNAME/v:.* api\
BASE_ID/DEVNAME/v:.* { $EVENT =~ m,(?<=<sx>)([\d]+)(?=<\/sx>), ? $1 eq ReadingsVal($NAME,"speed","unknown") ? return : {"speed"=>$1} : return; }\
BASE_ID/DEVNAME/v:.* {$EVENT =~ m,(?<=<ix>)([\d]+)(?=<\/ix>), ? $1 eq ReadingsVal($NAME,"intensity","unknown") ? return : {"intensity"=>$1} : return }\
BASE_ID/DEVNAME/v:.* {$EVENT =~ m,(?<=<fp>)([\d]+)(?=<\/fp>), ? $1 eq ReadingsVal($NAME,"palette","unknown") ? return : {"palette"=>$1} : return }\
BASE_ID/DEVNAME/v:.* {$EVENT =~ m,(?<=<fx>)([\d]+)(?=<\/fx>), ? $1 eq ReadingsVal($NAME,"effect","unknown") ? return :{"effect"=>"$1"} : return }
deletereading -q DEVICE (?!associatedWith|IODev).*
attr DEVICE devStateIcon {Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" )}
attr DEVICE webCmd rgb:brightness:effectname:speed:intensity:palettename:loadPreset
attr DEVICE webCmdLabel RGB:Brightness\
:Effect:Speed:Intensity\
:Palette:Preset
attr DEVICE userReadings effectname:effect.* {WLED_getNames($name,"effect")},\
palettename:palette.* {WLED_getNames($name,"palette")}
attr DEVICE setStateList on off toggle
attr DEVICE comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
set DEVICE attrTemplate speechcontrol_type_light_255
farewell:template has been applied successfully. <br>Note: webCmd is just an example; adopt this to your needs.
attr DEVICE model wled_controller
setreading DEVICE attrTemplateVersion 20211208 or prior
Und eine entsprechende Modul Datei für den Code erstellt (siehe Anhang), inkl. der gewünschten Anpassungen.
Ist das so passend? Oder fehlt noch etwas?
Gruß
Dan
:) Werd's einchecken, obwohl bis auf einen "4-er" noch Potential besteht:
ZitatTotal violations: 8
Severity 5: 0
Severity 4: 2
Severity 3: 6
PS:
Einfach-Quotes würden es in der Regel auch tun, und
".".$nas."count"
würde ich vermutlich eher so notieren:
".${nas}count"
Okay, ich werde mal noch weiter an der Kritik arbeiten. ;)
Irgendwas stimmt noch nicht mit dem Aufruf der Funktionen.
Habe mal meine Funktionsdatei eingespielt und neu gestartet, aber statt des Namens kommt nun im entsprechenden Reading:
Error evaluating WLED1 userReading effectname: Undefined subroutine &main::WLED_getNames called at (eval 12375) line 1.
Wie muss ich denn jetzt die Funktionen aus meiner .pm aufrufen?
Sorry, kenne mich mit Packaging noch nicht aus.
Gruß
Dan
Okay, habe es selbst herausgefunden wie die Funktionen aufzurufen sind.
Ich ändere das mal überall und gebe dann ein Update.
Gruß
Dan
Zitat von: DeeSPe am 08 Dezember 2021, 15:08:34
Ich ändere das mal überall und gebe dann ein Update.
Stimmst du mir zu setstateList um loadPreset, dimdown und dimup zu ergänzen ?
Zitat von: TomLee am 08 Dezember 2021, 16:57:40
Stimmst du mir zu setstateList um loadPreset, dimdown und dimup zu ergänzen ?
...irritiert schau...
Warum das denn? Nach meiner Auffassung sollten in setStateList nur Infos stehen, die den "Hauptschalter" repräsentieren. Oder gibt das irgendwie Probleme mit den settern bei den Readings?
Weil in den Readings dazu immer nur set stehen würde, weil da ja nix zurückkommt ?
defmod MQTT2_WLED_TV MQTT2_DEVICE WLED_538e36
attr MQTT2_WLED_TV userattr lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0
attr MQTT2_WLED_TV IODev MQTT2_Server
attr MQTT2_WLED_TV alexaName streifen
attr MQTT2_WLED_TV comment "http://".InternalVal($NAME,'CID','0')."\
effect:selectnumbers,0,1,115,0,lin wled/538e36/api FX=$EVTPART1\
effectname:effect.* {my $h="http://192.168.188.95/json";;$h=~s/_/-/g;; HttpUtils_NonblockingGet( {url=>"$h", callback=>sub($$$) { my ($hash, $err, $data) = @_;; $data =~ m,effects..\[([^[]*?)],;;my $s=$1;;$s=~s/"//g;;$s=~ s/\n//g;;my @a= split(/,/ , $s);;my $i = ReadingsNum($NAME,"effect","1");;;;my $an=@a;;$a=$a[$i];;fhem("setreading $NAME effectname $a;;setreading $NAME effectnumber $an")} }) }
attr MQTT2_WLED_TV devStateIcon {my $os = ReadingsVal($name,"LWT","offline") eq "online" ? "gruen" : "rot";;\
my $cd = Color::devStateIcon( $name, "rgb", "rgb", "brightness", "state" );;\
$cd =~ s/.*:([^:]+):.*/$1/;;\
FW_makeImage('10px-kreis-'.$os)."<a href='/fhem?cmd.dummy=set $name toggle&XHR=1'>".FW_makeImage($cd).'</a>'}
attr MQTT2_WLED_TV event-on-change-reading brightness,effect,intensity,palette,rgb,speed,state,effectname,effectnumber,ircode,LWT,palettename
attr MQTT2_WLED_TV event-on-update-reading ircode
attr MQTT2_WLED_TV eventMap /effect 0:Solid/effect 2:Breathe/effect 63:Pride/loadPreset 1:Fire/
attr MQTT2_WLED_TV genericDeviceType light
attr MQTT2_WLED_TV group Wohnzimmer
attr MQTT2_WLED_TV homebridgeMapping Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true
attr MQTT2_WLED_TV icon hue_filled_iris
attr MQTT2_WLED_TV model wled_controller
attr MQTT2_WLED_TV readingList wled/538e36/status:.* LWT\
wled/538e36/g:.* brightness\
wled/538e36/g:.* { $EVENT ? {"state"=>"on"} : {"state"=>"off"} }\
wled/538e36/c:.* { {"rgb"=>substr("$EVENT",1,6)} }\
wled/538e36/v:.* api\
wled/538e36/v:.* { $EVENT =~ m,(?<=<sx>)([\d]+)(?=<\/sx>), ? $1 eq ReadingsVal($NAME,"speed","unknown") ? return : {"speed"=>$1} : return;; }\
wled/538e36/v:.* {$EVENT =~ m,(?<=<ix>)([\d]+)(?=<\/ix>), ? $1 eq ReadingsVal($NAME,"intensity","unknown") ? return : {"intensity"=>$1} : return }\
wled/538e36/v:.* {$EVENT =~ m,(?<=<fp>)([\d]+)(?=<\/fp>), ? $1 eq ReadingsVal($NAME,"palette","unknown") ? return : {"palette"=>$1} : return }\
wled/538e36/v:.* {$EVENT =~ m,(?<=<fx>)([\d]+)(?=<\/fx>), ? $1 eq ReadingsVal($NAME,"effect","unknown") ? return :{"effect"=>"$1"} : return }\
WLED_538e36:wled/538e36/ircode:.* ircode
attr MQTT2_WLED_TV room MQTT2_DEVICE,Privat->OG->Wohnzimmer
attr MQTT2_WLED_TV setList on:noArg wled/538e36 on\
off:noArg wled/538e36 off\
toggle:noArg wled/538e36 t\
rgb:colorpicker,RGB wled/538e36/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 wled/538e36\
speed:colorpicker,BRI,0,1,255 wled/538e36/api SX=$EVTPART1\
intensity:colorpicker,BRI,0,1,255 wled/538e36/api IX=$EVTPART1\
palette:selectnumbers,0,1,46,0,lin wled/538e36/api &T=1FP=$EVTPART1\
effect:knob,min:0,max:119,width:70,height:70,step:1,lineCap:round,angleOffset:180,cursor:3,thickness:.3 wled/538e36/api FX=$EVTPART1 \
loadPreset:selectnumbers,0,1,3,0,lin wled/538e36/api PL=$EVTPART1\
dimup:noArg wled/538e36/api A=~10\
dimdown:noArg wled/538e36/api A=~-10\
flash:noArg {my $v=ReadingsVal($NAME,"rgb","FFA000");;ReadingsVal($NAME,"state","off") eq "on"?fhem("set $NAME rgb FFFFFF;;sleep 0.5;;set $NAME rgb $v"):fhem("set $NAME toggle;;set $NAME rgb FFFFFF;;sleep 0.5;;set $NAME toggle")}\
effect:{"selectnumbers,0,1,".ReadingsNum($name,".effectscount",5).",0,lin"} {WLED_setName($NAME,"effect",$EVTPART1)}\
effectname:{"select,".join(",",sort(split(",",ReadingsVal($name,".effects","Solid,Police"))))} {WLED_setName($NAME,"effect",$EVTPART1)}\
palette:{"selectnumbers,0,1,".ReadingsNum($name,".palettescount",5).",0,lin"} {WLED_setName($NAME,"palette",$EVTPART1)}\
palettename:{"select,".join(",",sort(split(",",ReadingsVal($name,".palettes","Default"))))} {WLED_setName($NAME,"palette",$EVTPART1)}
attr MQTT2_WLED_TV setStateList on off toggle loadPreset dimdown dimup
attr MQTT2_WLED_TV stateFormat LWT\ state
attr MQTT2_WLED_TV userReadings effectname:effect.* {WLED_getNames($name,"effect")},\
palettename:palette.* {WLED_getNames($name,"palette")}
attr MQTT2_WLED_TV webCmd rgb:brightness:effectname:speed:loadPreset:palettename:intensity
attr MQTT2_WLED_TV webCmdLabel RGB:Brightness\
:Effect:Speed:Preset\
:Palette:Intensity
setstate MQTT2_WLED_TV online\ on
setstate MQTT2_WLED_TV 2021-12-07 12:46:21 .effects Solid,Blink,Breathe,Wipe,Wipe_Random,Random_Colors,Sweep,Dynamic,Colorloop,Rainbow,Scan,Scan_Dual,Fade,Theater,Theater_Rainbow,Running,Saw,Twinkle,Dissolve,Dissolve_Rnd,Sparkle,Sparkle_Dark,SparklePlus,Strobe,Strobe_Rainbow,Strobe_Mega,Blink_Rainbow,Android,Chase,Chase_Random,Chase_Rainbow,Chase_Flash,Chase_Flash_Rnd,Rainbow_Runner,Colorful,Traffic_Light,Sweep_Random,Running_2,Aurora,Stream,Scanner,Lighthouse,Fireworks,Rain,Tetrix,Fire_Flicker,Gradient,Loading,Police,Police_All,Two_Dots,Two_Areas,Circus,Halloween,Tri_Chase,Tri_Wipe,Tri_Fade,Lightning,ICU,Multi_Comet,Scanner_Dual,Stream_2,Oscillate,Pride_2015,Juggle,Palette,Fire_2012,Colorwaves,Bpm,Fill_Noise,Noise_1,Noise_2,Noise_3,Noise_4,Colortwinkles,Lake,Meteor,Meteor_Smooth,Railway,Ripple,Twinklefox,Twinklecat,Halloween_Eyes,Solid_Pattern,Solid_Pattern_Tri,Spots,Spots_Fade,Glitter,Candle,Fireworks_Starburst,Fireworks_1D,Bouncing_Balls,Sinelon,Sinelon_Dual,Sinelon_Rainbow,Popcorn,Drip,Plasma,Percent,Ripple_Rainbow,Heartbeat,Pacifica,Candle_Multi,_Solid_Glitter,Sunrise,Phased,Twinkleup,Noise_Pal,_Sine,Phased_Noise,Flow,Chunchun,Dancing_Shadows,Washing_Machine,Candy_Cane,Blends,TV_Simulator,Dynamic_Smooth
setstate MQTT2_WLED_TV 2021-12-07 12:46:21 .effectscount 117
setstate MQTT2_WLED_TV 2021-12-07 12:46:38 .palettes Default,*_Random_Cycle,*_Color_1,*_Colors_1_2,*_Color_Gradient,*_Colors_Only,Party,Cloud,Lava,Ocean,Forest,Rainbow,Rainbow_Bands,Sunset,Rivendell,Breeze,Red___Blue,Yellowout,Analogous,Splash,Pastel,Sunset_2,Beech,Vintage,Departure,Landscape,Beach,Sherbet,Hult,Hult_64,Drywet,Jul,Grintage,Rewhi,Tertiary,Fire,Icefire,Cyane,Light_Pink,Autumn,Magenta,Magred,Yelmag,Yelblu,Orange___Teal,Tiamat,April_Night,Orangery,C9,Sakura,Aurora,Atlantica,C9_2,C9_New,Temperature,Aurora_2
setstate MQTT2_WLED_TV 2021-12-07 12:46:38 .palettescount 55
setstate MQTT2_WLED_TV 2021-12-05 10:18:24 IODev MQTT2_Server
setstate MQTT2_WLED_TV 2021-12-08 16:52:23 LWT online
setstate MQTT2_WLED_TV 2021-12-08 16:52:23 api <?xml version="1.0" ?><vs><ac>112</ac><cl>255</cl><cl>160</cl><cl>0</cl><cs>0</cs><cs>0</cs><cs>0</cs><ns>0</ns><nr>1</nr><nl>0</nl><nf>1</nf><nd>60</nd><nt>0</nt><fx>52</fx><sx>6</sx><ix>56</ix><fp>8</fp><wv>0</wv><ws>0</ws><ps>0</ps><cy>0</cy><ds>WLED_TV</ds><ss>0</ss></vs>
setstate MQTT2_WLED_TV 2021-12-08 16:52:23 brightness 112
setstate MQTT2_WLED_TV 2021-09-10 15:22:58 deinsettername set
setstate MQTT2_WLED_TV 2021-12-08 16:48:25 dimdown set
setstate MQTT2_WLED_TV 2021-12-08 16:47:30 dimup set
setstate MQTT2_WLED_TV 2021-12-08 16:52:23 effect 52
setstate MQTT2_WLED_TV 2021-12-08 16:52:23 effectname Circus
setstate MQTT2_WLED_TV 2021-09-10 22:48:36 effectnumber 118
setstate MQTT2_WLED_TV 2021-12-08 16:21:18 intensity 56
setstate MQTT2_WLED_TV 2021-12-08 16:42:51 ircode 0x71fe45b1
setstate MQTT2_WLED_TV 2021-12-08 16:47:56 loadPreset set 1
setstate MQTT2_WLED_TV 2021-12-08 16:49:54 palette 8
setstate MQTT2_WLED_TV 2021-12-08 16:49:55 palettename Lava
setstate MQTT2_WLED_TV 2021-12-08 16:52:23 rgb FFA000
setstate MQTT2_WLED_TV 2021-12-08 09:12:39 speed 6
setstate MQTT2_WLED_TV 2021-12-08 16:52:23 state on
Das mag jetzt irritirend sein das die Readings in dem List vorhanden sind, ich hab sie bloss noch nicht gelöscht seit vorhin, als ich bevor ich schrieb nochmal getestet hatte warum ich die Namen in setstatList eingetragen hatte.
Ja. Und?
Besser, wie wenn der state mit was gefüllt wird, was da nicht hingehört (mAn.) ;) . Kann man notfalls mit einem periodicCmd löschen, wenn's einem nicht gefällt :) .
Na ja, das steht ja nur solange drin bis wieder was in state landet.
Beim ValetudoRE-Template ist das auch so umgesetzt, Otto denkt dann wsl. so wie ich.
ZitatKann man notfalls mit einem periodicCmd löschen, wenn's einem nicht gefällt :) .
Da seh ich lieber "zufällig" mal
eines der 3 Rückgabewerte der setter in state, wie drei unnötig angelegte Reading, die mal da sind und mal nicht.
Zitat von: TomLee am 08 Dezember 2021, 16:57:40
Stimmst du mir zu setstateList um loadPreset, dimdown und dimup zu ergänzen ?
Für dimdown und dimup stimme ich Dir zu, das braucht kein eigenes Reading und in "state" wird es sofort nach dem Setzen wieder mit "on/off" ersetzt.
Für loadPreset habe ich nun im AttrTemplate ein eigenes Reading mit eingebaut. Das Reading "loadPreset" wird also wie bisher erst mit "set X" gefüllt und danach dann aber auf die Nummer des gesetzten Presets gesetzt.
@Beta-User:
Hier nun das fertige AttrTemplate:
entfernt
Und im Anhang die Moduldatei.
Bis auf einen Eintrag aus Perlcritic habe ich alles beherzigt. Ich weiß einfach nicht was er mir mit "Always unpack @_ first at line 40, column 1. See page 178 of PBP." sagen möchte bzw. wie ich es weg bekommen soll.
Ich würde mich freuen wenn Du das so einchecken könntest.
Danke.
Gruß
Dan
Ich habe mich nochmal durch die API Doku von WLED gelesen und noch ein paar weitere Setter eingebaut.
Auch das Auflösen der Effekte- und Palettennamen über "userReadings" war nicht ganz glücklich. Bei mir kam es immer wieder zu dem Problem dass teilweise die Namen nicht aufgelöst wurden.
Ich habe darum das AttrTemplate und die Moduldatei im vorherigen Beitrag noch einmal etwas umgebaut und auf den aktuellen Stand gebracht.
Zusätzlich habe ich "loadPreset" geändert in "preset" und "brightness" in "bri".
Und es gibt ein userReading für "pct".
Gruß
Dan
Was ist denn für dich der Hintergrund das brightness jetzt in bri umbenannt werden sollte ?
Ich habe bei mir die setlist noch ergänzt um:
apiraw wled/dced1e/api $EVTPART1
seg wled/dced1e/api {"seg":{"i":[$EVTPART1,[$EVTPART2]]}}
"apiraw" um die API direkt anzusprechen und "seg" um einzelne LEDs mit einem Farbwert zu versorgen. Für mich persönlich ganz hilfreich...
Zitat von: TomLee am 08 Dezember 2021, 23:28:30
Was ist denn für dich der Hintergrund das brightness jetzt in bri umbenannt werden sollte ?
Ich habe mich dabei nur an anderen Lichtern orientiert. Bei meinen Hue Lichtern heißt das Reading z.B. auch "bri" (0-255).
Auch gibt es bei Hue Lichtern das Reading "pct" (0-100), andere Lichtmodule setzen das auch als Reading "dim" (0-100) um.
Eigentlich sollte es laut Doku auch "hue" (0-65535) und "sat" (0-255) geben, das hat bei mir aber nicht geklappt abzurufen.
Zitat von: KernSani am 09 Dezember 2021, 00:33:43
Ich habe bei mir die setlist noch ergänzt um:
apiraw wled/dced1e/api $EVTPART1
seg wled/dced1e/api {"seg":{"i":[$EVTPART1,[$EVTPART2]]}}
"apiraw" um die API direkt anzusprechen und "seg" um einzelne LEDs mit einem Farbwert zu versorgen. Für mich persönlich ganz hilfreich...
Das ist auch nicht schlecht. Werde es wohl eher weniger brauchen (ich nehme lieber Presets), habe es aber trotzdem mal bei mir ergänzt.
Gruß
Dan
Ein paar kurze Anmerkungen:
- Wenn das Ding "nativ" bri/brightness 0-255 "spricht", würde ich gar nicht erst nicht umrechnen, machen wir bei anderen Leuchten auch nicht (wer will/muss, kann ja, aber es ist für die Funktionalität an sich nicht essentiell). Was den Namen angeht, würde mir weiterhin "brightness" besser gefallen, das wäre afaik auch der eher "standardisierte" Readingname (zumindest innerhalb der MQTT2-Welt).
- Funktioniert das mit der IP-Adresse auch mit MQTT2_CLIENT? Wenn nein, wäre mein Vorschlag, dazu noch im Hintergrund eine ReadingsVal()-Abfrage einzubauen, damit diese "Zielgruppe" einfach einmalig ein "setreading" ausführen kann, um das Ding "voll" nutzen zu können. Sonst müßte ich vermutlich ein 2., einfaches attrTemplate anbieten.
- hue und sat wären natürlich die "Krönung". Ist das ein allgemeines firmware-Problem oder kann das ggf. einfach nur der konkret eingesetzte Controller-Baustein nicht? Im ersteren Fall sollten wir das erst mal raus lassen, wenn es "manchmal" geht, könnte man ein Einheits-attrTemplate mit den settern machen und einen comment setzen.
Nachtrag: Da wir sowieso den "v"-Topic in myUtils auswerten: Wäre es nicht sinnvoll, eine "one for all"-myUtils-Lösung zu basteln? Wenn aus der myUtils ein Hash zurückgegeben wird, versteht MQTT2_DEVICE das als Reading=>Value-Paare ;) .
Zum Testen (wenn möglich erst mal auf einem Testsystem, bitte!):
#source post: https://forum.fhem.de/index.php/topic,98880.msg995308.html#msg995308
name:wled_controller
filter:TYPE=MQTT2_DEVICE
desc:To control a WLED device, see https://github.com/Aircoookie/WLED/wiki for details and https://forum.fhem.de/index.php/topic,98880.0.html for template development).
order:W_01
{ Svn_GetFile("contrib/AttrTemplate/99_attrT_WLED_Utils.pm", "FHEM/99_attrT_WLED_Utils.pm", sub(){ CommandReload(undef, "99_attrT_WLED_Utils") }) }
par:BASE_ID;BASE_ID typically is wled;{ AttrVal('DEVICE','readingList','') =~ m,([^:]+)[/][^/]+[/][^/]+:, ? $1 : undef }
par:DEVNAME;Device name as configured;{ AttrVal('DEVICE','readingList','') =~ m,[^:]+[/]([^/]+)[/][^/]+:, ? $1 : undef }
par:ICON;ICON as set, defaults to hue_filled_iris;{ AttrVal('DEVICE','icon','hue_filled_iris') }
attr DEVICE icon ICON
attr DEVICE setList\
on:noArg BASE_ID/DEVNAME on\
off:noArg BASE_ID/DEVNAME off\
toggle:noArg BASE_ID/DEVNAME t\
rgb:colorpicker,RGB BASE_ID/DEVNAME/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME\
dimup:noArg BASE_ID/DEVNAME/api A=~10\
dimdown:noArg BASE_ID/DEVNAME/api A=~-10\
speed:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME/api SX=$EVTPART1\
intensity:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME/api IX=$EVTPART1\
effect:{"selectnumbers,0,1,".ReadingsNum($name,".effectscount",5).",0,lin"} BASE_ID/DEVNAME/api FX=$EVTPART1\
effectname:{"select,".join(",",sort(split(",",ReadingsVal($name,".effects","Solid,Police"))))} {FHEM::attrT_WLED_Utils::WLED_setName($NAME,"effect",$EVTPART1)}\
effect_next:noArg BASE_ID/DEVNAME/api FX=~1\
effect_prev:noArg BASE_ID/DEVNAME/api FX=~-1\
effect_random:noArg BASE_ID/DEVNAME/api FX=r\
effect_reset:noArg BASE_ID/DEVNAME/api FX=0\
palette:{"selectnumbers,0,1,".ReadingsNum($name,".palettescount",5).",0,lin"} BASE_ID/DEVNAME/api FP=$EVTPART1\
palettename:{'select,'.join(',',sort(split(',',ReadingsVal($name,'.palettes','Default,Party'))))} {FHEM::attrT_WLED_Utils::WLED_setName($NAME,"palette",$EVTPART1)}\
palette_next:noArg BASE_ID/DEVNAME/api FP=~1\
palette_prev:noArg BASE_ID/DEVNAME/api FP=~-1\
palette_random:noArg BASE_ID/DEVNAME/api FP=r\
palette_reset:noArg BASE_ID/DEVNAME/api FP=0\
preset:selectnumbers,0,1,3,0,lin BASE_ID/DEVNAME/api PL=$EVTPART1\
apiraw BASE_ID/DEVNAME/api $EVTPART1\
seg BASE_ID/DEVNAME/api {"seg":{"i":[$EVTPART1,[$EVTPART2]]}}
attr DEVICE readingList \
BASE_ID/DEVNAME/status:.* LWT\
BASE_ID/DEVNAME/g:.* brightness\
BASE_ID/DEVNAME/g:.* {$EVENT ? {state=>'on'} : {state=>'off'}}\
BASE_ID/DEVNAME/c:.* {{rgb=>substr("$EVENT",1,6)}}\
BASE_ID/DEVNAME/v:.* {FHEM::attrT_WLED_Utils::WLED_getNames($NAME,$EVENT)}
deletereading -q DEVICE (?!associatedWith|IODev).*
attr DEVICE devStateIcon {Color::devStateIcon( $name, 'rgb', 'rgb', 'brightness', 'state' )}
attr DEVICE webCmd rgb:brightness:effectname:speed:intensity:palettename:preset
attr DEVICE webCmdLabel RGB:Brightness\
:Effect:Speed:Intensity\
:Palette:Preset
attr DEVICE setStateList on off toggle dimdown dimup effect_prev effect_next effect_random palette_prev palette_next palette_random palette_reset effect_reset
attr DEVICE comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
set DEVICE attrTemplate speechcontrol_type_light_255
farewell:template has been applied successfully, additional code has been downloaded. <br>Note: webCmd and eventMap are just examples; adopt this to your needs.
attr DEVICE model wled_controller
setreading DEVICE attrTemplateVersion 20211209
Zu dem noch:
ZitatBis auf einen Eintrag aus Perlcritic habe ich alles beherzigt. Ich weiß einfach nicht was er mir mit "Always unpack @_ first at line 40, column 1. See page 178 of PBP." sagen möchte bzw. wie ich es weg bekommen soll.
Darauf war das hier gemünzt gewesen:
Zitatobwohl bis auf einen "4-er" noch Potential besteht
Das "Problem" ist hier die anonyme sub als callback, die Perlcritic wohl nicht "sieht" und dann auf das "@_" anspringt... Eventuell könnte man das noch beseitigen, wenn man dann shift nimmt oder die Funktion in eine Variable packt (@TomLee: "trim30"), aber vermutlich würde dann deswegen gemeckert oder es wäre unnötig kompliziert ;D ...
EDIT: ein "bri" war mir noch durchgerutscht
Find das hochinteressant mit deinem Vorschlag, beschäftigt mich auch, bis ich aber nur ansatzweise mal einen Durchblick hab, seid ihr hiermit schon lange durch, es fängt schon damit an das ich nicht weiß an was es hängt bei der Rückgabe der Referenz in den Zeilen 61,62 und 72 wenn ich die myUtils speichern möchte.
Global symbol "%cleaned" requires explicit package name (did you forget to declare "my %cleaned"?) at ./FHEM/myUtilsTemplate.pm line 61. Global symbol "%cleaned" requires explicit package name (did you forget to declare "my %cleaned"?) at ./FHEM/myUtilsTemplate.pm line 62. Global symbol "%cleaned" requires explicit package name (did you forget to declare "my %cleaned"?) at ./FHEM/myUtilsTemplate.pm line 72.
Danke!!! Das sieht doch schon ganz gut aus.
Allerdings wurde der Code bei mir nicht akzeptiert (wie bei dir TomLee).
Ich habe den mal berichtigt und noch 1-2 andere Stellen gerade gezogen.
Bei mir wird der Code nun ohne Meckern angenommen und funktioniert auch wie er soll.
Gruß
Dan
:) Dann kommt das also demnächst...
[OT] @DeeSPe:
Wg.
Zitat von: DeeSPe am 09 Dezember 2021, 12:57:56
Bei den modulspezifischen Attributen sollte das eigentlich klappen, nur nicht bei den userattr.
Man kann das ganze mit "data-pattern=" sogar an "fremden" Devices hinterlegen, auch mit "wildcards". Beispiel (der Attribut-Prefix kann vom User festgelegt werden):
<a id="RHASSPY-attr-Mapping" data-pattern=".*Mapping"></a><b>rhasspyMapping</b>
Voraussetzung ist bei "fremden" Modulen dann aber, dass klar ist, zu welchem Modul die userattr gehören (in HOMEMODE ggf. ca. #1599). Es gibt dazu (die id-Geschichte) auch einen Thread im Developer-Bereich.
Zitat von: Beta-User am 09 Dezember 2021, 13:17:14
[OT] @DeeSPe:
Wg. Man kann das ganze mit "data-pattern=" sogar an "fremden" Devices hinterlegen, auch mit "wildcards". Beispiel (der Attribut-Prefix kann vom User festgelegt werden):
<a id="RHASSPY-attr-Mapping" data-pattern=".*Mapping"></a><b>rhasspyMapping</b>
Voraussetzung ist bei "fremden" Modulen dann aber, dass klar ist, zu welchem Modul die userattr gehören (in HOMEMODE ggf. ca. #1599). Es gibt dazu (die id-Geschichte) auch einen Thread im Developer-Bereich.
Danke, das wusste ich bisher noch nicht. Dann probiere ich das demnächst auch mal umzusetzen.
Nochmal hierzu:
Zitat von: Beta-User am 09 Dezember 2021, 09:39:28
Ein paar kurze Anmerkungen:
- Wenn das Ding "nativ" bri/brightness 0-255 "spricht", würde ich gar nicht erst nicht umrechnen, machen wir bei anderen Leuchten auch nicht (wer will/muss, kann ja, aber es ist für die Funktionalität an sich nicht essentiell). Was den Namen angeht, würde mir weiterhin "brightness" besser gefallen, das wäre afaik auch der eher "standardisierte" Readingname (zumindest innerhalb der MQTT2-Welt).
- Funktioniert das mit der IP-Adresse auch mit MQTT2_CLIENT? Wenn nein, wäre mein Vorschlag, dazu noch im Hintergrund eine ReadingsVal()-Abfrage einzubauen, damit diese "Zielgruppe" einfach einmalig ein "setreading" ausführen kann, um das Ding "voll" nutzen zu können. Sonst müßte ich vermutlich ein 2., einfaches attrTemplate anbieten.
- hue und sat wären natürlich die "Krönung". Ist das ein allgemeines firmware-Problem oder kann das ggf. einfach nur der konkret eingesetzte Controller-Baustein nicht? Im ersteren Fall sollten wir das erst mal raus lassen, wenn es "manchmal" geht, könnte man ein Einheits-attrTemplate mit den settern machen und einen comment setzen.
- Wenn das in der MQTT Welt so ist, dann sollte das natürlich so bleiben.
- Von MQTT2_CLIENT habe ich keine Ahnung, bin wie gesagt sehr neu in der MQTT Welt.
- Mit hue und sat habe ich nochmal rumgespielt. Das Setzen der Werte scheint zu gehen, aber sie sind in keiner API enthalten (v0.13.0-b5) um sie auszulesen. Auch stimmen die gesetzten Hue Werte nicht mit denen auf dem Hue Slider überein. Ich sehe gerade es gibt jetzt eine v0.13.0-b6, mal testen - gibt 2 neue Effekte.
Gruß
Dan
Zitat von: DeeSPe am 09 Dezember 2021, 15:17:41
Ich sehe gerade es gibt jetzt eine v0.13.0-b6, mal testen - gibt 2 neue Effekte.
Kann keine 2 neuen Effekte finden! Die Anzahl ist auch die selbe.
In den APIs scheint es auch nichts neues zu geben.
@Beta-User:
Warte mal bitte noch ein paar Tage mit dem Einchecken. Ich habe im Modul noch ein paar Optimierungen vorgenommen und möchte die noch ein Wenig testen.
Gruß
Dan
Hallo zusammen,
ich bin noch nicht so fit, was attrTemplate angeht. Wie bekomme ich denn das aktuelle Template geladen.
Fhem Update habe ich gemacht, versucht eine Datei wled_controller.template anzulegen. Danach das System neu gestartet, aber in der Liste ist nur das vom 20200522 (attrTemplateVersion 20200522 or prior).
Gruß,
Stefan
Moin.
Ich stehe da gerade etwas auf dem RegEx-Schlauch, ich würde ganz gerne ALLE drei definierten Farben (state: --> col:) und die Software-Version (info: --> ver:) in ein Reading übernehmen, bekomme es aber auf biegen und brechen nicht hin die Daten aus dem JSON zu "regexen" (extrahieren).
{
"state": {
"on": true,
"bri": 127,
"transition": 7,
"ps": -1,
"pl": -1,
"nl": {
"on": false,
"dur": 60,
"fade": true,
"tbri": 0
},
"udpn": {
"send": false,
"recv": true
},
"seg": [{
"start": 0,
"stop": 20,
"len": 20,
"col": [
[255, 160, 0],
[0, 0, 0],
[0, 0, 0]
],
"fx": 0,
"sx": 127,
"ix": 127,
"pal": 0,
"sel": true,
"rev": false,
"cln": -1
}]
},
"info": {
"ver": "0.8.4",
"vid": 1903252,
"leds": {
"count": 20,
"rgbw": true,
"pin": [2],
"pwr": 0,
"maxpwr": 65000,
"maxseg": 1
},
"name": "WLED Light",
"udpport": 21324,
"live": false,
"fxcount": 80,
"palcount": 47,
"arch": "esp8266",
"core": "2_4_2",
"freeheap": 13264,
"uptime": 17985,
"opt": 127,
"brand": "WLED",
"product": "DIY light",
"btype": "src",
"mac": "60019423b441"
},
"effects": [
"Solid", "Blink", "Breathe", "Wipe", "Wipe Random", "Random Colors", "Sweep", "Dynamic", "Colorloop", "Rainbow",
"Scan", "Dual Scan", "Fade", "Chase", "Chase Rainbow", "Running", "Saw", "Twinkle", "Dissolve", "Dissolve Rnd",
"Sparkle", "Dark Sparkle", "Sparkle+", "Strobe", "Strobe Rainbow", "Mega Strobe", "Blink Rainbow", "Android", "Chase", "Chase Random",
"Chase Rainbow", "Chase Flash", "Chase Flash Rnd", "Rainbow Runner", "Colorful", "Traffic Light", "Sweep Random", "Running 2", "Red & Blue","Stream",
"Scanner", "Lighthouse", "Fireworks", "Rain", "Merry Christmas", "Fire Flicker", "Gradient", "Loading", "In Out", "In In",
"Out Out", "Out In", "Circus", "Halloween", "Tri Chase", "Tri Wipe", "Tri Fade", "Lightning", "ICU", "Multi Comet",
"Dual Scanner", "Stream 2", "Oscillate", "Pride 2015", "Juggle", "Palette", "Fire 2012", "Colorwaves", "BPM", "Fill Noise", "Noise 1",
"Noise 2", "Noise 3", "Noise 4", "Colortwinkle", "Lake", "Meteor", "Smooth Meteor", "Railway", "Ripple"
],
"palettes": [
"Default", "Random Cycle", "Primary Color", "Based on Primary", "Set Colors", "Based on Set", "Party", "Cloud", "Lava", "Ocean",
"Forest", "Rainbow", "Rainbow Bands", "Sunset", "Rivendell", "Breeze", "Red & Blue", "Yellowout", "Analogous", "Splash",
"Pastel", "Sunset 2", "Beech", "Vintage", "Departure", "Landscape", "Beach", "Sherbet", "Hult", "Hult 64",
"Drywet", "Jul", "Grintage", "Rewhi", "Tertiary", "Fire", "Icefire", "Cyane", "Light Pink", "Autumn",
"Magenta", "Magred", "Yelmag", "Yelblu", "Orange & Teal", "Tiamat", "April Night"
]
}
Ich habe es schon (erfolglos) mit:
$data =~ m,ver..\".*?\",;
versucht (bei der Version).
Zitat von: stera am 19 Dezember 2021, 23:08:29
ich bin noch nicht so fit, was attrTemplate angeht. Wie bekomme ich denn das aktuelle Template geladen.
Hi. Entweder du benennst das "neue" (geringfügig) um, dann kannst du mit der separaten file arbeiten, oder du ersetzt das alte attrTemplate in der file mqtt2.template.
Zitat von: ComputerZOO am 20 Dezember 2021, 10:43:37
Ich habe es schon (erfolglos) mit:
$data =~ m,ver..\".*?\",;
versucht (bei der Version).
Mal abgesehen davon, dass unklar ist, wo der JSON herkommt und ob nicht json2nameValue() die bessere Lösung wäre:
ver...\"(.*)\"
Würde dazu https://regex101.com/ konsultieren, und die Variablen musst du dann m.E. eher mit "my $data = $1" usw. zuweisen.
ZitatMal abgesehen davon, dass unklar ist, wo der JSON herkommt und ob nicht json2nameValue() die bessere Lösung wäre:
https://kno.wled.ge/interfaces/json-api/ (https://kno.wled.ge/interfaces/json-api/)
ZitatStarting from version 0.8.4, WLED implements a powerful JSON API over HTTP. It is accessible using the /json subpage.
So (https://forum.fhem.de/index.php/topic,98880.msg1118377.html#msg1118377) (mit dem dort zu sehenden Gebastel) hatte ich mir bis vor kurzem den gewählten Effektnamen in das Device geholt gehabt.
Jetzt der Teil:
...
my $chash = $defs{$dev};
HttpUtils_NonblockingGet({
url=>"http://$ip/json",
callback=>sub($$$){
my ($hash,$err,$data) = @_;
WLED_setReadings($dev,"effect",$1) if $data =~ m/effects..\[([^[]*?)]/x;
WLED_setReadings($dev,"palette",$1) if $data =~ m/palettes..\[([^[]*?)]/x;
}
});
return defined $event ? $cleaned : undef;
}
sub WLED_setReadings {
my $dev = shift // return;
my $na = shift // return;
my $data = shift;
my $nas = $na.'s';
my $chash = $defs{$dev};
$data =~ s/["\n]//gx;
$data =~ s/[\s\&]/_/gx;
$data =~ s/\+/Plus/gx;
my @r = split(",",$data);
readingsBeginUpdate($chash);
readingsBulkUpdateIfChanged($chash,".${nas}count",(scalar @r)-1);
readingsBulkUpdateIfChanged($chash,".$nas",$data);
readingsEndUpdate($chash,0);
readingsSingleUpdate($chash,$na.'name',$r[ReadingsNum($dev,$na,0)],1);
return;
}
Zitat von: Beta-User am 20 Dezember 2021, 12:32:08
...Mal abgesehen davon, dass unklar ist, wo der JSON herkommt...
Der JSON kommt beim Aufruf von
http://WLED-IP/jsonWerde die Tage mal mit json2nameValue() spielen...
Zitat von: TomLee am 20 Dezember 2021, 12:51:10
So (https://forum.fhem.de/index.php/topic,98880.msg1118377.html#msg1118377) (mit dem dort zu sehenden Gebastel) hatte ich mir bis vor kurzem den gewählten Effektnamen in das Device geholt gehabt.
Im Prinzip ist die Version von mir auf Basis dieses Codes entstanden. Ich habe das nur weiter optimiert.
Bei mir habe ich seit einigen Tagen ein Version laufen die sehr gut funktioniert. Den Code und das entsprechende AttrTemplate werde ich später am heutigen Tage mit Euch teilen. Das ist jetzt soweit alles von offensichtlichen Fehlern bereinigt und etliche Tage getestet. Einen offiziellem Einchecken steht von meiner Seite aus dann nichts entgegen.
Gruß
Dan
Hier meine finale Version des AttrTemplate für WLED:
#source post: https://forum.fhem.de/index.php/topic,98880.msg995308.html#msg995308
name:wled_controller
filter:TYPE=MQTT2_DEVICE
desc:To control a WLED device, see https://github.com/Aircoookie/WLED/wiki for details).
order:W_01
{ Svn_GetFile('contrib/AttrTemplate/99_attrT_WLED_Utils.pm', 'FHEM/99_attrT_WLED_Utils.pm', sub(){ CommandReload(undef, '99_attrT_WLED_Utils') }) }
par:BASE_ID;BASE_ID typically is wled;{ AttrVal('DEVICE','readingList','') =~ m,([^:]+)[/][^/]+[/][^/]+:, ? $1 : undef }
par:DEVNAME;Device name as configured;{ AttrVal('DEVICE','readingList','') =~ m,[^:]+[/]([^/]+)[/][^/]+:, ? $1 : undef }
par:ICON;ICON as set, defaults to hue_filled_iris;{ AttrVal('DEVICE','icon','hue_filled_iris') }
attr DEVICE icon ICON
attr DEVICE setList\
on:noArg BASE_ID/DEVNAME on\
off:noArg BASE_ID/DEVNAME off\
toggle:noArg BASE_ID/DEVNAME t\
rgb:colorpicker,RGB BASE_ID/DEVNAME/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME/api A=$EVTPART1\
dimup:noArg BASE_ID/DEVNAME/api A=~10\
dimdown:noArg BASE_ID/DEVNAME/api A=~-10\
speed:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME/api SX=$EVTPART1\
intensity:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME/api IX=$EVTPART1\
effect:{'selectnumbers,0,1,'.ReadingsNum($name,'.effectscount',5).',0,lin'} BASE_ID/DEVNAME/api FX=$EVTPART1\
effectname:{'select,'.join(',',sort(split(',',ReadingsVal($name,'.effects','Solid,Police'))))} {FHEM::attrT_WLED_Utils::WLED_set($NAME,'effect',$EVTPART1)}\
effect_next:noArg BASE_ID/DEVNAME/api FX=~1\
effect_prev:noArg BASE_ID/DEVNAME/api FX=~-1\
effect_random:noArg BASE_ID/DEVNAME/api FX=r\
effect_reset:noArg BASE_ID/DEVNAME/api FX=0\
palette:{'selectnumbers,0,1,'.ReadingsNum($name,'.palettescount',5).',0,lin'} BASE_ID/DEVNAME/api FP=$EVTPART1\
palettename:{'select,'.join(',',sort(split(',',ReadingsVal($name,'.palettes','Default,Party'))))} {FHEM::attrT_WLED_Utils::WLED_set($NAME,'palette',$EVTPART1)}\
palette_next:noArg BASE_ID/DEVNAME/api FP=~1\
palette_prev:noArg BASE_ID/DEVNAME/api FP=~-1\
palette_random:noArg BASE_ID/DEVNAME/api FP=r\
palette_reset:noArg BASE_ID/DEVNAME/api FP=0\
preset:selectnumbers,0,1,15,0,lin BASE_ID/DEVNAME/api PL=$EVTPART1\
apiraw BASE_ID/DEVNAME/api $EVTPART1\
seg BASE_ID/DEVNAME/api {'seg':{'i':[$EVTPART1,[$EVTPART2]]}}
attr DEVICE readingList \
BASE_ID/DEVNAME/status:.* LWT\
BASE_ID/DEVNAME/g:.* brightness\
BASE_ID/DEVNAME/g:.* {$EVENT ? {state => 'on'} : {state => 'off'}}\
BASE_ID/DEVNAME/c:.* {{rgb => substr($EVENT,1,6)}}\
BASE_ID/DEVNAME/v:.* {FHEM::attrT_WLED_Utils::WLED_get($NAME,$EVENT)}
deletereading -q DEVICE (?!associatedWith|IODev).*
attr DEVICE devStateIcon {ReadingsVal($name,'LWT','offline') eq 'offline' ? '.*:message_attention@red' : Color::devStateIcon($name,'rgb','rgb','brightness','state')}
attr DEVICE webCmd rgb:brightness:effectname:speed:intensity:palettename:preset
attr DEVICE webCmdLabel RGB:Brightness\
:Effect:Speed:Intensity\
:Palette:Preset
attr DEVICE setStateList on off toggle dimdown dimup effect_prev effect_next effect_random palette_prev palette_next palette_random palette_reset effect_reset
attr DEVICE comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
set DEVICE attrTemplate speechcontrol_type_light_255
farewell:template has been applied successfully. <br>Note: webCmd and eventMap are just examples; adopt this to your needs.
attr DEVICE model wled_controller
setreading DEVICE attrTemplateVersion 20211220 or prior
Die dazu passende Moduldatei befindet sich im Anhang.
@Beta-User: Sofern von Dir für gut erachtet könnte diese Version dann Einzug ins SVN halten.
Danke.
Gruß
Dan
Zitat von: ComputerZOO am 20 Dezember 2021, 13:47:46
Werde die Tage mal mit json2nameValue() spielen...
Frage an die Experten, kann sein das ich auch völlig daneben liege, theoretisch könnte man doch beliebigen Perlcode hinter dem Topic in der rL eines Devices ausführen, wichtig ist doch nur das j2nv die Referenz auf den Hash zurückgibt ?
Wenn ich sowas versuche, startet FHEM neu:
wled/538e36/g:.* {HttpUtils_NonblockingGet({url=>"http://192.168.188.95/json",callback=>sub($$$){my ($hash,$err,$data) = @_;json2namevalue($data,"",$JSONMAP,"ver|col");}})}
Mit json2reading erhalte ich die gewünschten Readings problemlos:
{HttpUtils_NonblockingGet({
url=>"http://192.168.188.95/json",
callback=>sub($$$){
my ($hash,$err,$data) = @_;;
json2reading($defs{Device1},$data,"",undef,"","ver|col");;'done'
}})}
Wenn es mit j2nv nicht gehen sollte, ist es möglich mit dem vierten Parameter von j2r die Readingnamen anzupassen, wenn ja wie genau ?
Wieso nicht mit dem dritten Parameter und $JSONMAP? Der wird via EvalSpecials übergeben (https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/10_MQTT2_DEVICE.pm#L185).
Ist mir zu hoch wie das jetzt gemeint ist.
Vlt. erstmal ganz langsam und vorne angefangen.
Warum stürzt Fhem ab bei der Variante mit j2nv in der RL ?
Die Parameter sind mMn. korrekt angegeben und mit dem Attribut jsonMap könnte man umbenennen.
Warum FHEM abschmiert sollte im Log stehen, ich würde darauf tippen, dass j2nv() "in der Luft" hängt, weil es dazu gemacht ist, einen Hash zurückzugeben, und nicht, ein Device zu füllen (das ist ein zeitlich entkoppelter callback, wenn ich das nicht komplett missverstehe).
Aber den Hash aus dem Internal JSONMAP gibt MQTT2_DEVICE in die Evaluierung des Perl-Codes weiter, wenn man die "Variable" $JSONMAP reinschreibt. Das ist nicht auf j2nv() begrenzt, sondern generischer Natur.
OK, wenn man j2nv richtig schreibt stürzt Fhem nicht mehr ab, die gewünschten Readings bleiben aber aus.
wled/538e36/c:.* {HttpUtils_NonblockingGet({url=>"http://192.168.188.95/json",callback=>sub($$$){my ($hash,$err,$data) = @_;json2nameValue($data,"",$JSONMAP,"ver|col");}})}
Zitat von: Beta-User am 20 Dezember 2021, 16:56:13
... weil es dazu gemacht ist, einen Hash zurückzugeben, und nicht, ein Device zu füllen
Nee , Referenz, keinen Hash und mit der Begrifflichkeit
füllen komm ich wieder nicht ganz mit.
Mit füllen verstehe ich Readings erstellen, irgendwie korreliert das doch mit der Aussage von damals:
Zitat von: rudolfkoenig am 07 August 2020, 15:49:17
Ich meine ja: json2nameValue liefert eine Referenz auf ein "flaches" Hash zurueck, was aus "Name"=>"Wert" Paaren besteht.
Es dient nicht dazu, JSON in Perl Datenstrukturen zu verwandeln, sondern um JSON Daten nach FHEM Readings bzw. Events zu konvertieren.
OK, es gibt die Referenz auf einen Hash zurück. Hier aber innerhalb eines "callback", also einer Funktion, die zeitlich entkoppelt irgendwann was zurückliefert, aber eben nicht mehr innerhalb des aufrufenden Codes, der dann wüßte, was er mit der Referenz auf einen Hash anstellen soll. Die irgendwann später (wohin) abgelieferte Referenz weiß nicht mehr, was mit ihr geschehen soll...
Und ja, mit "Füllen" war Reading aus der Referenz ableiten gemeint.
Ich bin nicht sicher, dass ich das Problem verstehe (ich habe den Faden seit eine Weile verloren), aber waere nicht json2reading() was fuer euch?
ZitatHier aber innerhalb eines "callback", also einer Funktion, die zeitlich entkoppelt irgendwann was zurückliefert, aber eben nicht mehr innerhalb des aufrufenden Codes, der dann wüßte, was er mit der Referenz auf einen Hash anstellen soll. Die irgendwann später (wohin) abgelieferte Referenz weiß nicht mehr, was mit ihr geschehen soll...
Danke, für die Erklärung, so irgendwie hatte ich mir das zuvor zusammengereimt das es sein würde.
Dann halt mit json2reading, dazu hab ich die Erklärung dann aber nicht verstanden, zu wenig Verständnis anhand des gezeigten Code abzuleiten wie das anzugehen wäre die Namen anzupassen
Zitat von: rudolfkoenig am 20 Dezember 2021, 17:22:48
Ich bin nicht sicher, dass ich das Problem verstehe (ich habe den Faden seit eine Weile verloren), aber waere nicht json2reading() was fuer euch?
In #161 steht der JSON, in #168 mein Ansatz ( der auch funzt), jetzt nur noch ordentliche Namen bitte. :P
ZitatDann halt mit json2reading, dazu hab ich die Erklärung dann aber nicht verstanden, zu wenig Verständnis anhand des gezeigten Code abzuleiten wie das anzugehen wäre die Namen anzupassen
Statt
json2nameValue($data,"",$JSONMAP,"ver|col")
koennte man
my $hash = $defs{<DEVICENAME>};; json2reading($hash, $data, "", $hash->{JSONMAP},undef,"ver|col")
probieren.
Der zweite JSONMAP ist deswegen so komisch, weil ich nicht sicher bin, ob die Variable $JSONMAP beim Ausfuehrung des Callbacks zu Verfuegung steht.
Kann das jemand pruefen?
:) Thx
Die Frage ist welchen Topicpfad wählt man um den Code auszuführen und welche Namen.
Das interessiert mich aber recht wenig, weil ich das nicht brauche und ungerne mit Licht beschäftige.
Hier der Code der bei mir klappt:
wled/538e36/c:.* {HttpUtils_NonblockingGet({url=>"http://192.168.188.95/json",callback=>sub($$$){my ($hash,$err,$data) = @_;my $hash = $defs{$NAME}; json2reading($hash, $data, "", $hash->{JSONMAP},undef,"ver|col");}})}
@ComputerZoo
Du wolltest das haben, mit dem Attribut jsonMap kann man die Readingnamen anpassen, mach mal Vorschläge.
Natürlich hab ich nicht ins Log geschaut gehabt, auch wenn die Readings angelegt wurden gibts diese Meldung im Log:
2021.12.20 18:31:32 1: PERL WARNING: "my" variable $hash masks earlier declaration in same scope at (eval 46622) line 1.
2021.12.20 18:31:32 3: eval: my $CID= $evalSpecials->{'%CID'};my $DEVICETOPIC= $evalSpecials->{'%DEVICETOPIC'};my $EVENT= $evalSpecials->{'%EVENT'};my $EVTPART0= $evalSpecials->{'%EVTPART0'};my $JSONMAP= $evalSpecials->{'%JSONMAP'};my $NAME= $evalSpecials->{'%NAME'};my $TOPIC= $evalSpecials->{'%TOPIC'};{HttpUtils_NonblockingGet({url=>"http://192.168.188.95/json",callback=>sub($$$){my ($hash,$err,$data) = @_;;my $hash = $defs{$NAME};; json2reading($hash, $data, "", $hash->{JSONMAP},undef,"ver|col");;}})}
So klappts auch ohne Meldung:
wled/538e36/c:.* {HttpUtils_NonblockingGet({url=>"http://192.168.188.95/json",callback=>sub($$$){my ($hash,$err,$data) = @_; json2reading($defs{$NAME}, $data, "", $hash->{JSONMAP},undef,"ver|col");}})}
Es wuerde mich wundern, wenn $hash->{JSONMAP} das Richtige referenziert.
Mein Vorschlag:
wled/538e36/c:.* {HttpUtils_NonblockingGet({url=>"http://192.168.188.95/json",callback=>sub(){json2reading($defs{$NAME},$_[2],"",$defs{$NAME}{JSONMAP},undef,"ver|col");}})}
Wobei wenn $NAME funktioniert, dann sollte auch $JSONMAP direkt funktionieren.
(Sorry fuer den Hickhack, aber ein Testsystem aufzusetzen ist mir zu aufwendig).
Keine Meldung im Log, die Readings werden geschrieben, jsonMap funktioniert auch.
Zitat von: DeeSPe am 20 Dezember 2021, 15:42:48
@Beta-User: Sofern von Dir für gut erachtet könnte diese Version dann Einzug ins SVN halten.
...ist drin. Habe nur noch sehr kleine Kleinigkeiten angepaßt :) .
Zitat von: Beta-User am 21 Dezember 2021, 10:04:09
...ist drin. Habe nur noch sehr kleine Kleinigkeiten angepaßt :) .
Merci!
Gruß
Dan
Während ich mich vorhin mit etwas ganz anderem beschäftigt habe ist mir aufgefallen dass das ermitteln der IP viel simpler zu bewerkstelligen sein könnte.
my $ip = InternalVal($dev,$io.'_CONN',ReadingsVal($dev,'ip', undef)) =~ m/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/x ? $1 : return defined $event ? $c : undef;
=>
my $ip = InternalVal(InternalVal($dev,$io.'_CONN','none'),'PEER','none') // return defined $event ? $c : undef;
einfach nur auslesen, wäre doch auch eine Variante oder nicht ? ;D 8) :P
Den Ersatzwert mit ReadingsVal($dev,'ip', undef) versteh ich nicht, das Reading gibts doch nicht und wird auch nicht irgendwo geschrieben.
Die Regex sichert ab, dass was "sinnvolles" da steht, und das Reading gibt es zwar nicht, aber man kann es mit "setreading" setzen.
(Falls sich jemand fragt, wofür man das "braucht": es steht bereits hier im Thread ;) )
ZitatDie Regex sichert ab, dass was "sinnvolles" da steht,
Du meinst wenn die MQTT2_Server-Verbindung nicht aktiv/definiert ist ? ja dann hinkt der Vorschlag.
Zitatund das Reading gibt es zwar nicht, aber man kann es mit "setreading" setzen.
Ja ist es vergessen worden zu schreiben ? So steht einfach nur die Abfrage eines Readings im Ersatzwert das es gar nicht gibt ?
Zitat von: TomLee am 21 Dezember 2021, 17:04:09
Ja ist es vergessen worden zu schreiben ? So steht einfach nur die Abfrage eines Readings im Ersatzwert das es gar nicht gibt ?
Vorschläge zur Verbesserung der Doku (= attrTemplate-Text, in diesem Fall) nehme ich gerne entgegen...
ZitatVorschläge zur Verbesserung der Doku (= attrTemplate-Text, in diesem Fall) nehme ich gerne entgegen...
Das Reading ip im Device reicht mMn. völlig aus so wie man das aus anderen Devices auch gewohnt ist, ich verstehe nicht was es da zu dokumentieren gibt / wo wir aneinander vorbeireden.
a) Na ja, du schreibst zurecht: in der Regel gibt es das Reading nicht.
b) Nutzt man MQTT2_SERVER braucht man es nicht, weil die IP-Adresse aus den vorhandenen Daten abgeleitet werden kann.
c) Man braucht es nur in einem Fall, aber dann muss man es händisch setzen.
So jedenfalls mein Verständnis.
Der Fall c) ist nicht dokumentiert, oder?
Zitatc) Man braucht es nur in einem Fall, aber dann muss man es händisch setzen.
So jedenfalls mein Verständnis.
Der Fall c) ist nicht dokumentiert, oder?
Ich hab jetzt nochmal alle Beiträge überflogen in diesem Faden in denen ip vorkommt, ich steh weiterhin auf dem Schlauch was diesen einen geheimnisvollen ;D Fall angeht, sry ich verstehs nicht.
M2C als IO...
Zitat von: TomLee am 20 Dezember 2021, 18:06:44
@ComputerZoo
Du wolltest das haben, mit dem Attribut jsonMap kann man die Readingnamen anpassen, mach mal Vorschläge.
:o :o :o
Wir kommen der Sache schon näher...
tele/$DEVICETOPIC/c:.* { { "color"=>substr("$EVENT", 1, 6)} }
erstellt mir ja das Reading für die (primäre) Farbe.
Jetzt wäre es natürlich schön, wenn es ähnlich dazu eine
color2nd und
color3rd geben würde die direkt den umgerechneten HEX-Wert beinhalten.
(Ich habe dazu hier im Forum mal diesen Code adaptiert:
###############################################################################################
#
# wandelt Dezimale Werte in Hexadezimale Farbwerte um.
# dec2hex("0-255 0-255 0-255");
# z.B. "255, 0, 255" oder "255 0 255" ergibt als Rückgabewert ff00ff
#
sub dec2hex($;$) {
my ($color, $format) = @_;
my $dividerChar = " ";
$dividerChar = "," if ($color =~ /\,/);
$format = "lc" if (!$format);
my ($redValue, $greenValue, $blueValue) = split($dividerChar, $color);
customLog("./log/dec2hex.log", 3, "color: ".$color." red: ".$redValue." green: ".$greenValue." blue: ".$blueValue);
$redValue = sprintf("%02x", $redValue);
$greenValue = sprintf("%02x", $greenValue);
$blueValue = sprintf("%02x", $blueValue);
return "$redValue$greenValue$blueValue" if ($format eq "lc");
return uc($redValue).uc($greenValue).uc($blueValue) if ($format eq "uc");
}
und in der 99_myUtils.pm für verschiedene Dinge eingebunden).
Alternativ wäre es natürlich schön, wenn Aircoookie diese Werte direkt als MQTT-Topic zurückgeben würde...
EDIT: Sehe gerade das es sich bei der (übergebenen, primären) Farbe ja um ein eigenes Topic handelt...
Hallo,
hab da an kleines Problem ich will WLED mit MQTT
einzelne Segmente ansteuern
--> ich habe eine LED über eine wand wo in der Mitte eine Tür ist jetzt will ich wenn an der Tür der Rollladen auf oder zu geht genau in diesem Segment dualscan rot/grün, aber unabhängig von links und rechts
seg 0 = 0-55
seg 1 = 55-85
seg 2 = 85-150
jetzt kann ich die Segmente zwar ändern also Farbe und Effekt Geschwindigkeit bekomm ich geändert aber wie schalte ich die Segmente an und aus?
/win&SM=1&SS=1&S2=85&FX=11&R=0&G=0&B=255&W=0&SX=100
SM= das Segment 1 aktivieren
SS= Segment 1 aktivieren für Änderungen
S2= ende vom Segment ... ?! => brauch ich das --> die Segmente sind doch schon Konfiguriert
FX= Effekt DualScan
R= rot
G= grün
B= blau
W= weiß
SX= Geschwindigkeit
hat mir jemand an Beispiel wie ich die Segmente einzeln schalten kann?!
Grüße
AET
Habs hin bekommen läuft bei mir jetzt mit den json befehlen geht das!
diese kann man auch ganz einfach herauskopieren wenn man in der web Oberfläche den gewünschten Effekt und Farbe Geschwindigkeit einstellt und dann hinter die ip "/json/state" schreibt dann wird einem für jedes Segment der json code angezeigt!
Ich habe dann meine WLED in FHEM um die api Schnittstelle erweitert jetzt kann ich die befehle ganz einfach über FHEM absetzen!
Zitat von: AET_FHEM am 14 Januar 2022, 06:50:23
...
Ich habe dann meine WLED in FHEM um die api Schnittstelle erweitert jetzt kann ich die befehle ganz einfach über FHEM absetzen!
Wie genau hast du das gemacht?
Hallo,
ich bin auch sehr begeistert von dem was hier entwickelt wurde, echt genial.
Könnte mir jemand Helfen beim Befehl helfen? Was muss man eingeben um Bsp. nur LED 1 anzuschalten und auf Farbe FFFFFF zu setzen.
Danke.
set MQTT2_WLED.... seg 1 FFFFFF ???? (geht nicht)
Hallo,
ich benutze das Template mit Google Home. Leider gelingt es mir nicht, das Brightness funktioniert. Der aktuelle Wert wird nicht angezeigt und ist auch nicht wählbar.
Und hat es wer hinbekommen, das ich ein Preset wählbar machen kann ?
lg.
Holger
Zitat von: Icebear am 14 März 2022, 22:32:29
Und hat es wer hinbekommen, das ich ein Preset wählbar machen kann ?
Zwar keine unmittelbare Antwort auf deine Fragen...
Wäre es nicht sinnvoll, statt der "preset.*"-Setter "scene"-Befehle anzubieten (anaog HUEDevice)? Zumindest RHASSPY würde daraus sprechbare Anweisungen generieren können...
(Dass brightness von der "großen Lösung" nicht als setter erkannt wird, finde ich seltsam).
Hallo und frohe Ostern erstmal,
ich habe 4 Verschiedene WLED-Ketten jetzt erfolgreich über MQTT in mein FHEM Project einbinden Können.
Das funktionierte mit dem mqtt2.template super gut. In der Weboberfläche von WLED gibt es einen Sync Button
den ich gerne über FHEM schalten möchte. Ist das irgendwie möglich?
gruß Lucca
Ich bin nicht immer der schnellste aber habe es endlich selbst gefunden.
Für die Cracks hier natürlich kein Ding aber für alle Rookies die wie ich kämpfen ...
set "myWLED" apiraw SN=1 (sync send einschalten)
set "myWLED" apiraw SN=0 (sync send ausschalten)
Quelle: https://github.com/Aircoookie/WLED/wiki/HTTP-request-API/016cb11efcf27dbd9d288d2c57b262b233a14b1f (https://github.com/Aircoookie/WLED/wiki/HTTP-request-API/016cb11efcf27dbd9d288d2c57b262b233a14b1f)
Kann mir irgendwer zeigen wie man eine transition-Zeit beim einschalten mitgibt, ich verstehs/komm bis jetzt nicht drauf und weiter.
Gruß
Thomas
Man kann einen default Wert unter LED-Preferences-->Transitions->Transition Time angeben, wäre auch OK für mich, bleibt trotzdem die Frage bei mir ob man über das MQTT2-Device diesen Wert überschreiben/mitgeben kann. Aus der Doku werd ich, wie gesagt, nicht schlauer.
Zitat von: TomLee am 30 September 2022, 21:56:13
Kann mir irgendwer zeigen wie man eine transition-Zeit beim einschalten mitgibt, ich verstehs/komm bis jetzt nicht drauf und weiter.
Gruß
Thomas
Hi, ich übergebe den Wert im setList folgendermaßen:
off-timer:selectnumbers,0,1,120,0,lin tele/$DEVICETOPIC/api NT=0&NL=$EVTPART1&NF=1
Spricht was dagegen die IP, zur weiteren Verwendung bspw. in der DeviceOverview, im Template in ein Reading zu schreiben ?
99_attrT_WLED_Utils.pm:
Zitat
...
my $io = InternalVal($dev,'LASTInputDev',AttrVal($dev,'IODev',InternalVal($dev,'IODev',undef)->{NAME})) // return defined $event ? $c : undef;
my $ip = InternalVal($dev,$io.'_CONN',ReadingsVal($dev,'ip', undef)) =~ m/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/x ? $1 : return defined $event ? $c : undef;
HttpUtils_NonblockingGet({
url=>"http://$ip/json",
callback=>sub($$$){
my ($hash,$err,$data) = @_;
WLED_setReadings($dev,$data,$ip);
}
});
return defined $event ? $c : undef;
}
sub WLED_setReadings {
my $dev = shift // return;
my $data = shift // return;
my $ip = shift // return;
my $fx = $data =~ m/effects..\[([^[]*?)]/x ? WLED_subst($1) : '';
my $pl = $data =~ m/palettes..\[([^[]*?)]/x ? WLED_subst($1) : '';
my $hash = $defs{$dev};
my @f = split m{,}, $fx;
my @p = split m{,}, $pl;
readingsBeginUpdate($hash);
readingsBulkUpdate($hash,'effectname',$f[ReadingsNum($dev,'effect',0)]);
readingsBulkUpdate($hash,'palettename',$p[ReadingsNum($dev,'palette',0)]);
readingsBulkUpdate($hash,'ip',$ip);
readingsEndUpdate($hash,1);
readingsBeginUpdate($hash);
readingsBulkUpdateIfChanged($hash,'.effectscount',(scalar @f)-1);
readingsBulkUpdateIfChanged($hash,'.effects',$fx);
readingsBulkUpdateIfChanged($hash,'.palettescount',(scalar @p)-1);
readingsBulkUpdateIfChanged($hash,'.palettes',$pl);
readingsEndUpdate($hash,0);
return;
...
}
Hi,
wenn ich übers WLED Template mit dem Brightness-Schieberegler die Helligkeit verstelle bekomme ich im Fhem Log folgenden Eintrag:
PERL WARNING: Argument "set 200" isn't numeric in numeric lt (<) at FHEM/Color.pm line 508.
Mir ist aufgefallen, dass das Reading für den Bruchteil einer Sekunde den Wert "set 200" annimmt und dann sofort auf 200 wechselt. 200 ist in meinem Beispiel der Wert den der Schieberegler übergibt. Im WLED wird die gewünschte Helligkeit aber korrekt übernommen.
Kann man das kurzzeitige "set" aus dem Reading irgendwie blockieren?
Zitat von: psycho160 am 23 Oktober 2022, 20:05:32
Kann man das kurzzeitige "set" aus dem Reading irgendwie blockieren?
Nicht wirklich geschickt. Aber man kann Color.pm patchen: https://forum.fhem.de/index.php/topic,123614.msg1182727.html#msg1182727
(Ich muss justme1968 dazu nochmal anhauen).
ZitatAber man kann Color.pm patchen: https://forum.fhem.de/index.php/topic,123614.msg1182727.html#msg1182727
Stimmt ist der gleiche Fehler, hatte ich mit der Suche nicht gefunden. Hoffe dein Patch findet seinen Weg ins Modul ;) ::)
Ich weiß nicht ob ich es einfach nur überlesen habe oder Blind bin. Aber wie bekomme ich eigentlich die Aktuellen Werte von WLED ausgelesen, wenn ich sie mit einen DOIF ändern will und danach zurück zu den Einstellungen die ich vorher gesetzt hatte?
Edit: Ich habs nun so mit nen DOIF gelöst: define di_aqi_medium DOIF ([MYSENSOR_2:PM10:avg60] < 90) (set MQTT2_WLED_tischlampe apiraw &PS=250) (set MQTT2_WLED_tischlampe apiraw &GP=1&CL=#ffe100&FP=0&FX=100) (set MQTT2_WLED_tischlampe apiraw &PL=250)
attr di_aqi_medium wait 0,5,5
# CFGFN
# DEF ([MYSENSOR_2:PM10:avg60] < 90) (set MQTT2_WLED_tischlampe apiraw &PS=250) (set MQTT2_WLED_tischlampe apiraw &GP=1&CL=#ffe100&FP=0&FX=100) (set MQTT2_WLED_tischlampe apiraw &PL=250)
Sprich ich speichere den aktuellen State über die API in Preset 250, geb ihn 5sek zeit dafür, mach das was ich machen will und switch dann zurück auf das gespeicherte Preset. Ist zwar nicht schön aber funktioniert wunderbar.
Übrigens ist in RGB Wert nen Bug drin, wenn man mehrende Segmente benutz, so wie ich bei dieser Installation. Es ändert die Farbe generell nur für das erste segment statt alle, weswegen ich es über das Group Listing gelöst habe.
Hallo Alle,
@DeeSPe danke für dein Template.
mir ist aufgefallen, dass palette und effect nur funktioniert, wenn /Device/Topic keine Großbuchstaben hat.
lg Andreas
Zitat von: nussa am 16 Januar 2023, 09:56:20
Hallo Alle,
@DeeSPe danke für dein Template.
mir ist aufgefallen, dass palette und effect nur funktioniert, wenn /Device/Topic keine Großbuchstaben hat.
lg Andreas
Wie ist dir das aufgefallen?
Im Code wird nirgends etwas an Groß-/Kleinschreibung verändert.
Gruß
Dan
Hallo,
ich habe mich gewundert warum ich keine Effekte oder die paletten umstellen konnte.
ich hatte als mqtt topic wlen/WZ1
als ich mit dem mqtt explorer mitgeschaut habe, ist mir aufgefallen, dass das topic wled/wz1/api=FX=67 gechickt wird, wenn ich z.B. "set MQTT2_wled_WZ1 effectname Colorwaves" sende.
mit dem set effect 67 wird richtig wled/WZ1/api=FX=67 geschickt und es geht.
das einfachste war WZ1 auf wz1 zu ändern, dann klappt es.
anbei ein bildschirmfoto vom mqtt explorer.
lg Andreas
Zitat von: nussa am 16 Januar 2023, 13:15:46
ich hatte als mqtt topic wlen/WZ1
als ich mit dem mqtt explorer mitgeschaut habe, ist mir aufgefallen, dass das topic wled/wz1/api=FX=67 gechickt wird, wenn ich z.B. "set MQTT2_wled_WZ1 effectname Colorwaves" sende.
mit dem set effect 67 wird richtig wled/WZ1/api=FX=67 geschickt und es geht.
das einfachste war WZ1 auf wz1 zu ändern, dann klappt es.
Das scheint aber kein Problem vom Template zu sein, sondern eher ein spezifisches MQTT_(SERVER|CLIENT) Problem?Kenne mich damit aber zu wenig aus.
Gruß
Dan
Zitat von: DeeSPe am 16 Januar 2023, 13:37:17
Das scheint aber kein Problem vom Template zu sein, sondern eher ein spezifisches MQTT_(SERVER|CLIENT) Problem.
Hmm, wenn man die Daten richtig anliefert, werden die ja auch richtig übermittelt, oder habe ich das falsch interpretiert?
Glaube eher, dass es an dem lc in https://svn.fhem.de/trac/browser/trunk/fhem/contrib/AttrTemplate/99_attrT_WLED_Utils.pm#L102 liegt ;) .
Zitat von: Beta-User am 16 Januar 2023, 13:42:20
Glaube eher, dass es an dem lc in https://svn.fhem.de/trac/browser/trunk/fhem/contrib/AttrTemplate/99_attrT_WLED_Utils.pm#L102 liegt ;) .
Ist mir wohl beim Überfliegen entfallen.
Wenn ich mir das so angucke weiß ich gar nicht wirklich warum das "lc" da überhaupt drin ist.
@nussa:
Könntest Du mal probieren ob es klappt wenn Du Zeile 102 so abänderst?
my $wled = InternalVal($dev,'CID',undef) // return;
Gruß
Dan
Hallo Dan,
das wars, funktioniert!
danke!!
lg Andreas
Zitat von: nussa am 16 Januar 2023, 17:05:38
Hallo Dan,
das wars, funktioniert!
danke!!
lg Andreas
Ja super!
Leider funktioniert es damit bei mir nicht mehr! :D
Eine Lösung die für alle funktioniert wäre aber besser!
Ich habe die WLED_set Funktion noch einmal überarbeitet wie sie nun hoffentlich bei uns beiden funktionieren sollte.
Könntest Du bitte testweise mal die komplette Funktion durch diese hier ersetzen und noch einmal testen?
sub WLED_set {
my $dev = shift // return;
my $read = shift // return;
my $val = shift // return;
my $cid = InternalVal($dev,'CID',undef) // return;
my @wled = split('_',$cid);
my $arr = ReadingsVal($dev,'.'.$read.'s',undef) // return WLED_get($dev);
my $top = lc($wled[0]).'/'.$wled[1].'/api F';
$top .= $read eq 'effect'?'X=':'P=';
my $id;
my $i = 0;
for (split(',',$arr)){
if ($_ ne $val) {
$i++;
next;
} else {
$id = $i;
last;
}
}
return defined $id ? $top.$id : undef;
}
Bei mir klappt's damit wieder wie vorher und bei Dir sollte es nun auch mit einem groß geschriebenen Topic funktionieren.
Gruß
Dan
Guten Morgen,
funktioniert bei mir.
lg Andreas
Zitat von: nussa am 17 Januar 2023, 08:05:00
Guten Morgen,
funktioniert bei mir.
lg Andreas
Danke fürs Testen Andreas.
@Beta-User:
Könntest Du bitte bei Gelegenheit die Funktion so abändern und einchecken?
Zitat von: DeeSPe am 16 Januar 2023, 18:22:52
sub WLED_set {
my $dev = shift // return;
my $read = shift // return;
my $val = shift // return;
my $cid = InternalVal($dev,'CID',undef) // return;
my @wled = split('_',$cid);
my $arr = ReadingsVal($dev,'.'.$read.'s',undef) // return WLED_get($dev);
my $top = lc($wled[0]).'/'.$wled[1].'/api F';
$top .= $read eq 'effect'?'X=':'P=';
my $id;
my $i = 0;
for (split(',',$arr)){
if ($_ ne $val) {
$i++;
next;
} else {
$id = $i;
last;
}
}
return defined $id ? $top.$id : undef;
}
Vielen Dank.
Gruß
Dan
Zitat@Beta-User:
Könntest Du bitte bei Gelegenheit die Funktion so abändern und einchecken?
Und den Vorschlag aus #206 die IP in ein Reading zu schreiben ?
Zitat von: TomLee am 17 Januar 2023, 12:20:13
Und den Vorschlag aus #206 die IP in ein Reading zu schreiben ?
Klar, kann man auch machen! Sorry, hatte da nicht mehr dran gedacht.
Aber eigentlich steht ja die IP schon im Internal "IODev_CONN", dort allerdings noch mit Pre- und Suffix.
Von mir aus kann die IP aber auch noch in ein Reading geschrieben werden. Dann würde ich das Reading allerdings nur neu schreiben wenn es sich auch geändert hat, denn es ist ja im Normalfall nicht davon auszugehen dass sich die IP bei jedem Abruf ändert.
Zitatsub WLED_get {
my $dev = shift // return;
my $event = shift // undef;
my $c;
my $h = {
sx => 'speed',
ix => 'intensity',
fp => 'palette',
fx => 'effect',
ps => 'preset'
};
for (keys %{$h}) {
next if $event !~ m/(?<=<$_>)([\d]+)(?=<\/$_>)/x;
if ($1 != ReadingsNum($dev,$h->{$_},-2)){
$c->{$h->{$_}} = $1;
}
}
my $io = InternalVal($dev,'LASTInputDev',AttrVal($dev,'IODev',InternalVal($dev,'IODev',undef)->{NAME})) // return defined $event ? $c : undef;
my $ip = InternalVal($dev,$io.'_CONN',ReadingsVal($dev,'ip', undef)) =~ m/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/x ? $1 : return defined $event ? $c : undef;
HttpUtils_NonblockingGet({
url=>"http://$ip/json",
callback=>sub($$$){
my ($hash,$err,$data) = @_;
WLED_setReadings($dev,$data,$ip);
}
});
return defined $event ? $c : undef;
}
sub WLED_setReadings {
my $dev = shift // return;
my $data = shift // return;
my $ip = shift // return;
my $fx = $data =~ m/effects..\[([^[]*?)]/x ? WLED_subst($1) : '';
my $pl = $data =~ m/palettes..\[([^[]*?)]/x ? WLED_subst($1) : '';
my $hash = $defs{$dev};
my @f = split(',',$fx);
my @p = split(',',$pl);
readingsBeginUpdate($hash);
readingsBulkUpdate($hash,'effectname',$f[ReadingsNum($dev,'effect',0)]);
readingsBulkUpdate($hash,'palettename',$p[ReadingsNum($dev,'palette',0)]);
readingsEndUpdate($hash,1);
readingsBeginUpdate($hash);
readingsBulkUpdateIfChanged($hash,'.effectscount',(scalar @f)-1);
readingsBulkUpdateIfChanged($hash,'.effects',$fx);
readingsBulkUpdateIfChanged($hash,'.palettescount',(scalar @p)-1);
readingsBulkUpdateIfChanged($hash,'.palettes',$pl);
readingsBulkUpdateIfChanged($hash,'ip',$ip);
readingsEndUpdate($hash,0);
return;
}
@Beta-User:
Anbei mal die komplette geänderte Datei.Gruß
Dan
Hmm, vielleicht noch ein paar (zu?) schnelle Gedanken von meiner Seite:
- Wenn man die IP über die Connection ausliest, setzt das zwingend einen MQTT2_SERVER voraus und funktioniert mit MQTT2_CLIENT nicht (was ich vermutlich in einer Woche vergessen haben werde). Von daher würde ich eher dazu neigen, die IP beim Anwenden des attrTemplate auszulesen (versuchsweise), oder eben alternativ vom User eingeben zu lassen. Speichern dann als Reading*?
- Das mit der Groß- und Kleinschreibung ist auch irgendwie seltsam; eigentlich wäre es besser, auch diese Angabe direkt im attrTemplate ermitteln zu lassen (M2C kennt die CID nicht...), und dann wieder irgendwo zwischenzuspeichern. Da das Teil des Topics ist, wäre ggf. auch $DEVICETOPIC ein möglicher Speicherort.
*Da M2D zwischenzeitlich auch die Option bietet, mehrere deviceTopics anzugeben, könnte man so auch die IP in ein Attribut verlagern. Stellt sich nur die Frage des "Regel-/Ausnahmeverhältnisses". Da anscheinend bisher die Zahl der M2C-Nutzer in der Minderheit ist, würde man mit dem Internal anfangen, und wenn das nichts liefert, deviceTopic anzapfen?
Ist es so in der Art gemeint ?
Zitat#source post: https://forum.fhem.de/index.php/topic,98880.msg995308.html#msg995308
name:wled_controller
filter:TYPE=MQTT2_DEVICE
desc:To control a WLED device, see https://github.com/Aircoookie/WLED/wiki for details).
order:W_01
{ Svn_GetFile('contrib/AttrTemplate/99_attrT_WLED_Utils.pm', 'FHEM/99_attrT_WLED_Utils.pm', sub(){ CommandReload(undef, '99_attrT_WLED_Utils') }) }
par:BASE_ID;BASE_ID typically is wled;{ AttrVal('DEVICE','readingList','') =~ m,([^:]+)[/][^/]+[/][^/]+:, ? $1 : undef }
par:DEVNAME;Device name as configured;{ AttrVal('DEVICE','readingList','') =~ m,[^:]+[/]([^/]+)[/][^/]+:, ? $1 : undef }
par:ICON;ICON as set, defaults to hue_filled_iris;{ AttrVal('DEVICE','icon','hue_filled_iris') }
par:IP;Insert Controller-IP ;{ InternalVal(AttrVal('MQTT2_wled_55da2c','IODev',InternalVal('MQTT2_wled_55da2c','IODev',undef)->{NAME}),'TYPE',undef) ne 'MQTT2_SERVER' ? undef : 1 }
attr DEVICE icon ICON
attr DEVICE setList\
on:noArg BASE_ID/DEVNAME on\
off:noArg BASE_ID/DEVNAME off\
toggle:noArg BASE_ID/DEVNAME t\
rgb:colorpicker,RGB BASE_ID/DEVNAME/col #$EVTPART1\
brightness:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME/api A=$EVTPART1\
dimup:noArg BASE_ID/DEVNAME/api A=~10\
dimdown:noArg BASE_ID/DEVNAME/api A=~-10\
speed:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME/api SX=$EVTPART1\
intensity:colorpicker,BRI,0,1,255 BASE_ID/DEVNAME/api IX=$EVTPART1\
effect:{'selectnumbers,0,1,'.ReadingsNum($name,'.effectscount',5).',0,lin'} BASE_ID/DEVNAME/api FX=$EVTPART1\
effectname:{'select,'.join(',',sort(split(',',ReadingsVal($name,'.effects','Solid,Police'))))} {FHEM::attrT_WLED_Utils::WLED_set($NAME,'effect',$EVTPART1)}\
effect_next:noArg BASE_ID/DEVNAME/api FX=~1\
effect_prev:noArg BASE_ID/DEVNAME/api FX=~-1\
effect_random:noArg BASE_ID/DEVNAME/api FX=r\
effect_reset:noArg BASE_ID/DEVNAME/api FX=0\
palette:{'selectnumbers,0,1,'.ReadingsNum($name,'.palettescount',5).',0,lin'} BASE_ID/DEVNAME/api FP=$EVTPART1\
palettename:{'select,'.join(',',sort(split(',',ReadingsVal($name,'.palettes','Default,Party'))))} {FHEM::attrT_WLED_Utils::WLED_set($NAME,'palette',$EVTPART1)}\
palette_next:noArg BASE_ID/DEVNAME/api FP=~1\
palette_prev:noArg BASE_ID/DEVNAME/api FP=~-1\
palette_random:noArg BASE_ID/DEVNAME/api FP=r\
palette_reset:noArg BASE_ID/DEVNAME/api FP=0\
preset:selectnumbers,0,1,15,0,lin BASE_ID/DEVNAME/api PL=$EVTPART1\
apiraw BASE_ID/DEVNAME/api $EVTPART1\
seg BASE_ID/DEVNAME/api {'seg':{'i':[$EVTPART1,[$EVTPART2]]}}
attr DEVICE readingList \
BASE_ID/DEVNAME/status:.* LWT\
BASE_ID/DEVNAME/g:.* brightness\
BASE_ID/DEVNAME/g:.* {$EVENT ? {state => 'on'} : {state => 'off'}}\
BASE_ID/DEVNAME/c:.* {{rgb => substr($EVENT,1,6)}}\
BASE_ID/DEVNAME/v:.* {FHEM::attrT_WLED_Utils::WLED_get($NAME,$EVENT)}
deletereading -q DEVICE (?!associatedWith|IODev).*
attr DEVICE devStateIcon {ReadingsVal($name,'LWT','offline') eq 'offline' ? '.*:message_attention@red' : Color::devStateIcon($name,'rgb','rgb','brightness','state')}
attr DEVICE webCmd rgb:brightness:effectname:speed:intensity:palettename:preset
attr DEVICE webCmdLabel RGB:Brightness\
:Effect:Speed:Intensity\
:Palette:Preset
attr DEVICE setStateList on off toggle dimdown dimup effect_prev effect_next effect_random palette_prev palette_next palette_random palette_reset effect_reset
attr DEVICE comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
set DEVICE attrTemplate speechcontrol_type_light_255
setreading DEVICE ip IP
farewell:template has been applied successfully. <br>Note: webCmd and eventMap are just examples; adopt this to your needs.
attr DEVICE model wled_controller
setreading DEVICE attrTemplateVersion 20211220
In der Art schon, im Detail sollte dann schon eine IP kommen und keine 1 ;) ... (Ähnlich dem, was in dem Code steht, wobei "undef" vermutlich kein guter default ist).
Upps, Denkfehler mit dem setreading wenn es ein MQTT2_SERVER ist und auf Anhieb keine Idee wie man das setreading dann nicht ausführt ::)
Zitat von: TomLee am 17 Januar 2023, 16:40:14
... Anhieb keine Idee wie man das setreading dann nicht ausführt ::)
Doch 2-3 Minuten nachdem ich das geschrieben hatte:
Irgendwie dacht ich der Code aus der Utils soll dann am Ende das Reading schreiben 8)
Also ganz einfach direkt im Template auch bei Verwendung von MQTT2_SERVER die IP mit setreading setzen ? :
par:IP;Insert Controller-IP ;{ my $ip =InternalVal('DEVICE',InternalVal('DEVICE','LASTInputDev',AttrVal('DEVICE','IODev',InternalVal('DEVICE','IODev',undef)->{NAME})).'_CONN',ReadingsVal('DEVICE','ip', undef)) =~ m/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/x ? $1 : return undef;InternalVal(AttrVal('DEVICE','IODev',InternalVal('DEVICE','IODev',undef)->{NAME}),'TYPE',undef) ne 'MQTT2_SERVER' ? undef : $ip }
Zitat von: TomLee am 17 Januar 2023, 17:11:00
Also ganz einfach direkt im Template auch bei Verwendung von MQTT2_SERVER die IP mit setreading setzen ? :
Ja, oder eben noch eine RADIO-Option einbauen und den Teil bei M2S überspringen?
ZitatJa, oder eben noch eine RADIO-Option einbauen und den Teil bei M2S überspringen?
Weiß nicht ob ich dich richtig verstehe, du meinst ein Optionsfeld für die Frage nach "Do you want to assign a Reading IP" bei Verwendung von MQTT2_CLIENT und bei M2S gleich im Template die IP setzen ?
Hab mich mit der RADIO-Option nicht wirklich beschäftigt seit dem daß das letzte mal Thema war, wenn ich das jetzt aber so mal kurz wieder angeschaut habe und glaube zu verstehen, drängt sich mir jetzt die Frage auf, ob man es nicht einfach dem User überlässt, ob er ein ip-Reading haben möchte oder nicht ?
Wie wäre es mit einer "Option" bei beiden IODevs ? Bei M2C hat man die Wahl eine IP anzugeben bei Auswahl der Option und bei M2S wird bei Auswahl der Option das Reading einfach aus dem Internal .*_CONN "geschrieben" ?
Hmm, nach etwas Nachdenken über den Code:
- Ist M2S im Spiel, gibt es das Internal und alles ist gut, auf das Reading wird ja im Code nur ersatzweise zugegriffen;
- Ist M2C als IO im Einsatz, braucht man das Reading, und zwar möglichst aktuell => update per Code, solange M2S im Einsatz ist ist sinnvoll, falls nie M2S im Einsatz war, ist es wichtig, die Botschaft an den Mann zu bringen, dass man das Reading braucht => abfragen.
Werde daher das Ganze mehr oder weniger in der jetzigen Form bei Gelegenheit einchecken.
Habe jetzt mal was eingecheckt, aber nachdem der Komplettcode jetzt nicht mehr da war, bin ich unsicher, ob das jetzt so paßt oder nicht...
Zitat von: Beta-User am 25 Januar 2023, 21:56:42
Habe jetzt mal was eingecheckt, aber nachdem der Komplettcode jetzt nicht mehr da war, bin ich unsicher, ob das jetzt so paßt oder nicht...
Sieht m.E. gut aus.
Danke Dir!
Gruß
Dan
Wenn es OK ist es (https://forum.fhem.de/index.php?msg=1280697) so umzusetzen, hätte ich das erste Mal :P, den Versuch, einen Patch für die mqtt2.template anzubieten (hoffentlich hab ich nix übersehen):
Index: FHEM/lib/AttrTemplate/mqtt2.template
===================================================================
--- FHEM/lib/AttrTemplate/mqtt2.template (Revision 27732)
+++ FHEM/lib/AttrTemplate/mqtt2.template (Arbeitskopie)
@@ -5306,7 +5306,8 @@
palette_reset:noArg BASE_ID/DEVNAME/api FP=0\
preset:selectnumbers,0,1,15,0,lin BASE_ID/DEVNAME/api PL=$EVTPART1\
apiraw BASE_ID/DEVNAME/api $EVTPART1\
- seg BASE_ID/DEVNAME/api {'seg':{'i':[$EVTPART1,[$EVTPART2]]}}
+ seg BASE_ID/DEVNAME/api {'seg':{'i':[$EVTPART1,[$EVTPART2]]}}\
+ seg_name_0 {$EVENT =~ s/^$EVTPART0.//;return qq(BASE_ID/DEVNAME/api {"seg":[{"id":0,"n":"$EVENT"]}})}
attr DEVICE readingList \
BASE_ID/DEVNAME/status:.* LWT\
BASE_ID/DEVNAME/g:.* brightness\
@@ -5319,13 +5320,13 @@
attr DEVICE webCmdLabel RGB:Brightness\
:Effect:Speed:Intensity\
:Palette:Preset
-attr DEVICE setStateList on off toggle dimdown dimup effect_prev effect_next effect_random palette_prev palette_next palette_random palette_reset effect_reset
+attr DEVICE setStateList ignore
attr DEVICE comment For questions about the use of different widgets for color selection see discussion at https://forum.fhem.de/index.php/topic,98880.msg995308.html
set DEVICE attrTemplate speechcontrol_type_light_255
setreading DEVICE ip IPADDRESS
farewell:template has been applied successfully. Note: webCmd and eventMap are just examples; adopt this to your needs.
attr DEVICE model wled_controller
-setreading DEVICE attrTemplateVersion 20230125
+setreading DEVICE attrTemplateVersion 20230708
THX, eingecheckt.
Allerdings verstehe ich das "ignore" in setStateList nicht so ganz und habe da die Basisbefehle (on/off/toggle) drin gelassen. Einwände?
Zitat... habe da die Basisbefehle (on/off/toggle) drin gelassen. Einwände?
Wir hatten da aber nicht nur die Basisbefehle drin, sondern alle setter ergänzt zu denen nix zurückkommt.
Hab das noch in Erinnerung das du da gemeckert hast, mir (und DeeSPe sah das ja auch so) passt es aber nicht das es dann die Readings gibt wo dann nur das set_... drin steht.
Mit ignore spart man sich die Liste zu pflegen/ergänzen.
ZitatIf this attribute is set to ignore, then a set command will not affect any reading in the device.
THX, hatte ich nicht mehr auf dem Schirm, sorry.
Mir fällt das jetzt an einer anderen Definition auf und ich geb zu alle Readings zu verhindern nicht optimal ist.
Man müsste angeben können ignoriere alle, bis auf die Basisbefehle.
Zitat von: TomLee am 16 Juli 2023, 11:26:41Mir fällt das jetzt an einer anderen Definition auf und ich geb zu alle Readings zu verhindern nicht optimal ist.
Man müsste angeben können ignoriere alle, bis auf die Basisbefehle.
Hmmmm, ich glaube das Problem erfühlen zu können, aber dazu fällt mir in der Tat keine einfache Lösung ein. Im Zweifel sollte man mit zu vielen Readings leben und ggf. einen periodicCmd definieren, der die überflüssigen regelmäßig entsorgt?
Ansonsten mal Rudi anstupsen, vielleicht fällt ihm was zielführendes ein (aber vermutlich nicht ohne ein "plakatives Beispiel" (das auch noch repräsentativ ist))?!?