[GELÖST] SONOS_isInList in DOIF nutzen

Begonnen von juemuc, 06 Januar 2017, 21:57:43

Vorheriges Thema - Nächstes Thema

juemuc

Hallo,

ich benötige wieder Eure Hilfe.
Ich möchte möchte in einem DOIF mittels SONOS_isInList prüfen, ob mein gespeichert Wert in currentSender_dummy in der Favoritenliste enthalten ist.
Ich erhalte folgende Fehlermeldung

Auch der Versuch

"my @Favorites mit get Sonos_Buero:Favorites" definieren und zu füllen schlagen fehl. Die Beispiele, die ich gefunden habe, habe ich leider nicht verstanden und daher auch nicht anpassen und übernehmen können.

[/code]

2017.01.06 21:51:49 2: Sonos_Buero_Appeared_DOIF: IF (SONOS_isInList(currentSender_Buero, @Favorites) > 0) (set Sonos_Buero StartFavourite currentSender_Buero NoStart): Global symbol "@Favorites" requires explicit package name (did you forget to declare "my @Favorites"?) at (eval 294) line 1.
Bareword "currentSender_Buero" not allowed while "strict subs" in use at (eval 294) line 1.


([Sonos_Buero:presence] eq "appeared" and
[Sonos_Buero:currentSender] ne [currentSender_Buero])
(IF (SONOS_isInList(currentSender_Buero, @Favorites)) > 0)
(set Sonos_Buero StartFavourite currentSender_Buero NoStart)


Viele Grüße
juemuc
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

dev0

SONOS_isInList() ist eine Perlfunktion, die ein Scalar und ein Array als Parameter erwartet. Du müsstest erst das Reading 'Favourites' per eval in einen Hash schreiben, dann die Keys 'Title' in das benötigte Array. Den Suchbegriff kannst Du per ReadingsVal() übergeben.

Perl benötigten Grundlagen findest Du zB. hier:
https://wiki.selfhtml.org/wiki/Perl/
http://fhem.de/commandref.html#perl

juemuc

#2
Hallo,

die Favoriten habe ich ja schon in der Sonos-Variablen LastActionResult über
([Sonos_Buero:presence] eq "appeared")
({fhem ("get Sonos_Buero Favourites")})

in einem "DOIF-Befehl" gelesen.

Allerdings funktioniert dann die weitere Verarbeitung über

([Sonos_Buero:presence] eq "appeared")
({fhem ("get Sonos_Buero Favourites");; 
  my $f = ReadingsVal("Sonos_Buero", "LastActionResult", "Keine"))})
   

nicht.

Es kommt die Meldung
2017.01.07 21:01:57 2: sonos_doif: {fhem ("get Sonos_Buero Favourites");;   my $f = (ReadingsVal("Sonos_Buero",            "LastActionResult", "Keine")) }: GetFavourites: "ANTENNE BAYERN","Absolut relax","Bayern 3","ENERGY München","Gong 96.3","SWR3 Elchradio","antenne 1","sunshine live"

Wie muss ich den zweiten Teil einbauen? Es sind die Werte, die ich dann in einer @-Variablen benötige.  Dies wollte ich mit dem Split-Befehl durchführen.
Übernommen habe ich das Coding von http://www.juergenstechnikwelt.de/smarthome-2/sonos-integration-in-fhem/


Viele Grüße
juemuc
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

dev0

Zitat von: juemuc am 07 Januar 2017, 18:25:23
fhem ("get Sonos_Buero Favourites");; my $f = ReadingsVal("Sonos_Buero", "LastActionResult", "Keine")

Das funktioniert so nicht, da 'get Favourites' mWn asynchron arbeitet: In dem Scalar bekommst Du das Ergebnis, dass schon vor dem get Aufruf in dem Reading stand.

juemuc

Zitat von: dev0 am 08 Januar 2017, 05:35:28
Das funktioniert so nicht, da 'get Favourites' mWn asynchron arbeitet: In dem Scalar bekommst Du das Ergebnis, dass schon vor dem get Aufruf in dem Reading stand.

Hallo,

aber warum steht dann der benötigte Inhalt in der Fehlermeldung? Gibt es Alternativen?

Viele Grüße
juemuc
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).

dev0

Vmtl. weil das Reading vorher schon den Inhalt hatte. Eine mögliche Alternative habe ich oben bechrieben.

juemuc

#6
Hallo zusammen,

nachdem ich nun seit Tagen verschiedenste Möglichkeiten getestet habe, benötige ich Eure Hilfe.

In einer Sonos-Variablen "Favoriten" steht eine Liste der Sender in der Form "ANTENNE BAYERN","Absolut relax","Bayern 3","ENERGY München","Gong 96.3","SWR3 Elchradio","antenne 1","sunshine live"
In einem dummy currentSender_Buero steht ebenfalls ein Sendername Bayern 3.

Nun möchte ich mit SONOS_isInList innerhalb eines DOIF prüfen, ob der Wert aus currentSender_Buero in den Favoriten enthalten ist und dann ein "set" ausführen.

Das nachfolgende Coding funktioniert nun



([Sonos_Buero:currentSender] ne "X")
({my $f="[currentSender_Buero]";;
  my $exists = SONOS_isInList($f,
   ([Sonos_Buero:Favoriten]));;
  fhem("set favoriten_true $exists")},

IF ([favoriten_true] eq "1")
(set sonos_test {(urlEncode("[currentSender_Buero]"))})
ELSE
(set sonos_test {(urlEncode("[currentSender_default]"))}))


juemuc
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).