Sonos steuern

Begonnen von Will, 05 Januar 2013, 15:51:12

Vorheriges Thema - Nächstes Thema

justme1968

hab ich gesehen. ich muss aber erst mal beide ins gleiche wlan hängen.

ich hoffe das bekomme ich hin wenn ich einen play:1 kurz über ethernet kabel anschliesse. sonst wird es eine ziemlicher aufwand...
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

der-Lolo

Die Sonos komponenten bauen ein eigenes wlan auf, das lässt sich auch leider nicht verhindern.
Keine ahnung ob das immer noch geht, aber man konnte Android geräten "erlauben" das Sonos W-Lan zu nutzen. An die entstehende SSID kommt man also ran. Bei nicht gerooteten Android geräten hat man aber wohl keine Chance das Passwort auszulesen...

justme1968

die aktuelle firmware braucht kein eigenes netzt mehr. ich habe die player im normalen wlan.

das problem ist mal wieder der hub :) der erkennt wlan komponenten nur wenn sie im gleichen wlan sind. gleiches netz reicht nicht.

es hat aber funktioniert den player per kabel an den access point des hubs zu hängen. keine drei hub Abstürze und diverse retries habe ich jetzt einen player im hub. aber scheinbar wird pro player ein hub device verbraucht und der produktiv hub ist schon am anschlag.

also alles noch mal von vorne mit dem anderen hub :)

die logitech seite ist hier noch ganz schön weit weg von plug und geht...
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Reinerlein

Hi Andre,

ich habe gerade eine Änderung eingecheckt:
- Beim Starten von Fhem werden während der Erkennung der Player bereits wichtige Infos geladen und in die Readings geschrieben. Unter anderem "currentTrackURI" und "numberOfTracks".
- Man kann für "LoadPlaylist", "LoadRadio" (sowie deren "Start"-Pendants) und "StartFavourite" nun reguläre Ausdrücke anstatt des Namens verwenden. Der erste Match wird verwendet.

Ab jetzt im SVN oder ab Morgen im Update...

Grüße
Reinerlein

justme1968

perfekt.

ich probiere es sobald es geht.

gruß
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

justme1968

neuer tag neue idee :)

aber ernsthaft: ich habe glaube ich raugefunden warum es die vielen (und langen) events bei (meinem ?) radio sender gibt:

- die currentTrackPosition springt alle 10 sekunden auf 0:00:00 zurück.
- die currentSenderInfo enthält recht schnell wechselnde rds daten
- die readingsGroups werden jeweils komplett aktualisiert und nicht nur das element das sich geändert hat.
  d.h. das cover wird mit aktualisiert auch wenn sich nur die currentTrackPosition ändert.

wäre es möglich:

- die currentTrackPosition quellenabhängig zu ignorieren?
  d.h. zu sagen wenn es radio ist wird currentTrackPosition immer auf 0:00:00 gesetzt.
  vielleicht sogar sender abhängig? da weiss ich aber nicht ob das nötig ist.

- currentSenderInfo kann ich in infoSummarize anpassen. ich habe auch noch nicht geschaut
  ob es hier sender gibt die hier etwas rein schreiben das sinnvoll ist und sich nicht dauernd
  ändert. dann wäre es eventuell sinnvoll currentSenderInfo per (regex?) zu manipulieren so
  das nur der interessante/relevante teil übrig bleibt.

- ich schaue mal ob man die readingsGroups anders aufbaut so das man die selektive aktualisierung
  einzelner elemente (die ja eigentlich ein wichtiges feature der readingsGroup ist) wieder rein bekommt.
  ich denke das würde die 'grundlast' für kleine systeme deutlich verringern. vor allem das cover bild sollte
  nicht unnötig alle 10 sekunden aktualisiert werden.

  damit wären auch die ersten beiden punkte nicht mehr so wichtig.

  der haut grund warum die readingsGroup mit jeweils einem direkt erzeugten html block definiert sind
  waren glaube ich probleme mit dem layout um den text rechts neben das icon zu bekommen oder?

gruss
  andre

ps: wenn mir das system und die module nicht so gut gefallen würden würde es keine ideen und vorschläge geben :)
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Reinerlein

Hi Andre,

ja, mit der ReadingsGroup habe ich lange gebastelt. Ich hatte vorher eine einfach zweispaltige Readingsgroup, da ging aber mit der Optik einigs Hopp.
Und das von der Readingsgroup standardmäßig verwendete Tabellen-Layout (HTML-Tag "table") war nicht kompatibel mit dem Dashboard, da es dort bei der Anzeige irgendwie verarbeitet und zu hälfte zerstört wird.

Wenn du da eine optisch gleiche Variante mit weniger Aktualisierungen für die Cover-Bereiche hinbekommst... gerne :)

Ich habe da jetzt erstmal auf eine "sichere" Variante gesetzt, die auf jeden Fall immer aktualisiert wird, und meiner Meinung nach gut aussieht.
Welchen Radiosender verwendest du denn? Die, die ich verwende senden ausschließlich sinnvolle Informationen über den aktuell gespielten Titel und die Sendung selbst o.ä. Das ändert sich dann halt bei jedem Titel, was ja auch richtig ist. Manchmal kommt noch Werbung zwischen den Titeln, die dann auch eine Aktualisierung der Informationen vornimmt.
Es gibt aber auch schon einen Sender mit Sonderlocke im Modul, der in der Info XML-Daten geliefert hatte (ich glaube das war RTIL.it). Ich würde jetzt aber ungern im Modul vom Sender ordnungsgemäß gesendete Informationen wegschneiden. Bei RTL.it ging es ja nur darum, die Struktur drumherum zu entfernen, und die eigentliche Info herauszuholen...

Aber zu dem Reading currentTrackPosition: Das wird nur bei jedem Transport-Event aktualisiert, und dann auch nur, wenn es sich seitens Sonos geändert hat.
Wie kommen denn diese 10sekündlichen Transport-Events zustande? Sendet dein Radiosender da ständig neue Infos? Aber auch dann sollte es kein neues Event zu der TrackPosition geben, da diese ja immer auf "0:00:00" gesetzt wird (und somit keine Aktualisierung durchgeführt wird)...
Wenn du schreibst, dass es auf "0:00:00" zurückspringt: Wo wandert es denn vorher so hin?
Es kann sein, dass der Prozentbalken in der Vollbildansicht weiterwandert, das ist aber nur Javascript auf der Oberfläche, und keine Aktualisierung dieses Readings. Das kann ich mir aber mal anschauen.

Und zur ReadingsGroup: Ich wollte hauptsächlich eine saubere Vorlage für eigene Basteleien und Ideen bieten :)
Das soll (und muss) sich jeder u.U. auch selber noch anpassen... Immerhin hat jeder so seine Anwendungsgebiete...

Also, schreib mal welchen Spam-Sender du so hörst :)
Dann schaue ich mal, wie es mit diesem bei mir läuft...

Grüße
Reinerlein

justme1968

das mit den readingGroups schaue ich mir an. die aktuellen sehen gut aus und das möchte ich natürlich bei behalten. das bekommen wir aber auf jeden fall auch mit selektiver aktualisierung der einzelnen elemente hin. wenn es aus irgend einem grund nicht per readingsGroup geht zur not auch in dem ein paar informIds für die longpoll updates direkt gesetzt werden. in der aktuellen fhemweb version haben wir sogar die möglichkeit direkt daten von fhem an den browser zu senden ohne events zu erzeugen. d.h. man kann bei den widgets im browser noch mehr machen.  ich bin aber noch nicht dazu gekommen das einzubauen und zu verwenden.

der sender ist SWR3. ich vermute du wirst schnell sehen was genau passiert:inform timer ^sonos_Bad$
set sonos_Bad Play
2015-01-16 12:12:38 SONOSPLAYER sonos_Bad LastActionResult: Play: Success!
2015-01-16 12:12:39 SONOSPLAYER sonos_Bad transportState: PLAYING
2015-01-16 12:12:39 SONOSPLAYER sonos_Bad currentSenderInfo: Verbindung herstellen...
2015-01-16 12:12:39 SONOSPLAYER sonos_Bad infoSummarize1: SWR3 Elchradio: 'Bis Zwölf' - Verbindung herstellen...
2015-01-16 12:12:39 SONOSPLAYER sonos_Bad infoSummarize2: PLAYING => SWR3 Elchradio: 'Bis Zwölf' - Verbindung herstellen...
2015-01-16 12:12:40 SONOSPLAYER sonos_Bad currentSenderInfo: Wird gestartet...
2015-01-16 12:12:40 SONOSPLAYER sonos_Bad infoSummarize1: SWR3 Elchradio: 'Bis Zwölf' - Wird gestartet...
2015-01-16 12:12:40 SONOSPLAYER sonos_Bad infoSummarize2: PLAYING => SWR3 Elchradio: 'Bis Zwölf' - Wird gestartet...
2015-01-16 12:12:40 SONOSPLAYER sonos_Bad currentSenderInfo:
2015-01-16 12:12:40 SONOSPLAYER sonos_Bad infoSummarize1: SWR3 Elchradio: 'Bis Zwölf' -
2015-01-16 12:12:40 SONOSPLAYER sonos_Bad infoSummarize2: PLAYING => SWR3 Elchradio: 'Bis Zwölf' -
2015-01-16 12:12:41 SONOSPLAYER sonos_Bad currentTrackPosition: 0:00:01
2015-01-16 12:12:42 SONOSPLAYER sonos_Bad currentTrackPosition: 0:00:00
2015-01-16 12:12:42 SONOSPLAYER sonos_Bad currentSenderInfo: SWR3 AM MITTAG
2015-01-16 12:12:42 SONOSPLAYER sonos_Bad infoSummarize1: SWR3 Elchradio: 'Bis Zwölf' - SWR3 AM MITTAG
2015-01-16 12:12:42 SONOSPLAYER sonos_Bad infoSummarize2: PLAYING => SWR3 Elchradio: 'Bis Zwölf' - SWR3 AM MITTAG
2015-01-16 12:12:46 SONOSPLAYER sonos_Bad currentTrackPosition: 0:00:05
2015-01-16 12:12:54 SONOSPLAYER sonos_Bad currentTrackPosition: 0:00:00
2015-01-16 12:12:54 SONOSPLAYER sonos_Bad currentSenderInfo: Am Mikrofon: Stefanie Tuecking
2015-01-16 12:12:54 SONOSPLAYER sonos_Bad infoSummarize1: SWR3 Elchradio: 'Bis Zwölf' - Am Mikrofon: Stefanie Tuecking
2015-01-16 12:12:54 SONOSPLAYER sonos_Bad infoSummarize2: PLAYING => SWR3 Elchradio: 'Bis Zwölf' - Am Mikrofon: Stefanie Tuecking
2015-01-16 12:13:06 SONOSPLAYER sonos_Bad currentTrackPosition: 0:00:11
2015-01-16 12:13:14 SONOSPLAYER sonos_Bad currentTrackPosition: 0:00:00
2015-01-16 12:13:14 SONOSPLAYER sonos_Bad currentSenderInfo: Sie hoeren SWR3 AM MITTAG * Alle Top-Stories des Tages in SWR3 *
2015-01-16 12:13:14 SONOSPLAYER sonos_Bad infoSummarize1: SWR3 Elchradio: 'Bis Zwölf' - Sie hoeren SWR3 AM MITTAG * Alle Top-Stories des Tages in SWR3 *
2015-01-16 12:13:14 SONOSPLAYER sonos_Bad infoSummarize2: PLAYING => SWR3 Elchradio: 'Bis Zwölf' - Sie hoeren SWR3 AM MITTAG * Alle Top-Stories des Tages in SWR3 *
2015-01-16 12:13:26 SONOSPLAYER sonos_Bad currentTrackPosition: 0:00:12
2015-01-16 12:13:34 SONOSPLAYER sonos_Bad currentTrackPosition: 0:00:00
2015-01-16 12:13:34 SONOSPLAYER sonos_Bad currentSenderInfo: SWR3 AM MITTAG
2015-01-16 12:13:34 SONOSPLAYER sonos_Bad infoSummarize1: SWR3 Elchradio: 'Bis Zwölf' - SWR3 AM MITTAG
2015-01-16 12:13:34 SONOSPLAYER sonos_Bad infoSummarize2: PLAYING => SWR3 Elchradio: 'Bis Zwölf' - SWR3 AM MITTAG
set sonos_Bad Stop
2015-01-16 12:13:39 SONOSPLAYER sonos_Bad LastActionResult: Stop: Success!
2015-01-16 12:13:40 SONOSPLAYER sonos_Bad transportState: STOPPED
2015-01-16 12:13:40 SONOSPLAYER sonos_Bad currentSenderInfo:
2015-01-16 12:13:40 SONOSPLAYER sonos_Bad infoSummarize1: SWR3 Elchradio: 'Bis Zwölf' -
2015-01-16 12:13:40 SONOSPLAYER sonos_Bad infoSummarize2: STOPPED => SWR3 Elchradio: 'Bis Zwölf' -
inform off


die currentTrackPosition ist völlig sinnlos. wenn man den stream per iTunes abspielt gibt es das gleiche problem.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Reinerlein

Hi Andre,

das mit der TrackPosition ist ja Lustig... OK, ich baue das mal so um, dass bei Streams statisch "0:00:00" eingesetzt wird.
Ich ermittele das immer vom Player, und das der irgendwann mal etwas anderes als diesen 0-Wert bei Streams liefert hätte ich da irgendwie nicht gedacht :)

Ansonsten sind die ja sehr mitteilungsfreudig :D
Das wäre aber was, was ich ungern wegschneiden möchte, auch wenn es hier überflüssig erscheint.
Ich denke der Weg, die Anzeige zu optimieren ist hier auf jeden Fall der bessere, und wenn die TrackPosition weg ist, haben wir ja auch die wirklich sinnlosen Dinge erstmal raus...

Ich fürchte nur, es wird echt kompliziert mit dem Vollbildmodus. Da musste ich mir echt einen hinbiegen um das hinzubekommen. Da wird mittels Javascript ein neuer Knoten erzeugt, der als Inhalt dann den Vollbildcode hat der dann zur Anzeige gebracht wird, und mittels des longpolls auch dort aktualisiert wird...
Wenn du da was besseres findest... sehr gerne... als pragmatiker habe ich mich mit dem zufrieden gegeben, wie es jetzt ist. Es funktioniert ja auch, hat aber natürlich Verbesserungspotential...

Grüße
Reiner

Reinerlein

Hi Andre,

ich habe gerade eine Version eingecheckt, die das Reading "currentTrackPosition" bei Streams nicht mehr vom Player holt, sondern immer fest auf "0:00:00" setzt.
Damit sollte das Reading also schonmal stabil bleiben...

Grüße
Reinerlein

MandelHL

#1435
Hallo zusammen,

ich bin mit meinen Fensterkontakten nun schon so weit, dass ich zum einen eine Sprachausgabe erhalte, wenn die Fenster länger als 30 Minuten offen sind oder wenn die Haustür geöffnet wird und ein oder mehrere Fenster zu diesem Zeitpunkt offenstehen.
Was mir daran aber nicht so gut gefällt ist, dass die Ansagen sehr zeitverzögert kommen, was sicherlich auch an den Google-Abfragen liegt.
Meine Vorstellung ist, dass ich eine Ansage bekomme, die mir mitteilt, dass die Haustür geöffnet wurde und dann die offenen Fenster aus den Variablen übernommen werden, ähnlich des Beitrags oder #750 (Seite 51) und #1039 (Seite 70), in denen die Ansage Variablen in die Sprachausgabe übernimmt.

Hier einmal meine Haustuer.cfg:
#############################################################
#
# Sensor Haustür
#
#############################################################
#
define Haustuerkontakt notify Sensor_Haustuer:open {\
if ((Value("Sensor_Badezimmerfenster_EG") eq "open") || (Value("Sensor_Schlafzimmerfenster") eq "open")) {\
DebianMail('XXXXXXX@@XXXXXX.eu','Bitte Fenster schliessen!','Die Haustür wurde geöffnet. Der aktuelle Zustand der Fenster ist: Badezimmer ist '.Value("Sensor_Badezimmerfenster_EG") .', Schlafzimmer ist '.Value("Sensor_Schlafzimmerfenster").'       ');;\
DebianMail('XXXXXXXXX@@gmail.com','Bitte Fenster schliessen!','Die Haustür wurde geöffnet. Der aktuelle Zustand der Fenster ist: Badezimmer ist '.Value("Sensor_Badezimmerfenster_EG") .', Schlafzimmer ist '.Value("Sensor_Schlafzimmerfenster").'       ');;\
fhem('set Sonos_Kueche Speak 45 de Achtung! Die Haustür wurde geöffnet. Folgende Fenster stehen offen');;\
fhem('set Sonos_Bad_EG Speak 35 de Achtung! Die Haustür wurde geöffnet. Folgende Fenster stehen offen');;\
Log 1, "Sensor_Haustuer.cfg: Die Haustür wurde geöffnet. Achtung";;\
if (Value("Sensor_Badezimmerfenster_EG") eq "open")  {\
fhem('set Sonos_Kueche Speak 45 de Das Badezimmerfenster steht offen');;\
fhem('set Sonos_Bad_EG Speak 35 de Das Badezimmerfenster steht offen');;\
Log 1, "Sensor_Haustuer.cfg: Das Badezimmerfenster steht offen";;\
}\
if (Value("Sensor_Schlafzimmerfenster") eq "open")  {\
fhem('set Sonos_Kueche Speak 45 de Das Schlafzimmerfenster steht offen');;\
fhem('set Sonos_Bad_EG Speak 35 de Das Schlafzimmerfenster steht offen');;\
Log 1, "Sensor_Haustuer.cfg: Das Schlafzimmerfenster steht offen";;\
}\
}\
}


Vielen Dank für Eure Hilfe.

Grüße
Mandel

der-Lolo

Wenn Du die Sprachausgaben zwischenspeicherst - sodass sie nicht jedesmal neu von Google geholt werden klappt es nicht besser?
Ich glaube im Wiki ist beschrieben wie das geht.

Reinerlein

Hi Mandel,

wie der-Lolo geschrieben hat, solltest du das mit dem Caching mal prüfen.

Aber ich hatte deine Frage jetzt auch so verstanden, dass du gerade keinen Ansatz für die Sammeldurchsage hast.
Ich würde einfach eine Variable zusammenbauen, und am Ende ausgeben:

my @fenster = ();
push(@fenster, 'Badfenster)' if (Value("Sensor_Badezimmerfenster_EG") eq "open");
push(@fenster, 'Schlafzimmerfenster') if (Value("Sensor_Schlafzimmerfenster_EG") eq "open");
push(@fenster, 'Terrassentür') if (Value("Sensor_Terrassentuer_EG") eq "open");

if ($#fenster && (Value("Sensor_Haustuer_EG") eq "open")) {
  my $durchsage = 'Die Haustür wurde geöffnet. Folgende Fenster sind noch offen: '.join(', ', @fenster);

  fhem('set Sonos_Kueche Speak 45 de '.$durchsage);
  fhem('set Sonos_Bad_EG Speak 35 de '.$durchsage);
}
Der Code ist jetzt mal ohne maskierende Backslash am Ende... das musst du ggfls. noch einfügen...
Wenn du das Caching angeschaltet hast, sind irgendwann alle Kombinationen mal geladen worden, und stehen lokal zur Verfügung...

Vielleicht kannst du das ja als Ideenvorlage verwenden...

Grüße
Reinerlein

templer1234

Liebe fhem Gemeinde,

ich habe versucht die StartTime auszulesen, bekomme aber immer einen leeren Werte zurück.

Ich habe ein notify erstellt, dass mir die Funktion HeizungWeckerSonos() aufruft. Dort habe ich auch eine Logausgabe eingebaut, jedoch ist mein StartTime immer leer. Habt Ihr vielleicht eine Idee wo mein Fehler liegt?

Viele Grüße,
Stefan

Anbei alle aus meiner Sicht relevanten Informationen:

Aufruf via fhem Webinterface: trigger as_heizung

Notify:
Internals
DEF as_heizung { HeizungWeckerSonos() }
NAME as_heizung
NOTIFYDEV as_heizung

PerlCode:

sub HeizungWeckerSonos() {     
   my $StartTime=eval(ReadingsVal('Sonos_Wohnzimmer', 'Alarmlist', '{}'))->{1}{StartTime};
   Log(3, "Alarm Start Time|" . $StartTime . "|Ende");
}


Ausgabe Logfile:
2015.01.18 21:05:47 3: Alarm Start Time||Ende

Internals:
DEF    RINCON_000E58C4E20A01400_MR
NAME   Sonos_Wohnzimmer
NR   49
NTFY_ORDER   50-Sonos_Wohnzimmer
STATE   appeared
TYPE   SONOSPLAYER
UDN   RINCON_000E58C4E20A01400_MR

Readings:
AlarmList
{'1' => {'Recurrence_Thursday' => 0,'IncludeLinkedZones' => '0','Volume' => '23','Shuffle' => 1,'Recurrence_Wednesday' => 0,'ProgramURI' => 'x-rincon-buzzer:0','Repeat' => 0,'Recurrence_Once' => 0,'StartTime' => '23:50:00','Duration' => '02:00:00','Recurrence_Sunday' => 0,'Enabled' => '1','Recurrence_Friday' => 0,'Recurrence_Saturday' => 0,'Recurrence_Tuesday' => 0,'RoomUUID' => 'RINCON_000E58C4E20A01400','ProgramMetaData' => '','Recurrence_Monday' => 0},'15' => {'Recurrence_Thursday' => 0,'IncludeLinkedZones' => '0','Volume' => '25','Shuffle' => 1,'Recurrence_Wednesday' => 0,'ProgramURI' => 'x-rincon-buzzer:0','Repeat' => 0,'Recurrence_Once' => 0,'StartTime' => '11:00:00','Duration' => '02:00:00','Recurrence_Sunday' => 0,'Enabled' => '1','Recurrence_Friday' => 0,'Recurrence_Saturday' => 0,'Recurrence_Tuesday' => 0,'RoomUUID' => 'RINCON_000E58C4E20A01400','ProgramMetaData' => '','Recurrence_Monday' => 0}}

Reinerlein

Hi templer1234,

da ist meiner Meinung nach nur ein Groß-/Kleinschreibungsfehler: Es heißt "AlarmList" und nicht "Alarmlist". Du musst also dein ReadingsVal entsprechend anpassen...

Grüße
Reinerlein