Sonos Staus abfangen

Node-RED als CCU3/RaspberryMatic Addon, WebApp, HomeKit, ...

Moderator: Co-Administratoren

Stieger
Beiträge: 264
Registriert: 01.05.2014, 18:26
Danksagung erhalten: 1 Mal

Sonos Staus abfangen

Beitrag von Stieger » 23.09.2020, 19:18

Hallo zusammen

Wie kann ich mit Node Red einen Sonos Status abfangen. Ich möchte gerne in der CCu einen Status setzten "Alle Sonos Aus". Nun wenn ich aber über das iPhone das Sonos starte wird dies in der CCU nicht gesehen.

Gibt es da eine Möglichkeit den Status jedes Sonos abzufragen also ob es an oder aus ist ? anhand von dem würd ich dann eine variable in der CCU setzten.

Vielen Dank für eure Hlfe.

Thomas

HenningK
Beiträge: 210
Registriert: 22.09.2012, 20:56
Hat sich bedankt: 5 Mal
Danksagung erhalten: 11 Mal

Re: Sonos Staus abfangen

Beitrag von HenningK » 23.09.2020, 22:16

Sonos sind nie 'aus', falls sie am Stromnetz hängen. Ich Frage die Geräte auf den Playbackstatus ab. Hierzu kannst du node-red-contrib-sonos-plus nehmen.
Im Excel Sheet unter Examples sind die Status beschrieben: playing, transition,..

Stieger
Beiträge: 264
Registriert: 01.05.2014, 18:26
Danksagung erhalten: 1 Mal

Re: Sonos Staus abfangen

Beitrag von Stieger » 24.09.2020, 08:15

Hmm danke für deine Antwort

Da ich neu bin in Red Node. Kannst du mir nicht einen screenshot zeigen wie verknüpfen. ? Danke dir

HenningK
Beiträge: 210
Registriert: 22.09.2012, 20:56
Hat sich bedankt: 5 Mal
Danksagung erhalten: 11 Mal

Re: Sonos Staus abfangen

Beitrag von HenningK » 25.09.2020, 09:46

Da ich nicht genau weiß, was du machen willst starten wir mit diesem generellen flow. Da musst du nichts installieren.
Prinzip: Wir senden einen http request an den SONOS player und schauen, ob der player mit der üblichen Antwort (header Sonos) reagiert. Wenn ja, ist das Gerät erreichbar.
Beim http Request dauert der time out etwas. Deshalb habe ich einen 2. Strang eingebaut, in welchen du den Timeout (über delay node) sozusagen verkürzen kannst. Bei mir lief es mit 10 ms ganz gut - mit 1 ms nicht mehr.
Die Catch node fängt alle Fehler ab - unter anderem den, dass das Gerät im Netz nicht erreichbar ist. In diesem Fall kommt die delay node und sendet ein false.

Code: Alles auswählen

[{"id":"3cedf51f.6bc98a","type":"inject","z":"62cdb70e.b8cc78","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"192.168.178.37","payloadType":"str","x":140,"y":1797,"wires":[["7016e2fb.bf8a7c"]]},{"id":"8d947f7e.94d8e","type":"http request","z":"62cdb70e.b8cc78","name":"","method":"GET","ret":"txt","paytoqs":"ignore","url":"","tls":"","persist":false,"proxy":"","authType":"","x":530,"y":1797,"wires":[["61f44fa1.b9466"]]},{"id":"61f44fa1.b9466","type":"switch","z":"62cdb70e.b8cc78","name":"","property":"headers.server","propertyType":"msg","rules":[{"t":"cont","v":"Linux UPnP/1.0 Sonos/","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":670,"y":1797,"wires":[["75075933.593828","9e3b8c2a.de538"]]},{"id":"75075933.593828","type":"change","z":"62cdb70e.b8cc78","name":"true","rules":[{"t":"set","p":"payload","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":809,"y":1797,"wires":[["bf626131.b2648"]]},{"id":"52ddc88d.0acb28","type":"change","z":"62cdb70e.b8cc78","name":"false","rules":[{"t":"set","p":"payload","pt":"msg","to":"false","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":809,"y":1897,"wires":[["bf626131.b2648"]]},{"id":"bf626131.b2648","type":"debug","z":"62cdb70e.b8cc78","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":978,"y":1796,"wires":[]},{"id":"7de6f721.3469d8","type":"delay","z":"62cdb70e.b8cc78","name":"delay","pauseType":"delayv","timeout":"50","timeoutUnits":"milliseconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":666,"y":1897,"wires":[["52ddc88d.0acb28"]]},{"id":"9e3b8c2a.de538","type":"change","z":"62cdb70e.b8cc78","name":"reset","rules":[{"t":"set","p":"reset","pt":"msg","to":"true","tot":"bool"}],"action":"","property":"","from":"","to":"","reg":false,"x":667,"y":1858,"wires":[["7de6f721.3469d8"]]},{"id":"7016e2fb.bf8a7c","type":"change","z":"62cdb70e.b8cc78","name":"","rules":[{"t":"set","p":"url","pt":"msg","to":"'http://' & $.payload & ':1400/info'","tot":"jsonata"},{"t":"set","p":"delay","pt":"msg","to":"10","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":1797,"wires":[["8d947f7e.94d8e","7de6f721.3469d8"]]},{"id":"d5547acb.0c58a8","type":"inject","z":"62cdb70e.b8cc78","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"192.168.178.27","payloadType":"str","x":140,"y":1857,"wires":[["7016e2fb.bf8a7c"]]},{"id":"1ebdcaff.449b95","type":"inject","z":"62cdb70e.b8cc78","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"192.168.178.24","payloadType":"str","x":140,"y":1917,"wires":[["7016e2fb.bf8a7c"]]},{"id":"90b9692.7e68098","type":"catch","z":"62cdb70e.b8cc78","name":"","scope":["8d947f7e.94d8e"],"uncaught":false,"x":510,"y":1757,"wires":[[]]},{"id":"42232be.d3a09d4","type":"comment","z":"62cdb70e.b8cc78","name":"adjust msg.delay","info":"The delay should be more then the time needed to process the http request plus reset delay.","x":340,"y":1760,"wires":[]}]

Stieger
Beiträge: 264
Registriert: 01.05.2014, 18:26
Danksagung erhalten: 1 Mal

Re: Sonos Staus abfangen

Beitrag von Stieger » 25.09.2020, 10:01

Hallo Henning

Ich möchte über einen Node einen Status in der CCU setzen. Also wenn Sonos an dann setze „Status Sonos an“ in der CCU.

Dies kann ich irgendwie über den Node „Mute“ auslesen. Sonos gibt mir dann „stopped“ „playing“ oder „paused“. Jedoch bringe ich dies dann nicht in den status er ccu rein

Stieger
Beiträge: 264
Registriert: 01.05.2014, 18:26
Danksagung erhalten: 1 Mal

Re: Sonos Staus abfangen

Beitrag von Stieger » 25.09.2020, 11:57

Bei mir sieht dies nun wie folgt aus auf dem Bild. Ev liege ich da total falsch.
Bildschirmfoto 2020-09-25 um 11.55.11.png
Also die Überlegung wäre wie folgt:

Der Inject Node sendet alle paar Sekunden einen Anstoss an mein Sonsos. Dieses gibt dann den Status raus und gibt diesen weiten an den Switch Node. Dort werden die 3 Staten "Playing", "Stopped" und "Pausen" sortiert und an den Wechsel Node weiter gegeben. Diesen sendet dann "True" oder "False" an den CCU Status.

Liege ich da total falsch mit meiner Idee?


Danke für eure Hilfe.

HenningK
Beiträge: 210
Registriert: 22.09.2012, 20:56
Hat sich bedankt: 5 Mal
Danksagung erhalten: 11 Mal

Re: Sonos Staus abfangen

Beitrag von HenningK » 25.09.2020, 13:17

Ist der Sonos Player immer am Stromnetz? Das macht die Sache einfacher und du kannst ein anderes Paket nehmen: node-red-contrib-notify. Du musst damit nicht ständig abfragen sondern erhältst eine Nachricht, wenn sixh der Status ändert.

[https://flows.nodered.org/node/node-red ... nos-notify]
And from 0.1.7, this node supports more events like Volume and PlayState

Stieger
Beiträge: 264
Registriert: 01.05.2014, 18:26
Danksagung erhalten: 1 Mal

Re: Sonos Staus abfangen

Beitrag von Stieger » 25.09.2020, 14:35

OK. Wie muss ich dies genau verlinken? Probiere es am Abend aus. Sonos ist immer am Strom. Danke dir

Stieger
Beiträge: 264
Registriert: 01.05.2014, 18:26
Danksagung erhalten: 1 Mal

Re: Sonos Staus abfangen

Beitrag von Stieger » 25.09.2020, 17:51

Also ich schaffe es nun mal dass das true und false ankommt. Wie kann ich aber die Systemvariable ändern. Dachte dies geht mit true und false wie bei den Autoren.
Kann mir da jemand helfen?
Bildschirmfoto 2020-09-25 um 17.49.50.png
Bildschirmfoto 2020-09-25 um 17.49.42.png
Bildschirmfoto 2020-09-25 um 17.49.42.png (13.46 KiB) 1458 mal betrachtet

HenningK
Beiträge: 210
Registriert: 22.09.2012, 20:56
Hat sich bedankt: 5 Mal
Danksagung erhalten: 11 Mal

Re: Sonos Staus abfangen

Beitrag von HenningK » 25.09.2020, 20:27

1. In ccu die sysvar vom type logic value definieren
2. in Node-RED die node sysvar nutzen und dort die obige sysvar auswählen
3. an die node deinen Wert true/false als msg.payload senden.

Hier ist die Doku im Wiki:
https://github.com/rdmtc/RedMatic/wiki/ ... ysvar-node

PS: Bildschirmfotos geben nur einen Teil der Informationen wieder. Bitte exportiere den Flow und packe ihn in </> code anzeigen.
Dann kann man ihn importieren und genauer sehen, was du machst.

Antworten

Zurück zu „RedMatic“