IP Adresse von MQTT Gerät ermitteln + dyn. setList widgets

Begonnen von DeeSPe, 02 Dezember 2021, 15:48:02

Vorheriges Thema - Nächstes Thema

DeeSPe

Hallo Gemeinde,

ich bin noch relativ neu im Thema MQTT und frage mich woher ich die IP Adresse des jeweiligen MQTT2_DEVICE bekomme.
Benötigt wird diese für ein userReading, weil ich dann noch einmal ein JSON beim entsprechenden Gerät abholen muss.
Klar weiß ich die IP Adresse, ich würde sie aber gern dynamisch (ReadingsVal/InternalVal) ermitteln wollen.

Danke.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

juergen012

mach mal autocreate auf 1. Bei einem Neustart des Gerätes wird bei mir unter Info2_IPAddress die IP-Adresse angezeigt.

Fhem unter Proxmox

LuckyDay

Zitatfrage mich woher ich die IP Adresse des jeweiligen MQTT2_DEVICE bekomme

MQTT benötigt keinen Absender oder IP Adresse.

Wenn du Glück hast, bsp tasmota schickt sie im json Payload mit.


DeeSPe

Danke schon mal für die Antworten.
autocreate bringt mich nicht weiter, ist laut cmdref auch per default an.

Wie komme ich denn an den vollen JSON Payload?
Ich kenne mich wie gesagt noch nicht mit MQTT aus. Bin aber am Einlesen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Otto123

#4
Hallo Dan,

mqtt muss kein JSON liefern. Die payload kann alles sein.

Kannst Ja mal global:DEFINED.MQTT2.* loggen/monitoren - bei sonos2mqtt kommt dabei die IP Adresse mit. Über die lese ich dann wiederum ein xml Dokument zurück.

Ansonsten gibt es beim Server rawEvents

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

rudolfkoenig

Ab sofort speichert MQTT2_SERVER die Verbindung, ueber die die Daten empfangen wurden, als Internal im MQTT2_DEVICE.

Die Aenderung ist minimal, und nutzt das vorhandene Framework, dafuer sind die Namen etwas gewoehnungsbeduerftig:
- das Internal heisst <mqtt2_server-name>_CONN (analog zu den _MSGCNT und _TIME Internals)
- der Wert ist der Name der Verbindungs-Instanz: <mqtt2_server-name>_<IP>_<Port>.

DeeSPe

Zitat von: rudolfkoenig am 02 Dezember 2021, 19:30:15
Ab sofort speichert MQTT2_SERVER die Verbindung, ueber die die Daten empfangen wurden, als Internal im MQTT2_DEVICE.

Die Aenderung ist minimal, und nutzt das vorhandene Framework, dafuer sind die Namen etwas gewoehnungsbeduerftig:
- das Internal heisst <mqtt2_server-name>_CONN (analog zu den _MSGCNT und _TIME Internals)
- der Wert ist der Name der Verbindungs-Instanz: <mqtt2_server-name>_<IP>_<Port>.

Hallo Rudi,

das ist ja ein Service! Vielen Dank dafür.
Werde ich sofort morgen Früh ausprobieren.
Und da Du gerade hier bist, noch eine andere Frage zu MQTT:
Gibt es eine Möglichkeit für "setList" den Inhalt eines Widgets dynamisch zu gestalten? Habe schon einige Varianten probiert, aber es wird leider kein Perl Code ausgeführt.
Ich meine sowas:
mySet:select,{Perl zum dyn. Ermitteln der Listenelemente (wird hier bisher nicht als Perl Code ausgeführt)} {Dies wird als Perl Code ausgeführt}

Danke.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

TomLee


DeeSPe

Zitat von: TomLee am 02 Dezember 2021, 19:50:00
Wenn ich  dich richtig verstanden habe, ist das schon länger ein Wunsch.

https://forum.fhem.de/index.php/topic,111711.msg1134328.html#msg1134328

Ja super, da bin ich ja offensichtlich nicht der Einzige dem das gefallen würde.
Ich denke das wäre eine sinnvolle Erweiterung. Werde mir mal den Code dafür ansehen und schauen ob ich etwas beisteuern kann.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Ich finde leider nicht den Code für die Widgets. :(
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Vielen Dank Rudi, mit
(split("_",InteralVal($NAME,"m2s_CONN","")))[1]
kommt man jetzt ganz einfach an die IP des MQTT2_DEVICE.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

rudolfkoenig

#11
Zitatkommt man jetzt ganz einfach an die IP des MQTT2_DEVICE.
Und wieder eine Bestaetigung dafuer, dass einfach relativ ist.

Wg. dynamische Widgets:
Ich habe SetExtensions erweitert, damit widget-specs der Form {[^ ]+} ausgewertet werden.
Wg. SetExtensions sind mehrere Module betroffen, und ich bin noch besorgt, dass es Nebeneffekte hat.
Es ist nicht ausgeschlossen, dass das Feature zurueckgezogen wird :)

Beispiele:
attr m2d setList\
  test1:{join(",",0..20)} bla/bla bla\
  test2:{"select,1,2,3"} bla/bla bla\
  test3:{"textField-long"} bla/bla bla\
  test4:{"slider,0,1,".InternalVal($name,"NR",2)} bla/bla bla



DeeSPe

Zitat von: rudolfkoenig am 03 Dezember 2021, 11:23:06
Wg. dynamische Widgets:
Ich habe SetExtensions erweitert, damit widget-specs der Form {[^ ]+} ausgewertet werden.
Wg. SetExtensions sind mehrere Module betroffen, und ich bin noch besorgt, dass es Nebeneffekte hat.
Es ist nicht ausgeschlossen, dass das Feature zurueckgezogen wird :)

Beispiele:
attr m2d setList\
  test1:{join(",",(0..20))} bla/bla bla\
  test2:{"select,1,2,3"} bla/bla bla\
  test3:{"textField-long"} bla/bla bla\
  test4:{"slider,0,1,".InternalVal($name,"NR",2)} bla/bla bla




Ich bin ja sowas von begeistert!
Hab nicht mal die Stelle gefunden wo ich das hätte einbauen können. :D :D :D

Vielen Dank Rudi!
Ich teste das gleich mal aus.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Hallo Rudi,

hattest Du das mal selbst getestet?
Das funktioniert (es wird ein "select" angezeigt):
Code (setList) Auswählen
test:{"select,a,b,c,d,e"} {}

Das funktioniert bei mir nicht (es wird ein "TextField" angezeigt):
Code (setList) Auswählen
test1:{"select,".ReadingsVal($NAME,"liste","a,b,c,d,e")} {}

Mache ich was falsch?
Dass kein Leerzeichen im Perl sein darf ist klar.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Ich habe es soeben herausgefunden.
Die Variable $NAME darf hier nicht groß geschrieben werden. Mit $name klappt es.

Danke nochmal für die schnelle Umsetzung Rudi.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

TomLee

Reicht nur die neue SetExtensions.pm

File             Rev   Last Change

SetExtensions.pm 25286 2021-12-03 10:16:56Z rudolfkoenig


oder gibts da noch irgendwelche andere Abhängigkeiten ?

bei mir steht genauso wie damals mit den ersten Versuchen {my im Auswahlfeld.

setstate MQTT2_sonos_Bridge 2021-05-19 13:10:17 favRadios 011.FM-NonStop60s,DASDING,SWR4 Rheinland-Pfalz,PsyRadioChillout,COSMO Chillout

playFav:{my $r= ReadingsVal('MQTT2_sonos_Bridge','favRadios','RPR1');return $r;} {use JSON;use HTML::Entities;use Encode qw(encode decode);my $enc = 'UTF8';my $uri='';my $search=(split(' ', $EVENT,2))[1];$search=~s/[\/()]/./g;my $dev = (devspec2array('model=sonos2mqtt_bridge'))[0];my $read='Favorites';my $decoded = decode_json(ReadingsVal($dev,$read,''));my @arr=@{$decoded->{'Result'}};foreach (@arr) {if (encode($enc, decode_entities($_->{'Title'}))=~/$search/i){$uri = $_->{'TrackUri'} }};fhem("set $NAME playUri $uri") if ($uri ne '')}

DeeSPe

Zitat von: TomLee am 03 Dezember 2021, 16:51:53
bei mir steht genauso wie damals mit den ersten Versuchen {my im Auswahlfeld.

Zitat von: DeeSPe am 03 Dezember 2021, 12:51:18Dass kein Leerzeichen im Perl sein darf ist klar.

Also bleibt nur dort eine Funktion aufzurufen oder aber den Code versuchen ohne Leerzeichen hinzubekommen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

TomLee

#17
Tatsache, nur die Angabe mit ReadingsVal tuts auch. Danke.

playFav:{ReadingsVal('MQTT2_sonos_Bridge','favRadios','RPR1')} {use JSON;use HTML::Entities;use Encode qw(encode decode);my $enc = 'UTF8';my $uri='';my $search=(split(' ', $EVENT,2))[1];$search=~s/[\/()]/./g;my $dev = (devspec2array('model=sonos2mqtt_bridge'))[0];my $read='Favorites';my $decoded = decode_json(ReadingsVal($dev,$read,''));my @arr=@{$decoded->{'Result'}};foreach (@arr) {if (encode($enc, decode_entities($_->{'Title'}))=~/$search/i){$uri = $_->{'TrackUri'} }};fhem("set $NAME playUri $uri") if ($uri ne '')}

Sehr Cool.

TomLee

Wenn das wieder ausgebaut werden sollte kündige ich FHEM  ;D

TomLee

Wir bzw. ich zumindest, hatte(n) in dem select-Widget für die Anzeige der Radiostationsnamen mit zwei Wörtern bisher einen Punkt verwendet, wegen der Leerzeichen.

Wäre es möglich das Widget zu veranlassen auch auf Werte in einem passenden Reading zu "matchen" die ein Leerzeichen an der Stelle des Punktes beinhalten.

Ich hätte in dem Widget gerne  immer den aktuellen eingestellten Sender stehen.

Beispiel:

im Widget steht SWR4.Rheinland-Pfalz, im Reading mit selben Namen wie settername steht SWR4 Rheinland-Pfalz, trotzdem soll automatisch SWR4.Rheinland-Pfalz in der Auswahlliste stehen.

rudolfkoenig


TomLee

#21
Das du mich verstehst  ::) :) 8) und gleich noch eine Lösung bereitstellen möchtest, vielen Dank dafür.

Es klappt aber nicht, um bei dem Beispiel mit SWR4 zu bleiben, im playFav-Widget wird SWR4.Rheinland-Pfalz gewählt, im Reading playFav (jsonMap enqueuedMetadata_Title:playFav) kommt SWR4 Rheinland-Pfalz zurück, wenn ich FHEMWEB aktualisiere ist die Auswahlliste nicht mehr "vorbelegt", ich weiß nicht was ich jetzt zusätzlich noch an Infos liefern könnte.

Mit Radiostationsnamen die keine Leerzeichen im setter und der Antwort im Reading haben/benötigen, das ist bspw. bei DASDING so steht im setter DASDING und im Reading playFav kommt auch DASDING zurück, ist das Verhalten normal, aktualisiere ich FHEMWEB steht weiterhin DASDING in der Auswahliste.


File             Rev   Last Change

SetExtensions.pm 25286 2021-12-03 10:16:56Z rudolfkoenig



rudolfkoenig

Ich habe mit SWR4 Problem, siehe Anhang.
Womoeglich enthaelt das Reading nicht nur Leerzeichen.
Kannst Du mir die "Raw definition" zeigen?

TomLee

defmod MQTT2_sonos_Bridge MQTT2_DEVICE mqttjs_a4b34a1c
attr MQTT2_sonos_Bridge IODev MQTT2_Server
attr MQTT2_sonos_Bridge bridgeRegexp sonos/(RINCON_[A-Z0-9]+)[:/].* "$1"
attr MQTT2_sonos_Bridge devStateIcon 0:10px-kreis-rot 1:10px-kreis-gelb 2:10px-kreis-gruen
attr MQTT2_sonos_Bridge devicetopic sonos
attr MQTT2_sonos_Bridge getList Favorites:noArg Favorites {sonos2mqtt($NAME,$EVENT)}\
Reply:Favorites,Radios,Playlists Reply {sonos2mqtt($NAME,$EVENT)}
attr MQTT2_sonos_Bridge group MQTT2_Bridges
attr MQTT2_sonos_Bridge icon mqtt_bridge_2
attr MQTT2_sonos_Bridge model sonos2mqtt_bridge
attr MQTT2_sonos_Bridge readingList homeassistant/music_player/RINCON_([0-9A-Z]+)/sonos/config:.* { $TOPIC =~ m,(RINCON_[0-9A-Z]+),;; { "config_$1"=>$EVENT }}\
sonos/RINCON_([0-9A-Z]+)/Favorites:.* Favorites\
sonos/RINCON_([0-9A-Z]+)/Reply:.* Reply\
sonos/connected:.* connected\
sonos/status/[^/]+/avtransport:.* {}\
sonos/status/[^/]+/renderingcontrol:.* {}
attr MQTT2_sonos_Bridge room MQTT2_DEVICE,Media
attr MQTT2_sonos_Bridge setList CheckSubscription:noArg $DEVICETOPIC/cmd/check-subscriptions\
PauseAll:noArg $DEVICETOPIC/cmd/pauseall\
announcementall:textField {sonos2mqtt($NAME,$EVENT)}\
notifyall:textField {sonos2mqtt($NAME,$EVENT)}
attr MQTT2_sonos_Bridge stateFormat connected
attr MQTT2_sonos_Bridge userReadings favlist:Favorites.* {sonos2mqtt_ur($name,'favlist')},\
grouplist:Favorites.* {sonos2mqtt_ur($name,'grouplist')}

setstate MQTT2_sonos_Bridge 0
setstate MQTT2_sonos_Bridge 2021-12-03 16:16:52 Favorites {"Result":[{"AlbumArtUri":"http://cdn-radiotime-logos.tunein.com/s296020q.png","Title":"011.FM-NonStop60s","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/26","ParentId":"FV:2","TrackUri":"x-sonosapi-stream:s296020?sid=254&flags=8224&sn=0","ProtocolInfo":"x-sonosapi-stream:*:*:*"},{"AlbumArtUri":"http://dtu8ldmaopof3.cloudfront.net/i/https:%2F%2Fderpimagecache.s3.amazonaws.com%2Fimage%2F475_288x162_2020-01-22-10-30-00-920.png_180.jpg","Title":"1A Deutsche Hits","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/41","ParentId":"FV:2","TrackUri":"x-sonosapi-stream:rpde_svc_475?sid=232&flags=32&sn=4","ProtocolInfo":"x-sonosapi-stream:*:*:*"},{"Title":"1LIVE diggi (Top 40/Pop)","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/49","ParentId":"FV:2","TrackUri":"x-sonosapi-stream:s45087?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"AlbumArtUri":"http://dtu8ldmaopof3.cloudfront.net/i/https:%2F%2Fderpimagecache.s3.amazonaws.com%2Fimage%2F21_288x162_2018-12-18-16-03-52-837.png_180.jpg","Title":"ANTENNE THÜRINGEN","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/50","ParentId":"FV:2","TrackUri":"x-sonosapi-stream:rpde_svc_21?sid=232&flags=32&sn=4","ProtocolInfo":"x-sonosapi-stream:*:*:*"},{"AlbumArtUri":"http://dtu8ldmaopof3.cloudfront.net/i/https:%2F%2Fderpimagecache.s3.amazonaws.com%2Fimage%2F1944_288x162_2019-02-12-13-40-09-357.png_640.jpg","Title":"COSMO Chillout","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/30","ParentId":"FV:2","TrackUri":"x-sonosapi-stream:rpde_svc_1944?sid=232&flags=32&sn=4","ProtocolInfo":"x-sonosapi-stream:*:*:*"},{"AlbumArtUri":"http://cdn-profiles.tunein.com/s20295/images/logoq.png","Title":"DASDING 92.5 (Euro-Hits)","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/34","ParentId":"FV:2","TrackUri":"x-sonosapi-stream:s76488?sid=254&flags=8224&sn=0","ProtocolInfo":"x-sonosapi-stream:*:*:*"},{"AlbumArtUri":"http://cdn-profiles.tunein.com/s84548/images/logoq.jpg","Title":"die neue welle 101.8 (Rock)","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/39","ParentId":"FV:2","TrackUri":"x-sonosapi-stream:s84548?sid=254&flags=8224&sn=0","ProtocolInfo":"x-sonosapi-stream:*:*:*"},{"AlbumArtUri":"http://cdn-radiotime-logos.tunein.com/s65628q.png","Title":"FM نجوم 100.6 (Arabisch)","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/29","ParentId":"FV:2","TrackUri":"x-sonosapi-stream:s65628?sid=254&flags=8224&sn=0","ProtocolInfo":"x-sonosapi-stream:*:*:*"},{"Title":"Hitradio Ö3 99.9 (Österreichisch)","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/37","ParentId":"FV:2","TrackUri":"x-sonosapi-stream:s8007?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"Hörbücher","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/32","ParentId":"FV:2","TrackUri":"x-rincon-playlist:RINCON_000E58F7F67C01400#S://192.168.188.26/OwnMusic/Hörbücher","ProtocolInfo":"x-rincon-playlist:*:*:*"},{"AlbumArtUri":"http://cdn-profiles.tunein.com/s228737/images/logoq.png?t=154228","Title":"NDR 2","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/43","ParentId":"FV:2","TrackUri":"x-sonosapi-stream:s228737?sid=254&flags=8224&sn=0","ProtocolInfo":"x-sonosapi-stream:*:*:*"},{"AlbumArtUri":"http://cdn-radiotime-logos.tunein.com/s97066q.png","Title":"PsyRadioChillout","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/15","ParentId":"FV:2","TrackUri":"x-sonosapi-stream:s97066?sid=254&flags=8224&sn=0","ProtocolInfo":"x-sonosapi-stream:*:*:*"},{"Title":"SWR4 Baden-Württemberg","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/48","ParentId":"FV:2","TrackUri":"x-sonosapi-stream:s20293?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"SWR4 Rheinland-Pfalz","UpnpClass":"object.itemobject.item.sonos-favorite","ItemId":"FV:2/47","ParentId":"FV:2","TrackUri":"x-sonosapi-stream:s1563?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"}],"NumberReturned":14,"TotalMatches":14,"UpdateID":1}
setstate MQTT2_sonos_Bridge 2021-12-04 14:00:00 IODev MQTT2_Server
setstate MQTT2_sonos_Bridge 2021-12-04 14:19:20 Radios {"Result":[{"Title":"011.FM - Non Stop 60s","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/27","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s296020?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"1LIVE diggi (Top 40/Pop)","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/35","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s45087?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"DASDING 92.5 (Euro-Hits)","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/33","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s76488?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"die neue welle 101.8 (Rock)","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/40","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s84548?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"Hitradio Ö3 99.9 (Österreichisch)","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/36","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s8007?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"NDR 2","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/46","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s228737?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"Nota Masria (Gemeinden)","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/23","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s290159?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"PsyRadio Chillout","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/25","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s97066?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"Radio Regenbogen","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/3","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s272334?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"SWR4 Baden-Württemberg","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/5","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s20293?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"SWR4 Rheinland-Pfalz","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/1","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s1563?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"}],"NumberReturned":11,"TotalMatches":11,"UpdateID":1}
setstate MQTT2_sonos_Bridge 2021-12-04 14:19:20 Reply {"Result":[{"Title":"011.FM - Non Stop 60s","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/27","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s296020?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"1LIVE diggi (Top 40/Pop)","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/35","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s45087?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"DASDING 92.5 (Euro-Hits)","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/33","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s76488?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"die neue welle 101.8 (Rock)","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/40","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s84548?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"Hitradio Ö3 99.9 (Österreichisch)","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/36","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s8007?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"NDR 2","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/46","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s228737?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"Nota Masria (Gemeinden)","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/23","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s290159?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"PsyRadio Chillout","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/25","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s97066?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"Radio Regenbogen","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/3","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s272334?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"SWR4 Baden-Württemberg","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/5","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s20293?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"},{"Title":"SWR4 Rheinland-Pfalz","UpnpClass":"object.item.audioItem.audioBroadcast","ItemId":"R:0/0/1","ParentId":"R:0/0","TrackUri":"x-sonosapi-stream:s1563?sid=254&flags=8224&sn=0","ProtocolInfo":"x-rincon-mp3radio:*:*:*"}],"NumberReturned":11,"TotalMatches":11,"UpdateID":1}
setstate MQTT2_sonos_Bridge 2021-05-19 13:06:55 attrTemplateVersion 20210303
setstate MQTT2_sonos_Bridge 2021-12-03 09:41:51 config_RINCON_000E58F7F67C01400 {"available_commands":["adv-command","clearqueue","command","joingroup","leavegroup","mute","next","notify","pause","play","playmode","previous","queue","seek","selecttrack","setavtransporturi","sleep","speak","stop","switchtoline","switchtoqueue","switchtotv","toggle","unmute","volume","volumedown","volumeup"],"command_topic":"sonos/RINCON_000E58F7F67C01400/control","device":{"identifiers":["RINCON_000E58F7F67C01400"],"manufacturer":"Sonos","name":"Wohnzimmer"},"device_class":"speaker","icon":"mdi:speaker","json_attributes":true,"json_attributes_topic":"sonos/RINCON_000E58F7F67C01400","name":"Wohnzimmer","state_topic":"sonos/RINCON_000E58F7F67C01400","unique_id":"sonos2mqtt_RINCON_000E58F7F67C01400_speaker","availability_topic":"sonos/connected","payload_available":"2"}
setstate MQTT2_sonos_Bridge 2021-12-04 14:01:46 connected 0
setstate MQTT2_sonos_Bridge 2021-05-19 13:10:17 favRadios 011.FM-NonStop60s,DASDING,SWR4.Rheinland-Pfalz,PsyRadioChillout,COSMO,SWR4,PsyRadio,NDR.2
setstate MQTT2_sonos_Bridge 2021-12-03 16:16:52 favlist
setstate MQTT2_sonos_Bridge 2021-12-03 16:16:52 grouplist Wohnzimmer,Wohnzimmer


defmod Sonos_Wohnzimmer MQTT2_DEVICE RINCON_000E58F7F67C01400
attr Sonos_Wohnzimmer IODev MQTT2_Server
attr Sonos_Wohnzimmer comment {\
my $wpix = '250px';;\
my $groupname = ReadingsVal($name,'groupName','0');;\
my $sgroupname = (split(' ',ReadingsVal($name,'groupName','')))[0];;\
my $uuidtoname = (devspec2array('DEF='.ReadingsVal($name,'coordinatorUuid','0')))[0];;\
my $vol = ReadingsVal($name,'volume','');;\
my $img = ReadingsVal($name,'currentTrack_AlbumArtUri','');;\
my $mystate = $name eq $uuidtoname \
  ? ReadingsVal($name,'state','FEHLER') : ReadingsVal($uuidtoname,'state','');;\
my %stat2pic = (\
'PLAYING' => 'rc_PAUSE@red',\
'PAUSED_PLAYBACK' => 'rc_PLAY@green',\
'STOPPED' => 'rc_PLAY@green',\
'TRANSITIONING' => 'rc_PLAY@blue',\
'set_next' => 'rc_NEXT@blue',\
'set_previous' => 'rc_PREVIOUS@blue',\
'set_volumeUp' => 'rc_VOLUP@blue',\
'set_volumeDown' => 'rc_VOLDOWN@blue',\
'set_mute' => 'rc_MUTE@blue');;\
return my $playpic='rc_PLAY@yellow' if !$mystate;;\
$playpic = $stat2pic{$mystate};; \
my $mutecmd = ReadingsVal($name,'mute','0') eq 'false'?'true':'false';;\
my $mutepic = $mutecmd eq 'on'?'rc_MUTE':'rc_VOLUP';;\
my $show = 'FEHLER';;\
my $currentTrack_Artist = ReadingsVal($name,'currentTrack_Artist','FEHLER');;\
my $currentTrack_Title = ReadingsVal($name,'currentTrack_Title','FEHLER');;\
if ($currentTrack_Title =~ 'x-sonosapi-stream:'){$currentTrack_Title=''};;\
my $currentTrack = $mystate eq 'TRANSITIONING'\
  ? 'Puffern...' : $currentTrack_Artist.' - '.$currentTrack_Title;;\
my $nextTrack_Artist = ReadingsVal($name,'nextTrack_Artist','FEHLER');;\
my $nextTrack_Title = ReadingsVal($name,'nextTrack_Title','FEHLER');;\
my $nextTrack = $nextTrack_Artist.' - '.$nextTrack_Title;;\
my $previouspic = 'rc_PREVIOUS';;\
my $nextpic = 'rc_NEXT';;\
my $voldownpic = 'rc_VOLDOWN';;\
my $voluppic = 'rc_VOLUP';;\
my $leavegrouppic = 'rc_LEFT';;\
my $showlg = ReadingsVal($name,"name","0") ne $groupname ? "<a href=\"/fhem?cmd.dummy=set $name leaveGroup&XHR=1\">".FW_makeImage($leavegrouppic)."</a>" : "";;\
if (($mystate eq 'PLAYING')\
  || ($mystate eq 'TRANSITIONING' )\
  || ($mystate eq 'set_next' )\
  || ($mystate eq 'set_previous' )\
  || ($mystate eq 'set_volumeUp' )\
  || ($mystate eq 'set_volumeDown' )\
  || ($mystate eq 'set_mute' )) { \
    my $shownp = ReadingsVal($name,'name','') eq $sgroupname \
    ? "<a href=\"/fhem?cmd.dummy=set $name previous&XHR=1\">".FW_makeImage($previouspic)."</a>\
       <a href=\"/fhem?cmd.dummy=set $name next&XHR=1\">".FW_makeImage($nextpic)."</a>" : "";;  \
    $show = "$showlg <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($playpic)."</a>\
    <a href=\"/fhem?cmd.dummy=set $name volumeDown&XHR=1\">".FW_makeImage($voldownpic)."</a>\
    $shownp\
    <a href=\"/fhem?cmd.dummy=set $name volumeUp&XHR=1\">".FW_makeImage($voluppic)."</a>\
    &nbsp;;&nbsp;;&nbsp;;&nbsp;;\
    <a href=\"/fhem?cmd.dummy=set $name mute $mutecmd&XHR=1\">".FW_makeImage($mutepic)."</a><br>";;\
  \
    if (ReadingsVal($name,'name','') eq $sgroupname) {\
      $show = ReadingsVal($name,'currentTrack_TrackUri','') =~ 'spdif'\
      ? 'TV': ReadingsVal($name,'enqueuedMetadata_UpnpClass','FEHLER') ne 'object.item.audioItem.audioBroadcast'\
      ? "$show<marquee style='width: $wpix'>Aktueller Track: $currentTrack<br>Nächster Track: $nextTrack</marquee>"\
      : "$show<marquee scrollamount='1' scrolldelay='1' style='width: $wpix'>Radio: $currentTrack</marquee>"\
    }\
    elsif (ReadingsVal($name,'name','') ne $groupname) {\
      $show = "$show Master: $sgroupname"}\
    }\
    else {\
      $show = $name eq $uuidtoname\
      ? "$showlg <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($playpic)."</a>"\
      : "$showlg <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($playpic)."</a><br>Master: $sgroupname"\
    }\
  "<div>\
   <table>\
     <tr>\
       <td><div style='display: inline-block;; margin-right: 5px;; border: 1px solid lightgray;;\
              height: 4.00em;; width: 4.00em;; background-image: url($img);; background-size: contain;;'></div></td>\
       <td>$show</td>\
     </tr>\
   </table>\
   </div>"\
}\
\
011.FM-NonStop60s,1A.Deutsche.Hits,1LIVE.diggi.(Top.40/Pop),ANTENNE.THÜRINGEN,COSMO.Chillout,DASDING.92.5.(Euro-Hits),FM.نجوم.100.6.(Arabisch),Hitradio.Ö3.99.9.(Österreichisch),Hörbücher,NDR.2,PsyRadioChillout,SWR4.Baden-Württemberg,SWR4.Rheinland-Pfalz,die.neue.welle.101.8.(Rock)
attr Sonos_Wohnzimmer devStateIcon {\
my $wpix = '210px';;\
my $master = ReadingsVal($name,'Master',$name);;\
my $inGroup = ReadingsNum($name,'inGroup','0');;\
my $isMaster = ReadingsNum($name,'isMaster','0');;\
my $inCouple = ReadingsNum($name,'inCouple','0');;\
my $Input = ReadingsVal($name,'Input','');;\
my $cover = ReadingsVal($name,'currentTrack_AlbumArtUri','');;\
my $mutecmd = ReadingsVal($name,'mute','0') eq 'false'?'true':'false';;\
my $mystate = $isMaster ? Value($name) : Value((devspec2array('DEF='.ReadingsVal($name,'coordinatorUuid','0')))[0]);;\
my $playpic = $mystate eq 'PLAYING'\
  ? 'rc_PAUSE@red'    : $mystate eq 'PAUSED_PLAYBACK'\
  ? 'rc_PLAY@green'   : $mystate eq 'STOPPED'\
  ? 'rc_PLAY@green'   : $mystate eq 'TRANSITIONING'\
  ? 'rc_PLAY@blue'    : 'rc_PLAY@yellow';;\
my $mutepic = $mutecmd eq 'true'?'rc_MUTE':'rc_VOLUP';;\
my $line2 = '';;\
my $title = $mystate eq 'TRANSITIONING' ? 'Puffern...' : ReadingsVal($name,'enqueuedMetadata_Title','FEHLER');;\
my $linePic = ($inGroup and !$isMaster and !$inCouple) ? "<a href=\"/fhem?cmd.dummy=set $name leaveGroup&XHR=1\">".FW_makeImage('rc_LEFT')."</a>" : "";;\
if ($isMaster) {$linePic .= " <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($playpic)."</a>"};;\
   $linePic .= "&nbsp;;&nbsp"\
            ."<a href=\"/fhem?cmd.dummy=set $name volumeDown&XHR=1\">".FW_makeImage('rc_VOLDOWN')."</a>"\
            ."<a href=\"/fhem?cmd.dummy=set $name previous&XHR=1\">".FW_makeImage('rc_PREVIOUS')."</a>"\
            ."<a href=\"/fhem?cmd.dummy=set $name next&XHR=1\">".FW_makeImage('rc_NEXT')."</a>"\
            ."<a href=\"/fhem?cmd.dummy=set $name volumeUp&XHR=1\">".FW_makeImage('rc_VOLUP')."</a>"\
            ."&nbsp;;&nbsp"\
            ."<a href=\"/fhem?cmd.dummy=set $name mute $mutecmd&XHR=1\">".FW_makeImage($mutepic)."</a>";;\
if ($isMaster and $mystate eq 'PLAYING') {$line2 = $Input =~ /LineIn|TV/ ? $Input : "$title"}\
    elsif ($inGroup and !$isMaster or $inCouple) {$line2 .= $inCouple ? "Stereopaar":"Steuerung: $master"}\
my $style1 = 'display:inline-block;;margin-right:5px;;border:1px solid lightgray;;background-size:contain;;background-image:';;\
my $style2 ='background-repeat: no-repeat;; height:4.00em;;width:4.00em;;background-size: contain;; background-position: center center';;\
"<div><table>\
     <tr>\
       <td><div style='$style1 url($cover);;$style2'></div></td>\
       <td>$linePic<br><div>$line2</div></td>\
     </tr>\
  </table></div>"\
}
attr Sonos_Wohnzimmer event-on-change-reading .*
attr Sonos_Wohnzimmer group s2m
attr Sonos_Wohnzimmer icon audio_volume_low
attr Sonos_Wohnzimmer jsonMap volume_Master:volume mute_Master:mute transportState:state volume_LF:0 volume_RF:0 mute_LF:0 mute_RF:0 enqueuedMetadata_ItemId:0 enqueuedMetadata_ParentId:0 currentTrack_ItemId:0 currentTrack_ParentId:0 enqueuedMetadata_Title:playFav
attr Sonos_Wohnzimmer model sonos2mqtt_speaker
attr Sonos_Wohnzimmer readingList sonos/RINCON_000E58F7F67C01400:.* { json2nameValue($EVENT,'',$JSONMAP) }\
sonos/RINCON_000E58F7F67C01400/error:.* { json2nameValue($EVENT) }\
sonos/RINCON_000E58F7F67C01400/sonosPlaylists:.* { json2nameValue($EVENT) }\
sonos/RINCON_000E58F7F67C01400/GetFavoritesReply:.* { json2nameValue($EVENT) }
attr Sonos_Wohnzimmer room MQTT2_DEVICE,Media
attr Sonos_Wohnzimmer setList sleep:slider,0,1,60,1 sonos/RINCON_000E58F7F67C01400/control {  "command": "sleep",  "input": $EVTPART1}\
stop:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "stop" }\
play:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "play" }\
pause:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "pause" }\
toggle:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "toggle" }\
volumeDown:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "volumedown" }\
volumeUp:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "volumeup" }\
volume:slider,0,1,100,5 sonos/RINCON_000E58F7F67C01400/control { "command": "volume", "input": $EVTPART1 }\
mute:noArg { my $value = ReadingsVal($NAME,'mute','false') eq "true" ? "unmute" : "mute";; qq(sonos/RINCON_000E58F7F67C01400/control { "command": "$value" } ) }\
next:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "next" }\
previous:noArg sonos/RINCON_000E58F7F67C01400/control { "command": "previous" }\
joinGroup:textField sonos/RINCON_000E58F7F67C01400/control { "command": "joingroup",  "input": "$EVTPART1"}\
leaveGroup:noArg { my $value = ReadingsVal("RINCON_000E58F7F67C01400","groupName","all");; qq(sonos/RINCON_000E58F7F67C01400/control { "command": "leavegroup",  "input": "$value" } ) }\
setAVTUri:textField sonos/RINCON_000E58F7F67C01400/control { "command": "setavtransporturi",  "input": "$EVTPART1"}\
  playUri:textField {fhem("set $NAME setAVTUri $EVTPART1;; sleep 1;; set $NAME play")}\
  input:Queue { my $value = $EVTPART1 eq "TV" ? "tv" : $EVTPART1 eq "Line_In" ? "line" : "queue";; qq(sonos/RINCON_000E58F7F67C01400/control { "command": "switchto$value" } ) }\
  notify:textField sonos/RINCON_000E58F7F67C01400/control { "command":"notify","input":{"trackUri":"$EVTPART2","onlyWhenPlaying":false,"timeout":11,"volume":$EVTPART1,"delayMs":700}}\
  x_raw_payload:textField { my $payload = $EVENT;;$payload =~ s/$EVTPART0 //g;; qq(sonos/RINCON_000E58F7F67C01400/control $payload)}\
  speak:textField { my $tts="SonosTTS";;my ($cmd,$vol,$text)=split(' ', $EVENT,3);;fhem("set $tts tts $text;;sleep $tts:playing:.0 ;;set $NAME notify $vol [$tts:httpName]")}\
playF:011.FM-NonStop60s,1A.Deutsche.Hits,1LIVE.diggi.(Top.40/Pop),ANTENNE.THÜRINGEN,COSMO.Chillout,DASDING.92.5.(Euro-Hits),FM.نجوم.100.6.(Arabisch),Hitradio.Ö3.99.9.(Österreichisch),Hörbücher,NDR.2,PsyRadioChillout,SWR4.Baden-Württemberg,SWR4.Rheinland-Pfalz,die.neue.welle.101.8.(Rock) {use JSON;;use HTML::Entities;;use Encode qw(encode decode);;my $enc = 'UTF8';;my $uri='';;my $search=(split(' ', $EVENT,2))[1];;$search=~s/[\/()]/./g;;my $dev = (devspec2array('model=sonos2mqtt_bridge'))[0];;my $read='Favorites';;my $decoded = decode_json(ReadingsVal($dev,$read,''));;my @arr=@{$decoded->{'Result'}};;foreach (@arr) {if (encode($enc, decode_entities($_->{'Title'}))=~/$search/i){$uri = $_->{'TrackUri'} }};;fhem("set $NAME playUri $uri") if ($uri ne '')}\
  playFav:{ReadingsVal('MQTT2_sonos_Bridge','favRadios','RPR1')} {use JSON;;use HTML::Entities;;use Encode qw(encode decode);;my $enc = 'UTF8';;my $uri='';;my $search=(split(' ', $EVENT,2))[1];;$search=~s/[\/()]/./g;;my $dev = (devspec2array('model=sonos2mqtt_bridge'))[0];;my $read='Favorites';;my $decoded = decode_json(ReadingsVal($dev,$read,''));;my @arr=@{$decoded->{'Result'}};;foreach (@arr) {if (encode($enc, decode_entities($_->{'Title'}))=~/$search/i){$uri = $_->{'TrackUri'} }};;fhem("set $NAME playUri $uri") if ($uri ne '')}\
  toggleRadio:noArg {my $dev = (devspec2array('model=sonos2mqtt_bridge'))[0];;my $r=Each($dev,ReadingsVal($dev,'favRadios',''));;my $tts="SonosTTS";;fhem("set $tts tts Es folgt $r;;sleep $tts:playing:.0;;set $NAME playUri [$tts:httpName];;sleep $NAME:play;;sleep $NAME:PLAYING;;sleep $NAME:STOPPED;;set $NAME playFav $r")}\
  playSound:textField {my $tts="SonosTTS";;my ($cmd,$vol,$file)=split(' ', $EVENT,3);;$file=($file=~m/\.mp3$/)?"$file":"$file.mp3";;fhem("set $NAME notify $vol http://[$tts:host]/fhem/cache/Toene/$file")}\
  sayText:textField { my $tts=ReadingsVal('SonosBridge','tts','SonosTTS');;my ($cmd,$text)=split(' ', $EVENT,2);;fhem("setreading $tts text ".ReadingsVal($tts,'text',' ').' '.$text.";;sleep 0.4 tts;;set $tts tts [$tts:text];;sleep $tts:playing:.0 ;;set $NAME notify [$tts:vol] [$tts:httpName];;deletereading $tts text")}
attr Sonos_Wohnzimmer userReadings Master:groupName.* {(split(' +',ReadingsVal($name,'groupName','')))[0]},\
isMaster:coordinatorUuid.* {ReadingsVal($name,'coordinatorUuid','') eq ReadingsVal($name,'uuid','')?1:0},\
inGroup:groupName.* {ReadingsVal($name,'groupName','') =~ / \+ /?1:0},\
inCouple:coordinatorUuid.* {(ReadingsVal($name,'coordinatorUuid','') ne ReadingsVal($name,'uuid','') and (index(ReadingsVal($name,'groupName',''), ReadingsVal($name,'name','')) != -1))?1:0},\
Input:currentTrack_TrackUri.* {my $currentTrack_TrackUri = ReadingsVal($name,'currentTrack_TrackUri','');;\
   $currentTrack_TrackUri =~ 'x-rincon-stream'\
      ? 'LineIn': $currentTrack_TrackUri =~ 'spdif'\
      ? 'TV'    : ReadingsVal($name,'enqueuedMetadata_UpnpClass','') eq 'object.item.audioItem.audioBroadcast'\
      ? 'Radio' : 'Playlist'}
attr Sonos_Wohnzimmer verbose 2
attr Sonos_Wohnzimmer webCmd volume:playFav
attr Sonos_Wohnzimmer webCmdLabel Lautstärke\
:Favoriten

setstate Sonos_Wohnzimmer PLAYING
setstate Sonos_Wohnzimmer 2021-12-04 13:59:56 IODev MQTT2_Server
setstate Sonos_Wohnzimmer 2021-12-04 15:34:34 Input Radio
setstate Sonos_Wohnzimmer 2021-12-04 13:08:33 Master Wohnzimmer
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 bass 2
setstate Sonos_Wohnzimmer 2021-12-04 14:12:49 command toggle
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 coordinatorUuid RINCON_000E58F7F67C01400
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 currentTrack_AlbumArtUri http://192.168.188.23:1400/getaa?s=1&u=x-sonosapi-stream:s1563%3fsid%3d254%26flags%3d8224%26sn%3d0
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 currentTrack_Artist Whatsapp 06131 92 93 92 93 oder Mail ins Studio SWR4.de
setstate Sonos_Wohnzimmer 2021-12-04 14:49:08 currentTrack_Duration 0:00:00
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 currentTrack_ProtocolInfo sonos.com-http:*:application/octet-stream:*
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 currentTrack_Title x-sonosapi-stream:s1563?sid=254&amp;;flags=8224&amp;;sn=0
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 currentTrack_TrackUri x-sonosapi-stream:s1563?sid=254&flags=8224&sn=0
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 currentTrack_UpnpClass object.item
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 enqueuedMetadata_UpnpClass object.item.audioItem.audioBroadcast
setstate Sonos_Wohnzimmer 2021-12-04 14:12:49 error_Action Play
setstate Sonos_Wohnzimmer 2021-12-04 14:12:49 error_Fault UPnPError
setstate Sonos_Wohnzimmer 2021-12-04 14:12:49 error_FaultCode s:Client
setstate Sonos_Wohnzimmer 2021-12-04 14:12:49 error_UpnpErrorCode 701
setstate Sonos_Wohnzimmer 2021-12-04 14:12:49 error_name SonosError
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 groupName Wohnzimmer
setstate Sonos_Wohnzimmer 2021-12-04 13:08:33 inCouple 0
setstate Sonos_Wohnzimmer 2021-12-04 13:08:33 inGroup 0
setstate Sonos_Wohnzimmer 2021-12-04 13:08:33 isMaster 1
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 mute false
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 name Wohnzimmer
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 playFav SWR4 Rheinland-Pfalz
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 playmode NORMAL
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 state PLAYING
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 treble -1
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 ts 1638628489041
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 uuid RINCON_000E58F7F67C01400
setstate Sonos_Wohnzimmer 2021-12-04 15:34:49 volume 20

rudolfkoenig

Wenn ich auf der Sonos_Wohnzimmer Detailseite in der set Zeile playFav auswaehle, dann wird der select neben playFav mit dem Inhalt des playFav Readings initialisiert.

Vermutlich meinst Du aber was anderes: den select in der Zusammenfassung.
Ich habe dafuer jetzt was geaendert, bitte testen.

TomLee

Sry, meine Nichten sind mir gestern dazwischengegrätscht, dann gibts nur die, da könnte FHEM auch "crashen", dann wär das in der Zeit halt so.
Und später am Abend hatte ich die aktualisierte fhemweb.js mit Filezilla hochgeladen und nicht verstanden warum diese (auch nach mehrfachem restart) nicht geladen wurde, mit der version-Abfrage stand in der Liste immer die alte Version, "ls -l ./www/pgm2/" gab mir aber die neue aus und hatte keine Lust mehr dann mich mit zu beschäftigen.

Mit dem update Heute klappt es auch in der DeviceOverview (wollt ich eigentlich die letzten zwei-drei Beiträge erwähnen das es um die geht, aber immer wieder vergessen).

Was mir jetzt auffällt ist das der erste Wert in der Liste (favRadios) als "default" genommen wird sollten setter und Reading nicht gleich sein, in dem Fall fänd ich es besser das dann kein Wert im Widget steht.

Danke

schwatter

@rudolfkoenig

Nabend,

ich nehme diesen Thread als Einleitung für mein altes/neues Problem.

https://forum.fhem.de/index.php/topic,123027.msg1176034.html#msg1176034

Dort ging es darum, das Statereste wenn kein Reading gesetzt ist als Vorgabe in das Widget "multiple" und "multiple-strict" wandern.
Das konnte ich wie von dir empfohlen, bei dem Dummy mit einem anschließenden setreading bei meinem Notify lösen.

DeebotOzmo950:02_SpotArea.* {my $botcmd = (split ' ',ReadingsVal("DeebotOzmo950","state",0))[1];;system("sudo deebotozmo spotarea $botcmd 1 &");;fhem("setreading DeebotOzmo950 02_SpotArea $botcmd")}

Da der Bot aber auch nur mit MQTT zu steuern ist und ich jetzt komplett darauf wieder umstellen konnte, stehe ich wieder vor dem Problem.
Mein Eintrag in der setlist für den betreffenden Teil sieht so aus.

02_CleaningSpot:multiple,0,1,2,3,4,5 iot/p2p/clean/x/y/z/$DEVICETOPIC/q/1002/j {"body": {"data": {"act": "start", "content": "$EVTPART1", "type": "spotArea"}}}

Kann ich da noch ein setreading einschleusen?


Gruß schwatter

Otto123

ungetestet:
02_CleaningSpot:multiple,0,1,2,3,4,5 { DeinPerlCodeStehthier ;;  qq(iot/p2p/clean/x/y/z/$DEVICETOPIC/q/1002/j {"body": {"data": {"act": "start", "content": "$EVTPART1", "type": "spotArea"}}})}
Aber die Form geht doch schon immer?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

schwatter

Nabend,

Danke Otto, leider funktioniert das nicht. Ich sehe jetzt, ich bin hier falsch. Ich mache dazu einen neuen Thread auf.

Gruß schwatter

DeeSPe

Hallo Rudi,

leider sehe ich jetzt immer beim Neustart von FHEM folgende Zeile im Log:
PERL WARNING: Use of uninitialized value in concatenation (.) or string at FHEM/SetExtensions.pm line 98.
Das kommt m.E. nach erst seit dem Einbau der Perl Code Ausführung.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

rudolfkoenig

ZitatDas kommt m.E. nach erst seit dem Einbau der Perl Code Ausführung.
Das halte ich auch fuer wahrscheinlich, und vermute, dass es ein Problem im Benutzercode ist.
Was sagt denn "attr global stacktrace 1"?

DeeSPe

Zitat von: rudolfkoenig am 15 Dezember 2021, 12:41:58
Das halte ich auch fuer wahrscheinlich, und vermute, dass es ein Problem im Benutzercode ist.
Was sagt denn "attr global stacktrace 1"?

Hab ich gemacht, kommt aber trotzdem kein zusätzlicher Output.
Liegt das evtl. daran dass ich bei global "verbose 2" gesetzt habe?

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

rudolfkoenig

ZitatLiegt das evtl. daran dass ich bei global "verbose 2" gesetzt habe?
Eigentlich nicht.

fhem> attr global verbose 2
fhem> attr global stacktrace 1
fhem> info log
fhem> define m MQTT2_DEVICE
fhem> attr m setList bla:{bla} bla bla
fhem> set m ?
2021.12.15 19:01:51 1 : PERL WARNING: Use of uninitialized value in concatenation (.) or string at FHEM/SetExtensions.pm line 98.
2021.12.15 19:01:51 1 : eval: bla
2021.12.15 19:01:51 1 : stacktrace:
2021.12.15 19:01:51 1 :     main::__ANON__                      called by FHEM/SetExtensions.pm (98)
2021.12.15 19:01:51 1 :     main::SetExtensions                 called by ./FHEM/10_MQTT2_DEVICE.pm (398)
2021.12.15 19:01:51 1 :     main::MQTT2_DEVICE_Set              called by fhem.pl (3895)
2021.12.15 19:01:51 1 :     main::CallFn                        called by fhem.pl (1929)
2021.12.15 19:01:51 1 :     main::DoSet                         called by fhem.pl (1971)
2021.12.15 19:01:51 1 :     main::CommandSet                    called by fhem.pl (1265)
2021.12.15 19:01:51 1 :     main::AnalyzeCommand                called by fhem.pl (1116)
2021.12.15 19:01:51 1 :     main::AnalyzeCommandChain           called by ./FHEM/98_telnet.pm (256)
2021.12.15 19:01:51 1 :     main::telnet_Read                   called by fhem.pl (3895)
2021.12.15 19:01:51 1 :     main::CallFn                        called by fhem.pl (773)
2021.12.15 19:01:51 2 : AttrTemplates: got 235 entries
Unknown argument ?, choose one of bla: attrTemplate:?,double,...

DeeSPe

Zitat von: DeeSPe am 15 Dezember 2021, 11:29:23
leider sehe ich jetzt immer beim Neustart von FHEM folgende Zeile im Log:
PERL WARNING: Use of uninitialized value in concatenation (.) or string at FHEM/SetExtensions.pm line 98.

Das Problem hat sich bei mir erledigt und war selbst produziert.
Es waren wirklich fehlerhafte Zeichen in meinem Code entstanden durch Suchen+Ersetzen.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe