[gelöst] Blacklist für Streaming

Begonnen von grappa24, 19 November 2022, 09:07:26

Vorheriges Thema - Nächstes Thema

grappa24

Bin gerade an einer Blacklist für meinen Radio-Player und habe es erst einmal mit einer Abfrage wie folgt gelöst:

defmod umschalten DOIF ([Player:currentArtist] =~ m/artist/) (set Player channelUp)

Jetzt möchte ich gerne mehrere <artist> in eine Blacklist eintragen, die ich dann auch pflegen kann.
Wie geht man denn dabei am Besten vor?

Gebäudesicherheit/-komfort, PV-Prognose/Verbrauchssteuerung, Heizungssteuerung, Multimedia, ...
KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200, Netatmo, Nuki, SolarForecast, HEOS, Alexa-FHEM, ...
FHEM 6.4, 2 x RasPi 3B+, Debian Bullseye

MadMax-FHEM

Ich hab das mittels echodevice, notify und einer sub gelöst:


sub my_AutoSkipArtist($$)
{
  my ($Device, $CurrentArtist)  = @_;
  $CurrentArtist = (split(/:/, $CurrentArtist))[1];
  my @ArtistsToSkip = split(/,/, AttrVal("echoIODev", "my_IgnoreList","n.a."));
  my $actArtistToSkip = "";
  my $DeviceName = AttrVal($Device, "alias", "n.a.");
 
  foreach $actArtistToSkip (@ArtistsToSkip)
  {
    if($CurrentArtist =~ m/$actArtistToSkip/)
    {
      fhem("set $Device next");
      Log3(undef, 3, "my_AutoSkipArtist   Artist: $CurrentArtist auf Gerät: $DeviceName skipped!");
    }
  }
}


Im echodevice dann ein userattr my_IgnoreList wo ich eben die zu skippenden Artisten eintrage: Komma-separierte Liste.
Wenn ein neuer Titel/Artis kommt, dann wird die Sub aufgerufen und dort dann in einer Schleife die hinterlegten Skip-Artisten geprüft und weitergeschalten, wenn es matcht.

Hier die Erweiterung beim echoAccountDevice:


attr echoIODev userattr my_IgnoreList
attr echoIODev my_IgnoreList ArtistA,ArtistB,ArtistC


hier noch das notify:


defmod nAutoSkipArtist notify ECHO_.*:currentArtist:.* { my_AutoSkipArtist($NAME, $EVENT) }


Da es beim echodevice so ist, dass es eine zentrale Verbindungsinstanz gibt echoIODev, wo ich auch die Liste pflege aber ja verschiedene Echos habe über die gespielt wird/werden kann, gebe ich auch noch das jeweilige "Abspielgerät" mit, weil ich ja genau dort umschalten muss.

Diese "Spezialitäten" musst du halt anpassen.
Auch, wenn du bei DOIF (ohne Sub) blieben willst...

Evtl. geht statt der Schleife und Einzelprüfung auch ein "grober Match" auf die gesamte Liste...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

grappa24

super, vielen Dank!

Soweit habe ich es eingebaut, die Sub läuft auch ohne Fehler, muss jetzt nur noch "warten", bis mal ein Treffer kommt.

Ich streame Radiosender wo ich leider die Playlist nicht im voraus kenne. Wenn ich den Artist auf die IgnoreListe setzte wenn er schon läuft wird ja kein Event mehr ausgelöst - Software Testen ist schon mühsam  >:(
Gebäudesicherheit/-komfort, PV-Prognose/Verbrauchssteuerung, Heizungssteuerung, Multimedia, ...
KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200, Netatmo, Nuki, SolarForecast, HEOS, Alexa-FHEM, ...
FHEM 6.4, 2 x RasPi 3B+, Debian Bullseye

Per

Zitat von: grappa24 am 19 November 2022, 14:58:07Ich streame Radiosender wo ich leider die Playlist nicht im voraus kenne.
Zum Testen kannst du ja auch mal den Sender wechseln, das ist der Software ja egal.
Allerdings haben die Sender, von denen ich es von früher kenne, dass sie die List vorab eingestellt hatten, inzwischen umgestellt.
Aber: schieb den Wert in eine Variable und wenn das nächste Lied/Event kommt, überträgst du die Variable statt der echen Info.

MadMax-FHEM

Man kann ja auch mal mogeln und ein setreading mit passendem Artist absetzen ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

grappa24

Joachim, jetzt musst du mir mal mit der Logik deiner Routine helfen.
$CurrentArtist = (split(/:/, $CurrentArtist))[1]

Wie sehen deine $CurrentArtist konkret aus, wie deine my_IgnoreList, verstehe nicht, warum du beim split den ":" nimmst  :-\

Die Sub läuft zwar bei mir, tut aber nicht, das wass sie soll.

Bei mir wäre z.B. currentArtist "Michael Schulte" (sorry) und artist nur "Schulte", deshalb auch mein Vergleich ([Player:currentArtist] =~ m/artist/)
Gebäudesicherheit/-komfort, PV-Prognose/Verbrauchssteuerung, Heizungssteuerung, Multimedia, ...
KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200, Netatmo, Nuki, SolarForecast, HEOS, Alexa-FHEM, ...
FHEM 6.4, 2 x RasPi 3B+, Debian Bullseye

MadMax-FHEM

Du musst aufpassen: das CurrentArtist mit dem split mi Doppelpunkt ist das was über das notify ($EVENT) übergeben wird.

D.h. du musst halt schauen was du in die Sub hineinbekommst, also beim Aufruf "reinstopfst"...

Die Variable mit der Skipliste ist @ArtistsToSkip und $actArtistToSkip in der Schleife...

Du kannst ja zu Beginn eine Logausgabe machen und ausgeben lassen was rein kommt.
Hatte/habe ich auskommentiert drin aber (da eigentl. unnötig) gelöscht beim Posten...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

grappa24

Schau mal, das ist das automatisch generierte notify ausgehend vom Event Monitor wenn ich ein "setreading HEOSPlayer376628887 currentArtist Michael Schulte" ausführe:
defmod HEOSPlayer376628887_notify_1 notify HEOSPlayer376628887:currentArtist:.Michael.Schulte {}

Wie würdest du dann my_AutoSkipArtist(...) aufrufen? Irgendwie scheint das bei dir anders zu sein ...
Gebäudesicherheit/-komfort, PV-Prognose/Verbrauchssteuerung, Heizungssteuerung, Multimedia, ...
KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200, Netatmo, Nuki, SolarForecast, HEOS, Alexa-FHEM, ...
FHEM 6.4, 2 x RasPi 3B+, Debian Bullseye

MadMax-FHEM

#8
Naja, wie geschrieben: ich übergebe ja schon mal das "auslösende Device": $NAME

Muss ich, da es ja unterschiedliche Abspielgeräte sein können.

Wenn du das nicht brauchst, nur ein Abspieldevice -> weglassen

Dann triggert MEIN notify auf jede Änderung vom Reading CurrentArtist von jedem meiner Echos.
Wenn du nur ein Abspielgerät hast, dann anpassen.

Dein notify triggert ja aktuell auf genau einen Artisten, nämlich: Michael Schulte

Du wirst doch beim Anlegen im Eventmonitor gefragt: genau für dieses Event oder für alle dieses readings oder so ähnlich -> du brauchst letzteres!

Also so:

defmod HEOSPlayer376628887_notify_1 notify HEOSPlayer376628887:currentArtist:.* {}


Aufruf dann so:

defmod HEOSPlayer376628887_notify_1 notify HEOSPlayer376628887:currentArtist:.* {my_AutoSkipArtist($NAME, $EVENT)}


oder eben ohne Device:

defmod HEOSPlayer376628887_notify_1 notify HEOSPlayer376628887:currentArtist:.* {my_AutoSkipArtist($EVENT)}


Aber dann eben auch die Sub anpassen (jaja: besser ohne "Prototyp" ;)  ):

sub my_AutoSkipArtist($)
{
  my ($CurrentArtist)  = @_;
#  $CurrentArtist = (split(/:/, $CurrentArtist))[1];
  my @ArtistsToSkip = split(/,/, AttrVal("HEOSPlayer376628887", "my_IgnoreList","n.a."));
  my $actArtistToSkip = "";

  Log3(undef, 3, "my_AutoSkipArtist   Artist: $CurrentArtist");

return;

  foreach $actArtistToSkip (@ArtistsToSkip)
  {
    if($CurrentArtist =~ m/$actArtistToSkip/)
    {
      fhem("set HEOSPlayer376628887 next");
    }
  }
}


Aufpassen du wirst verm. Fehler bekommen, weil sich die "Aufrufstruktur" der Sub geändert hat (-> Stichwort "Prototyp")...
EDIT: evtl. Sub und notify löschen und noch mal konsistent neu. (wobei ich dachte, dass wenn man so "komplizierte Dinge" angeht man zumindest die Grundlagen usw. beherrscht 8)  )...

Jetzt mal "aufrufen" (notify triggern) und ins Log schauen, da sollte dann stehen "wie" der aktuelle Artist "übergeben" wird.
Wenn das "einfach so" passt , um mit der Liste zu vergleichen -> dann kann das auskommentierte wegbleiben:

#  $CurrentArtist = (split(/:/, $CurrentArtist))[1];

Wenn das was mit $EVENT reinkommt nicht passt, dann eben entsprechend passend machen, dazu ist BEI MIR diese Zeile da.
Kann bei DIR nat. unnötig sein oder anders aussehen.
Evtl. auch statt $EVENT $EVTPART1 oder so übergeben: das musst du wissen/prüfen/anpassen...

Wenn du per Logausgabe geprüft hast was/wie der Artist "übergeben" wird und das passt, dann das return oben einfach raus und besser auch die Logausgabe raus und halt die Liste (userattr am Device HEOSPlayer376628887) füllen und testen.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

grappa24

Danke für deine Geduld!

>wobei ich dachte, dass wenn man so "komplizierte Dinge" angeht man zumindest die Grundlagen usw. beherrscht
:P Ich hab lange in C/C++ programmiert, aber mit PERL werde ich mich nie anfreunden - oder ich bin mittlerweile zu alt

Mein Fehler war viel subtiler, ich hatte zunächst analog zu deinem Ansatz wie folgt codiert
HEOSPlayer_.*:currentArtist:.* { my_AutoSkipArtist($NAME, $EVENT) }
aber übersehen, dass meine HEOSPlayer keinen "Unterstrich" im Namen haben. Dieses notify konnte nicht anspringen  ;D
Ohne "Unterstrich" läuft es jetzt.

Danke nochmals!
Gebäudesicherheit/-komfort, PV-Prognose/Verbrauchssteuerung, Heizungssteuerung, Multimedia, ...
KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200, Netatmo, Nuki, SolarForecast, HEOS, Alexa-FHEM, ...
FHEM 6.4, 2 x RasPi 3B+, Debian Bullseye

MadMax-FHEM

Ich habe (und tue es noch) C, C++ (C#) programmiert...
...Perl: naja ;)
...zu alt?

Quatsch: lebenslanges lernen... 8)

Na dann: [gelöst] ? :)

Viel Spaß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

grappa24

Zitat von: MadMax-FHEM am 20 November 2022, 16:35:22
...zu alt?
Ich hab an der Uni noch FORTRAN mit Lochkarten codiert  8)
Gebäudesicherheit/-komfort, PV-Prognose/Verbrauchssteuerung, Heizungssteuerung, Multimedia, ...
KNX, FS20, HM, HUE, Tradfri, Shellies, KLF200, Netatmo, Nuki, SolarForecast, HEOS, Alexa-FHEM, ...
FHEM 6.4, 2 x RasPi 3B+, Debian Bullseye