[gelöst] Wie sucht man in mehreren devices das richtige Reading? (DOIF)

Begonnen von kj, 19 August 2019, 20:58:38

Vorheriges Thema - Nächstes Thema

kj

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

Damian

#1
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.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

kj

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

kj

Doch schnell noch getestet :-)

Es geht.

Danke für Deine Hilfe.

Gruß
Katrin

Damian

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]))}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

kj

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...

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

kj

Das klingt doch sehr charmant für diese Aufgabe  :)
Dann baue ich mal weiter.

Vielen Dank noch mal für Deine Hilfe

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

kj

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

kj

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')}




kj

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.

Damian

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 ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF