Neuigkeiten:

Am Sonntag den 8.12.2024 kann es ab ca. 8:00 Uhr zu kurzzeitigen Einschränkungen / Ausfällen bei den Diensten des FHEM Vereines kommen.
Die Server müssen mal gewartet und dabei neu gestartet werden ;)

Hauptmenü

[Snapcast] - support Thread ab 2022

Begonnen von Beta-User, 28 Juni 2022, 13:50:12

Vorheriges Thema - Nächstes Thema

tamash

Zitat von: Beta-User am 03 November 2022, 14:08:10
Ging das bei dir mit der Umstellung der regex (bzw. dem "or"-Zweig)? Dann habe ich da was "falsch optimiert"...
Leider hat bei meinem letzten Kurztest mein IP-V6-Client (das Handy) (unabhängig von FHEM) Probleme beim Abspielen eines streams gehabt, so dass ich den Teil nicht wirklich antesten konnte, und leider habe ich grade noch ein paar andere Baustellen, die für mich etwas höhrere Prio haben.

Erstmal sorry für die extrem späte Antwort.
Leider muss ich die Frage etwas umständlicher beantworten als mir lieb ist :)

Benutzte ich die selbe 'if (regex1) or (regex2)' zeile einfach in Snapcast_getId() in deiner Modulversion ändert das für mich nichts. (funktioniert also nicht)
Verwende ich sie hingegen in meiner (alten) Version (github) dann funktioniert auf Clients mit neuer ID alles wie auf Clients mit alter ID.

:(

Beta-User

Kannst du das mal mit der aktuellen Version versuchen und verbose auf 4 setzen? (Vermutlich sollte das an der zentralen Snapcast-Instanz sein).

Dann sollte zumindest mal im Logfile klarer stehen, welche ID da ermittelt wird.
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

rspecht

Hallo Zusammen,

ich versuche grade Hydraplay mit FHEM zu verheiraten. Dazu stehe ich nun am Problem damit Streams änderbar sind und Volumes nicht.

Ändere ich einen Stream (z.B. mit set SystemAudioSnapcastServer stream OrangeAudio1A MOPIDY-1) eines Clients kommt folgendes ins LOG:
2023.01.12 17:03:14 2: client: 3cdfef5c-bcee-8301-5025-71461c325cde
2023.01.12 17:03:14 2: key: stream
2023.01.12 17:03:14 2: value: Group.SetStream


Mache ich genau das gleiche für Volume ( set SystemAudioSnapcastServer volume OrangeAudio1A 90) passiert nichts mit folgender Meldung:
2023.01.12 17:03:24 2: client: unknown client
2023.01.12 17:03:24 2: key: volume
2023.01.12 17:03:24 2: value: Client.SetVolume


Andersrum gehts direkt. Ändere ich im Hydraplay die Lautstärke dann bewegt sich der Slider im FHEM instantan mit.

Meine Servermodul:
defmod SystemAudioSnapcastServer Snapcast 192.168.0.198 1705
attr SystemAudioSnapcastServer room Audio,System
attr SystemAudioSnapcastServer verbose 4
attr SystemAudioSnapcastServer volumeStepSize 5

setstate SystemAudioSnapcastServer opened
setstate SystemAudioSnapcastServer 2023-01-12 17:23:45 clients 5
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1A_group 3cdfef5c-bcee-8301-5025-71461c325cde
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1A_id OrangeAudio1A
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1A_ip 192.168.0.76
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1A_latency 0
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1A_mac 02:42:6d:9f:60:03
setstate SystemAudioSnapcastServer 2023-01-12 15:18:59 clients_OrangeAudio1A_module SystemAudioSnapcastOrange1E
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1A_muted false
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1A_name OrangeAudio1
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1A_nr 1
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1A_online true
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1A_origid OrangeAudio1A
setstate SystemAudioSnapcastServer 2023-01-12 17:19:28 clients_OrangeAudio1A_stream_id MOPIDY-0
setstate SystemAudioSnapcastServer 2023-01-12 16:53:55 clients_OrangeAudio1A_volume 48
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1B_group 853de234-455d-6f8a-5bf5-11708abb4096
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1B_id OrangeAudio1B
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1B_ip 192.168.0.76
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1B_latency 0
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1B_mac 02:42:6d:9f:60:03
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1B_muted false
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1B_name OrangeAudio1
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1B_nr 2
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1B_online true
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1B_origid OrangeAudio1B
setstate SystemAudioSnapcastServer 2023-01-12 16:50:46 clients_OrangeAudio1B_stream_id MOPIDY-0
setstate SystemAudioSnapcastServer 2023-01-12 16:53:41 clients_OrangeAudio1B_volume 100
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1C_group 20210aef-f7d3-e48d-35d9-03ae5996f2b7
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1C_id OrangeAudio1C
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1C_ip 192.168.0.76
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1C_latency 0
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1C_mac 02:42:6d:9f:60:03
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1C_muted false
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1C_name OrangeAudio1
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1C_nr 4
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1C_online true
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1C_origid OrangeAudio1C
setstate SystemAudioSnapcastServer 2023-01-12 16:50:47 clients_OrangeAudio1C_stream_id MOPIDY-0
setstate SystemAudioSnapcastServer 2023-01-12 16:53:32 clients_OrangeAudio1C_volume 41
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1D_group 577e5ac2-0934-eb04-7ff5-8bb7e8efdb84
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1D_id OrangeAudio1D
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1D_ip 192.168.0.76
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1D_latency 0
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1D_mac 02:42:6d:9f:60:03
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1D_muted false
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1D_name OrangeAudio1
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1D_nr 3
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1D_online true
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_OrangeAudio1D_origid OrangeAudio1D
setstate SystemAudioSnapcastServer 2023-01-12 16:50:48 clients_OrangeAudio1D_stream_id MOPIDY-0
setstate SystemAudioSnapcastServer 2023-01-12 16:53:54 clients_OrangeAudio1D_volume 100
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_b827eb3d0493_group 730a1686-75b9-c32f-07cc-91eb200e0d09
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_b827eb3d0493_id b827eb3d0493
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_b827eb3d0493_ip 192.168.0.59
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_b827eb3d0493_latency 0
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_b827eb3d0493_mac b8:27:eb:3d:04:93
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_b827eb3d0493_muted false
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_b827eb3d0493_name raspisnd1
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_b827eb3d0493_nr 5
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_b827eb3d0493_online true
setstate SystemAudioSnapcastServer 2023-01-12 14:44:46 clients_b827eb3d0493_origid b8:27:eb:3d:04:93
setstate SystemAudioSnapcastServer 2023-01-12 15:17:41 clients_b827eb3d0493_stream_id MOPIDY-0
setstate SystemAudioSnapcastServer 2023-01-12 16:51:26 clients_b827eb3d0493_volume 50
setstate SystemAudioSnapcastServer 2023-01-12 14:44:47 streams 4
setstate SystemAudioSnapcastServer 2023-01-12 14:44:47 streams_1_id MOPIDY-0
setstate SystemAudioSnapcastServer 2023-01-12 14:44:50 streams_1_status playing
setstate SystemAudioSnapcastServer 2023-01-12 14:44:47 streams_2_id MOPIDY-1
setstate SystemAudioSnapcastServer 2023-01-12 14:44:47 streams_2_status idle
setstate SystemAudioSnapcastServer 2023-01-12 14:44:47 streams_3_id BLUETOOTH-0
setstate SystemAudioSnapcastServer 2023-01-12 14:44:47 streams_3_status idle
setstate SystemAudioSnapcastServer 2023-01-12 14:44:47 streams_4_id BLUETOOTH2-1
setstate SystemAudioSnapcastServer 2023-01-12 14:44:47 streams_4_status idle


Einer der Clients:
defmod SystemAudioSnapcastOrange1A Snapcast client SystemAudioSnapcastServer OrangeAudio1A
attr SystemAudioSnapcastOrange1A alias Desktop
attr SystemAudioSnapcastOrange1A room Audio,System
attr SystemAudioSnapcastOrange1A volumeStepSize 5
attr SystemAudioSnapcastOrange1A volumeStepSizeSmall 1
attr SystemAudioSnapcastOrange1A volumeStepSizeThreshold 5
attr SystemAudioSnapcastOrange1A webCmd volume:stream
attr SystemAudioSnapcastOrange1A widgetOverride volume:slider,0,1,100,1 stream:select,MOPIDY-0,MOPIDY-1

setstate SystemAudioSnapcastOrange1A defined
setstate SystemAudioSnapcastOrange1A 2023-01-12 15:19:15 group 3cdfef5c-bcee-8301-5025-71461c325cde
setstate SystemAudioSnapcastOrange1A 2023-01-12 15:19:15 id OrangeAudio1A
setstate SystemAudioSnapcastOrange1A 2023-01-12 15:19:15 ip 192.168.0.76
setstate SystemAudioSnapcastOrange1A 2023-01-12 15:19:15 latency 0
setstate SystemAudioSnapcastOrange1A 2023-01-12 15:19:15 mac 02:42:6d:9f:60:03
setstate SystemAudioSnapcastOrange1A 2023-01-12 15:19:15 muted false
setstate SystemAudioSnapcastOrange1A 2023-01-12 15:19:15 name OrangeAudio1
setstate SystemAudioSnapcastOrange1A 2023-01-12 15:19:15 online true
setstate SystemAudioSnapcastOrange1A 2023-01-12 15:19:15 origid OrangeAudio1A
setstate SystemAudioSnapcastOrange1A 2023-01-12 15:19:14 state defined
setstate SystemAudioSnapcastOrange1A 2023-01-12 17:19:28 stream_id MOPIDY-0
setstate SystemAudioSnapcastOrange1A 2023-01-12 16:53:55 volume 48

Beta-User

Wird leider etwas dauern, bis ich mich kümmern kann/werde. (Schon klar, dass ich das hier schon ein paar Mal verlautbart habe, aber ist im Moment halt leider so, Snapcast ist aber nicht vergessen...!)
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

rspecht

#34
Ich hab nun in 96_Snapcast.pm beim sub Snapcast_Encode folgendes vor dem return eignefügt:
  if(!($method eq "Server.GetStatus")) {
Log3 $name,4, "Snapcast_Encode returns now: $json";
  }


Dadurch kann ich wenigstens etwas debuggen...
Funktioniert nicht: set SystemAudioSnapcastOrange1B volume 10
4: Snapcast_Encode returns now: {"jsonrpc":"2.0","params":{"volume":{"percent":10,"muted":false},"id":"unknown client"},"id":2049,"method":"Client.SetVolume"}

Funktioniert: set SystemAudioSnapcastOrange1B stream MOPIDY-1
4: Snapcast_Encode returns now: {"jsonrpc":"2.0","params":{"id":"853de234-455d-6f8a-5bf5-11708abb4096","stream_id":"MOPIDY-1"},"id":1332,"method":"Group.SetStream"}

Zum einen sehe ich damit beim Stream auf "Group" umgemappt wird. Zum anderen geht was mit den Client IDs schief. Das ummappen soll ja so sein - wieso?
Bei der Clientid müsste ich mal bei der Encode Funktion (encode_json) durchsteigen... evtl. hab ich heute Abend wieder Zeit. Mit Kids und Job ist das doch schwierig :)

ein paar weitere Debugmeldungen hätt ich noch - wenn es in Snapcast set Client geht passt noch alles:
4: Snapcast_setClient called: Hash: HASH(0x4cb8680) - ID: OrangeAudio1B - Param: volume - Value: 10 - Name: SystemAudioSnapcastServer - Method Client.SetVolume - Paramset: HASH(0x5b219c0) - Cnummer: 1
4: Snapcast_setClient called: Hash: HASH(0x4cb8680) - ID: OrangeAudio1B - Param: stream - Value: MOPIDY-1 - Name: SystemAudioSnapcastServer - Method Group.SetStream - Paramset: HASH(0x7ebe0a8) - Cnummer: 2


Edit:
in  sub Snapcast_setClient($$$$) bei Zeile $paramset->{id} = Snapcast_getId($hash,$id); liegt wohl der Fehler...
Wenn ich in Snapcast_getID() die Abfrage if($client=~/^([0-9a-f]{12}(\#*\d*|$))$/i) auskommentiere rennt alles. Was hat man sich da gedacht?


sub Snapcast_getId($$){
  my ($hash,$client) = @_;
  my $name = $hash->{NAME};
  Log3 $name,4, "Snapcast_getId: $name - Client: $client";
  #for test... if($client=~/^([0-9a-f]{12}(\#*\d*|$))$/i){ # client is  ID
Log3 $name,4, "Client is ID";
    for(my $i=1;$i<=ReadingsVal($name,"clients",1);$i++){
      if ($client eq $hash->{STATUS}->{clients}->{"$i"}->{id}) {
        return $hash->{STATUS}->{clients}->{"$i"}->{origid};
      }
    }
  #}
  Log3 $name,4, "Client is no ID!";
  return "unknown client";
}


Grüße

Beta-User

Bin maximal verwirrt...

Zum einen ist das anscheinend nicht die aktuelle Version aus dem svn, die rspecht da verwendet hat.

Zum anderen werden da "nicht-technische" Kenner verwendet, sowas wie "OrangeAudio1B" habe ich bisher bei mir nicht, nur die ID's die die Server-Instanz automatisch zeigt (also sowas wie "84a93e695051_2" oder "7abfe1b9-659e-4448-8de7-647c6404de37").

Damit klappt auch das Ändern per volume-Setter sowohl an der Client-Instanz wie auch am Gerät selbst, sogar dann, wenn dafür gar keine Snapclient-Instanz in FHEM exisitert...

Vielleicht müssen wir mal über Konventionen reden, ich habe wohl was verpaßt...
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

rspecht

Servus,

also ich hab das Snapcast Thema wieder ausgegraben.
Mittlerweile habe ich eine frische FHEM Installation mit alter Config dank defekter Hardware.

Ich habe mir nun wieder
  if(!($method eq "Server.GetStatus")) {
Log3 $name,4, "Snapcast_Encode returns now: $json";
  }
An das Ende der Funktion sub Snapcast_Encode gebaut.
Zu deiner Frage: Der OrangePi ist halt ein Client bei mir - aktuell teste ich an einem Rpi Zero (hostname hier: pisndwifi1)

Ändere ich nun z.B. die Lautstärke kommt folgende Log:
2024.10.06 17:44:21 4: Snapcast_Encode returns now: {"jsonrpc":"2.0","id":19,"params":{"id":"unknown client","volume":{"percent":6,"muted":false}},"method":"Client.SetVolume"}

Also weiterhin mein "Thema" mit dem Unknown Client.

Die Definition:
defmod SystemAudioSnapcastPiZero1 Snapcast client SystemAudioSnapcastServer b827eb3d0493

Die ID passt - da hat er z.b. auch die aktuelle IP des Clients in den Readings.

Grüße

rspecht

Moin,

hatte grade nochmal geschaut...
In der Funktion _getId wird eine Liste durchgearbeitet mit der Anzahl der Streams - daher findet er mein Client nicht da ich nur 1 Stream habe.
Ich hab es nun angepasst.

ub _getId {
    my $hash   = shift // return;
    my $client = shift // return;

    my $name = $hash->{NAME} // return;

Log3 $name,4, "Snapcast_getId internal stuff... client: $client, Name: $name";

    # client is ID
if ( $client =~ m{\A(?:[[:xdigit:]]{8}-(?:[[:xdigit:]]{4}-){3}[[:xdigit:]]{12}(?:[#_]*\d*)|[[:xdigit:]]{12}(?:[#_]*\d*))\z}i ) {
# hier scheint der fehler zu liegen....
#        for my $i ( 1 .. ReadingsVal( $name, 'streams', 1 ) ) {
        for my $i ( 1 .. ReadingsVal( $name, 'clients', 1 ) ) {
            Log3 $name,4, "Snapcast_getId internal stuff... I: $i - ID: $hash->{STATUS}->{clients}->{$i}->{id}";
            return $hash->{STATUS}->{clients}->{$i}->{origid}
                if $client eq $hash->{STATUS}->{clients}->{$i}->{id};
        }
    }
        Log3 $name,4, "Snapcast_getId internal stuff... no match!";

    # client is provided as device name?
    if ( InternalVal($client,'TYPE','') eq 'Snapcast') {
        my $def = InternalVal($client,'ID','');
        return ReadingsVal($name,"clients_${def}_origid",undef);
    }
    return 'unknown client';
}

Beta-User

Sorry, bin grade überhaupt nicht im Thema drin und kann auch nicht testen.

Wird dauern, bis ich da eventuell was qualifiziertes zu sagen kann...
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