Listenlive: Unterschied zwischen den Versionen

Aus FHEMWiki
(Die Seite wurde neu angelegt: „= Listenlive.nl Firmware = Auf der Seite listenlive.nl gibt es für viele Webradios eine alternative Firmware, derzeit in Version 1.49. Die Kommunikation erfo…“)
 
K (use POSIX; raus)
 
(29 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
= Listenlive.nl Firmware =
ListenLive ist eine
Auf der Seite listenlive.nl gibt es für viele Webradios eine alternative Firmware, derzeit in Version 1.49.
* alternative Firmware für eine Reihe von Webradio Geräten (dadurch wird es für FHEM relevant)
* Datenbank mit Informationen und Links zu Webradio und WebTV Sendern


Die Kommunikation erfolgt über socks.
= Hardware =
Die Firmware von ListenLive arbeitet mit einer Vielzahl von Webradio Geräten zusammen. Einen Überblick über unterstützte Geräte geben die folgenden Abschnitte. Eine detaillierte aktuelle Liste findet sich jeweils auf der [http://listenlive.nl/dl.php ListenLive Webseite].


== Penbex Hardware ==
DMTech, Watson, ctiradio, Joybien, eradio, KW-1004, HipShing, Goodmans, Proline, Neon, Clas Ohlson,
Orchard, Yusan, Zylux, Logik, Sabre, MPMan, Uptoday, LA302, Olympia, Centrios, Amitech, Odys,
Forworld2, Boom, VEGA, Pbirkit, IRM8001, Lafayette, DNT IPMicro, Akira, SL-D960, GP-60X, PBXBoom2-SI,
Pbirkit2, Konig HAV-20/21/22


Im wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.
== SkyTC Hardware ==
Mediabox 135, Arnova WebRadio & TV, [[Xoro HMT 350]], XORO HMT370,
LinePro, Pearl Auvisio IPTV2335 (PX-8595), Wiwa eRTV208, Otek IPTV510, Envivo PO1119 PO1171 PO1235,
Disgo TVGo, Vista Quest, Xenta KMP510, Foxman, Apex, Cayenne, Roxcore, Aigo, Lookeetv
 
= Firmware =
Auf der ListenLive Webseite gibt es für Webradios der Hersteller PenPex und SkytV eine alternative Firmware. Die derzeitige Version 1.49 (Stand 06.2013) wurde von ListenLive um eine TCP/IP Schnittstelle für die Steuerung des Radios erweitert.
Hierbei erfolgt die Datenübertragung der Kommandos über eine TCP/IP Socket.
Die gesendeten Befehle werden jeweils mit dem Text "OK" beantwortet.
Im Wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.
 
== Schnittstellenparameter ==
Die folgenden Parameter sind für die Kommunikation mit dem Radio sehr wichtig.
Das Radio sollte eine feste IP Adresse haben. Dies kann man z.B. bei einer Fritzbox so lösen,
dass man in den Netzwerkeinstellungen für dieses Geräte die Einstellung
* "Diesem Gerät immer die gleiche IP Adresse vergeben."
verwendet.
Die korrekte Erkennung des Radios erfolgt hierbei über die Mac-Adresse des WLAN Interfaces
* IP Adresse des Radios (z.B. 192.168.1.33)
* Port 8080


== Der Code ==
== Der Code ==
Für fhem.cfg
'''Für fhem.cfg'''
:<code><nowiki>
 
### WebRadio
<nowiki>### WebRadio
define WebRadio dummy
define WebRadio dummy
attr WebRadio room Wohnzimmer
attr WebRadio room Wohnzimmer
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK
define myWebRadio notify WebRadio {radio($EVENT)};;
define myWebRadio notify WebRadio {radio($EVENT)};;</nowiki>
</nowiki></code>
 
'''Für die myUtils:'''


Für die myUtils:
<nowiki>use strict;
:<code><nowiki>
use strict;
use warnings;
use warnings;
use POSIX;
use CGI qw(:standard);
use CGI qw(:standard);
use IO::Socket;
use IO::Socket;
use IO::Socket::INET;
use IO::Socket::INET;
use MIME::Base64;
use MIME::Base64;
use Time::HiRes qw(usleep nanosleep);             <---- Neu für den usleep()
use Time::HiRes qw(usleep nanosleep);  


#
#
Zeile 41: Zeile 65:
#
#
   $socket = new IO::Socket::INET (
   $socket = new IO::Socket::INET (
PeerHost => '192.168.5.56',
PeerHost => '192.168.0.55', ########## <- hier eure IP Adresse eingeben
PeerPort => '8080',
PeerPort => '8080',
Proto => 'tcp',
Proto => 'tcp',
Zeile 51: Zeile 75:
   $socket->send(@_);
   $socket->send(@_);
#
#
# get the radio some time to execute the command (10ms )
# get the radio some time to execute the command (300ms )
#
#
   usleep(10000);
   usleep(30000);   ###### <- erhöhen, wenn das Radio Kommandos verschluckt


#
#
Zeile 66: Zeile 90:


   $socket->close();
   $socket->close();
  return;
}</nowiki>
== Vorgehensweise für Radioansteuerung (derzeit) ==
; Laufende Applikation beenden
* "EXIT" , "EXIT", "EXIT", "EXIT" an das Radio senden
oder<br />
; Das Radio einschalten (Hier muss FHEM ein Merker halten, ob das Radio an/aus ist)
* "POWER" an das Radio senden
; Das Radio in das Hauptmenu mit dem Eintrag "Favoriten" einstellen
* "HOME" an das Radio senden
; In den Menüeintrag "Favoriten" wechseln
* "OK" an das Radio senden
; Den Eintrag "Internet-Radio Favoriten auswählen"
* "OK" an das Radio senden.
; jetzt den Radiosender auswählen
* "DOWN" an das Radio senden (Eintragsnr -1 ) mal senden
; Jetzt das Radio hören starten
* "OK" an das Radio senden
Während das Radio abgespielt wird, kann man noch auf die Wettervorhersage wechseln. Dies geht mit den folgenden Kommandos:
; Akuelles Wetter auswählen
* "MENU" an das Radio senden
; 5 Tage Vorhersage auswählen (wenn Wetter angezeigt wird)
* "LEFT" an das Radio senden
* nochmals "RIGHT" zeigt wieder das aktuelle Wetter an
; Wetter Anzeige wieder beenden
* "EXIT" senden
; Die Uhrzeit anzeigen
* "CLOCK" an das Radio senden
* "EXIT" beendet die Anzeige der Uhrzeit wieder
; Die Lautstärke ändert
* "VOLp" für lauter und "VOLm" für leiser an das Radio sendet
== Ansatz für eine erste Lösung des Steuerproblems ==
Eine Klasse schreiben, die die Steuerung der Menupunkt innerhalb der Klasse kapselt. Der Anwender sollte hierbei nur Kommandos wie "Radio.SenderAbspielen(1)" verwenden müssen. Die aktuelle Position innerhalb der Menustruktur sollte die Klasse festhalten.
== Beispielcode für das Einschalten des Radio mit dem ersten Favoriten ==
<nowiki>#
#Power on with the first radio sender
#
sub SwitchRadioOn
{
  radio("POWER");
  radio("HOME");
  radio("OK");
  radio("OK");
  radio("OK");
  return;
}
}
</nowiki></code>
</nowiki>
 
== Bekannte Probleme ==
* Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.
* Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.
* Generell hilft hier derzeit nur das Ausprobieren mit der IR-Fernbedienung und die entsprechenden Kommandos dann an das Radio zu senden
* Die Firmware wird derzeit nur von einer Person gewartet, die aber sehr aktiv an dem Projekt arbeitet.


== Wie es weitergeht ==
Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert
Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.


== Links ==
== Links ==
* {{Link2Forum|Topic=12571|LinkText=Forumthread}}
* [http://listenlive.nl/ Homepage von Listenlive.nl]


* [http://forum.fhem.de/index.php?t=msg&th=12571&start=0&rid=1421 Forumthread]
* [http://listenlive.nl/ Homepage von Listenlive.nl]


[[Kategorie:Unterhaltungselektronik]]
[[Kategorie:Unterhaltungselektronik]]
[[Kategorie:Examples]]
[[Kategorie:IP Components]]

Aktuelle Version vom 7. Februar 2022, 13:32 Uhr

ListenLive ist eine

  • alternative Firmware für eine Reihe von Webradio Geräten (dadurch wird es für FHEM relevant)
  • Datenbank mit Informationen und Links zu Webradio und WebTV Sendern

Hardware

Die Firmware von ListenLive arbeitet mit einer Vielzahl von Webradio Geräten zusammen. Einen Überblick über unterstützte Geräte geben die folgenden Abschnitte. Eine detaillierte aktuelle Liste findet sich jeweils auf der ListenLive Webseite.

Penbex Hardware

DMTech, Watson, ctiradio, Joybien, eradio, KW-1004, HipShing, Goodmans, Proline, Neon, Clas Ohlson, Orchard, Yusan, Zylux, Logik, Sabre, MPMan, Uptoday, LA302, Olympia, Centrios, Amitech, Odys, Forworld2, Boom, VEGA, Pbirkit, IRM8001, Lafayette, DNT IPMicro, Akira, SL-D960, GP-60X, PBXBoom2-SI, Pbirkit2, Konig HAV-20/21/22

SkyTC Hardware

Mediabox 135, Arnova WebRadio & TV, Xoro HMT 350, XORO HMT370, LinePro, Pearl Auvisio IPTV2335 (PX-8595), Wiwa eRTV208, Otek IPTV510, Envivo PO1119 PO1171 PO1235, Disgo TVGo, Vista Quest, Xenta KMP510, Foxman, Apex, Cayenne, Roxcore, Aigo, Lookeetv

Firmware

Auf der ListenLive Webseite gibt es für Webradios der Hersteller PenPex und SkytV eine alternative Firmware. Die derzeitige Version 1.49 (Stand 06.2013) wurde von ListenLive um eine TCP/IP Schnittstelle für die Steuerung des Radios erweitert. Hierbei erfolgt die Datenübertragung der Kommandos über eine TCP/IP Socket. Die gesendeten Befehle werden jeweils mit dem Text "OK" beantwortet. Im Wesentlichen kann man darüber die Befehle senden, die auch die IR-Fernbedienung sendet.

Schnittstellenparameter

Die folgenden Parameter sind für die Kommunikation mit dem Radio sehr wichtig. Das Radio sollte eine feste IP Adresse haben. Dies kann man z.B. bei einer Fritzbox so lösen, dass man in den Netzwerkeinstellungen für dieses Geräte die Einstellung

  • "Diesem Gerät immer die gleiche IP Adresse vergeben."

verwendet. Die korrekte Erkennung des Radios erfolgt hierbei über die Mac-Adresse des WLAN Interfaces

  • IP Adresse des Radios (z.B. 192.168.1.33)
  • Port 8080

Der Code

Für fhem.cfg

### WebRadio
define WebRadio dummy
attr WebRadio room Wohnzimmer
attr WebRadio setList UP LEFT DOWN RIGHT EXIT POWER OK VOLp VOLm STOP REPEAT PGUP PGDN RECORD HOME MENU MUTE FORWARD REWIND FMRADIO IRADIO ITV PAUSE CLOCK
attr WebRadio webCmd UP:LEFT:DOWN:RIGHT:EXIT:POWER:OK:VOLp:VOLm:STOP:REPEAT:PGUP:PGDN:RECORD:HOME:MENU:MUTE:FORWARD:REWIND:FMRADIO:IRADIO:ITV:PAUSE:CLOCK
define myWebRadio notify WebRadio {radio($EVENT)};;

Für die myUtils:

use strict;
use warnings;
use CGI qw(:standard);
use IO::Socket;
use IO::Socket::INET;
use MIME::Base64;
use Time::HiRes qw(usleep nanosleep); 

#
# Listenlive Radio
#
sub radio($)
{
  my ($socket,$client_socket);
  my $response ="";

#
# Create a socket object for the communication with the radio
#
  $socket = new IO::Socket::INET (
		PeerHost => '192.168.0.55', ########## <- hier eure IP Adresse eingeben
		PeerPort => '8080',
		Proto => 'tcp',
  ) or die "ERROR in Socket Creation : $!\n";

#
# Send the given command into the socket
#
  $socket->send(@_);
#
# get the radio some time to execute the command (300ms )
#
  usleep(30000);   ###### <- erhöhen, wenn das Radio Kommandos verschluckt

#
# get the answer of the radio
#
  $socket->recv($response, 2);

  if($response !~  m/OK/)
    {
	 Log 1, "Error from radio ! Response from Radio : $response" ;
	 }

  $socket->close();
  return;
}

Vorgehensweise für Radioansteuerung (derzeit)

Laufende Applikation beenden
  • "EXIT" , "EXIT", "EXIT", "EXIT" an das Radio senden

oder

Das Radio einschalten (Hier muss FHEM ein Merker halten, ob das Radio an/aus ist)
  • "POWER" an das Radio senden
Das Radio in das Hauptmenu mit dem Eintrag "Favoriten" einstellen
  • "HOME" an das Radio senden
In den Menüeintrag "Favoriten" wechseln
  • "OK" an das Radio senden
Den Eintrag "Internet-Radio Favoriten auswählen"
  • "OK" an das Radio senden.
jetzt den Radiosender auswählen
  • "DOWN" an das Radio senden (Eintragsnr -1 ) mal senden
Jetzt das Radio hören starten
  • "OK" an das Radio senden

Während das Radio abgespielt wird, kann man noch auf die Wettervorhersage wechseln. Dies geht mit den folgenden Kommandos:

Akuelles Wetter auswählen
  • "MENU" an das Radio senden
5 Tage Vorhersage auswählen (wenn Wetter angezeigt wird)
  • "LEFT" an das Radio senden
  • nochmals "RIGHT" zeigt wieder das aktuelle Wetter an
Wetter Anzeige wieder beenden
  • "EXIT" senden
Die Uhrzeit anzeigen
  • "CLOCK" an das Radio senden
  • "EXIT" beendet die Anzeige der Uhrzeit wieder
Die Lautstärke ändert
  • "VOLp" für lauter und "VOLm" für leiser an das Radio sendet

Ansatz für eine erste Lösung des Steuerproblems

Eine Klasse schreiben, die die Steuerung der Menupunkt innerhalb der Klasse kapselt. Der Anwender sollte hierbei nur Kommandos wie "Radio.SenderAbspielen(1)" verwenden müssen. Die aktuelle Position innerhalb der Menustruktur sollte die Klasse festhalten.

Beispielcode für das Einschalten des Radio mit dem ersten Favoriten

#
#Power on with the first radio sender
#
sub SwitchRadioOn
{
  radio("POWER");
  radio("HOME");
  radio("OK");
  radio("OK");
  radio("OK");
  return;
}

Bekannte Probleme

  • Das Timing ist nicht perfekt, manchmal verschluckt das Radio Befehle. Hochsetzen von usleep kann helfen.
  • Viel problematischer ist, dass wir eigentlich keine echte Rückmeldung bekommen, was das Radio grade tut. Somit ist es nicht möglich, von einem beliebigen Zustand aus mit FHEM loszulegen.
  • Generell hilft hier derzeit nur das Ausprobieren mit der IR-Fernbedienung und die entsprechenden Kommandos dann an das Radio zu senden
  • Die Firmware wird derzeit nur von einer Person gewartet, die aber sehr aktiv an dem Projekt arbeitet.

Wie es weitergeht

Eine Möglichkeit besteht darin, abzuwarten was William in der 1.5er Firmware ändert Andererseits läuft eine BusyBox auf dem Radio und der Telnet Zugang ist aktiviert.

Links