Hauptmenü

Esp und WLED

Begonnen von Maddin81, 04 Mai 2021, 13:14:26

Vorheriges Thema - Nächstes Thema

Maddin81

Hallo Liebe Forumsgemeinde,
Ich versuche seit Tagen einen LED Stripe vom Typ ws2812, der mittels ESP8266 per Wled/Aircookie gesteuert wird in Fhem einzubinden. Ich habe es über das ESPeasy Modul versucht aber auch über einen mqtt2 Server. Da Fhem für mich ein Hobby ist( mir macht es einfach Spaß "zu basteln" und wenn es nachher läuft) habe ich keine erweiterten Kenntnisse in Programmierung oder ähnlichem, nur ein bisschen Fhem,-Erfahrung. Daher wäre ich auf eine Art Anleitung angewiesen,  da ich selber nicht abschätzen kann, wo ich denn einen Fehler mache. Irgendwie muss der ESP ja wissen, dass er Daten an Fhem senden muss. Hat jemand eine Idee wie man das macht oder kann mir einen Tipp geben, wie man vorgeht oder wo es eine Anleitung gibt?
Vielen Dank für eure Unterstützung
Martin S.

TomLee

#1
Eigentlich nur den MQTT2_SERVER definieren, in dem UI von WLED unter SYNC INTERFACES MQTT aktivieren,die IP deines FHEM-Server  und den verwendeten Port der MQTT2_SERVER-Definition (default 1883) angeben, wenn User/Passwort in der MQTT2_SERVER-Definition vergeben hast, dann auch hier eintragen, speichern

In FHEM sollte dann nach einmal schalten oder Neustart von WLED automatisch ein neues MQTT2_DEVICE angelegt, auf das wendest dann das wled_controller-Template an ( set < WLEDDEVICENAME> attrTemplate wled_controller), fertig.

Hier noch meine Definition, die enthält zusätzlich noch ein userReadings der Effectnamen, welches im Template nicht enthalten ist:

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
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: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")}
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 off
setstate MQTT2_WLED_TV 2021-05-03 14:24:48 IODev MQTT2_Server
setstate MQTT2_WLED_TV 2021-05-04 00:02:09 LWT online
setstate MQTT2_WLED_TV 2021-05-04 00:02:09 api <?xml version="1.0" ?><vs><ac>0</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>66</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-05-04 00:02:09 brightness 0
setstate MQTT2_WLED_TV 2021-04-25 20:28:37 effect 45
setstate MQTT2_WLED_TV 2021-04-25 20:28:38 effectname Fire Flicker
setstate MQTT2_WLED_TV 2021-04-25 20:28:38 effectnumber 118
setstate MQTT2_WLED_TV 2021-04-24 22:53:09 intensity 66
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-05-04 00:02:09 rgb FFA000
setstate MQTT2_WLED_TV 2021-04-24 22:53:07 speed 128
setstate MQTT2_WLED_TV 2021-05-04 00:02:09 state off


Gruß

Thomas


Maddin81

Hey Thomas,
wirklich ganz herzlichen Dank. Hat auf Anhieb geklappt!
Viele Grüße
Martin