[Gelöst] MQTT für WLED, rgb reading mit # klappt nicht

Begonnen von stefanru, 22 März 2019, 21:16:26

Vorheriges Thema - Nächstes Thema

Beta-User

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.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

#61
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 !?


stefanru

Hmm,

warum ging es bei mir?
Habe ich noch irgendwo ein Template vom Testen das vom Update nicht überschrieben wird?

Gruß,
Stefan

TomLee

Zu dem effect-setter hier 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 in der Doku beschrieben, da ist was durcheinander denke ich (duration mit delay vertauscht).

Gruß

Thomas

stefanru

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

Beta-User

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
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

stefanru

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

TomLee

Die readinglist mit ReadingsVal hab ich getestet, passt.

Was die  MQTT-Implemetierung angeht einfach hier den ersten Satz lesen und bei mehr Interesse dem Link in dem Satz folgen.

stefanru

Ah ok,
cool.

Danke für die Info TomLee.

Gruß,
Stefan

stefanru

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

TomLee

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.

stefanru

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


sinus61

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.

sinus61

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

Beta-User

Habe mal versucht, das in die template-file zu integrieren, bitte um Rückmeldung, ob das so klappt bzw. ob noch was fehlt...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files