Autor Thema: Sonos2mqtt - vielleicht hat jemand Lust mitzumachen  (Gelesen 49180 mal)

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 18985
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1065 am: 08 Juni 2021, 12:01:36 »
Klares Ja! Ich verhake mich manchmal in anderen Dingen, dann wird es nicht gleich ;)

Dann schau ich jetzt mal, wie es mit mehr als einem Reading geht. Ich will nicht diesen ganzen Korb an redundanten Readings übernehmen.
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 18985
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1066 am: 08 Juni 2021, 23:33:25 »
So da wären jetzt die 3 Readings :)
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 )  {
    my %hash;
    if ($EVENT =~ m/"AlarmRunning":(true|false)/) {$hash{"AlarmRunning"}=$1}
    if ($EVENT =~ m/"SleepTimerGeneration":(\d+)/) {$hash{"SleepTimerGeneration"}=$1}
    if ($EVENT =~ m/"SnoozeRunning":(true|false)/) {$hash{"SnoozeRunning"}=$1}
    return \%hash
  }
}
Jetzt müsste man Snooze auch noch einbauen? Oder geht das auch am Gerät oder in der App? Bin irgendwie zu doof. Ich bekomme das nur mit dem Sonos Modul von Reiner hin. ;)
« Letzte Änderung: 08 Juni 2021, 23:36:43 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Ralli

  • Sr. Member
  • ****
  • Beiträge: 870
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1067 am: 09 Juni 2021, 06:43:53 »
 :)

Für ein per FHEM auszulösendes Snooze hatte ich bislang keinen Anwendungsfall, muss ich mich selbst erst einmal schlau machen. Ich reagiere nur auf das Reading, will also in FHEM mitbekommen, dass einer auf den berühmten Knopf gedrückt hat  8).
Gruß,
Ralli

Intel NUC7i5BNH mit ESXi 7.0, virtualisiertes fhem 6.0 dev, virtualisierte RaspberryMatic (3.57.5.20210525) mit HB-RF-ETH 1.2.9 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.27), FBDECT, Siri und Alexa

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 18985
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1068 am: 09 Juni 2021, 22:05:57 »
Wobei es keinen echten Knopf gibt sondern nur die Funktion in der App? Steht in irgendeiner Beschreibung, ich sehe ihn nicht  :'(

Von FHEM aus kann man den SnoozeKnopf so drücken - x_raw_payload:
{
  "command": "adv-command",
  "input": {
    "cmd": "AVTransportService.SnoozeAlarm",
    "val": {
      "InstanceID": 0,
      "Duration": "00:05:00"
      }
  }
}
siehe https://svrooij.io/node-sonos-ts/sonos-device/services/av-transport-service.html#snoozealarm
Kann man ja noch einbauen.  ;D
« Letzte Änderung: 09 Juni 2021, 22:10:35 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline svrooij

  • New Member
  • *
  • Beiträge: 5
    • Github svrooij
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1069 am: 10 Juni 2021, 23:15:07 »
Hallo Karsten,

so ist es und so ist die default Einrichtung. Steht auch so im Wiki https://wiki.fhem.de/wiki/Sonos2mqtt

Zu sonos-tts-polly: Es ist alles eine Erweiterung der Erweiterung :) letztlich ist es ein Zoo aus nodejs Modulen.
Man kann npm sicher sagen: Installiere nicht in default sondern in diesen Pfad, hab ich aber irgendwie nicht verstanden wie.
Man kann auch sicher dieses /usr/bin/sonos-tts-polly Script starten - ich habe aber auch nicht verstanden wie :)
Letztlich hat das Ding ein paar Parameter beim Aufruf - find ich nicht so kompliziert. Die nodejs Dokumentation sind zum großen Teil automatisch generiert, besser als nix aber eben auch nur so gut wie sich es der Programmierer ausgedacht hat. Und der weiß ja wie sein Programm funktioniert ;)

Gruß Otto

Did you see the documentation on sonos-tts-polly? https://github.com/svrooij/node-sonos-tts-polly#run-your-own-server-in-node

It’s a small webserver, to start it you’ll need 1. a free port to host on 2. an amazon key (see documentation). It then runs in the background and you can use it to generate mp3 files. The problem with Sonos is that to be able to play an mp3 from some webserver, the file name has to end with .mp3 for it to be recognized
Hardcore software developer. See https://github.com/svrooij/

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 18985
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1070 am: 11 Juni 2021, 12:45:08 »
Ich habe mal das Alarmhandling in die Utils eingebaut
Funktionsumfang
  • Wecker auslesen und Einstellungen aktualisieren, aktivieren, deaktivieren
  • Feststellen ob Wecker aktiv
  • Wecker unterbrechen
Der Wecker ist gekennzeichnet mit einer ID!, weitere Beschreibung der Parameter https://svrooij.io/node-sonos-ts/sonos-device/services/alarm-clock-service.html#updatealarm
Achtung: Es funktionieren nach meinen Tests nicht alle Parameter! Mir gelingt es z.B. nicht IncludeLinkedZones zu setzen.

Den Einbau in die sonos2mqtt_utils habe ich ein klein wenig anders gemacht als Ralli, aber danke für die Vorarbeit - die ich genutzt habe!  ;)
ich habe mich am Sonos Modul von Reiner orientiert.
Bridge
get SonosBridge listalarms liefert das Reading Alarms in der SonosBridge ( listalarms:noArg $DEVICETOPIC/cmd/listalarm)
set SonsoBridge setalarm - in der SonosBridge schreibt die Veränderung der Alarms zurück setList setalarm:textField $DEVICETOPIC/cmd/setalarm
Mit der Sub sonos2mqtt_alarm('SonosBridge','') werden die Readings AlarmListIDs und AlarmList in den Playern daraus erzeugt/zugeordnet. Das kann man mit einem "Dummy" userReadings in der Bridge automatisch machen. Dieser Teil ist noch nicht im Setup! Diese wird mit einem bedingten sleep von listalarms aufgerufen
Player
AVTransport liefert über eine Sub die Readings AlarmRunning, SleepTimerGeneration, SnoozeRunning mittels $DEVICETOPIC/status/(.*)/avtransport:.* { sonos2mqtt_reading($NAME,$EVENT,$TOPIC) }
Die sub sonos2mqtt_alarms:  realisiert die Funktion alarm enable|disable|update all|ids|json
Die Kommandos werden um snoozeAlarm erweitert. 5 Minuten weiter schlafen:
set alias=Arbeitszimmer snoozeAlarm 00:05:00Der setList und readingList werden über setup in Bridge und Player eingebaut.
Beispiele:
set alias=Arbeitszimmer alarm disable all
set alias=Arbeitszimmer alarm disable 73
set alias=Arbeitszimmer alarm enable 73,97,100
set alias=Arbeitszimmer alarm update {"ID":73,"Duration":"04:00:00"}
set alias=Arbeitszimmer alarm {(my $start = strftime("%H:%M:%S",localtime(time+5));; return qq(update {"ID":73,"StartLocalTime":"$start","Enabled":true,"Volume":20}))}
Achtung letztes Beispiel ist set magic mit Perl! Vorletztes Beispiel ist einfach ein json String!
Die verwendbaren Inhalte entnimmt man einfach den Readings AlarmList oder AlarmListIDs.
Das letzte Beispiel nutzt die Weckfunktion für einen zeitlich begrenzten Softstart in Kürze (5 sec)  8)

Die neue Utils sollte kompatibel zur alten sein! Wer sie runterladen will Achtung: Vorhandene wird überschrieben!
{ Svn_GetFile("contrib/AttrTemplate/99_sonos2mqttUtils.pm", "FHEM/99_sonos2mqttUtils.pm", sub(){ CommandReload(undef, "99_sonos2mqttUtils") }) }Dann einmal setup machen um die definitionen anzupassen
{sonos2mqtt_setup();;sonos2mqtt_setup('a:model=sonos2mqtt_bridge')}
Gruß Otto
« Letzte Änderung: 12 Juni 2021, 19:29:32 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Ralli

  • Sr. Member
  • ****
  • Beiträge: 870
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1071 am: 11 Juni 2021, 14:17:24 »
Super, vielen Dank - und gerne  ;).

Zitat
Mit der Sub sonos2mqtt_alarm('SonosBridge','') werden die Readings AlarmListIDs und AlarmList in den Playern werden daraus erzeugt/zugeordnet. Das kann man mit einem "Dummy" userReadings in der Bridge automatisch machen. Dieser Teil ist noch nicht im Setup!

userReadings alarmLists:Alarms:.* {sonos2mqtt_alarm($name,'alarmlist')}

Mit dem von dir vorgeschlagenen Userreading klappt das bei (noch) nicht. Stattdessen behelfe ich mir so:

def SonosBridgeAlarmHelper notify MQTT2_SonosBridge:Alarms.* {sonos2mqtt_alarm('MQTT2_SonosBridge','')}
« Letzte Änderung: 12 Juni 2021, 07:39:14 von Ralli »
Gruß,
Ralli

Intel NUC7i5BNH mit ESXi 7.0, virtualisiertes fhem 6.0 dev, virtualisierte RaspberryMatic (3.57.5.20210525) mit HB-RF-ETH 1.2.9 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.27), FBDECT, Siri und Alexa

Offline svrooij

  • New Member
  • *
  • Beiträge: 5
    • Github svrooij
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1072 am: 11 Juni 2021, 20:25:16 »
Sorry for my English, while I can read Deutsch my writing is not that good.

You can load all alarms by calling the global command https://svrooij.github.io/sonos2mqtt/global-commands.html *ListAlarm* (bug, in beta renamed to *ListAlarms*). The alarms will then be published to sonos/alarms

There is also an advanced command https://svrooij.github.io/sonos2mqtt/control/advanced.html to update a few parameters of an alarm. The UpdateAlarm needs all parameters. The *PatchAlarm* loads the old values so you don’t have to. It’s “undocumented” because it’s not available in the speaker, but I’ve build it myself.

Here is the code https://github.com/svrooij/node-sonos-ts/blob/08198914ab7b09eec2350c59a3bf08cd8e207c03/src/services/alarm-clock.service.extension.ts#L66

You can call it with the Advanced Command.

{
  "command": "adv-command",
  "input": {
    "cmd": "AlarmClockService.PatchAlarm",
    "val": {
      "ID": 1230,
      "Enabled": true
    }
  }
}

For other parameters see the above code link.

Hardcore software developer. See https://github.com/svrooij/
Informativ Informativ x 1 Liste anzeigen

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 18985
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1073 am: 11 Juni 2021, 20:46:25 »
@Stephan thanks that you attend to the discussion :)
as I understand, the global command setalarm is doing the same job than PatchAlarm? Or setalarm is using the PatchAlarm?
So I can update certain Elements  like "Enabled" or "StartLocalTime" - I can see the code. This clarifies, that not all Parameter will working.

Ok. If I want doing more than setalarm, I have to use UpdateAlarm with a full qualified json - right?
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Ralli

  • Sr. Member
  • ****
  • Beiträge: 870
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1074 am: 11 Juni 2021, 21:47:10 »
Lieber Otto,

für die nächste Veränderung/Erweiterung hätte ich noch eine Bitte:

Das Einstellen der Lautstärke mit volume xy sollte m.E. nicht per default mit Rampe sein sondern direkt. Eine Einstellung mit Rampe sollte dann eher mit einem zusätzlichen Parameter aktiviert werden.

Ich behelfe mir momentan mit "set Speaker 25 25", um direkt die Lautstärke 25 einzustellen. Das entspricht aber nicht dem sonst üblichen "Standard" in FHEM, denn als zusätzlicher Parameter wird eher die Ramptime angegeben (oder ein Startwert).

Also:

"set Speaker volume 25" sollte m.E. direkt auf 25 gehen,
"set Speaker volume 25 10" könnte das Verhalten, welches du bereits implementiert hast, abbilden - also von 10 auf 25 erhöhen. Die Kür wäre, wenn mit einem "set Speaker volume 25 -1" ein sukzessives Erhöhen oder eine sukzessive Reduktion vom aktuellen volume-Wert durchgeführt würde.

Gerade habe ich noch festgestellt, dass das Reading "Master" nicht korrekt gesetzt wird. Ist im Namen des Speakers ein Leerzeichen, wird bei diesem Reading abgeschnitten. Es steht also in dem Reading "Rumpelstilzchens" statt "Rumpelstilzchens Roam" drin.
« Letzte Änderung: 11 Juni 2021, 22:00:24 von Ralli »
Gruß,
Ralli

Intel NUC7i5BNH mit ESXi 7.0, virtualisiertes fhem 6.0 dev, virtualisierte RaspberryMatic (3.57.5.20210525) mit HB-RF-ETH 1.2.9 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.27), FBDECT, Siri und Alexa

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 18985
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1075 am: 11 Juni 2021, 22:04:46 »
Mit dem von dir vorgeschlagenen Userreading klappt das bei (noch) nicht. Stattdessen behelfe ich mir so:

def SonosBridgeAlarmHelper MQTT2_SonosBridge:Alarms.* {sonos2mqtt_alarm('MQTT2_SonosBridge','')}
Ich habe jetzt ne Weile überlegt und hingeschaut, aber was machst Du mit der DEF (ein notify?) anders als ich mit dem userReadings? Der zweite Parameter ist völlig egal und der erste muss der Name der Bridge sein. Das ist er ja mit $name...
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Ralli

  • Sr. Member
  • ****
  • Beiträge: 870
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1076 am: 11 Juni 2021, 22:16:02 »
Tja, mmh, es klappt halt mit dem userReading nicht, aber mit dem notify ...

Sorry, du hast natürlich Recht, in der Def fehlt das "notify" - ja, es ist eins  ::)

Edit:
Fehler gefunden. In den userReadings fehlte vor dieser neu eingefügten Zeile das Komma. Jetzt klappt's auch mit deinem Ansatz und ohne notify.
« Letzte Änderung: 12 Juni 2021, 11:11:51 von Ralli »
Gruß,
Ralli

Intel NUC7i5BNH mit ESXi 7.0, virtualisiertes fhem 6.0 dev, virtualisierte RaspberryMatic (3.57.5.20210525) mit HB-RF-ETH 1.2.9 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.27), FBDECT, Siri und Alexa
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline binford6000

  • Tester
  • Hero Member
  • ****
  • Beiträge: 1417
  • 🏠⚙️💡🛠📱
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1077 am: 12 Juni 2021, 09:36:03 »
Zitat
Ich behelfe mir momentan mit "set Speaker 25 25", um direkt die Lautstärke 25 einzustellen. Das entspricht aber nicht dem sonst üblichen "Standard" in FHEM, denn als zusätzlicher Parameter wird eher die Ramptime angegeben (oder ein Startwert).

 +1 8)
Proxmox mit: nextcloud, fhem, pihole, docker, bitwarden, deconz, TasmoAdmin
fhem mit: deconz, Sonos2mqtt, alexa-fhem, homebridge, Signalbot, livetracking, fhemApp als Frontend
Testumgebung: docker pull fhem/fhem

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 18985
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1078 am: 12 Juni 2021, 18:16:27 »
Zitat
"set Speaker volume 25" sollte m.E. direkt auf 25 gehen,
"set Speaker volume 25 10" könnte das Verhalten, welches du bereits implementiert hast, abbilden - also von 10 auf 25 erhöhen. Die Kür wäre, wenn mit einem "set Speaker volume 25 -1" ein sukzessives Erhöhen oder eine sukzessive Reduktion vom aktuellen volume-Wert durchgeführt würde.
Hab ich so eingebaut, die Lösung gefällt mir besser! Und mit dem bisherigen Code war ich sowieso nicht sehr glücklich...

Das mit dem Master Reading habe ich gefunden: im userReading muss das + im split escaped werden  :-X  --> ' \+'
Edit: hab ich im Template gefixed, würde aber ein manuelles Fix am existierenden Player empfehlen :)
« Letzte Änderung: 12 Juni 2021, 18:21:52 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline Ralli

  • Sr. Member
  • ****
  • Beiträge: 870
Antw:Sonos2mqtt - vielleicht hat jemand Lust mitzumachen
« Antwort #1079 am: 12 Juni 2021, 18:54:27 »
Vielen Dank, Otto.

Korrektur vom userReading klappt.
Gruß,
Ralli

Intel NUC7i5BNH mit ESXi 7.0, virtualisiertes fhem 6.0 dev, virtualisierte RaspberryMatic (3.57.5.20210525) mit HB-RF-ETH 1.2.9 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.27), FBDECT, Siri und Alexa