Sonos2mqtt - vielleicht hat jemand Lust mitzumachen

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

Vorheriges Thema - Nächstes Thema

Otto123

Zitat von: 87insane am 01 Juli 2020, 16:00:41
Meinst du mit "Icon" = "Album Cover / Track Cover usw?
Nein ich meine die Original Icon der Player Geräte - schau doch auf mein Bild mit Sonos Classic.
Damit dort nicht bloß überall das gleiche Lautsprecher Symbol Icon steht ;)
das was mit attr <player> icon gesetzt wird ::)
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

87insane

Folgende Erkenntnisse konnte ich beim erstellen des Players machen und helfen hier vermutlich weiter...

Es gibt folgende interessante Readings:
groupName beinhaltet den Playernamen. Wenn es aber eine Gruppe ist, steht dort MASTER + x(Anzahl) - Beispiel Wohnzimmer + 2
coordinatorUuid beinhaltet z.B. RINCON_7828CAF427B201400 (Ist die eigene wenn es keine Gruppe ist. In einer Gruppe steht da RINCON_1A2B3C... ID des Masters)
uuid beinhaltet z.B. RINCON_7828CAF427B201400 - (Ist immer die eigene ID)
name beinhaltet z.B. Wohnzimmer (Ist der Playername)

1. Ja - Sehe ich auch so! Nervt jetzt schon...

2. a)
aa)
Woher weiß ich ob ein Player in einer Gruppe ist? Wenn name != groupName [if (ReadingsVal($name,"name","0") ne (ReadingsVal($name,"groupName","0")] [Wohnzimmer != Wohnzimmer + 2]

Hier könnte man auch $name mit dem dem Reading coordinatorUuid (natürlich dann mit MQTT2_ vor gesetzt) vergleichen. [my $uuidtoname = "MQTT2_".ReadingsVal($name,"coordinatorUuid","0");]. Finde ich aber schlecht. Zu unflexibel, wenn einer doch mal ein rename macht.


bb1)
Woher weiß ich wer Master ist (lesbar für den Benutzer)? gorupName nach dem ersten Leerzeichen splitten [my $sgroupname = (split(" ",ReadingsVal($name,"groupName","")))[0];] [Wohnzimmer + 2 = Wohnzimmer]

bb2)
Woher weiß ich wer Master ist (um Daten zu übernehmen)? Gerät mit dem Reading uuid und dem Inhalt aus coordinatorUuid (des Slaves) suchen [.*:FILTER=uuid=coordinatorUuid]


cc) [benenne ich das jetzt mal]
Thema Payload. Hier kommen wir wohl nie weiter... Ich stelle die Frage echt oft aber eine gute Antwort gab es noch nicht. Wie fangen wir diesen Verkehr am besten ab. Verbose @all finde ich keine Option! Hier wäre eine grundlegende Logging Definition gut. So das man immer wieder, einfach mal so..... Was ist aktuell "best practice"?

Info zu 2. a): Mit der Art und Weise würden auch mehrere Gruppen erkannt werden und die Slaves sauber zugeordnet.

b)
Ich denke das eigentlich alle Fragen an sich durch 2. a) beantworten werden konnten und das sogar flexibel.
An sich (https://github.com/svrooij/sonos2mqtt/issues/110#issuecomment-652288934) sollte dies die weiteren beantworten.
Also haben wir nur ein + in allen Playern auf den Zweig und WENN = GRUPPE [aa)], DANN nimm die Daten vom MASTER [bb2)]


So läuft das ca auch im devStateIcon ab. Wundere mich das du das so nicht gecheckt hast. Immerhin kann ich das alles (und das sage ich gerne), größten Teils von Dir ;)
Wie dem auch seie... Ich helfe gerne weiter um den Zweig als Essenz zu erarbeiten. Denn dann, kann ich den Player (in meinen Augen) nahezu komplett fertig stellen. Dazu würden Die Gruppen auch logisch angezeigt usw.

ABER ich überlege auch noch eine weitere Ansicht zu bauen. Ich denke nicht jeder hat alle Player in jedem Raum (FHEM). Also wäre ein Slave in einem Raum ungünstig so wie es aktuell ist. Ich müsste also A) bestimmte set´s auf dem Master ausführen lassen.
Oder B) Für Gruppen ggf. eine separate ReadingsGroup. Aber das finde ich wieder unschön....
Oder C) Ideen @all? :)

Info: Liegt daran, das z.B. next oder previous auf dem Slave / Child nicht ausgeführt werden können. Play/Pause/Stop gilt an allen Playern in einer Gruppe. Deswegen blende ich die beiden Button auf den Slaves auch aus. Zudem gibt es noch einen Unterschied zwischen der Player Lautstärke und der Gruppenlautstärke. Sieht man auch in der App immer ganz schön. Wenn z.B.
Wohnzimmer Lautstärke 50%
Arbeitszimmer Lautstärke 30%

und man dann an der Gruppen-Lautstärke dreht, gehen die einzelnen Player mit Ihrer eigenen Lautstärke mit. Also es bleibt harmonisch und nicht alle Player sind identisch der Gruppenlautstärke. In meinem Player geht aktuell nur die Lautstärke des jeweiligem Players. Da ich das eigentlich auch nur zur Automatisierung nutze aber es auch schön haben will, steigere ich mich da auch so rein. Wir reden hier ja auch nicht gerade über ein Mini-Projekt... Mal sehen wo wir in 4 Wochen stehen :)

87insane

Zitat von: Otto123 am 01 Juli 2020, 18:14:47
Nein ich meine die Original Icon der Player Geräte - schau doch auf mein Bild mit Sonos Classic.
Damit dort nicht bloß überall das gleiche Lautsprecher Symbol Icon steht ;)
das was mit attr <player> icon gesetzt wird ::)

Oh die schmeiße ich am Ende eh immer rauß.. Nutze die aber gern als devStateIcon in passender Form. Danke!
Anbei mal OT Bild... Aber damit man weiß was ich meine... hehe

87insane

#333
Zitat von: Otto123 am 01 Juli 2020, 14:32:19
Was noch etwas stört ist der nächste Track, der passt nicht beim Radio

Teste mal den hier...(devStateicon)
{
my $groupname = ReadingsVal($name,"groupName","0");
my $sgroupname = (split(" ",ReadingsVal($name,"groupName","")))[0];
my $uuidtoname = "MQTT2_".ReadingsVal($name,"coordinatorUuid","0");
my $vol = ReadingsVal($name,"volume","");
my $img = ReadingsVal($name,"currentTrack_AlbumArtUri","");
my $trim30 = sub { return length($_[0]) < 29 ? $_[0] : substr($_[0],0,25).'...'; };
my $mystate = $name eq $uuidtoname ? ReadingsVal($name,"state","FEHLER") : ReadingsVal($uuidtoname,"state","");
my $amp = ReadingsVal($name,"bridgeConnected","0") eq "0"
? "rot"
: ReadingsVal($name,"bridgeConnected","0") eq "1"
? "gelb"
: "gruen";
my $playpic = $mystate eq "PLAYING"
? 'rc_PAUSE@red'
: $mystate eq "PAUSED_PLAYBACK"
? 'rc_PLAY@green'
: $mystate eq "STOPPED"
? 'rc_PLAY@green'
: $mystate eq "TRANSITIONING"
? 'rc_PLAY@blue'
: $mystate eq "set_next"
? 'rc_NEXT@blue'
: $mystate eq "set_previous"
? 'rc_PREVIOUS@blue'
: $mystate eq "set_volumeUp"
? 'rc_VOLUP@blue'
: $mystate eq "set_volumeDown"
? 'rc_VOLDOWN@blue'
: $mystate eq "set_mute"
? 'rc_MUTE@blue'
: $mystate;
my $mutecmd = ReadingsVal($name,"mute","0") eq "false"
? "true"
: "false";
my $mutepic = ReadingsVal($name,"mute","0") eq "false"
? 'rc_MUTE'
: 'rc_VOLUP';
my $show = "FEHLER";
my $currentTrack = $mystate eq "TRANSITIONING"
? "Puffern..."
: $trim30->(ReadingsVal($name,"currentTrack_Artist","FEHLER"))." - ".$trim30->(ReadingsVal($name,"currentTrack_Title","FEHLER"));
my $nextTrack = $trim30->(ReadingsVal($name,"nextTrack_Artist","FEHLER"))." - ".$trim30->(ReadingsVal($name,"nextTrack_Title","FEHLER"));
my $previouspic = 'rc_PREVIOUS';
my $nextpic = 'rc_NEXT';
my $voldownpic = 'rc_VOLDOWN';
my $voluppic = 'rc_VOLUP';

if (ReadingsVal($name,"bridgeConnected","0") ne "2") {
$show = " ".FW_makeImage("rc_BLANK")." ";}

elsif (($mystate eq "PLAYING")
|| ($mystate eq "TRANSITIONING" )
|| ($mystate eq "set_next" )
|| ($mystate eq "set_previous" )
|| ($mystate eq "set_volumeUp" )
|| ($mystate eq "set_volumeDown" )
|| ($mystate eq "set_mute" )) {

my $shownp = ReadingsVal($name,"name","0") eq $sgroupname ? "<a href=\"/fhem?cmd.dummy=set $name previous&XHR=1\">".FW_makeImage($previouspic)."</a>
<a href=\"/fhem?cmd.dummy=set $name next&XHR=1\">".FW_makeImage($nextpic)."</a>" : "";

$show = "<a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($playpic)."</a>
<a href=\"/fhem?cmd.dummy=set $name volumeDown&XHR=1\">".FW_makeImage($voldownpic)."</a>
$shownp
<a href=\"/fhem?cmd.dummy=set $name volumeUp&XHR=1\">".FW_makeImage($voluppic)."</a>
&nbsp;&nbsp;&nbsp;&nbsp;
<a href=\"/fhem?cmd.dummy=set $name mute $mutecmd&XHR=1\">".FW_makeImage($mutepic)."</a><br>";

if (ReadingsVal($name,"name","0") eq $sgroupname) {
$show = ReadingsVal($name,"enqueuedMetadata_UpnpClass","FEHLER") ne "object.item.audioItem.audioBroadcast"
? "$show Aktueller Track: $currentTrack<br>Nächster Track: $nextTrack"
: "$show Radio: $currentTrack";}

elsif (ReadingsVal($name,"name","0") ne $groupname) {
$show = "$show
Master: $sgroupname";}
}
else {
$show = $name eq $uuidtoname
? "<a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($playpic)."</a>"
: "<a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($playpic)."</a><br>Master: $sgroupname";}

"<div>
<table>
  <tr>
    <td><div style='display: inline-block; margin-right: 5px; border: 1px solid lightgray; height: 4.00em; width: 4.00em; background-image: url($img);background-size: contain;'></div>
</td>
    <td>".FW_makeImage("10px-kreis-".$amp)."
$show</td>
   </tr>
</table>
</div>"
}


Bei mir geht der so super. Puffern... bleibt ;)
Spaß bei Seite... Hab Sender mit Anzeige von nächster Track. Aber Tatsächlich ist mir das beim Radio echt egal. Dazu hat auch nicht jeder Moderator einen next Track. Ist je nachdem wie die Streamen. Denke aber so ist es ganz gut.

Teste(t) mal und berichtet.. :)

EDIT:
Bild angehangen

PS: Für mich hat es NOCH keine PRIO das es verschoben ist. Aber @TomLee ist da fit! Denke wir machen hier was schönes drauß....
Ach ja und meine Paint Künste bitte nicht direkt verurteilen. Denke man erkennt was man soll ;)

Otto123

Danke, da ist jetzt der nächste Track immer weg, aber es steht auch immer Radio. Aber lass erstmal, meine Player sind bestimmt noch nicht auf dem Stand. Ich muss neu machen. Wird erst morgen. ;D

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

87insane

Hatte es so verstanden das du das bei Radio so wolltest.
Lass uns die zusammen bauen. Am ende zählen die Ideen nicht der, der es realisiert. Das sind am ende eh wir alle :)

Ne so erkennt er ob Radio oder Playlist. Nächster Track ist weg aber er zeigt wie im Auto, wenn du willst auch rds an.

Otto123

Nein, das Problem liegt in den Readings. Wechselt man die Quellen dann hat man irgendwann auch Reste.
Man spielt eine Play list dann hat man den nächsten Titel.
Dann spielt man Radio ohne die Übertragung nächster Titel (offenbar sind die Sender unterschiedlich) damit steht der nächste Titel der vorherigen Playlist noch drin. Also nicht mehr aktuell.
Eventuell muss man auch mal Readings löschen anwerfen wenn man die Quelle wechselt?

Ich wollte das nur als Feedback geben, wie gesagt mir ist momentan die Anzeige nicht so wichtig :)

Ich habe mich gestern noch mit minidlna beschäftigt (89 Pakete und 672 MB Plattenplatz klang dann nicht nach mini ::) )
Das funktioniert dann auch erstmal - aber...
Ich bekommen es nicht hin, eine url zur Übertragung zu bestimmen.
Ich werfe eine Datei willi.mp3 ins dlna-medien Verzeichnis, wenn ich die in einem Mediaplayer aufrufe, heißt die dort 22.mp3 . Diese Zahl ist fortlaufend :o
So ist das erstmal nicht brauchbar, es sei denn einer kann mir sagen wie ich an eine vorbestimmten url komme.
Die Idee wäre ja, ich werfe die "Speakdatei" ins Media Verzeichnis vom dlna und übergebe  sonos die url zum abspielen. Dazu muss ich die url aber wissen können.

Für mich sieht nach dem Versuch erstmal samba viel einfacher, viel schlanker und viel beherrschbarer aus! Zumal ich irgendwas von Datenbank beim dlna gelesen habe.

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

Ups, 672MB sind in der Tat nicht wenig (ich habe den vor einiger Zeit auf meinem Wohnzimmer-Rechner installiert, und da sind sowieso die ganzen libs zum Umgang mit Mediendateien usw. schon drauf gewesen, da war das wirklich "fast nichts", was zusätzlich zu installieren war.
Was das Abspielen angeht, vermute ich, dass es über den Umweg einer Playlist gehen müßte, aber wenn der Overhead so riesig ist, dann ist das wohl eher ein Irrweg, sorry für den Hinweis.


Löschen der bzw. einzelner Readings könnte man über den input-setList Eintrag mit erledigen, das war in meiner Variante afaik sowieso Perl. Sonst über einen userReadings-Eintrag, der dann am Ende ggf. schlicht ein "undef" zurückgeben kann - dann wird das betr. Reading nicht angelegt (jedenfalls, soweit ich mich entsinne).



Was das mit der "dynamischen readingList" angeht:
Erst mal sollte das mit "Master oder nicht?" in einem eigenen Reading landen, ggf. auch der Name des Masters (der sollte ggf. eher indirekt über devspec2array und der CID abgeleitet werden? Kommt aber auch darauf an, was damit gemacht werden soll).
Auch hier wäre ggf. ein userReadings-Eintrag denkbar (Code-Fragment hattest du ja über die ReadingsVal-Abfrage geliefert, über den Namen würde ich eher nicht gehen) oder eben eine "Spezialauswertung" des wirklich zum Gerät gehörenden RINCON-Topics (als eigenständiger rL-Eintrag) denkbar. Da ich aber den MQTT-Verkehr nicht wirklich kenne...

(Und nein, ich bin weder allwissend, noch in der Lage, beim Überfliegen längerer devStateIcon-Codes zu erkennen, was es alles gibt und wo es herkommt...).
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

87insane

Also mich stören die "Reste" nicht. Man kann auch einfach den Sendernamen anzeigen oder so.
Hatte das nun ja so eingestellt, das bei Tracklist nächster und aktueller Track kommt und bei Radio eben Radio...Aber haste recht. Erstmal keine Tragödie.

Ich habe ein synology NAS. Auf diesem läuft seit Jahren ein DLNA Server. Bei diesem habe ich normale Namen und nicht irgendwelche fortlaufenden Nummern.
DLNA funktioniert an sich ja ganz einfach. Es ist immer eine indizierte DB notwendig. In dieser DB werden die Streams erfasst und auch die Formate (wenn gewollt), angepasst
für ggf. Kompatibilität oder aber Mobile Geräte usw. Für mich wäre DLNA trotz dessen, das ich damit gut klar komme, KEINE Option aufgrund der minimal höheren Latenzen gegen SMB/CIFS.

Leider habe ich aktuell auch wenig Ideen. Was spricht in deinen Augen gegen eine Netzwerkfreigabe in Form von SMB o.ä.?
Ansonsten würde man auch noch z.B. FTP nehmen können. Finde ich aber auch semi wegen geringerer Geschwindigkeit im Vergleich.

INFO: Bei mir sagt nicht nur die Waschmaschine Hallo sondern auch die Schellen. Wenn die Schelle zu langsam wäre, wäre der Paket Bote lange weg bevor ich an der Tür wäre. Deswegen zählt mit dem SONOS Modul wirklich jede Sekunde. Mit sonos2mqtt habe ich mich bisher nicht in das Thema "Speak" eingearbeitet. Da bist du aktuell Feder führend.

Beta-User

smb ist ein Winbäh-Protokoll, schon alleine das würde an sich einen Bann rechtfertigen... Schade, dass die sonos scheinbar sowas "brauchen" (sch... Monokultur!). Ob was anderes mit anderen Latenzen verbunden wäre, kann ich mangels HW nicht sagen.

Außerdem muß sich derjenige, der es installiert&configuriert, etwas detaillierter mit den diversen Rechtethemen beschäftigen. Meine Vermutung: Genau das wird nicht gemacht, stattdessen ist am Ende alles "777", und das ist auch sowas wie eine "number of the beast"...

minidlna hätte halt den Charme gehabt, dem User das Rechtethema weitestgehend abzunehmen, und eben nur ein bestimmtes Verzeichnis bzw. die Mediendateien da drin verfügbar zu machen.
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

87insane

#340
ZitatLöschen der bzw. einzelner Readings könnte man über den input-setList Eintrag mit erledigen, das war in meiner Variante afaik sowieso Perl. Sonst über einen userReadings-Eintrag, der dann am Ende ggf. schlicht ein "undef" zurückgeben kann - dann wird das betr. Reading nicht angelegt (jedenfalls, soweit ich mich entsinne).
Wie geht das? Beispiel(e)?

Zitatder sollte ggf. eher indirekt über devspec2array und der CID abgeleitet werden?
Da habe ich aktuell nicht mal eine Vorstellung was du genau machen willst bzw würdest.

Ich dachte ich habe die Daten so gut wie möglich versucht zu erklären....Wenn ich da was nachliefern muss, bitte sagen was...

cc) Hat da noch einer einen heißen Tipp?

Joa aber einen Freigabe Ordner in dem einfach nur mp3 Daten liegen ... Naja das ist mir egal. Wenn jemand da jemals was löschen würde, wäre die Datei beim nächsten nutzen wieder da. Stimmt aber das die Rechtevergabe ein heißes Eisen ist. Sollte aber JEDER der FHEM bzw einen Raspi nutzt mal den ein oder anderen Artikel dazu lesen, denke ich zumindest.

Beta-User

Zitat von: 87insane am 02 Juli 2020, 10:03:02
Wie geht das? Beispiel(e)?
Für das "beliebige Absenden irgendwelcher Befehle":
https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/lib/AttrTemplate/mqtt2.template#L46
userReadings: bitte selbst testen, das geht schneller wie meine Suche ;) .
ZitatDa habe ich aktuell nicht mal eine Vorstellung was du genau machen willst bzw würdest.
In https://svn.fhem.de/trac/browser/trunk/fhem/FHEM/lib/AttrTemplate/mqtt2.template#L2787 und L2788 findest du z.B. eine Methode um den Namen eines bestimmten (ersten) Devices zu erfahren, das einer bestimmten devspec entspricht (darunter den passenden FILTER für ein CID-matching), $devices[0] wäre das, was du suchst.

ZitatIch dachte ich habe die Daten so gut wie möglich versucht zu erklären....Wenn ich da was nachliefern muss, bitte sagen was...
Erklärt im Prinzip schon, aber wenn ich was nachstellen soll, brauche ich einen halbwegs aktuellen, vollständigen Satz an Daten, also im mindesten Fall zwei RAW-list von einem "slave" und einem "master". Aber selbst damit muß ich mir dann hinterher eventuell noch zusammenreimen, auf welchem Pfad denn jetzt welche Daten ggf. reingekommen sind und wie genau denn eine regex ausschauen müßte, um bestimmte Infos aus dem JSON zu lesen und "spezielle" Readings usw. draus zu basteln.
Ehrlich: das geht schneller, wenn es jemand macht, der es im laufenden Betrieb auch austesten kann :P . Und Beispielcode für das Parsen von $TOPIC bzw. payload (=$EVENT) hatte ich verlinkt, insbesondere Tasmota-RF/IR kann man notfalls selber kurz zusammenstöpseln oder eben einen ESP32 als OpenMQTTGateway besorgen (@Otto: hatte ich nicht irgendwo anders mal geschrieben, dass das Ding für Fortgeschrittene MQTT2-User praktisch Pflichtprogramm ist...?  ;) Ernsthaft: Besorgt euch so ein Ding (besser: zwei), selbst wenn ihr es nicht wirklich produktiv nutzen wollt: Nachzuvollziehen, wie die eingehenden Daten da verarbeitet werden und was man daraus machen kann, ist mAn. wirklich lehrreich!)
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

Die Latenz ist ein wesentliches Argument, ich verspreche ich designe / beschreibe es in Zukunft ordentlich (ohne 777 :) )
ZitatBei diesem habe ich normale Namen und nicht irgendwelche fortlaufenden Nummern.
Das stimmt für die dlna Anzeige in diversen Applikationen, das ist bei minidlna auch so. Aber schau mal ob Du da eine vernünftige URL raus bekommst. geh mal im Mediaplayer auf Eigenschaften.
DLNA scheint mir etwas "Usergetriebenes" zu sein. Präsentieren und teilen. Für Automatisierung (sage jemanden "nicht interaktiv": spiele diesen Titel) ist das offenbar nicht gedacht.

Ich  habe eine ESP32 in der Schublade liegen - mal schauen :)
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 Juli 2020, 10:55:44
ich verspreche ich designe / beschreibe es in Zukunft ordentlich (ohne 777 :) )
:)

ZitatDLNA scheint mir etwas "Usergetriebenes" zu sein. Präsentieren und teilen. Für Automatisierung (sage jemanden "nicht interaktiv": spiele diesen Titel) ist das offenbar nicht gedacht.
Deswegen auch die Idee mit der Playlist: Darüber sollte es auch möglich sein, im Hintergrund Dateien auszutauschen bzw. zu aktualisieren. Aber auch da gilt: Habe die sonos Hardware nicht und bisher auch nichts in Richtung Sprachausgabe gemacht.

ZitatIch  habe eine ESP32 in der Schublade liegen - mal schauen :)
:) Bin mal gespannt, was du dazu sagst. Die Flasherei ist etwas spezieller als beim "kleinen Bruder", aber die Anleitung auf den Projekt-Wiki-Seiten ist sehr gut (man muß es nur auf command-line Befehle anpassen, wenn man es mit einem Linux-System machen will).
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

87insane

#344
Zitat von: Otto123 am 02 Juli 2020, 10:55:44
..vernünftige URL raus bekommst...

Angaben bei DLNA sind immer so in der Art:
http://192.168.20.2:50002/v/NDLNA/2285.mkv?WMContentFeatures=DLNA.ORG_OP=01;DLNA.ORG_FLAGS=01700000000000000000000000000000&WMHME=1&WMDuration=54160000000&WMHMETitle=NAAwADAAIABEAGEAeQBzACAAWwAxADAAO

Im Content selber steht dann der "Titel". Denn jedes Gerät mit dem du DLNA eigentlich anschaust ruft den Content auf und nimmt aus der DB die nötigen Infos. z.B. Titel, Länge, stelle an der du diesen Titel zuletzt pausiert hast usw. DLNA ist nichts anderes als ein wählbarer Stream in Form von einer Mediothek. In meinen Augen ist das nur was für Geräte die einen Stream hören/gucken wollen. Es macht aber keinen Sinn das als Abfragequelle für wiederkehrende Aufgaben zu nutzen. Natürlich kann man sich nun immer die IDs rauß suchen und diese dann nutzen aber das + Latenz... nä!

ZitatFür Automatisierung (sage jemanden "nicht interaktiv": spiele diesen Titel) ist das offenbar nicht gedacht.
Genau!

Zitatsmb ist ein Winbäh-Protokoll, schon alleine das würde an sich einen Bann rechtfertigen
Das Windoof-Protokoll muss du ja nicht nehmen. Kannst doch ein beliebiges Protokoll mit Freigabe nutzen... SMB ist in dem Fall aber doch echt gut. In diesem einen Ordner muss es weder Sicherheit geben noch irgendwas. Man gibt ja quasi nur ein Temp Verzeichnis frei. Darin darf dann jeder lesen/schreiben im schlimmsten Fall. Aber dieser "Jeder" kann an der Stelle nichts kaputt machen. Die Dateien würden ja sonst eh neu erzeugt werden. Wenn man es noch eingrenzt und nur dem einen User die Rechte gibt, ist das auch noch ein wenig sicherer. Aber ehrlich.. Ist hier in meinen Augen komplett egal. Man könnte das auch auf einen USB Stick oder so auslagern und diesen nur als Temp nehmen. Dann wäre es nicht mal aktiv auf der System Partition.

EDIT: Was mir beim schreiben so kam... Warum wird die Freigabe überhaupt gebraucht? Eigentlich müsste es doch reichen den Datei Pfad direkt vom System zu nehmen....? Wir müssen die Datei ja nur an die Sonos bekommen und das geht sicher auch direkt. Oder FTP/SCP oder so. Müsste man mal im DEV Guide von Sonos schauen.. interessant...