Hallo,
vielleicht bin ich gedanklich auf dem falschen Weg, weil es so nicht umsetzbar ist... Aber ich hoffe auf Euren Input.
Ich habe inzwischen einiges in FHEM automatisiert. Jetzt schwebt mir vor, meinen Kindern eine Art "Tonie" zu bauen. Ein RFID-Kartenleser und eine Sonosbox. Auf meinem NAS liegen die Playlisten der Kinder.
Meine Idee war: Ich lese das RFID-Tag der Karte ein und suche das passende Device heraus, um dort den Pfad auszulesen.
Mein Doif funktioniert soweit auch:
([Keller_play:rfid] eq [playlist_enya:RFID])(set Sonos_Keller PlayURI [playlist_enya:URI_enc])DOELSEIF ([Keller_play:rfid] eq [playlist_bonJovi:RFID])(set Sonos_Keller PlayURI [playlist_bonJovi:URI_enc])DOELSEIF([Keller_play:rfid] eq [playlist_Wickie:RFID])(set Sonos_Keller PlayURI [playlist_Wickie:URI_enc])
Meine Frage ist:
Gibt es eine Möglichkeit das ganze zu kürzen oder muss ich mir eine perl-Funktion dafür schreiben? (so tief bin ich noch nicht eingestiegen, meine Perlzeiten sind schon 10 Jahre her).
Meine Playlist-Devices sehen alle so aus:
Internals:
FUUID 5d5a7ded-f33f-5457-2faa-d0b45114d8d149c3
NAME playlist_bonJovi
NR 88
STATE 5662b2b
TYPE dummy
READINGS:
2019-08-19 12:47:07 RFID 5662b2b
2019-08-19 12:48:34 URI \\NAS\a b\xxx.m3u
2019-08-19 12:47:39 URI_enc \\NAS\a%20b\xxx.m3u
2019-08-19 15:01:02 state 5662b2b
Attributes:
readingList RFID, URI, URI_enc
room Playlist
Wenn ich mehr als diese 3 Playlisten habe, fängt es an unübersichtlich zu werden, deshalb die Frage. Meine Google-Suche hat leider nichts passendes ergeben.
Vielen Dank.
Gruß
Katrin
So wie bei dir die Dummys definiert sind, ist es umständlich die Playlist zu referenzieren - auch in Perl.
Es wäre einfacher, wenn man über RFID-Nummer referenzieren könnte. Dazu müsste im einfachsten Falle der Name der Playlist (also des Dummys) die RFID sein.
ZitatInternals:
FUUID 5d5a7ded-f33f-5457-2faa-d0b45114d8d149c3
NAME 5662b2b
NR 88
STATE playlist_bonJovi
TYPE dummy
READINGS:
2019-08-19 12:47:07 RFID 5662b2b
2019-08-19 12:48:34 URI \\NAS\a b\xxx.m3u
2019-08-19 12:47:39 URI_enc \\NAS\a%20b\xxx.m3u
2019-08-19 15:01:02 state playlist_bonJovi
Dann könnte man das Device als Referenz benutzen.
z. B. im DOIF-Perlmodus als Einzeiler für alle Playlisten:
define di_play DOIF {fhem_set ("Sonos_Keller PlayURI ".ReadingsVal([Keller_play:rfid],"URI_enc",""))}
Ich gehe davon aus, dass [Keller_play:rfid] dein DOIF bisher triggerte.
Hallo Damian,
danke für deine Antwort. Ich teste es morgen. Mein Ziel war es über die RFID zu verweisen, .... Manchmal sieht man den Wald nicht...
Ich gebe dann noch mal eine Rückmeldung.
Gruß
Katrin
Doch schnell noch getestet :-)
Es geht.
Danke für Deine Hilfe.
Gruß
Katrin
Ich weiß nicht, ob du all die Dummys noch für andere Zwecke nutzt, wenn nicht, dann kannst du auch alle Playlisten direkt in dem DOIF unterbringen, dann brauchst du keine Dummys für die Playlisten zu definieren:
z. B.
Readings im DOIF definieren (mit setreading):
R_5662b2b \\NAS\a%20b\xxx.m3u
R_... \\NAS...
usw.
Dann die eigentliche DOIF-Definition:
define di_play DOIF {fhem_set ("Sonos_Keller PlayURI ".get_Reading("R_".[Keller_play:rfid]))}
Die Dummys erfüllen bisher nur diesen ein Zweck. Gibt es denn eine Bregrenzung in der Anzahl der Readings am DoIf? Wer weiß wie groß plötzlich die Sammlung Hörspiele wird...
Zitat von: kj am 19 August 2019, 22:49:42
Die Dummys erfüllen bisher nur diesen ein Zweck. Gibt es denn eine Bregrenzung in der Anzahl der Readings am DoIf? Wer weiß wie groß plötzlich die Sammlung Hörspiele wird...
nein, und das Gute ist, dass diese Readings selbst nach einer Modifikation des DOIFs (defmod) nicht gelöscht werden, sondern bis zum Löschen des DOIFs erhalten bleiben.
Das klingt doch sehr charmant für diese Aufgabe :)
Dann baue ich mal weiter.
Vielen Dank noch mal für Deine Hilfe
Wenn man die Playlisten beliebig definieren kann, dann könnte man den Playlistnamen direkt über RFID referenzieren, dann bräuchte man noch nicht mal Readings zu definieren, sondern nur:
define di_play DOIF {fhem_set ('Sonos_Keller PlayURI \\NAS\a%20b\'.[Keller_play:rfid].'.m3u')}
Wenn die Playlist z. B. 5662b2b.m3u für bonJovi heißt.
Hallo Damian,
die letzte Variante scheint die beste. Die Playlisten sind z.T. noch nicht definiert, sodass alle Namen noch möglich sind. Leider funktioniert der Aufruf nicht :-(
edit: ich habe ihn wie folgt geändert:
{fhem_set ('Sonos_Keller PlayURI \\NAS\Wiedergabelisten\'.[Keller_play:rfid].'.m3u')}
fhem schreibt für block_01: "condition c01: Bad name after Keller_play', line 1."
e_Keller_play_rfid hat den gesendeten Wert.
alle anderen DoIfs funktionieren mit dem getesteten Wert.
Ich habe die Syntax (und die Anführungszeichen) in Verdacht, werde aber nicht schlau daraus.
Kannst du mir noch einmal helfen?
Danke.
GRuß
Katrin
hmm.. Ein Leerzeichen hier : \Wiedergabelisten\ '.[Keller_play:rfid] hilft.
Aber dann spielt die Box nur die aktuelle Wiedergabeliste und wechselt nicht..
{fhem_set ('Sonos_Keller LoadPlaylist \\NAS\Wiedergabelisten\ '.[Keller_play:rfid].'.m3u')}
ich ahnte es... die Anführungzeichen haben mich schon immer kirre gemacht... ::)
{fhem_set ("Sonos_Keller PlayURI \\\\NAS\\Wiedergabelisten\\".[Keller_play:rfid].".m3u")}
so geht es.
Zitat von: kj am 20 August 2019, 22:17:10
ich ahnte es... die Anführungzeichen haben mich schon immer kirre gemacht... ::)
{fhem_set ("Sonos_Keller PlayURI \\\\NAS\\Wiedergabelisten\\".[Keller_play:rfid].".m3u")}
so geht es.
ja, deswegen hatte ich einfache Anführungszeichen genommen, aber selbst dort muss man \ maskieren, damit ein \ durchkommt, wie ich gerade ausprobiert habe ;)