Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

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

Vorheriges Thema - Nächstes Thema

kjmEjfu

Zitat von: Otto123 am 28 Oktober 2020, 09:03:39
kann man das im jsonMap mit behandeln?

tja, gute Frage.

Also der Ausschnitt aus dem gesamten JSON schaut so aus:

[...] "mute":{"Master":false,"LF":false,"RF":false} [...]

Vermutlich reicht da etwas RegEx-Voodoo innerhalb von readingList.
Aber die kriege ich zur Zeit nicht hin.

$DEVICETOPIC:.* { $EVENT =~ s/"mute":\{"Master":true/"mute":\{"Master":on/g; $EVENT =~ s/"mute":\{"Master":false/"mute":\{"Master":off/g; json2nameValue($EVENT,'',$JSONMAP)}
funktioniert nicht.
In dem mqtt-Templates sind hier und da Stellen, die eine ähnliche Richtung gehen. Aber die verstehe ich nicht, weshalb ich die nicht angepasst bekomme.  :(
Migriere derzeit zu Home Assistant

Beta-User

Vielleicht grundsätzlich: Diese ganze Nachbehandlung der in $EVENT enthaltenen Infos ist so komplex, es wäre an der Zeit, das an eine Perl-Funktion zu übergeben.

Und wie kjmEjfu schreibt, gibt es auch mit dem 6channel_ethernet_board_6input_split ein template, das "alles mögliche" (ziemlich komprimiert) macht: boolsche Werte in on/off übersetzen, event-on- (+ damit indirekt timestamp-) Fragen klären usw..

Bitte schaut mal in den zugehörigen Thread und versucht das erst mal selbst, ich kann dann gerne auch was dazu beitragen, bin aber auch nicht der Crack, wenn es darum geht, mit sowas wie "eine Referenz auf einen Hash" klarzukommen...
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

kjmEjfu

Ich glaube, ich habe es hinbekommen:

$DEVICETOPIC:.* { $EVENT =~ s/"mute":\{"Master":true/"mute":\{"Master":"on"/g; $EVENT =~ s/"mute":\{"Master":false/"mute":\{"Master":"off"/g; json2nameValue($EVENT,'',$JSONMAP)}

on und off mussten in ""
Migriere derzeit zu Home Assistant

Otto123

Dein mute Reading funktioniert auch bei mir. Sieht aufwendig aus  :-[

Nochmal die Frage nach input: ich habe gerade in FHEM alles neu gemacht: ich habe kein Reading input beim Player  :-\
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

Mitch

Nachdem ich mit dem Sonos Modul immer wieder Probleme habe und es für mich auch zu viel "Overhead" hat (brauche nur Ausgabe von MP3 und Speech), bin ich an diesem Projekt sehr interessiert.

Meine Frage: kann ich sonos2mqtt auf einen separaten Server installieren? Ich gehe davon aus, aber was mir dazu fehlt ist die Einstellung des MQTT Servers (IP und Port).
FHEM im Proxmox Container

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

Mitch

Danke Otto!

Ich war auf der ersten Seite und zu blöd links das Menü zu sehen  :-[
FHEM im Proxmox Container

kjmEjfu

Zitat von: Otto123 am 30 Oktober 2020, 15:03:46
Nochmal die Frage nach input: ich habe gerade in FHEM alles neu gemacht: ich habe kein Reading input beim Player  :-\

dann ist das vielleicht zwischendurch mal durch irgendwas entstanden. Aber dann kann man das Reading ja für das nutzen, für das es genutzt werden soll ;-)
Migriere derzeit zu Home Assistant

Mitch

Soweit sieht alles gut aus, Player gehen.
Ich kann auch lokale MP3s abspielen.

Was ich nicht hinbekomme ist TTS.
Habe ich an Ottos Blog gehalten und alles eingerichtet.
Die MP3 wird auch erzeugt und ist im Browser abspielbar.

Der Sonos Play ruft sie auch auf, sieht am in den Readings, aber es erfolgt keine Ausgabe?

Die Ausgabe geht doch mit set Player speak 20 Text?
FHEM im Proxmox Container

kjmEjfu

Zitat von: Mitch am 31 Oktober 2020, 17:22:39
Soweit sieht alles gut aus, Player gehen.
Ich kann auch lokale MP3s abspielen.

Was ich nicht hinbekomme ist TTS.
Habe ich an Ottos Blog gehalten und alles eingerichtet.
Die MP3 wird auch erzeugt und ist im Browser abspielbar.

Der Sonos Play ruft sie auch auf, sieht am in den Readings, aber es erfolgt keine Ausgabe?

Die Ausgabe geht doch mit set Player speak 20 Text?

Nutzt du das sonos-tty-polly?
Dann musst du SONOS_TTS_CACHE_URI mit einem / beenden
SONOS_TTS_CACHE_FOLDER hingegen darf keinen haben.
Migriere derzeit zu Home Assistant

Mitch

Ich mache das wie in Ottos Blog:

defmod SonosTTS Text2Speech none
attr SonosTTS TTS_UseMP3Wrap 1
attr SonosTTS userReadings httpName:lastFilename.* {'http://'.ReadingsVal($name,'host','set host first').':8083/fhem/'.ReadingsVal($name,'lastFilename','')}
deleteattr SonosTTS TTS_CacheFileDir
setreading SonosTTS host {(qx(hostname -s|tr -d '\n'))}
#setreading SonosTTS host {((split(' ', qx(hostname -I)))[0])}

defmod SonosSpeakWeb HTTPSRV cache cache SonosSpeakWeb

defmod n_SonosSpeak notify SonosTTS:playing:.0 {fhem("set ".ReadingsVal($NAME,"Player","")." notify ".ReadingsVal($NAME,"volume","")." ".ReadingsVal($NAME,"httpName",""))}
FHEM im Proxmox Container

kjmEjfu

Ich habe da nochmal eine Masterfrage an die JSON-/RegEx-Experten unter euch :-)

In sonos/status/name_or_uuid_of_speaker/renderingcontrol steht schon recht viel, was wir über andere Topics bereits bekommen (weshalb auch immer es diese teilweise doppelte und dreifache Datenhaltung gibt). Ich würde jetzt gerne nur auf das HeadphoneConnected zugreifen und daraus ein Reading machen.

{
  "Bass" : -2,
  "HeadphoneConnected" : false,
  "Loudness" : true,
  "Mute" : {
    "Master" : false,
    "LF" : false,
    "RF" : false
  },
  "OutputFixed" : false,
  "PresetNameList" : "FactoryDefaults",
  "SpeakerSize" : 5,
  "SubCrossover" : "0",
  "SubEnabled" : true,
  "SubGain" : "0",
  "SubPolarity" : "0",
  "Treble" : 0,
  "Volume" : {
    "Master" : 3,
    "LF" : 100,
    "RF" : 100
  }
}


Hab schon mal versucht im ReadingList ein radikales

sonos/status/lc(ReadingsVal($name,"name",""))/renderingcontrol { $EVENT =~ s/,.*/\}/g;  json2nameValue($EVENT,'')}

zu einzutragen, aber } wird nicht als escaped erkannt und daher mag er das so nicht. Nachdem ich mir aber gerade nochmal das generische Beispiel angeschaut habe, würde das aber eh falsch matchen, weil der Bass-Eintrag noch vorher stehen kann - der ist bei mir nicht im JSON drin. Wäre also besser es sauber auszuschneiden ;-)
Migriere derzeit zu Home Assistant

Otto123

Hallo Mitch,

gib mal ein list SonosTTS

ZitatIch kann auch lokale MP3s abspielen.
Über welchen Weg? HTTP und notify?

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

Mitch

Internals:
   ALSADEVICE
   CFGFN     
   DEF        none
   FUUID      5f9d8c30-f33f-5738-df84-a57df7dc807cb94b
   MODE       SERVER
   NAME       SonosTTS
   NR         13489
   STATE      Initialized
   TYPE       Text2Speech
   VOLUME     100
   READINGS:
     2020-10-31 17:09:51   host            192.168.0.202
     2020-10-31 17:16:24   httpName        https://192.168.0.202:8084/fhem/cache/152195d1803b7968db8c59cc6c93329a.mp3
     2020-10-31 17:16:24   lastFilename    cache/152195d1803b7968db8c59cc6c93329a.mp3
     2020-10-31 17:16:24   playing         0
   helper:
     Text2Speech:
Attributes:
   TTS_UseMP3Wrap 1
   userReadings httpName:lastFilename.* {'https://'.ReadingsVal($name,'host','set host first').':8084/fhem/'.ReadingsVal($name,'lastFilename','')}


MP3 spiele ich vom share über playUri:
x-file-cifs://192.168.0.202/SonosSpeak/chirp.mp3
FHEM im Proxmox Container

Otto123

Du hast irgendwie den ersten Satz in meinem Blogartikel nicht gelesen :)
Ich habe derzeit die aktuellste Anleitung ins FHEM Wiki geschrieben, aufgeteilt in 2 Artikel.
Siehe also https://wiki.fhem.de/wiki/Sonos2mqtt#Speak_Befehl

Die Frage ist Port 8084 - gibt es wirklich? Damit hab ich nicht getestet, gibt es bei mir ewig nicht mehr.

klappt denn ein playUri [SonosTTS:httpName] ?

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