Busch-Jäger UP-WLAN Radio per http steuern

Begonnen von s3bi, 11 Januar 2016, 18:51:45

Vorheriges Thema - Nächstes Thema

s3bi

Hallo,

ich habe im Badezimmer und in der Küche UP WLAN-Radios von Busch-Jäger verbaut. Hersteller-Seite
Diese möchte ich gerne per Fhem steuern.

Jedes Radio ist im Netzwerk mit einer IP-Adresse verfügbar. Über die Web-Oberfläche des Radios kann der Sender ausgewählt und die Lautstärke angepasst werden.

Die URL setzt sich aus der IP-Adresse und dem jeweiligen Parameter zusammen, der per GET übergeben wird:
Lautsärke (0-31) hier z.B. 10:
http://10.100.100.60/de/index.cgi?vo=10

Sender (z.B. Antenne Bayern):
attr RadioKueche set02URL http://10.100.100.60/de/index.cgi?n1=Antenne+Bayern


Nun habe ich nach einer Möglichkeit gesucht versch. Kommandos (lauter, leiser, Radio-Sender auswählen,...) an die URL zu übergeben. Ich habe das Modul HTTPMOD gefunden und folgendermaßen in der fhem.cfg definiert:


###
# ------ WEBRADIO - KUECHE ------
###
define RadioKueche HTTPMOD http://10.100.100.60/de/index.cgi 0
attr RadioKueche userattr set01Name set01URL set02Name set02URL widgetOverride
attr RadioKueche room Kueche
attr RadioKueche set01Name Volume
attr RadioKueche set01URL http://10.100.100.60/de/index.cgi?vo=$val
attr RadioKueche set02Name Sender
attr RadioKueche set02URL http://10.100.100.60/de/index.cgi?n1=$val
attr RadioKueche userReading Volume,Sender


Das Funktioniert bei der Lautstärke schonmal ganz gut. Einziges Problem hier: Ich habe noch keine Möglichkeit gefunden die aktuelle Lautsärke auszuwählen, daher überlege ich die zuletzt gesetzte Lautsärke als UserReadings immer mit zu setzen um somit wenigsten die zuletzt durch Fhem gesetze Lautstärke zu sehen.

Bei den Sendern erhalte ich die Meldung: set value Antenne+Bayern is not numeric
Scheinbar erwartet HTTPMOD immer numerische Werte ?!


Ich habe meine Zweifel ob meine Lösung das ist was ich wirklich brauche. Wenn ich HTTPMOD richtig verstehe geht es eigentlich darum Daten zu holen und nicht zu senden.
Zumal bei den Internals und buf der komplette Quelltext der index.cgi geholt wird. Brauche ich nicht.

Hier mal ein Screenshot:
(http://hkw44.de/___images/httpmod.png)

Hat jemand einen BESSEREN Vorschlag oder eine Idee wie man so etwas realisieren kann?
Gibt es ein anderes Modul?
Eine andere Technik eine URL aufzurufen?

Wenn nicht, wie kann ich mit HTTPMOD char als val übergeben?

Herzlichen Dank für eure Hilfe.

ares

Können die aktuellen Einstellungen nicht von der Webseite des UP WLAN-Radios ausgelesen werden? Die Daten sind damit mit einer kleinen Zeitverzögerung immerhin aktuell.

Zum Setzen der Lautstärke bietet sich unter Umständen auch folgende Variante an: http://www.fhemwiki.de/wiki/HTML_Aufruf_senden

Hollo

#2
Das Ding macht einen recht interessanten Eindruck (nachdem ich die Gira-Dinger immer für sehr teuer mit sehr wenig Funktion hielt).

Zitat von: s3bi am 11 Januar 2016, 18:51:45
...Hat jemand einen BESSEREN Vorschlag oder eine Idee wie man so etwas realisieren kann?  ...
BESSER will ich nicht sagen, aber ich habe eine ähnliche Problematik für meine Wohnungsbeschallung gehabt...
Signalquelle (in dem Fall eine dBox2) mit Steuerungsmöglichkeit über HTTP-API, aber kein FHEM-Modul.

Für die Lautstärkeeinstellung habe ich mir einen Dummy angelegt (der dann auch den aktuellen Wert enthält).

define dbox_volume dummy
attr dbox_volume group Receiver
attr dbox_volume icon dreambox
attr dbox_volume room Multimedia,Buero
attr dbox_volume setList state:slider,10,5,100
attr dbox_volume sortby 01
attr dbox_volume webCmd state
define n_dbox_volume notify dbox_volume:.* { system("wget -T 30 -O /dev/null http://192.168.0.24/control/volume?$EVENT &") }

Einstellbar ist das per:
- slider im WebIF
- Dashboard
- innerhalb von Funktionsabläufen (wecken, duschen, besuch etc.)
- Lauter-/Leiser-Taster
- Lauter-/Leiser-Kommando am Tablet

Die letzten 3 Sachen laufen über notifies und 99_myUtils-Funktionen; dabei wird dann der aktuelle Lautstärke-Wert um 5% erhöht/verringert, und der neue Wert anschließend auch angesagt.
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

s3bi

Danke Euch!

Ich habe jetzt eine Mischung aus beidem erstellt.

Einen Dummy in dem ich die Lautstärke setze und dazu ein Notify das dann den HTML Aufruf via GetHttpFile sendet.
Etwas unschön ist, dass im Log dann der komplette HTML-Code der Zielseite erscheint.

Ein Einfacher HTML Returncode (200, 401, 501 etc.) wäre perfekt.

Momentan bin ich unterwegs und kann das erst wieder morgen Abend testen. Dann werde ich es mal mit verbose 0 versuchen.

s3bi

Zitat von: Hollo am 12 Januar 2016, 13:03:17
Das Ding macht einen recht interessanten Eindruck (nachdem ich die Gira-Dinger immer für sehr teuer mit sehr wenig Funktion hielt).

Ich muss sagen die Teile sind echt ok. Preislich zwar auch nicht ganz ohne aber bisher bin ich sehr zufrieden damit.
Jetzt noch integriert in Fhem - was will man mehr ;)

Die UP-Lautsprecher sind für eine "Radio-Beschallung" im Bad und der Küche auch völlig ausreichend, externe Lautsprecher könnte man aber auch anschließen.
Interessant ist auch das erhältliche Zubehör (Blutooth-Schnittstelle, Iphone Docking, etc., AUX) - Habe jedoch nichts davon im Einsatz.

Gerold

Man kann das Radio auch mit dem Modul 98_DLNAClient.pm http://forum.fhem.de/index.php/topic,39706.0.html betreiben. Darüber lässt sich die Radiostation vorgeben und auch die Lautstärke regeln. Im Radio selbst muss dafür der Menüpunkt "Meine Musik/UPnP" gewählt werden.

s3bi

Guter Hinweis - Vielen dank!
Ich teste das Modul gerade.

Dax88

Hallo,
ich hab das selbe Radio und eine Frage: Gibt es auch einen Befehl um das Radio auszuschalten?
Einschalten tut es sich ja automatisch, wenn man zb http://10.100.100.60/de/index.cgi?n1=Antenne+Bayern sendet...

Danke für die Info, lg

zockz

Alter Thread, aber vielleicht interessiert's ja jemanden... Die kurze Antwort: ja :P

Die lange Antwort: Ich habe selbst ein solches Radio verbaut und schaue mir gerade das Kommunikationsprotokoll der App an. Es gibt eine API, mit der man die meisten Dinge steuern kann.

Das Ganze läuft über UDP Port 4244, wobei die Antwort immer als Broadcast auf 4242 kommt. Das Format JSON-ähnlicher Klartext, allerdings ohne die geschweiften Klammern. Die Zeilenenden sind immer CRLF. Security gibt es nicht: keine Authentifizierung, keine Session-Keys, nichts :o ...aber das macht es uns einfacher 8)

Die Befehle haben folgendes Format:

COMMAND:<command>
[<payload>]
ID:<id>


  • command ist der auszuführende Befehl
  • payload ein oder mehrere Parameter für bestimmte Befehle (z. B. Volume)
  • id die (frei wählbare) ID, die eine Korrelation der Antworten erlaubt. Die App verwendet z. B. rc

Die Antworten sehen ähnlich aus, haben aber zusätzliche Informationen je nach Befehl:

COMMAND:<command>
[<payload>]
ID:<id>
[<response>]
RESPONSE:ACK|NACK

Die Antworten sind ziemlich selbsterklärend. In response stecken z. B. die angeforderten Werte. Ein ACK bestätigt den Befehl, NACK zeigt einen Fehler an.

Daneben werden manchmal Ereignisse gemeldet, die sehen so aus:

COMMAND:NOTIFICATION
IP:<IP-Adresse>
NAME:<Gerätename>
EVENT:<event>
RESPONSE:ACK


Diese Ereignisse habe ich bisher gesehen:

  • SYSTEM_BOOTED
  • URL_IS_PLAYING
  • VOLUME_CHANGED
  • TUNEIN_INIT_COMPLETE


Folgende Befehle gibt es:


  • DISCOVER: Nach Radio suchen. Als UDP-Broadcast sollte das alle Radios im Subnetz zurückmelden.


  • GET: Wert auslesen, der folgende Parameter sagt, was gelesen werden soll:

    • POWER_STATUS
    • INFO_BLOCK
    • ALARM_STATUS
    • VOLUME
    • PLAYING_MODE
    • ALL_STATION_INFO
    • TUNEIN_PARTNER_ID


  • SET: Wert setzen/ändern. Hier gibt es folgende Möglichkeiten:

    • RADIO_ON
    • RADIO_OFF
    • VOLUME_ABSOLUTE:<volume>
    • VOLUME_INC
    • VOLUME_DEC
    • VOLUME_MUTE
    • VOLUME_UNMUTE
    • ALARM_OFF
    • ALARM_SNOOZE
    • ALARM:HH:<hour>:MM:<minute>:ONOFF:0|1:STATION:<station number [1-8]>


  • PLAY: Abspielen.

    • STATION:<station number [1-8]>
    • UPNP
    • AUX
    • TUNEIN_INIT (scheint mir unnötig zu sein)

    • TUNEIN_PLAY. Dieser benötigt zwei weitere Parameter (eigene Zeilen, kein Quoting nötig):
      URL:<url>
      TEXT:<name> (wird im Display angezeigt)


  • SAVE: Programm speichern

    • STATION
      CHANNEL:<station number [1-8]>
      NAME:<text>
      URL:<url>
    • TUNEIN_FAVORITE (Aktuelle URL als TuneIn-Favorite hinterlegen)

  • REMOVE: hier gibt es nur eine Option.
    • TUNEIN_FAVORITE

  • RESET_BLOCK: Reset (?)


Zusammengesetzt sieht das ganze zum Beispiel so aus:
Anfrage:

COMMAND:GET
INFO_BLOCK
ID:fhem

Antwort:

COMMAND:GET
INFO_BLOCK
ID:fhem
WLAN STRENGTH:-57
NAME:RADIO-INET...
IPADDR:192.168.1.42
IPMASK:255.255.255.0
IPMODE:ON
GATEWAY:192.168.1.1
SSID:your-ssid
MAC:7a:c4:e:...
COUNTRY:Deutschland
SERNO:123456789ABC
SW-VERSION:02.03
WLAN-FW:20131107
RESPONSE:ACK


Evtl.komme ich irgendwann dazu, ein FHEM-Modul dafür zu basteln - aber vielleicht will das ja auch jemand anders übernehmen  :)

thetornado76

Zitat von: zockz am 25 November 2017, 09:41:32
Alter Thread, aber vielleicht interessiert's ja jemanden... Die kurze Antwort: ja :P

Evtl.komme ich irgendwann dazu, ein FHEM-Modul dafür zu basteln - aber vielleicht will das ja auch jemand anders übernehmen  :D
Interesse?  Auf jeden Fall! ;D
Ein eigenes Modul wäre perfekt.

zockz

Ich habe jetzt mal ein einfaches Modul gebastelt. Es kann das Radio ein- (wenn der richtige Energy Mode gesetzt ist) und ausschalten, die Lautstärke steuern und die Quelle steuern (Station / URL / UPNP / AUX). Außerdem gibt es alle möglichen Readings. Es gäbe noch einiges mehr zu steuern, aber dazu müsste man teilweise das HTTP-Interface verwenden - das habe ich bisher nicht gemacht.

Auch gibt es ein generelles Problem mit dem UDP-Interface: wenn das Radio zum Beispiel eine ungültige URL bekommt oder nicht darauf zugreifen kann, akzeptiert es keine UDP-Steuerbefehle mehr (clever... ::)). Die HTTP-Steuerung funktioniert dann aber noch, eine Recovery-Funktion wäre also auch noch praktisch (später vielleicht...).

Wenn jemand testen mag --> PN, ansonsten werde ich es vermutlich demnächst ins SVN (wenn ich darf) bzw. hier hochladen.

QTreiber

#11
Hallo Leute,

kann mir bitte einer erklären, wie ich das mit den Busch-Jäger PU-WLAN Radios jetzt am besten mache? Ich bin komplett neu im FHEM Bereich und möchte als erstes Gerät einen solchen Radio per FHEM steuern.

den Radio per HTTP zu steuern schaff ich zum Beispiel mit:
OldiesInKueche:on { GetHttpFile("10.0.0.112", "/de/index.cgi?n7=Oldies+but+Goldies&p7=+Abspielen+")}

Ich habe es lediglich geschafft, per URL einen Sleeptimer mit der Dauer 1 Minute zu aktivieren, kürzere Zeit geht nicht, um den Radio auszuschalten
S_RadioAusKueche {GetHttpFile("10.0.0.112", "/de/general.cgi?es=1&ss=01") }

Zusätzlich habe ich jetzt eingestellt, dass nach dem Setzen des Sleeptimers die Lautstärke sofort auf 0 gesetzt wird. Nach dem Einschalten wird sie dann wieder auf den ursprünglichen Wert gesetzt.

das Gerät auf diese Art und weise auszuschalten klappt aber leider nicht, bzw. habe ich keine Ahnung wie das geht. Auch habe ich keine Ahnung wie die UDP Variante funktioniert

Ich habe dazu folgendes getestet:

eigene Subroutine in "99_myUtils.pm" gespeichert (wird laut Log auch aufgerufen und bis zum Ende abgearbeitet):
sub UDP_Msg($$)
{
  my ($dest,$cmd)  = @_;
  eval "require IO::Socket::INET";
  if($@) {
    Log 1, $@;
    return "Can't load IO::Socket::INET"
  }

  my $sock = IO::Socket::INET->new(
    Proto    => 'udp',
    PeerPort => 4244,
    PeerAddr => $dest
  );
 
  if(!$sock) {
    return "something went wrong"
  }

  $sock->send($cmd);
  $sock->close();

  return "send $cmd"
}


Der Aufruf geschieht folgendermaßen:
RadioInKueche:off {UDP_Msg("10.0.0.112","COMMAND:SET
RADIO_OFF
ID:FHEM")}


die UDP-Routine funktioniert laut diesem Foreneintrag (https://forum.fhem.de/index.php/topic,56581.msg481115.html#msg481115) und meinen eigenen Tests, aber beim Radio passiert genau gar nichts :-(
aktuelles System auf RPi 3:
RaZberyy ZWave Controller: Schaltaktoren, Heizkörperthermostate, Fenstersensoren, Multisensoren (Bewegung, Temperatur, Helligkeit), Schukostecker, Rauchmelder
Sduino: Somfy Jalousie
WiFi: E27-RGB-LED, Echogeräte, Netatmo, DashButtons, googleBackup, Harmony, Staubsauger

zockz

Zitat von: QTreiber am 17 Dezember 2017, 13:50:00
Der Aufruf geschieht folgendermaßen:
RadioInKueche:off {UDP_Msg("10.0.0.112","COMMAND:SET
RADIO_OFF
ID:FHEM")}


die UDP-Routine funktioniert laut diesem Foreneintrag (https://forum.fhem.de/index.php/topic,56581.msg481115.html#msg481115) und meinen eigenen Tests, aber beim Radio passiert genau gar nichts :-(

Probier's mal folgendermaßen, dann sollte es funktionieren - das Gerät ist sehr zickig was das Format angeht:

RadioInKueche:off {UDP_Msg("10.0.0.112","COMMAND:SET\r\nRADIO_OFF\r\nID:FHEM\r\n\r\n")}

Mikka

#13
Hi zusammen,

vielleicht kann diese Informationen jemand gebrauchen. Habe ein paar Attribute hinzugefügt:
attr Busch_Radio devStateIcon on:WLAN_Status.1:off off:WLAN_Status.0:on (setzt Voraus: Busch Radio -> Menü -> Energieverbrauch / Verbindungsgeschwindigkeit -> Premium)
attr Busch_Radio icon it_radio

Mikka

zockz

Ich denke das Modul läuft stabil genug, um es mal im größeren Kreis zu testen.
Unter https://de.pastebin.ca/3950903 findet Ihr die aktuelle Version.
Feedback gerne hier oder direkt an mich.