URL für Playstream aus Reading

Begonnen von Ulm32b, 12 Februar 2017, 15:37:58

Vorheriges Thema - Nächstes Thema

Ulm32b

Hallo, wer hier hilft, hilft vielen.

Ich schreibe gerade die neue Doku für playstream.

In den Beispielen wie
<div data-type="playstream" data-url="http://radioeins.de/stream"></div>
ist die URL stets fest verdrahtet. Elegant wäre es natürlich, die URL aus einem Reading einlesen zu können. Dann ließen sich z.B. Auswahlmenüs leicht integrieren. Bei Image geht das (mit data-get) sinngemäß ja auch.
Ich habe ehrlich gesucht, aber in der Doku und im Forum nichts Greifbares gefunden.

Die Frage lautet also: Wie lese ich die URL bei playstream ein?

Standarduser

Hast du mal probiert, die URL einfach in einen dummy einzutragen und diesen dann einfach hier anzugeben?

Ulm32b

ZitatHast du mal probiert, die URL einfach in einen dummy einzutragen und diesen dann einfach hier anzugeben?
Klappt leider nicht. Der Name des Dummys wird dann offenbar als url aufgefasst, welche natürlich nicht existiert. Die Mattscheibe bleibt dann matt.

Bei Image gibt es zwei Atrribute:

data-url --> Direkte Eingabe
data-get --> Reading mit der url

Bei Playstream ist data-get aber schon belegt; damit wird ein/aus gesteuert.

Benötigt wird so etwas wie data-url-get
Habe ich alles ausprobiert, bislang ohne Erfolg.
Gibt es vielleicht einen Umweg über Perl?
Am besten fände ich aber data-url-get

sinus61

Da müsste wohl jemand das Widget umschreiben, wenn ich mir den Code ansehe würde ich sagen das ist derzeit nicht vorgesehen.

setstate

habe ich gemacht.  data-url kann jetzt alternativ auch ein Reading sein, um die URL per FHEM zu ändern

so jetzt kann ich noch 2h Schlaf tanken :-)

Ulm32b

Zitatso jetzt kann ich noch 2h Schlaf tanken :-)

Äh, unter der Annahme, dass Du sonst keine Pausen machst, kann man aus den "Erledigt"-Vermerken und den Zeitstempeln der Postings Rückschlüsse auf die erbrachte Leistung ziehen. Damit ist dieses Forum ein System, das zur Leistungsüberwachung eingesetzt werden kann, und das ist mitbestimmungspflichtig. Was sagt denn der Betriebsrat dazu?  ;D

Zitathabe ich gemacht.  data-url kann jetzt alternativ auch ein Reading sein, um die URL per FHEM zu ändern
Super. Was aber, wenn jemand sowohl die URL ziehen als auch eine Fernsteuerung ein/aus realisieren möchte? Wäre es da nicht besser, getrennte Attribute zu definieren? Bei anständiger Doku ;D ;D ;D ;D sollten alle damit klarkommen.

So, und jetzt gehe ich auf ein Strategiemeeting und ruhe mich aus.  ;D Heute Abend nehme ich die Arbeit wieder auf.

setstate

Eigenes Attribute - darüber hatte i h auch schon nachgedacht. Aber in welchem Fall braucht man beides?

sinus61

Beides kann ja eh nicht funktionieren. Genaugenommen sind getrennte Attribute doch eine zusätzliche Fehlerquelle, weil man dann beide setzen kann, aber eines Vorrang haben muß. Und dann wundert man sich hinterher.

drhirn

Zitat von: setstate am 13 Februar 2017, 03:42:13
habe ich gemacht.  data-url kann jetzt alternativ auch ein Reading sein, um die URL per FHEM zu ändern

Und wie müsste das dann konkret aussehen? Bei mir tut sich da nämlich irgendwie nichts.

Hab einen Dummy
define dDummy dummy
set dDummy http://radioeins.de/stream


Und in FTUI sieht das so aus

<div data-type="playstream"
        data-url="dDummy">

setstate

Über den STATE ("on/"off") des Dummys mache ich start/stop

data-device="dDummy" data-url="url"

Und dann mit "setreading dDummy url http://xxx"

drhirn

Danke!

Bin immer wieder über mein FHEM-Unwissen schockiert...

Ulm32b

o.k.  Vorweg: Ich habe mich nur damit beschäftigt, um die Doku für Playstream aufzuhübschen. Zu Hause gibt es die nachfolgenden Spielchen nicht...

Aber so ganz weltfremd ist doch nicht: Es kommt jemand zur Tür herein; er wird irgendwie identifiziert; der Lieblingssender wird eingestellt; das Webradio geht an.

Dann braucht man eine Ansteuerung von ein/aus und der URL des Webradios. Nach der Anleitung von setstate habe ich folgende Testumgebung eingerichtet:

defmod Radiosender dummy
setstate Radiosender link 1


<div data-type="playstream" data-url="Radiosender:link" class=""></div>
<div data-type="switch" data-device="Radiosender" data-icon="fa-bell"></div>

   <div data-type="label" class="cell inline">Sender</div>
   <div data-type="select"
        data-device="Radiosender"
data-list=""
        data-items='["http://1live.akacast.akamaistream.net/7/706/119434/v1/gnl.akacast.akamaistream.net/1live","http://br-mp3-b5aktuell-s.akacast.akamaistream.net/7/773/142694/v1/gnl.akacast.akamaistream.net/br_mp3_b5aktuell_s"]'
data-alias='["1live","B5 Aktuell"]'
data-get="link"
data-set="link"
data-cmd="setreading">
   </div>

   <div data-type="label" data-get="Radiosender:STATE" class="top-space"></div>
   <div data-type="label" data-get="Radiosender:link" class=""></div>


Man kann mit "select" einen Sender auswählen, und der wird auch korrekt in das reading "link" geschrieben.
Frage 1: Warum ist data-cmd="setreading" hier erforderlich? Nach der Doku "select" sollte es doch reichen, wenn data-device und data-set definiert sind.

Mit obiger Konstellation kann man direkt über playstream das Webradio starten. Mit der "Fernsteuerung" über den "switch" geht das nicht.
Frage 2: Der Switch schaltet, das kann man in FHEM sehen, den STATE korrekt ein/aus. "playstream" reagiert darauf aber nicht. Warum?

setstate

Super Test-Setup, aber nur fast richtig

so geht es:
<div data-type="playstream" data-device="Radiosender" data-url="link" class=""></div>

das ist die Kurzform von
<div data-type="playstream" data-get="Radiosender:STATE" data-url="Radiosender:link" class=""></div>

weil, der default ist data-get="STATE" + das Device unter data-device

Ulm32b

Die vollständige Lösung ist jetzt im Wiki dokumentiert: https://wiki.fhem.de/wiki/FTUI_Beispiel_Webradio
Vielen Dank an Setstate für die Erweiterung des Widgets. Damit sind die Anwendungsmöglichkeiten erheblich gesteigert worden.

Gunther

#14
Ich habe das nun mal versucht nachzubauen.

Funktionieren tut das einfache Beispiel:
<div data-type="playstream" data-url="http://1live.akacast.akamaistream.net/7/706/119434/v1/gnl.akacast.akamaistream.net/1live" data-volume="Radio_volume:Volume"></div>
<div data-type="label" class="cell">Radio eins</div>



Das aus dem Wiki nicht. In FHEM werden Sender und Lautstärke laut reading verändert. Sound höre ich nicht:

FHEM:
defmod Radiosender dummy
setstate Radiosender on
setstate Radiosender link http://radioeins.de/stream
attr Radiosender room Badezimmer_OG

defmod Radio_volume dummy
setstate Radio_volume Volume 50
attr Radio_volume room Badezimmer_OG


Tablet UI:
        <div data-type="playstream"
      data-get="Radiosender:STATE"
      data-url="Radiosender:link"
      data-volume="Radio_volume:Volume"
      class="hide">
</div>

<div data-type="switch"
      data-device="Radiosender"
      data-icon="mi-radio"
      class="cell inline">
</div>

<!-- mi-Icons im Header aktivieren:     <link rel="stylesheet" href="lib/material-icons.min.css" />     -->

<div class="cell inline"
data-type="select"
      data-device="Radiosender"
      data-list=""
      data-items='["http://radioeins.de/stream","http://1live.akacast.akamaistream.net/7/706/119434/v1/gnl.akacast.akamaistream.net/1live","http://br-mp3-b5aktuell-s.akacast.akamaistream.net/7/773/142694/v1/gnl.akacast.akamaistream.net/br_mp3_b5aktuell_s"]'
      data-alias='["Radio eins","einsLife","B5aktuell"]'
      data-get="link"
      data-set="link"
      data-cmd="setreading">
</div>

<div data-type="spinner"
      data-device="Radio_volume"
      data-get="Volume"
      data-set="Volume"
      data-max="100"
      data-step="5"
      data-icon-left="fa-volume-down"
      data-icon-right="fa-volume-up"
      class="spinner value horizontal centered">
</div>


Habe ich noch einen Denkfehler?

EDIT: Wenn ich im unteren Code statt
data-url="Radiosender:link" die URL eines Senders direkt eintrage, spielt das Ding direkt los. Eine Lautstärkesteuerung klappt nicht.
Freue mich über Hilfe.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden