Sonos steuern

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

Vorheriges Thema - Nächstes Thema

m0urs

Zitat von: eddy242 am 26 März 2020, 09:44:42



-rw-rw----  1 containerheimer everyone        12288 2020-03-26 09:42 RINCON_7828CA6EF12A01400_MR_Speak.mp3


Du siehst die RINCON Datei hat keine Berechtigungen für everyone. -rw-rw----


Die Berechtigung für die Gruppe ist doch "rw" und die Gruppe ist "everyone". Also kann doch "everyone" auch lesen?? Oder meinst Du keine Berechtigung für "Others"?

Unter welchem User/Gruppe läuft denn FHEM?

Wenn der FHEM-User nicht "containerheimer" ist, dann könntest Du den FHEM-User in die Gruppe "everyone" hinzufügen und damit sollte FHEM die Datei lesen können, oder?

noom0815

Zitat von: Otto123 am 26 März 2020, 09:15:46
Du redest von state und nicht von STATE?!?

Hallo Otto,

ja, ich meine state - hatte es nur groß geschrieben, um auf die Anzeigen in Sonos zu verweisen. War vielleicht nicht so clever... ::)
Aber Dein Hinweis auf transportState sollte mein Problem lösen, da dieser den tatsächlichen Zustand der Speaker widerspiegelt...DANKE!
Trotzdem ist der Zustand von state seltsam, oder?


Grüße,
Ian

eddy242

Hallo m0urs,

Du hast recht, ich meinte "others" im Linux/Unix Sinne. FHEM User ist containerheimer (Mapping aus Docker).  Ich müsste einen Weg finden, wie das File mit +r für "others" angelegt wird.

m0urs

Zitat von: eddy242 am 26 März 2020, 10:49:06
Hallo m0urs,

Du hast recht, ich meinte "others" im Linux/Unix Sinne. FHEM User ist containerheimer (Mapping aus Docker).  Ich müsste einen Weg finden, wie das File mit +r für "others" angelegt wird.

Aber wenn FHEM doch unter "containerheimer" läuft, wieso kann FHEM dann nicht zugreifen? Er ist doch dann der Owner dieser Datei? Oder versteh ich das Problem falsch?

Otto123

ZitatOder versteh ich das Problem falsch?
Die Sonos Box kann nicht zugreifen :)

Mapping aus Docker ... Da würde ich das Problem dort suchen! Da ist doch wieder eine Berechtigungsebene dazwischen!
FHEM - docker - samba - Sonos
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

m0urs

Zitat von: Otto123 am 26 März 2020, 11:27:32
Die Sonos Box kann nicht zugreifen :)

Oops ja, sorry. stand auf dem Schlauch ;-)

Also, wenn die Datei mit den Berechtigungen so von FHEM aus (also vom User "containerheimer") erstellt wird, dann kann es doch nur an der UMASK liegen, die in der session aktiv ist, in der FHEM gestartet wird.

Was gibt denn das Kommando in FHEM im Log aus:

{system("bash -c 'umask'")}

Und wenn das "022" ergibt, wie schauen die Rechte der Datei  "/tmp/xx_umask" aus, wenn Du in FHEm den befehl:

{system("touch /tmp/xx_umask")}

absetzt?

eddy242

die umask ist 0022 (ich hatte bereits im Docker-Thread erste Forschungsergebnisse gepostet), sollte ok sein.


touch aha
ls -al

drwxrwx---+ 3 fhem root    4096 Mär 26 13:25 .
drwxr-xr-x  1 root root    4096 Mär 26 11:54 ..
-rw-rw----+ 1 fhem users      0 Mär 26 13:25 aha

m0urs

#3382
Zitat von: eddy242 am 26 März 2020, 13:27:21
die umask ist 0022 (ich hatte bereits im Docker-Thread erste Forschungsergebnisse gepostet), sollte ok sein.


touch aha
ls -al

drwxrwx---+ 3 fhem root    4096 Mär 26 13:25 .
drwxr-xr-x  1 root root    4096 Mär 26 11:54 ..
-rw-rw----+ 1 fhem users      0 Mär 26 13:25 aha


Strange,oder? Weil wenn Du am Prompt "touch aha" eingibst und es kommt dann "-rw-rw---" dann kann eigentlich die UMASK aber nicht 0022 sein!?

Was macht denn das "+" am Ende der Permissions? Deutet das nicht auf Extended Permissions (ACL) hin??

Sende mal den Output von "getfacl aha"

Das Directory liegt auf einem Samba-Share, richtig? Mit welchen Optionen ist das Share denn gemountet?

Und poste mal deine smb.conf.

Und ausserdem ist Dein Output nicht der, den ich angefragt hatte ;-) Ich möchte sehen, was die beiden Kommandos oben aus FHEM heraus ins Log schreiben!

eddy242

Hallo m0urs,


{system("bash -c 'umask'")}
Logfile: 0037



{system("touch /tmp/xx_umask")}

root@fhem:/tmp# ls -al
total 44
drwxrwxrwt 1 root root   4096 Mär 26 14:14 .
drwxr-xr-x 1 root root   4096 Mär 26 11:55 ..
-rw-r----- 1 fhem users 12723 Mär 26 13:56 deutschland.png
-rw-r----- 1 fhem users 17682 Mär 26 13:56 hessen.png
-rw-r----- 1 fhem users     0 Mär 26 14:14 xx_umask
root@fhem:/tmp#


Mein fhem läuft im Docker. Mache ich einen Consolenconnect unter dem user fhem, erhalte ich folgendes:

fhem@fhem:~$ umask
0022
fhem@fhem:~$

(daher oben meine Aussage, dass umask 0022 ist)

Samba läuft als separater Container ebenfalls im Docker. Hier die smb.conf

[global]
    security = user
    map to guest = bad user
    guest account = smbuser


[SonosSpeak]
   path = /mnt/SonosSpeak
   browsable = yes
   read only = no
   guest ok = yes
   veto files = /._*/.apdisk/.AppleDouble/.DS_Store/.TemporaryItems/.Trashes/desktop.ini/ehthumbs.db/Network Trash Folder/Temporary Items/Thumbs.db/
   delete veto files = yes


In den fhem-Container wird das Volume auf dem Host folgendermaßen gemounted:

    volumes:
      - /share/containerdata/SonosSpeak:/mnt/SonosSpeakSamba
...


In den Samba-Container wird das Volume auf dem Host folgendermaßen gemounted:

    volumes:
      - /share/containerdata/SonosSpeak:/mnt/SonosSpeak
...


Sowohl der Samba als auch der fhem Container laufen unter der Host-User-ID containerheimer, der owner auf dem /share/containerdata/SonosSpeak ist.

m0urs

{system("bash -c 'umask'")}
Logfile: 0037

Nun, da haben wir ja das Problem. Für die Session in der FHEM läuft ist die UMASK 0037 und nicht 0022 und daher werden alle aus FHEM heraus erzeugten Dateien auch mit der "falschen" Berechtigung angelegt.

Dann wirst Du wohl mal ins Start-Skript von FHEM schauen müssen. Irgendwo muss da ein UMASK Befehl versteckt sein, würde ich sagen, der die UMASK auf 0037 setzt. Mit dem Docker-Image kenn ich mich nicht aus, daher kann ich da leider nicht weiterhelfen.

Aber in diese Richtung muss Du suchen. Die anderen Dinge, die ich angefragt hatte, sind da wohl eher nicht beteiligt.

Otto123

@m0urs Ich nehme immer qx() damit bekommt man die Antwort im Browser :) und muss sich nicht erst ins Log hangeln.
Mal Dein Test im Block - rückstandlos ;)
{qx (bash -c umask;;F="/mnt/SonosSpeak/xx_umask";;touch \$F;;ls -lha \$F;;rm \$F)}
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

mrfloppy

Frage an die Sonos Profis bezüglich Radiosender bedienen.

Wie kann man es bewerkstelligen die Radiosender mit einer Taste durchzuschwitchen?
Sprich auf einem HM-Taster bei jedem Tastendruck zum nächsten Favoriten Radiosender.

Wer einen Tip oder es ev. schon umgesetzt.

LG Thomas
RaspiMatic, RFXtrx433 E USB, Div. Thermostate, CUL433, Fhemduino, Signalduino, Temp/luftfeuchesensoren,Fensterkontakte,Intertechno Schalter,....... HM-IP

Otto123

Hallo Thomas,

das Prinzip war Array mit den Sendern anlegen, dann irgendwie das array durchtasten. Ich habe das nicht, ich weiß aber das wurde schon häufiger diskutiert.

Such mal etwas (site:forum.fhem.de array sonos), z.B.: gerade das gefunden https://forum.fhem.de/index.php?topic=92612.0

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

Jamo

Alternativ hier mal die RAW definition eines Schrittschalters, den ich auch hier im Forum gefunden hatte. Dieser schaltet die Werte 0 25 50 75 100 des Arrays nacheinander durch.
Zitatdefmod schrittSchalter DOIF init {\
  @{$_a}=qw/0 25 50 75 100/;;    # Liste mit Werten wird als Array definiert\
  $_counter=0;;;;                 # Zähler wird auf den ersten Wert gesetzt\
}\
{\
  #if ([schalter:"on"]) #                          # wenn Taster  'on' sendet\
  if ([$SELF:"schalte"]) {                        # wenn dieser schrittSchalter gedrueckt wird\
    set_State($_a[$_counter]);;                    # setze den Status des Moduls auf den ersten Wert\
    fhem_set("Blind1_Schlaf pct $_a[$_counter++]");;# schalte per set-Befehl ein Device, hier Schalter, mit dem aktuellen Wert und erhöhe den Zähler auf den nächsten Wert\
    $_counter=0 if ($_counter==@{$_a});;           # Wenn Zähler beim letzten Wert angekommen ist, fange wieder beim ersten an\
  }\
}

attr schrittSchalter webCmd schalte
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

binford6000

#3389
Zitat von: mrfloppy am 09 April 2020, 14:04:56
Frage an die Sonos Profis bezüglich Radiosender bedienen.

Wie kann man es bewerkstelligen die Radiosender mit einer Taste durchzuschwitchen?
Sprich auf einem HM-Taster bei jedem Tastendruck zum nächsten Favoriten Radiosender.

Wer einen Tip oder es ev. schon umgesetzt.

LG Thomas

Hier die Lösung von Forenmitglied "juemuc" als myUtils-Funktion:
sub favnext($) {
my ($device) = @_;
my @fav = split(/\|/,ReadingsVal("$device","FavouritesListAlias",""));
my $pos = SONOS_posInList(ReadingsVal("$device","currentFavouriteName",""),@fav);
my $anz=$#fav;
if ($pos < $anz) {
$pos=$pos+1
}
else {
$pos=0
}
my $next_current_favorit=$fav[($pos)];
my $ncf = uri_escape($next_current_favorit);
fhem("set $device StartFavourite $ncf")
}


sub favprev($) {
my ($device) = @_;
my @fav = split(/\|/,ReadingsVal("$device","FavouritesListAlias",""));
my $pos = SONOS_posInList(ReadingsVal("$device","currentFavouriteName",""),@fav);
my $anz=$#fav;
if ($pos > 0) {
$pos=$pos-1
}
else {
$pos=$anz
}
my $next_current_favorit=$fav[($pos)];
my $ncf = uri_escape($next_current_favorit);
fhem("set $device StartFavourite $ncf")
}


Einfach in einem doif/notify aufrufen mit
{favnext("SonosPlayerName")}

VG Sebastian