Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

Begonnen von Otto123, 31 Mai 2020, 18:30:55

Vorheriges Thema - Nächstes Thema

Ralli

#1050
Hallo Otto,

ich habe dir die von mir erweiterte Utils per PM geschickt.

Zitat von: Otto123 am 25 Mai 2021, 10:40:41
Wegen dem AlarmRunning Reading musst Du mal am Anfang des Threads schauen, da war es schon mal da. Notfalls muss man mal noch so ein "Urdevice" bauen :)
Tipp: geh hier im Thread auf "drucken" und dann mit ctrl+f nach AlarmRunning suchen.

Habe das Reading jetzt durch eine Modifkation der readingsList der Speaker hinbekommen, es ist Teil von avtransport:


sonos/status/esszimmer/avtransport:.* { json2nameValue($EVENT,'AV_',$JSONMAP) }
sonos/status/esszimmer/renderingcontrol:.* { json2nameValue($EVENT,'REND_',$JSONMAP) }


Wichtig ist hier, dass nicht die UUID sondern der Raum- bzw. Speakername verwendet wird - auch hier stimmt die Doku https://svrooij.io/sonos2mqtt/topics.html#avtransport-message also nicht.
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

Otto123

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

Ralli

#1052
Danke.

Mir ist aufgefallen, dass in der setList der Bridge noch folgende Zeile fehlt:


setplayFav:noArg {sonos2mqtt($NAME,$EVENT)}


Damit wäre m.E. auch im Wiki der Punkt


{sonos2mqtt_mod_list('a:model=sonos2mqtt_speaker','setList','playFav:'.ReadingsVal((devspec2array('a:model=sonos2mqtt_bridge'))[0],'favlist','').q( {sonos2mqtt($NAME,$EVENT)}))}


obsolet bzw. durch das Ausführen von


set SonosBridge setplayFav


oder


{sonos2mqtt_mod_list('a:model=sonos2mqtt_speaker','setList','playFav:'.sonos2mqtt_getList($bridge,'Favorites').' {sonos2mqtt($NAME,$EVENT)}')}


nach dem get SonosBridge Favorites zu ersetzen.
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

Otto123

Die Readings aus avtransport schau ich mir nochmal an. Ich habe damals nicht verstanden warum der Aufbau so ist. Da kommen sicher noch ein paar andere Dinge mit die dem Einen oder Anderen fehlten. Zumal irgendwie viel Redundanz dadurch kam.

Das mit setplayFav hatte ich mal eingebaut und dann irgendwie gezögert auf welchen Weg ich fokussiere. Das modifiziert immer wieder alle Player.
Die Alternative ist play Favorite <Name direkt aus dem Reading der Bridge> da wird nichts im Player modifiziert. Und konsequenter Weise hätte man setPlayRadio und setplayPlaylist noch machen müssen. Das geht alles mit einem Befehl play Favorite|Radio|Playlist <Name direkt aus dem Reading der Bridge> und wäre sogar erweiterbar auf mehr solche Listen.

Aber auch hier habe ich noch offene Baustellen. Bei den Listen gehen noch nicht alle Varianten.
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

Otto123

Zitat von: Ralli am 27 Mai 2021, 14:34:37
Habe das Reading jetzt durch eine Modifkation der readingsList der Speaker hinbekommen, es ist Teil von avtransport:


sonos/status/esszimmer/avtransport:.* { json2nameValue($EVENT,'AV_',$JSONMAP) }
sonos/status/esszimmer/renderingcontrol:.* { json2nameValue($EVENT,'REND_',$JSONMAP) }


Wichtig ist hier, dass nicht die UUID sondern der Raum- bzw. Speakername verwendet wird - auch hier stimmt die Doku https://svrooij.io/sonos2mqtt/topics.html#avtransport-message also nicht.
Hallo Ralli,

die Doku ist schon richtig :) in dem Link von Dir steht:
ZitatAVTransport message
Topic: sonos/status/name_or_uuid_of_speaker/avtransport
Wie es geht steht hier: https://svrooij.io/sonos2mqtt/getting-started.html#configuration
Zitat--friendlynames    Use device name or uuid in topics (except the united topic, always uuid) [choices: "name", "uuid"]
Also konkret bei Verwendung der pm2 Variante
"pm2 -s start sonos2mqtt -- --friendlynames uuid"
Damit man jetzt nur das eine Reading bekommt und nicht den anderen (komplett redundanten?) Kram mit, habe ich das hier gebastelt:
sonos/status/RINCON_347E5C82560801400/avtransport:.* { if ($EVENT =~ m/("AlarmRunning":true|"AlarmRunning":false)/) {json2nameValue("{$1}") } }
Ich hoffe Beta-User fällt jetzt nicht heulend aus dem Sessel :)
Ich denke fast das geht noch einfacher, aber vielleicht ist das irgendwie konsequent (Verwendung des typischen json2nameValue() )

Da gab es schon mal diesen Thread, der die Manipulation von $EVENT vor der Übergabe der Readings zum Inhalt hatte.
Durch den bin ich auf die Idee gekommen. ;)

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

Beta-User

Zitat von: Otto123 am 02 Juni 2021, 17:43:53
Ich hoffe Beta-User fällt jetzt nicht heulend aus dem Sessel :)
ymmd :P

Aber da es nur ein einziges key/value-Paar ist, müßte es eigentlich auch so "direkt" gehen:
sonos/status/RINCON_347E5C82560801400/avtransport:.* { if ($EVENT =~ m/"AlarmRunning":(true|false)/) { { AlarmRunning => $1 } } }
(Ansonsten sind da ein paar m.E. unnötige bzw. inkonsistente Formatierungen drin:)
sonos/status/RINCON_347E5C82560801400/avtransport:.* { if ($EVENT =~ m/("AlarmRunning":true|"AlarmRunning":false)/) { json2nameValue($1) } }
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Ralli

Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa

Otto123

@Jörg: Deine Variante funktioniert (an die hatte ich auch gedacht ;) ). Dein zweiter Satz geht mir immer noch durch den Kopf und ich weiß nicht wie ich den zuordne:
Zitat(Ansonsten sind da ein paar m.E. unnötige bzw. inkonsistente Formatierungen drin:)
Was genau meinst Du damit?
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

TomLee

Anhand dem gezeigten Beispiel nur die zwei geschweiften Klammern ? Ich hab mich nicht mit beschäftigt, keine Zeit und auch Lust.

Otto123

🙈jetzt sehe ich es🙈
Aber hier drin $1 "AlarmRunning":false steht doch nur der Innenteil vom json - da muss doch die Klammer { außen drum } ? ???
oder ist json2namevalue so tolerant?
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

Beta-User

Zitat von: Otto123 am 02 Juni 2021, 19:56:56
Was genau meinst Du damit?
a) wofür waren die geschweiften Klammern um $1?
b) wofür die Quotes (dto)?
c) warum einmal mit Leerzeichen (hinten) und einmal ohne (vorne, jeweils rund um den j2nv()-Aufruf)?

Du hast vermutlich recht, dass j2nv() das passend formatiert haben will, Asche auf mein Haupt...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

#1061
Zitat von: Beta-User am 02 Juni 2021, 20:12:59
[/s]c) warum einmal mit Leerzeichen (hinten) und einmal ohne (vorne, jeweils rund um den j2nv()-Aufruf)?
also den gebe ich gerne zu! Wenn die Dorfkneipe am 17.6. wieder aufmacht, gebe ich eine überflüssige fehlende Leerzeichen Runde :)
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

Beta-User

Betr. Leerzeichen war mein Vorschlag allerdings: eines mehr erhöht die Lesbarkeit...

Trotzdem Prost!

Btw.: Rhasspy wäre evtl. ein cooles Thema für euren kommenden Stammtisch (nachdem mein MQTT-Workshop schon nicht staffgefunden hat (afaik))...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

#1063
Hi,

ich habe mal noch etwas zum AlarmRunning Reading gemacht. Damit ist es egal ob die uuid oder der friendly name im Topic steht. Man muss also den start über pm2 nicht ändern ;)

Die readingList um diesen Teil erweitert:
$DEVICETOPIC/status/(.*)/avtransport:.* { sonos2mqtt_reading($NAME,$EVENT,$TOPIC) }

und diese hier in die utils
sub sonos2mqtt_reading
{
my ($NAME,$EVENT,$TOPIC)=@_;
my $uuid = ReadingsVal($NAME,'uuid','');
my $player = lc( ReadingsVal($NAME,'name','') );
$TOPIC =~ m,.*/status/(.*)/avtransport,;
if ( ($1 eq $uuid or $1 eq $player) and $EVENT =~ m/"AlarmRunning":(true|false)/ ) {
    return { AlarmRunning => $1 }
  }
}

In der utils müsste das setup noch erweitert werden, so erstmal für die Kommandozeile
{ sonos2mqtt_mod_list( 'a:model=sonos2mqtt_speaker', 'readingList', '$DEVICETOPIC/status/(.*)/avtransport:.* { sonos2mqtt_reading($NAME,$EVENT,$TOPIC) }' ) }

@Ralli benutzt Du noch andere Readings aus dem topic avtransport?

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

Ralli

Hi Otto,

vielen Dank - auch für die Nachfrage. Ja, ich nutze noch die beiden Readings.

SleepTimerGeneration
SnoozeRunning

BTW: Wirst du meinen Beitrag in Sachen sonos2mqtt_Alarms in die Utils noch übernehmen?
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.75.7.20240420) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.57), FBDECT, Siri und Alexa