Hi,
steh auf dem Schlauch, weiß auch noch nicht ob ich bei der Lösung über eine Datei bleibe (geht auch über HTTPMOD), möchte jetzt aber auch wissen ob es gehen könnte.
Kann ich über die ReadingList eines MQTT2_DEVICE mit json2namevalue auch den JSON, der sich in einer lokalen Datei befindet, in Readings auflösen ?
JSON:
{"items":[{"isin":"BLI","name":"HANS","count":30,"quote_watch":3.272,"quote_current":3.18,"change_day":-3.34,"change_total":-2.80},{"isin":"BLA","name":"WURST","count":260,"quote_watch":2.591,"quote_current":2.31,"change_day":+0.11,"change_total":-10.85}]}
Meine bisherigen Gedanken dazu:
{ my ($error, @content) = FileRead({FileName => "/opt/fhem/example", ForceType => "file"});json2nameValue($content[0],'',$JSONMAP,'name|quote_current')}
Und jetzt ist die Frage wie man das mit dem ersten Parameter in ReadingList löst, in dem normal die topic:message oder cid:topic:message Pfade angegeben werden ?
Möglich oder nicht ?
Gruß
Thomas
So in der Art (mit at nur beispielhaft) denke ich/ist meine Wunschvorstellung sollte man einen ReadingList-Eintrag doch vornehmen können ?
Wird aber noch von der Syntaxprüfung moniert, an irgendwas denk ich aber auch bestimmt wieder nicht:
{fhem("define bla at +*00:00:30 {my ($error, @content) = FileRead({FileName => "/opt/fhem/example", ForceType => "file"})};return $content[0]"). "{json2nameValue($EVENT,'',$JSONMAP,'name|quote_current')}"}
Oder kann man die Einträge in ReadingList nicht komplett in Perl angeben ?
Verstehe vieles nicht, vmtl. ist das hier auch sowas wie https://tty1.net/smart-questions_de.html#goal
Wenn ich rate:
define bla at +*00:00:30 {json2reading($defs{bla},`cat /opt/fhem/example`)}
Auf die Schnelle:
Du hast schon ganz genau verstanden, sonst würdest du nicht eine fertige Lösung präsentieren wollen ( :P)
Nach meinem letzten Post kam mir wieder das Beispiel mit lmao (https://forum.fhem.de/index.php/topic,109430.msg1034185.html#msg1034185) (also json2reading, wie jetzt gezeigt) in Erinnerung, nur versteh ich jetzt wie damals wenig, muss ich mich mit beschäftigen.
Im Log steht jetzt :
2020.10.11 21:06:46 1: Error parsing >cat /opt/fhem/example< for
mit:
defmod bla at +*00:00:30 {json2reading($defs{bla},'cat /opt/fhem/example')}
setstate bla Next: 21:08:16
setstate bla 2020-10-11 21:07:46 state Next: 21:08:16
example ist ein symlink !
das userreadings in einem dummy macht was es soll:
bla:on { my ($error, @content) = FileRead({FileName => "/opt/fhem/quotes", ForceType => "file"}); return $content[0]}
Wenn schon kopieren, dann bitte richtig: ` und ' haben in perl unterschiedliche Bedeutung.
Im Shell uebrigens auch.
gezeigt hast du es mit `, damit gabs die gleiche Meldung, darum hatte ich sie geändert in '.
Ich versuchs später nochmal, kann jetzt nicht.
JsonMod kann auch local files lesen und parsen.
So.
Hab vorsichtshalber nochmal ein update gemacht.
Wenn ich ' verwende steht
2020.10.11 23:00:59 1: Error parsing >cat /opt/fhem/example< for
im Log.
mit `
cat: /opt/fhem/example: Datei oder Verzeichnis nicht gefunden
2020.10.11 23:03:55 1: Error parsing >< for
Ich weiß jetzt gerade auch nicht was ich mehr dazu sagen soll.
Nochmals bspw. die Definition mit `:
defmod bla at +*00:00:30 {json2reading($defs{bla},`cat /opt/fhem/example`)}
setstate bla Next: 23:07:25
setstate bla 2020-10-11 23:06:55 state Next: 23:07:25
Zitat
JsonMod kann auch local files lesen und parsen.
Ja. Danke. Aus dem Bauchgefühl dacht ich mir das zuvor auch schon, muss mich mal mit beschäftigen.
8)
Habs. Es darf kein symlink sein. Wenn ich auf eine Datei direkt zugreife klappts.
Danke Dir.
Sehr cool !
Es bleibt aber bei einer Fehlermeldung:
2020.10.11 23:29:29 1: Error parsing >+0.11,"change_total":-10.85< for change_day
"cat filename" kann den Inhalt ueber Symlink lesen (das ist der Sinn eines Symlinks), das Problem muss anderswo liegen, z.Bsp. Symlink nicht da oder zeigt nicht richtig.
Nach https://www.json.org/json-en.html ist +0.11 nicht gueltig, + darf nur im Exponent vorkommen.
Das mit der Verküpfung hab ich eigentlich nur für mich zum Verständnis gemacht, mir war bisher nicht klar das man nur die Berechtigungen der Verknüpfungen anpassen muss um auf eine Datei zuzugreifen die einem anderen User ist.
Zitat
Symlink nicht da oder zeigt nicht richtig.
Darum hatte ich oben gleich erwähnt das der Zugriff über die Verknüpfung aus einem userReadings mit Fileread problemlos klappt:
defmod du_WatchList dummy
attr du_WatchList setList on off
attr du_WatchList userReadings bla:on { my ($error, @content) = FileRead({FileName => "/opt/fhem/example", ForceType => "file"});; return $content[0]}
setstate du_WatchList on
setstate du_WatchList 2020-10-12 13:36:07 bla {"items":[{"isin":"BLI","name":"HANS","count":30,"quote_watch":3.272,"quote_current":3.18,"change_day":-3.34,"change_total":-2.80},{"isin":"BLA","name":"WURST","count":260,"quote_watch":2.591,"quote_current":2.31,"change_day":+0.11,"change_total":-10.85}]}
setstate du_WatchList 2020-10-12 13:36:07 state on
So sieht die Verknüpfung aus:
lrwxrwxrwx 1 fhem dialout 48 Okt 11 14:09 example -> /home/pi/bli-bla-stock-scraper/data/example.json
So die Zieldatei:
-rw-r--r-- 1 pi pi 289 Okt 11 14:04 example.json
In der fhem.pl sehe (aber nicht vestehe) ich an sechster stelle was von filter.
Wenn das wirklich gehen sollte, umginge man dann die Meldung
Error parsing >+0.11,"change_total":-10.85< for change_day
oder kommt die dann trotzdem, brauchen würd ich die zwei Werte vermutlich eh nicht, oder bleibt dann bloss verbose 1|2 ?
weil so mit '
+*00:00:30 {json2reading($defs{bla},`cat /opt/fhem/example.json`,'','','','isin|name|quote_current|count')}
oder auch mit " klappts bisher nicht, dann steht im Log:
2020.10.12 13:25:04 1: Error parsing >+0.11,"change_total":-10.85< for change_day
2020.10.12 13:25:04 1: ERROR evaluating {json2reading($defs{bla},`cat /opt/fhem/example.json`,"","","","isin|name|quote_current|count")}: Can't use string ("") as a HASH ref while "strict refs" in use at fhem.pl line 5303.
ZitatWenn das wirklich gehen sollte, umginge man dann die Meldung
Das geht zwar wirklich, aber erst _nachdem_ ein Feld samt Wert erfolgreich identifiziert wurde.
Und das geht in deinem Fall schief wegen kaputten JSON. Ich weiss nicht, ob andere Parser da toleranter sind, oder ob ich meinem "Parser" das + beibringen soll, obwohl es nicht dem Spec entspricht. Bin z.Zt. noch dagegen.
Und das geht in deinem Fall schief wegen kaputten JSON.
Komm noch nicht ganz mit jetzt. Der JSON ist kaputt wegen dem + richtig ? auch wegen dem - ?
egal, weil ich hab die Zeichen einfach mal entfernt um zu schauen ob filter dann greift.
{"items":[{"isin":"BLI","name":"HANS","count":30,"quote_watch":3.272,"quote_current":3.18,"change_day":3.34,"change_total":2.80},{"isin":"BLA","name":"WURST","count":260,"quote_watch":2.591,"quote_current":2.31,"change_day":0.11,"change_total":10.85}]}
Weder
defmod bla at +*00:00:30 {json2reading($defs{bla},`cat /opt/fhem/example.json`,'','','','isin|name|quote_current|count')}
noch
defmod bla at +*00:00:30 {json2reading($defs{bla},`cat /opt/fhem/example.json`,"","","","isin|name|quote_current|count")}
greift.
Die Meldungen sind mit ' und " gleich.
Erste Meldung mit ', zweite mit ":
2020.10.12 14:49:25 1: ERROR evaluating {json2reading($defs{bla},`cat /opt/fhem/example.json`,'','','','isin|name|quote_current|count')}: Can't use string ("") as a HASH ref while "strict refs" in use at fhem.pl line 5303.
2020.10.12 14:49:25 3: bla: Can't use string ("") as a HASH ref while "strict refs" in use at fhem.pl line 5303.
2020.10.12 14:50:24 1: ERROR evaluating {json2reading($defs{bla},`cat /opt/fhem/example.json`,"","","","isin|name|quote_current|count")}: Can't use string ("") as a HASH ref while "strict refs" in use at fhem.pl line 5303.
2020.10.12 14:50:24 3: bla: Can't use string ("") as a HASH ref while "strict refs" in use at fhem.pl line 5303.
Zitat
Bin z.Zt. noch dagegen
wegen meinem Beispiel muss man da auch gar nix ändern daran, mir gefällt die Lösung die Werte über diesen "Scraper" (Script oder wie auch immer man das Programm nennt über das ich diese Datei erhalte) eigentlich gar nicht (bis jetzt), HTTPMOD sagt mir da mehr zu (mein ich, bis jetzt).
Die Meldungen sind mit ' und " gleich.
" verwendet man, wo man Variablenersetzung haben will, und ' wo man das vermeiden will. Als Leerstring sind "" und '' identisch.
Parameter #4 ist ein Hashzeiger, und falls man es nicht spezifizieren will, muss als undef oder als {} uebergeben werden:
{json2reading($defs{bla},`cat /opt/fhem/example.json`,"",undef,"","isin|name|quote_current|count")}
Danke, auch für die erweiterten Erläuterungen.
So klappts jetzt, wenn der JSON korrekt wäre (ohne Plus).
Auch mit der Verknüpfung.
An einen anderen Adressaten:
Zitat" verwendet man, wo man Variablenersetzung haben will, und ' wo man das vermeiden will.
Aha, les ich jetzt hier raus das man sie schon auch verwenden
darf (die ", wenn man eine Variable angibt) wenn man möchte
oder auch weg lassen, sonst gäbs die Regel ja nicht.
unnötig (wie ich mir hab vorwerfen lassen müssen vor ein paar Wochen) damals vermutlich die falsche Wortwahl gewesen, wenn man sie verwendet !?
Ich mal wieder und mag kein weiteres Thema aufmachen, für mich ist das verwandt und ich weiß wo ich später irgendwann wieder nachlesen kann.
Vorab ich hab eigentlich gar nichts bestimmtes vor, versteh halt leider nur ganz langsam json2reading/json2nameValue.
Ziel/ die Frage hier ist wie man die Werte eines bestimmten Namen eines JSON am einfachsten in einem Reading erhält.
Mit json2reading oder json2nameValue ? <- ja genauso wenig hab ich bisher verstanden.
Hier (https://github.com/Aircoookie/WLED/wiki/JSON-API) ist die JSON-API beschrieben, die mir unter der Adresse http://192.168.188.52/json (http://192.168.188.52/json) folgenden JSON ausgibt:
{"state":{"on":true,"bri":128,"transition":7,"ps":1,"pss":0,"pl":-1,"ccnf":{"min":1,"max":5,"time":12},"nl":{"on":false,"dur":60,"fade":true,"mode":1,"tbri":0,"rem":-1},"udpn":{"send":false,"recv":true},"lor":0,"mainseg":0,"seg":[{"id":0,"start":0,"stop":20,"len":20,"grp":1,"spc":0,"on":true,"bri":255,"col":[[255,160,0],[0,0,0],[0,0,0]],"fx":45,"sx":128,"ix":128,"pal":0,"sel":true,"rev":false,"mi":false}]},"info":{"ver":"0.11.1","vid":2012180,"leds":{"count":20,"rgbw":false,"wv":false,"pin":[2],"pwr":332,"maxpwr":850,"maxseg":12,"seglock":false},"str":false,"name":"WLED","udpport":21324,"live":false,"lm":"","lip":"","ws":0,"fxcount":116,"palcount":55,"wifi":{"bssid":"FE:EC:DA:FD:26:1A","rssi":-48,"signal":100,"channel":3},"fs":{"u":40,"t":1024,"pmt":0},"arch":"esp8266","core":"2_7_4_7","lwip":1,"freeheap":23232,"uptime":41,"opt":127,"brand":"WLED","product":"FOSS","mac":"5ccf7f53d765"},"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","Sparkle+","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","Red & Blue","Stream",
"Scanner","Lighthouse","Fireworks","Rain","Merry Christmas","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"
],"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"
]}
Aus dem JSON will ich aus dem Namen effects die Werte, kommasepariert, ohne Hochkomma.
Mit json2reading erhalte ich die Werte in einzelnen Readings:
defmod at_wled1 at +*00:00:30 { HttpUtils_NonblockingGet( { url=>"http://192.168.188.52/json", callback=>sub($$$) { my ($hash, $err, $data) = @_;; json2reading($defs{at_wled1},$data,"",undef,"","effect") } }) }
attr at_wled1 room Test
setstate at_wled1 Next: 14:07:27
setstate at_wled1 2021-01-02 14:06:57 effects_1 Solid
setstate at_wled1 2021-01-02 14:06:57 effects_10 Rainbow
setstate at_wled1 2021-01-02 14:06:57 effects_100 Ripple Rainbow
setstate at_wled1 2021-01-02 14:06:57 effects_101 Heartbeat
setstate at_wled1 2021-01-02 14:06:57 effects_102 Pacifica
setstate at_wled1 2021-01-02 14:06:57 effects_103 Candle Multi
setstate at_wled1 2021-01-02 14:06:57 effects_104 Solid Glitter
setstate at_wled1 2021-01-02 14:06:57 effects_105 Sunrise
setstate at_wled1 2021-01-02 14:06:57 effects_106 Phased
setstate at_wled1 2021-01-02 14:06:57 effects_107 Twinkleup
setstate at_wled1 2021-01-02 14:06:57 effects_108 Noise Pal
setstate at_wled1 2021-01-02 14:06:57 effects_109 Sine
setstate at_wled1 2021-01-02 14:06:57 effects_11 Scan
setstate at_wled1 2021-01-02 14:06:57 effects_110 Phased Noise
setstate at_wled1 2021-01-02 14:06:57 effects_111 Flow
setstate at_wled1 2021-01-02 14:06:57 effects_112 Chunchun
setstate at_wled1 2021-01-02 14:06:57 effects_113 Dancing Shadows
setstate at_wled1 2021-01-02 14:06:57 effects_114 Washing Machine
setstate at_wled1 2021-01-02 14:06:57 effects_115 Candy Cane
setstate at_wled1 2021-01-02 14:06:57 effects_116 Blends
setstate at_wled1 2021-01-02 14:06:57 effects_12 Scan Dual
setstate at_wled1 2021-01-02 14:06:57 effects_13 Fade
setstate at_wled1 2021-01-02 14:06:57 effects_14 Theater
setstate at_wled1 2021-01-02 14:06:57 effects_15 Theater Rainbow
setstate at_wled1 2021-01-02 14:06:57 effects_16 Running
setstate at_wled1 2021-01-02 14:06:57 effects_17 Saw
setstate at_wled1 2021-01-02 14:06:57 effects_18 Twinkle
setstate at_wled1 2021-01-02 14:06:57 effects_19 Dissolve
setstate at_wled1 2021-01-02 14:06:57 effects_2 Blink
setstate at_wled1 2021-01-02 14:06:57 effects_20 Dissolve Rnd
setstate at_wled1 2021-01-02 14:06:57 effects_21 Sparkle
setstate at_wled1 2021-01-02 14:06:57 effects_22 Sparkle Dark
setstate at_wled1 2021-01-02 14:06:57 effects_23 Sparkle+
setstate at_wled1 2021-01-02 14:06:57 effects_24 Strobe
setstate at_wled1 2021-01-02 14:06:57 effects_25 Strobe Rainbow
setstate at_wled1 2021-01-02 14:06:57 effects_26 Strobe Mega
setstate at_wled1 2021-01-02 14:06:57 effects_27 Blink Rainbow
setstate at_wled1 2021-01-02 14:06:57 effects_28 Android
setstate at_wled1 2021-01-02 14:06:57 effects_29 Chase
setstate at_wled1 2021-01-02 14:06:57 effects_3 Breathe
setstate at_wled1 2021-01-02 14:06:57 effects_30 Chase Random
setstate at_wled1 2021-01-02 14:06:57 effects_31 Chase Rainbow
setstate at_wled1 2021-01-02 14:06:57 effects_32 Chase Flash
setstate at_wled1 2021-01-02 14:06:57 effects_33 Chase Flash Rnd
setstate at_wled1 2021-01-02 14:06:57 effects_34 Rainbow Runner
setstate at_wled1 2021-01-02 14:06:57 effects_35 Colorful
setstate at_wled1 2021-01-02 14:06:57 effects_36 Traffic Light
setstate at_wled1 2021-01-02 14:06:57 effects_37 Sweep Random
setstate at_wled1 2021-01-02 14:06:57 effects_38 Running 2
setstate at_wled1 2021-01-02 14:06:57 effects_39 Red & Blue
setstate at_wled1 2021-01-02 14:06:57 effects_4 Wipe
setstate at_wled1 2021-01-02 14:06:57 effects_40 Stream
setstate at_wled1 2021-01-02 14:06:57 effects_41 Scanner
setstate at_wled1 2021-01-02 14:06:57 effects_42 Lighthouse
setstate at_wled1 2021-01-02 14:06:57 effects_43 Fireworks
setstate at_wled1 2021-01-02 14:06:57 effects_44 Rain
setstate at_wled1 2021-01-02 14:06:57 effects_45 Merry Christmas
setstate at_wled1 2021-01-02 14:06:57 effects_46 Fire Flicker
setstate at_wled1 2021-01-02 14:06:57 effects_47 Gradient
setstate at_wled1 2021-01-02 14:06:57 effects_48 Loading
setstate at_wled1 2021-01-02 14:06:57 effects_49 Police
setstate at_wled1 2021-01-02 14:06:57 effects_5 Wipe Random
setstate at_wled1 2021-01-02 14:06:57 effects_50 Police All
setstate at_wled1 2021-01-02 14:06:57 effects_51 Two Dots
setstate at_wled1 2021-01-02 14:06:57 effects_52 Two Areas
setstate at_wled1 2021-01-02 14:06:57 effects_53 Circus
setstate at_wled1 2021-01-02 14:06:57 effects_54 Halloween
setstate at_wled1 2021-01-02 14:06:57 effects_55 Tri Chase
setstate at_wled1 2021-01-02 14:06:57 effects_56 Tri Wipe
setstate at_wled1 2021-01-02 14:06:57 effects_57 Tri Fade
setstate at_wled1 2021-01-02 14:06:57 effects_58 Lightning
setstate at_wled1 2021-01-02 14:06:57 effects_59 ICU
setstate at_wled1 2021-01-02 14:06:57 effects_6 Random Colors
setstate at_wled1 2021-01-02 14:06:57 effects_60 Multi Comet
setstate at_wled1 2021-01-02 14:06:57 effects_61 Scanner Dual
setstate at_wled1 2021-01-02 14:06:57 effects_62 Stream 2
setstate at_wled1 2021-01-02 14:06:57 effects_63 Oscillate
setstate at_wled1 2021-01-02 14:06:57 effects_64 Pride 2015
setstate at_wled1 2021-01-02 14:06:57 effects_65 Juggle
setstate at_wled1 2021-01-02 14:06:57 effects_66 Palette
setstate at_wled1 2021-01-02 14:06:57 effects_67 Fire 2012
setstate at_wled1 2021-01-02 14:06:57 effects_68 Colorwaves
setstate at_wled1 2021-01-02 14:06:57 effects_69 Bpm
setstate at_wled1 2021-01-02 14:06:57 effects_7 Sweep
setstate at_wled1 2021-01-02 14:06:57 effects_70 Fill Noise
setstate at_wled1 2021-01-02 14:06:57 effects_71 Noise 1
setstate at_wled1 2021-01-02 14:06:57 effects_72 Noise 2
setstate at_wled1 2021-01-02 14:06:57 effects_73 Noise 3
setstate at_wled1 2021-01-02 14:06:57 effects_74 Noise 4
setstate at_wled1 2021-01-02 14:06:57 effects_75 Colortwinkles
setstate at_wled1 2021-01-02 14:06:57 effects_76 Lake
setstate at_wled1 2021-01-02 14:06:57 effects_77 Meteor
setstate at_wled1 2021-01-02 14:06:57 effects_78 Meteor Smooth
setstate at_wled1 2021-01-02 14:06:57 effects_79 Railway
setstate at_wled1 2021-01-02 14:06:57 effects_8 Dynamic
setstate at_wled1 2021-01-02 14:06:57 effects_80 Ripple
setstate at_wled1 2021-01-02 14:06:57 effects_81 Twinklefox
setstate at_wled1 2021-01-02 14:06:57 effects_82 Twinklecat
setstate at_wled1 2021-01-02 14:06:57 effects_83 Halloween Eyes
setstate at_wled1 2021-01-02 14:06:57 effects_84 Solid Pattern
setstate at_wled1 2021-01-02 14:06:57 effects_85 Solid Pattern Tri
setstate at_wled1 2021-01-02 14:06:57 effects_86 Spots
setstate at_wled1 2021-01-02 14:06:57 effects_87 Spots Fade
setstate at_wled1 2021-01-02 14:06:57 effects_88 Glitter
setstate at_wled1 2021-01-02 14:06:57 effects_89 Candle
setstate at_wled1 2021-01-02 14:06:57 effects_9 Colorloop
setstate at_wled1 2021-01-02 14:06:57 effects_90 Fireworks Starburst
setstate at_wled1 2021-01-02 14:06:57 effects_91 Fireworks 1D
setstate at_wled1 2021-01-02 14:06:57 effects_92 Bouncing Balls
setstate at_wled1 2021-01-02 14:06:57 effects_93 Sinelon
setstate at_wled1 2021-01-02 14:06:57 effects_94 Sinelon Dual
setstate at_wled1 2021-01-02 14:06:57 effects_95 Sinelon Rainbow
setstate at_wled1 2021-01-02 14:06:57 effects_96 Popcorn
setstate at_wled1 2021-01-02 14:06:57 effects_97 Drip
setstate at_wled1 2021-01-02 14:06:57 effects_98 Plasma
setstate at_wled1 2021-01-02 14:06:57 effects_99 Percent
setstate at_wled1 2021-01-02 14:06:57 state Next: 14:07:27
Ist es mit json2reading auch möglich mein einzelnes gwünschtes Reading zu erhalten ?
Oder muss ich dazu json2nameValue verwenden ?
Hier (https://forum.fhem.de/index.php/topic,111711.msg1075723.html#msg1075723) hab ich mir mal was zusammengereimt gehabt, denke so komm ich auch zum Ziel, geht es aber auch anders und vorallem kürzer ?
Am Ende denk ich, hab ja noch nix bestimmtes vor :P, mag ich das Reading in einem MQTT2_DEVICE erhalten, das stell ich mir vor dann über userReadings zu machen, lieg ich damit richtig ?
edit:
Achso,
ein gutes Neues Jahr wünsch ich noch.
Hallo Tom,
ich habe es jetzt noch nicht genau durchschaut, aber ist das nicht so ähnlich wie mein Ansatz hier? https://forum.fhem.de/index.php/topic,116480.msg1108234.html#msg1108234
Also den einen Teil eines Json erstmal komplett erhalten und dann weitermachen?
Ein gesundes neues Jahr
Otto
Schon, ganz genau, wollt ich eigentlich auch verlinken, hab ich dann aber doch nicht.
Werd aber das Gefühl nicht los, das wir uns da was zusammengereimt haben und es kürzer umzusetzen geht.
Man kann zwar json2nameValue sagen, dass sie filtern oder umbenennen soll, aber nicht, dass sie an einer Stelle aufhoeren soll mit dem "Verstehen" (d.h. Parsen/Auseinandernehmen) des JSONs. Das Auseinandergenommene kann man wieder zusammenbauen (join("," values %{$h}), aber das ist in der Summe weder einfacher noch performanter, als mit einem Regexp (wie vom Otto verlinkt) das Benoetigte zu extrahieren.
Jetzt hab ich ein Verständnisproblem, kann mir bitte jemand erläutern warum ich in dem u.a. Fall $1 nur mit print ins LogFile schreiben kann und nicht direkt ausgegeben wird ?
{ HttpUtils_NonblockingGet( { url=>"http://192.168.188.52/json", callback=>sub($$$) { my ($hash, $err, $data) = @_;; $data =~ m,effects..\[([^[]*?)], ? $1 : undef } }) }
edit1:
Ok liegt wohl daran das das match innerhalb von HttpUtils_NonblockingGet in den geschweiften Klammern gemacht wird, weil so ist das kein Problem:
{my $EVENT=qq({"state":{"on":true,"bri":128,"transition":7,"ps":1,"pss":0,"pl":-1,"ccnf":{"min":1,"max":5,"time":12},"nl":{"on":false,"dur":60,"fade":true,"mode":1,"tbri":0,"rem":-1},"udpn":{"send":false,"recv":true},"lor":0,"mainseg":0,"seg":[{"id":0,"start":0,"stop":20,"len":20,"grp":1,"spc":0,"on":true,"bri":255,"col":[[255,160,0],[0,0,0],[0,0,0]],"fx":45,"sx":128,"ix":128,"pal":0,"sel":true,"rev":false,"mi":false}]},"info":{"ver":"0.11.1","vid":2012180,"leds":{"count":20,"rgbw":false,"wv":false,"pin":[2],"pwr":332,"maxpwr":850,"maxseg":12,"seglock":false},"str":false,"name":"WLED","udpport":21324,"live":false,"lm":"","lip":"","ws":0,"fxcount":116,"palcount":55,"wifi":{"bssid":"FE:EC:DA:FD:26:1A","rssi":-48,"signal":100,"channel":3},"fs":{"u":40,"t":1024,"pmt":0},"arch":"esp8266","core":"2_7_4_7","lwip":1,"freeheap":23232,"uptime":41,"opt":127,"brand":"WLED","product":"FOSS","mac":"5ccf7f53d765"},"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","Sparkle+","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","Red & Blue","Stream",
"Scanner","Lighthouse","Fireworks","Rain","Merry Christmas","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"
],"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"
]});;$EVENT =~ m,effects..\[([^[]*?)], ? $1 : undef}
Mir ist aber trotzdem noch nicht klar wie ich jetzt weiter vorgehen soll.
edit2:
Wenn man drüber nachdenkt, könnt ich mir vorstellen das es klappt könnte in dem man das Ergebnis der Funktion in eine Variable steckt und die dann ausgibt, klappt aber nicht mit qq und ":
{ my $v= qq(HttpUtils_NonblockingGet( { url=>"http://192.168.188.52/json", callback=>sub($$$) { my ($hash, $err, $data) = @_;; $data =~ m,effects..\[([^[]*?)], ? $1 : undef } }));;$v }
{ my $v= "HttpUtils_NonblockingGet( { url=>"http://192.168.188.52/json", callback=>sub($$$) { my ($hash, $err, $data) = @_;; $data =~ m,effects..\[([^[]*?)], ? $1 : undef } })";;$v }
NonBlocking_Get wird im "Hintergrund", ohne eine Verbindung zum aktuellen Ausgabekanal erledigt.
Man kann zwar den Ausgabekanal irgendwo hinterlegen, und darauf dann referenzieren, aber das erfordert extra Arbeit/Code.
Ist so aehnlich wie beim at, notify, etc.
Was aber klappt ist direkt in ein Reading schreiben, statt ins LogFile :)
{ HttpUtils_NonblockingGet( { url=>"http://192.168.188.52/json", callback=>sub($$$) { my ($hash, $err, $data) = @_;; $data =~ m,effects..\[([^[]*?)], ? fhem("setreading MQTT2_WLED_TV effects $1") : undef } }) }
Nach dem schreiben gestern hab ich mir Gedanken gemacht was ich will und das ist eigentlich nur die Anzahl der Werte.
Die brauch ich bei meinem FB-Code in einem Array das der Wert nicht statisch ist (genutzt wird das nicht wirklich):
my @w = (1..XXX);
my $s = join(",",@w);
my $cmd = "effect ";
$cmd .= Each($wzwl,$s);
return fhem("$wzwlcmd;set $sdev $cmd") if $rcCode eq "0x20DF55AA";
Weil WLED ja sonderbar ist hab ich mir jetzt diese Lösung über ein userReadings überlegt, Nebenprodukt ist also der Name des gewählten Effekts der bisher auch nicht vorhanden war (zu sehen allerdings erst nach Aktualisierung von FHEMWEB) über das entsprechende Template.
Verrät mir jemand wie ich jetzt am einfachsten die " bei den Werten entferne, so mit split nämlich nicht:
effectname:effect.* { HttpUtils_NonblockingGet( { url=>"http://192.168.188.52/json", callback=>sub($$$) { my ($hash, $err, $data) = @_;; $data =~ m,effects..\[([^[]*?)],;;my @a= split(/","/ , $1);;my $i = ReadingsNum($NAME,"effect","1");;my $an=@a;;$a=$a[$i];;fhem("setreading $NAME effectname $a;setreading $NAME effectnumber $an")} }) }
Dann hängt am ersten und letzten Wert das " noch dran und zwischendrin gehts auch schief, Ergebnis von Anzahl 103 statt 116
Zum nachvollziehen:
{my $EVENT=qq({"state":{"on":true,"bri":128,"transition":7,"ps":1,"pss":0,"pl":-1,"ccnf":{"min":1,"max":5,"time":12},"nl":{"on":false,"dur":60,"fade":true,"mode":1,"tbri":0,"rem":-1},"udpn":{"send":false,"recv":true},"lor":0,"mainseg":0,"seg":[{"id":0,"start":0,"stop":20,"len":20,"grp":1,"spc":0,"on":true,"bri":255,"col":[[255,160,0],[0,0,0],[0,0,0]],"fx":45,"sx":128,"ix":128,"pal":0,"sel":true,"rev":false,"mi":false}]},"info":{"ver":"0.11.1","vid":2012180,"leds":{"count":20,"rgbw":false,"wv":false,"pin":[2],"pwr":332,"maxpwr":850,"maxseg":12,"seglock":false},"str":false,"name":"WLED","udpport":21324,"live":false,"lm":"","lip":"","ws":0,"fxcount":116,"palcount":55,"wifi":{"bssid":"FE:EC:DA:FD:26:1A","rssi":-48,"signal":100,"channel":3},"fs":{"u":40,"t":1024,"pmt":0},"arch":"esp8266","core":"2_7_4_7","lwip":1,"freeheap":23232,"uptime":41,"opt":127,"brand":"WLED","product":"FOSS","mac":"5ccf7f53d765"},"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","Sparkle+","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","Red & Blue","Stream",
"Scanner","Lighthouse","Fireworks","Rain","Merry Christmas","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"
],"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"
]});;$EVENT =~ m,effects..\[([^[]*?)],;;my @a= split(/,/ , $1);;my $a=@a}
Hi Tom,,
was mich noch an Deinen daten irritiert sind die Zeilenumbrüche...
Ansonsten wäre das mein Test in der Kommandozeile:
{my $s=q("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","Sparkle+","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","Red & Blue","Stream","Scanner","Lighthouse","Fireworks","Rain","Merry Christmas","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");;$s=~s/"//g;;my @arr= split (/,/,$s);;my $ret = join ('|',@arr);;return $ret}
Also im Wesentlichen:
die " wegmachen - Er ersetzt 232 " - das sollte stimmen :)
den String an den Kommas aufteilen (vorher die Zeilenumbrüche entfernen?)
dann habe ich es nur für die Ausgabe zusammengebastelt.
Gruß Otto
Ja, da sind Zeilenumbrüche.
Muss ich mir später genauer anschauen kann jetzt nicht mehr.
Wie ich es aber bis jetzt verstanden habe sollte dein Beispiel bei mir zum nachvollziehen dann so aussehen:
{ HttpUtils_NonblockingGet( { url=>"http://192.168.188.52/json", callback=>sub($$$) { my ($hash, $err, $data) = @_;; $data =~ m,effects..\[([^[]*?)],;;$1=~s/"//g;;my @arr= split (/,/,$1);;my $ret = join ('|',@arr);;return $ret} }) }
Dann stürzt FHEM ab.
der letzte Teil:
$data =~ m,effects..\[([^[]*?)],;;my $s=$1;; $s=~ s/\n//g;;$s=~s/"//g;;my @arr= split(/,/ , $s);;my $ret = join ('|',@arr);;return $ret
Ich scheue mich immer $1 einfach weiter zu verwenden :)
Das ist jetzt tippel tappel ;) aber zum nachvollziehen
ZitatIch scheue mich immer $1 einfach weiter zu verwenden
wohl aus gutem Grund, das zu machen war, mein ich, der Grund für die Abstürze :):
effectname:effect.* { HttpUtils_NonblockingGet( {url=>"http://192.168.188.52/json", 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")} }) }
Jetzt muss irgendwie noch InternalVal($NAME,'CID','0') in der URL landen, bekomms nicht hin, dann hab ich / geb ich Ruhe :P
So steht in $h die CID (WLED_538e36) aus dem InternalVal wenn ich $h statt $a ins Reading schreibe, in der URL landet der Wert aber nicht:
{my $h=InternalVal($NAME,'CID','0');; HttpUtils_NonblockingGet( {url=>"http://$h/json", callback...
So nicht::
{HttpUtils_NonblockingGet( {my $h=InternalVal($NAME,'CID','0');; url=>"http://$h/json", callback...
Und so auch nicht:
{my $h=InternalVal($NAME,'CID','0'); HttpUtils_NonblockingGet( {url=>"http://".$h."/json", callback...
und weitere Versuche nicht.
{
"Arg":"MQTT2_WLED_TV",
"Results": [
{
"Name":"MQTT2_WLED_TV",
"PossibleSets":"Solid:noArg Breathe:noArg Pride:noArg Fire:noArg on:noArg off:noArg toggle:noArg rgb:colorpicker,RGB brightness:colorpicker,BRI,0,1,255 speed:colorpicker,BRI,0,1,255 intensity:colorpicker,BRI,0,1,255 palette:selectnumbers,0,1,46,0,lin effect:selectnumbers,0,1,115,0,lin loadPreset:selectnumbers,0,1,3,0,lin dimup:noArg dimdown:noArg flash:noArg on-till on-for-timer off-till-overnight off-till intervals blink off-for-timer on-till-overnight attrTemplate:?,General_Info,MQTT2_CLIENT_general_bridge,MQTT2_IO_ignoreRegexp_basic,MQTT2_IO_ignoreRegexp_tasmota,MQTT2_IO_ignoreRegexp_shelly,MQTT2_IO_ignoreRegexp_homeassistant,speechcontrol_general_naming_master_template,tasmota_basic,tasmota_basic_state_power1,tasmota_1ch+motion+SI7021,tasmota_POW,tasmota_POW_USB_split,tasmota_plug_with_rgbw_split,tasmota_ir,tasmota_rf,tasmota_rf_keys_example,tasmota_use_DS18x20_id,tasmota_zigbee2tasmota_bridge,tasmota_clear_readings_reset_readingsList_and_reboot,tasmota_set_lowercase_texts_and_state1,tasmota_set_uppercase_texts_and_state1,tasmota_set_power1_state_to_power,tasmota_2channel_split,tasmota_2ch_unified,tasmota_2ch_shutter_invert_1,tasmota_2ch_shutter_invert_0,tasmota_4ch_two_shutters_invert_0,tasmota_4channel_split,tasmota_3socketUSB_split,tasmota_4ch_unified_basic_text,tasmota_4ch_unified_icon,tasmota_8ch_unified_icon,tasmota_8channel_split,tasmota_rgb_led_controller,tasmota_rgbw_led,tasmota_rgbcct_light,tasmota_cct_led,tasmota_TuyaMCU_dimmer,tasmota_window_sensor_MC400A,shelly1,ESPurna_single_relay,E_00_eBus_daemon_splitter,E_01_eBus_bai_readingsgroup_Status01,eBus_daemon_splitter,E_02_eBus_bai_readingsgroup_Status01_Balken,ems-esp_heater_device,ems-esp_heater_device_outdated,ems-esp_boiler,ems-esp_boiler_outdated,ems-esp_thermostat_read-only,ems-esp_thermostat_read-only_outdated,ems-esp_thermostat_RC35_type,ems-esp_thermostat_simple,ems-esp_thermostat_simple_outdated,ems-esp_thermostat_RC35_type_outdated,E_03_eBus_bai_readingsgroup_Status02,E_04_eBus_bai_readingsgroup_Status02_Balken,E_05_eBus_Calormatic_readingsgroup_Set_Hcurve_Hotwater,E_06_eBus_bai_Status01,E_07_eBus_bai_Status01+Status02_HWC,E_08_eBus_SetMode,E_09_eBus_Hc1HeatCurve+HwcTempDesired,zigbee2mqtt_bridge,sonos2mqtt_bridge,sonos2mqtt_speaker,sonos2mqtt_bridge_comfort,InstarCam,wled_controller,go_eCharger,8channel_ethernet_board_split,8channel_ethernet_board_unified,6channel_ethernet_board_6input_split,6channel_ethernet_board_6input_unified,esp_milight_hub_bridge,esp_milight_hub_remote_events_only,OpenMQTTGateway_MCU,worx_landroid,wallpanel_app,weewx_weather_station,McLighting",
"PossibleAttrs":"alias comment:textField-long eventMap:textField-long group room suppressReading userReadings:textField-long verbose:0,1,2,3,4,5 IODev autocreate:0,1 bridgeRegexp:textField-long devicetopic devPos disable:0,1 disabledForIntervals getList:textField-long imageLink jsonMap:textField-long model periodicCmd readingList:textField-long setExtensionsEvent:1,0 setList:textField-long setStateList event-aggregator event-min-interval event-on-change-reading event-on-update-reading oldreadings stateFormat:textField-long timestamp-on-change-reading ASC:0,1,2 alexaName alexaProactiveEvents:1,0 alexaRoom cmdIcon devStateIcon:textField-long devStateStyle fhem_widget_channels fhem_widget_command fhem_widget_command_2 fhem_widget_command_3 genericDeviceType:security,ignore,switch,outlet,light,blind,thermometer,thermostat,contact,garage,window,lock,scene homebridgeMapping:textField-long icon siriName sortby webCmd webCmdLabel:textField-long widgetOverride lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0 userattr",
"Internals": {
"CID": "WLED_538e36",
"DEF": "WLED_538e36",
"DEVICETOPIC": "MQTT2_WLED_TV",
"FUUID": "5fe790b7-f33f-78f5-e0ff-3be5893933ed3fc6",
"IODev": "MQTT2_Server",
"LASTInputDev": "MQTT2_Server",
"MQTT2_Server_MSGCNT": "288",
"MQTT2_Server_TIME": "2021-01-03 22:10:10",
"MSGCNT": "288",
"NAME": "MQTT2_WLED_TV",
"NR": "358",
"STATE": "on",
"TYPE": "MQTT2_DEVICE"
},
"Readings": {
"LWT": { "Value":"online", "Time":"2021-01-03 22:10:10" },
"api": { "Value":"<?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>115</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>", "Time":"2021-01-03 22:10:10" },
"brightness": { "Value":"128", "Time":"2021-01-03 22:10:10" },
"effect": { "Value":"115", "Time":"2021-01-03 22:10:10" },
"effectname": { "Value":"Blends", "Time":"2021-01-03 22:10:10" },
"effectnumber": { "Value":"116", "Time":"2021-01-03 22:10:10" },
"intensity": { "Value":"128", "Time":"2021-01-02 20:27:51" },
"palette": { "Value":"0", "Time":"2021-01-02 20:27:51" },
"rgb": { "Value":"FFA000", "Time":"2021-01-03 22:10:10" },
"speed": { "Value":"128", "Time":"2021-01-02 20:27:51" },
"state": { "Value":"on", "Time":"2021-01-03 22:10:10" }
},
"Attributes": {
"IODev": "MQTT2_Server",
"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\" )}",
"event-on-change-reading": "brightness,effect,intensity,palette,rgb,speed,state,effectname,effectnumber",
"eventMap": "/effect 0:Solid/effect 2:Breathe/effect 63:Pride/loadPreset 1:Fire/",
"genericDeviceType": "light",
"group": "Wohnzimmer",
"homebridgeMapping": "Brightness=brightness::brightness,maxValue=100,factor=0.39216,delay=true",
"icon": "hue_filled_iris",
"model": "wled_controller",
"oldreadings": "rgb",
"readingList": "wled/538e36/status:.* LWT\n wled/538e36/g:.* brightness\n wled/538e36/g:.* { $EVENT ? {\"state\"=>\"on\"} : {\"state\"=>\"off\"} }\n wled/538e36/c:.* { {\"rgb\"=>substr(\"$EVENT\",1,6)} }\n wled/538e36/v:.* api\n wled/538e36/v:.* { $EVENT =~ m,(?<=<sx>)([\u005cd]+)(?=<\u005c/sx>), ? $1 eq ReadingsVal($NAME,\"speed\",\"unknown\") ? return : {\"speed\"=>$1} : return; }\n wled/538e36/v:.* {$EVENT =~ m,(?<=<ix>)([\u005cd]+)(?=<\u005c/ix>), ? $1 eq ReadingsVal($NAME,\"intensity\",\"unknown\") ? return : {\"intensity\"=>$1} : return }\n wled/538e36/v:.* {$EVENT =~ m,(?<=<fp>)([\u005cd]+)(?=<\u005c/fp>), ? $1 eq ReadingsVal($NAME,\"palette\",\"unknown\") ? return : {\"palette\"=>$1} : return }\n wled/538e36/v:.* {$EVENT =~ m,(?<=<fx>)([\u005cd]+)(?=<\u005c/fx>), ? $1 eq ReadingsVal($NAME,\"effect\",\"unknown\") ? return :{\"effect\"=>\"$1\"} : return }",
"room": "MQTT2_DEVICE",
"setList": "on:noArg wled/538e36 on\n off:noArg wled/538e36 off\n toggle:noArg wled/538e36 t\n rgb:colorpicker,RGB wled/538e36/col #$EVTPART1\n brightness:colorpicker,BRI,0,1,255 wled/538e36\n speed:colorpicker,BRI,0,1,255 wled/538e36/api SX=$EVTPART1\n intensity:colorpicker,BRI,0,1,255 wled/538e36/api IX=$EVTPART1\n palette:selectnumbers,0,1,46,0,lin wled/538e36/api &T=1FP=$EVTPART1\n effect:selectnumbers,0,1,115,0,lin wled/538e36/api FX=$EVTPART1\n loadPreset:selectnumbers,0,1,3,0,lin wled/538e36/api PL=$EVTPART1\n dimup:noArg wled/538e36/api A=~10\n dimdown:noArg wled/538e36/api A=~-10\n 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\")}",
"setStateList": "on off toggle effect loadPreset dimdown dimup",
"userReadings": "effectname:effect.* {my $h=InternalVal($NAME,'CID','0'); HttpUtils_NonblockingGet( {url=>\"http://192.168.188.52/json\", callback=>sub($$$) { my ($hash, $err, $data) = @_;; $data =~ m,effects..\u005c[([^[]*?)],;;my $s=$1;;$s=~s/\"//g;;$s=~ s/\u005cn//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\")} }) }",
"userattr": "lightSceneParamsToSave lightSceneRestoreOnlyIfChanged:1,0",
"webCmd": "rgb:brightness:effect:Solid:Breathe:Pride:Fire:flash"
}
} ],
"totalResultsReturned":1
}
}
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 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_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 oldreadings rgb
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
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=InternalVal($NAME,'CID','0');; HttpUtils_NonblockingGet( {url=>"http://192.168.188.52/json", 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-03 22:10:10 LWT online
setstate MQTT2_WLED_TV 2021-01-03 22:10:10 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>115</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>
setstate MQTT2_WLED_TV 2021-01-03 22:10:10 brightness 128
setstate MQTT2_WLED_TV 2021-01-03 22:10:10 effect 115
setstate MQTT2_WLED_TV 2021-01-03 22:10:10 effectname Blends
setstate MQTT2_WLED_TV 2021-01-03 22:10:10 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-03 22:10:10 rgb FFA000
setstate MQTT2_WLED_TV 2021-01-02 20:27:51 speed 128
setstate MQTT2_WLED_TV 2021-01-03 22:10:10 state on
edit:
sry, Kopierfehler jsonlist2 und Raw DEF editiert
ich will mal kurz eine Beobachtung einwerfen: als ich Deinen Code mit meinem Versuch erweitert habe (mit @a) bekam ich einen Fehler. Als ich dann meine Variable @arr genommen habe hat es funktioniert. Ich habe das nicht weiter untersucht. Ist @a das Problem?
Es gibt kein Problem mehr, klappt alles darum die Raw DEF/Zeitstempel, nur das InternalVal muss in der URL noch "eingefügt" werden.
Sry, hab #26 nochmal editiert, jsonlist2 und Raw DEF waren nicht korrekt.
Habs, mein Fehler 8), der Hostname ist default WLED-xxxxxx und nicht WLED_xxxxxx wie in der CID.
So klappt jetzt alles:
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")} }) }