Modul für WLAN Radios mit Frontier Silicon Chipsatz (SilverCrest/Medion/Hama...)

Begonnen von mumpitzstuff, 07 November 2017, 00:21:27

Vorheriges Thema - Nächstes Thema

mumpitzstuff

Dieses Modul kann UNDOK (Powered by UNDOK) kompatible Geräte ansteuern. Dazu zählen z.B. Geräte der Firmen: SilverCrest, Medion, Hama, TechniSat, Noxon, Dual, Roberts, Sangean, Ruark Audio, Argon Audio, Bush, Revo, Goodmans, Albrecht, View Quest (VQ), auna, LEMEGA, NUMAN, Audioblock (Block), Imperial, Blaupunkt, Terris, Sonoro, Audisse und viele viele andere.

Definition:

define <device name> SIRD <ip des radios><:port> <pin> <intervall für zyklisches update>

Default Pin: 1234
Port: Einige wenige Radios benötigen einen speziellen Port wie z.B. 2244. In diesen Fällen muss auch meist das Attribut upnpPort auf 80 gesetzt werden, damit die speak und stream Funktionalität funktioniert. In den meisten Fällen kann auf eine explizite Portangabe verzichtet werden!

https://github.com/mumpitzstuff/fhem-SIRD

Abhängigkeiten:
sudo apt-get install libxml-bare-perl
Es MUSS mindestens die Version 0.53 installiert sein, sonst lässt sich das Modul nicht starten. Falls ihr diese Version nicht über apt-get bekommen könnt, versucht bitte folgendes:
sudo cpan
install XML::Bare
exit
Damit wird das Modul als Source geladen, kompiliert und dann installiert.

Installation:
update add http://raw.githubusercontent.com/mumpitzstuff/fhem-SIRD/master/controls_sird.txt
update all
shutdown restart

Attribute:

  • siehe Modulhilfe

History:
29.07.2018
- ein Speicher Leck innerhalb von XML::Bare wurde beseitigt
- Befehle für speak und stream werden jetzt mehrfach gesendet wenn sie fehl schlagen
- einige kleine interne Änderungen
- Version wurde erhöht von 1.1.7 auf 1.1.8
12.06.2018
- Kommando stream hinzugefügt um eine beliebige http URL oder lokale Dateien abzuspielen
- Attribut streamInput hinzugefügt (default: dmr)
- Attribut streamWaitTimes hinzugefügt (default: 0:1:0:0)
- Attribut streamPath hinzugefügt (default: /opt/fhem/www/)
- Attribut streamPort hinzugefügt (default: 5000)
- Attribut ttsJinglePath hinzugefügt um eine url für einen Webserver oder Dlna Server zu konfigurieren auf dem die Jingle dateien abgelegt sind.
- das speak Kommando kann bis zu 200 Zeichen verarbeiten wenn kein Jingle verwendet wird (100 wenn ein Jingle verwendet wird)
- das speak Kommando kann einen Jingle Dateinamen enthalten, der von | umgeben ist wie z.B. |jingle.mp3|This is a test. Das Attribut ttsJinglePath und der Jingle Dateiname im speak Text bilden dabei eine Einheit und bilden zusammen die Url zum Jingle.
- Attribut ttsWaitTimes wurde auf 0:0:1:2:0:0 geändert
- es wurden interne Änderungen vorgenommen um die Ausgabe mit speak robuster zu machen
- das Radio wird gemuted bevor es angeschaltet wird, um zu verhindern das der letzte Radiosender zu hören ist
- wenn ttsVolume nicht gesetzt ist, dann wird die normale Lautstärke verwendet anstatt der feste Wert 25
- Version wurde erhöht von 1.1.6 auf 1.1.7
23.05.2018
- Bugfix für neue Firmware Versionen
- Version wurde erhöht von 1.1.5 auf 1.1.6
13.05.2018
- XML Parser von XML::Simple nach XML::Bare umgestellt (sudo apt-get install libxml-bare-perl)
- Internals MODEL und UDN hinzugefügt
- wenn der Kompatibilitätsmodus ausgeschaltet ist, dann kann das Interval auf 5s gesetzt werden, ansonsten wie bisher auf minimal 10s.
- Version erhöht von 1.1.4 auf 1.1.5
29.03.2018
- notifications hinzugefügt
- update intervall kann jetzt auf 5s reduziert werden, wenn der Kompatibilitätsmodus deaktiviert wurde
- Attribut updateAfterSet hinzugefügt
- Attribut notifications hinzugefügt
- Reading rssi hinzugefügt
- Reading frequency hinzugefügt
- Reading signalStrength hinzugefügt
- Version erhöht von 1.1.3 auf 1.1.4
19.03.2018
- Kommandos volumeUp und volumeDown hinzugefügt
- Kommandos presetUp und presetDown hinzugefügt
- Version wurde erhöht von 1.1.2 auf 1.1.3
15.03.2018
- Code für die Sprachausgabe restrukturiert
- es gibt jetzt separate preset Befehle für die verschiedenen Inputs
- Attribut ttsWaitPowerOn wurde durch ttsWaitTimes ersetzt
- Version wurde erhöht von 1.1.1 auf 1.1.2
09.02.2018
- Attribut ttsWaitPowerOn hinzugefügt
- Umschaltung Lautstärke/Input nach einer Sprachausgabe gefixt
07.02.2018
- speak für bis zu 100 Zeichen hinzugefügt
- Attribute ttsInput, ttsLanguage und ttsVolume hinzugefügt
- das Lautstärke Reading wird jetzt immer ausgelesen, unabhängig davon ob das Radio an oder ausgeschaltet ist
- Version erhöht 1.0.1 zu 1.1.0
09.01.2018
- ls Kommando hinzugefügt (Navigation auf lokalen Medien oder Auswahl eines Radiosenders)
- Queue Implementierung wurde überarbeitet (für den Kompatibilitätsmodus)
- Attribut maxNavigationItems hinzugefügt
- Versionsinformationen hinzugefügt
06.12.2017
- Kompatibilitätsmodus hinzugefügt, um auch ältere Radios ansprechen zu können (immer aktiviert außer wenn aktiv ausgeschaltet)
- fehlende Inputs sollten jetzt funktionieren
- Readings werden nur noch aktualisiert, wenn sie sich geändert haben.
04.12.2017
- einige Fehlerausgaben wurden von verbose 3 auf verbose 5 gesetzt
- Readings inputs/presets sind jetzt versteckte Readings und nur noch in der Raw Ansicht zu sehen
- die maximal verfügbaren Lautstärke sollte gefixed sein
- autoLogin ist jetzt standardmäßig auf on gestellt
- kleine Gerätehilfe hinzugefügt
01.12.2017
- Readings/Kommandos angepasst
30.11.2017
- Modul wurde komplett neu geschrieben
07.11.2017
- update thread wurde auf non blocking umgestellt
- bugfix der inputs
- browser refresh entfernt


Sprachausgabe von mehr als 200 Zeichen realisieren
Eine Sprachausgabe von mehr als 200 Zeichen kann z.B. über das Modul Text2Speech realisiert werden. Die von diesem Modul erzeugte mp3 Datei wird dabei einfach als lokaler Stream an das Radio geschickt.

Zuerst muss ein Text2Speech Device eingerichtet werden, das nur die mp3 Datei erzeugt, nicht aber versucht diese abzuspielen.
define TTS_SERVER Text2Speech none
attr TTS_SERVER TTS_Language Deutsch
attr TTS_SERVER TTS_TimeOut 60
attr TTS_SERVER TTS_UseMP3Wrap 1


Jetzt benötigen wir noch ein notify, um die entstandene mp3 Datei an das SIRD Device zu schicken:
defmod nty_TTS_SERVER notify TTS_SERVER:lastFilename.* set RADIO_WOHNZIMMER stream $EVTPART1

Achtet bitte darauf, das Text2Speech die entstandenen Dateien in /opt/fhem/cache erzeugt und als lastFilename sowas wie z.B. cache/<random>.mp3 angibt.

Jetzt muss man noch den Pfad für die Stream Ausgabe vom SIRD Device anpassen:
attr RADIO_WOHNZIMMER streamPath /opt/fhem/

Jetzt kann man dem Text2Speech Server einfach ein Kommando schicken und die Ausgabe sollte auf dem Radio erfolgen:
set TTS_SERVER tts Das ist ein Test!


ReadingsGroup für die Radio Steuerung
In der 99_myUtils.pm müssen die folgenden Funktionen hinzugefügt werden:

sub filterReading($;$)
{
  my ($reading, $default) = @_;
  my @allpresets;
  my @list = split(',', $reading);
 
  $default = '' if (!defined($default));
 
  foreach my $elem (@list)
  {
    my ($id, $value) = split(':', $elem);

    if ($id eq $default)
    {
      #add current selection as first list item
      unshift(@allpresets, $value);
    }
    else
    {
      #add elements at end of array
      push(@allpresets, $value);
    }
  }
   
  return join(',', @allpresets);
}

sub getCoverTitleRG($;$$)
{
  my ($device, $width, $space) = @_;
 
  $width = 500 if (!defined($width));

  return '<div style="float: left;">'.getCoverRG($device).'</div><div style="margin-left: 150px; min-width: '.$width.'px;">'.getTitleRG($device, $space).'</div>';
}

sub getCoverRG($;$)
{
  my ($device) = @_;

  return '<img style="margin-right: 5px; border: 1px solid lightgray; height: 175px" src="'.ReadingsVal($device, 'graphicUri', '').'" />';
}

sub getTitleRG($;$)
{
  my ($device, $space) = @_;
  $space = 20 if (!defined($space));

  my $infoString = '';

  my $transportState = ReadingsVal($device, 'playStatus', '');

  if (ReadingsVal($device, 'currentAlbum', '') ne '')
  {
    $infoString = sprintf('<div style="margin-left: -150px;">%s %s<br/>Titel: <b>%s</b><br/>Interpret: <b>%s</b><br/>Album: <b>%s</b></div>',
                           $transportState,
                           ReadingsVal($device, 'input', ''),
                           ReadingsVal($device, 'currentTitle', ''),
                           ReadingsVal($device, 'currentArtist', ''),
                           ReadingsVal($device, 'currentAlbum', ''));
  }
  else
  {
    $infoString = sprintf('<div style="margin-left: -150px;">%s %s<br/>Sender: <b>%s</b><br/>Info: <b>%s</b><br/>Description: <b>%s</b></div>',
                           $transportState,
                           ReadingsVal($device, 'input', ''),
                           ReadingsVal($device, 'currentTitle', ''),
                           ReadingsVal($device, 'infoText', ''),
                           ReadingsVal($device, 'description', ''));
  }

  return $infoString;
}


Dann kann die ReadingsGroup erzeugt werden:

defmod rg_RADIO_WOHNZIMMER readingsGroup RADIO_WOHNZIMMER:<{getCoverTitleRG($DEVICE)}@state>\
RADIO_WOHNZIMMER:!input,!preset,volumeStraight,mute,repeat,shuffle,!previous,playStatus,!next,state
attr rg_RADIO_WOHNZIMMER alias Steuerung
attr rg_RADIO_WOHNZIMMER commands {\
"state.off" => "set %DEVICE on",\
"state.on" => "set %DEVICE off",\
"input" => "input:".filterReading(ReadingsVal($DEVICE, '.inputs', '')),\
"preset" => ReadingsVal($DEVICE, 'input', '')."preset:".filterReading(ReadingsVal($DEVICE, '.'.ReadingsVal($DEVICE, 'input', '').'presets', ''), ReadingsVal($DEVICE, '.lastPreset', '')),\
"volumeStraight" => "volumeStraight:slider,0,1,".ReadingsVal($DEVICE, 'volumeSteps', ''),\
"playStatus.playing" => "set %DEVICE stop",\
"playStatus.stopped" => "set %DEVICE play",\
"mute" => "set %DEVICE mute toggle",\
"repeat.on" => "set %DEVICE repeat off",\
"repeat.off" => "set %DEVICE repeat on",\
"shuffle.on" => "set %DEVICE shuffle off",\
"shuffle.off" => "set %DEVICE shuffle on",\
"previous" => "set %DEVICE previous",\
"next" => "set %DEVICE next"\
}
attr rg_RADIO_WOHNZIMMER nonames 1
attr rg_RADIO_WOHNZIMMER room RADIO
attr rg_RADIO_WOHNZIMMER valueColumns { 'r:1,c:1' => 'colspan="10"' }
attr rg_RADIO_WOHNZIMMER valueIcon {\
"state.on" => "radio_checked@#e56524",\
"state.off" => "radio_unchecked",\
"mute.on" => "rc_MUTE@#e56524",\
"mute" => "rc_VOLUP",\
"repeat.on" => "rc_REPEAT@#e56524",\
"repeat" => "rc_REPEAT",\
"playStatus.playing" => "rc_PAUSE@#e56524",\
"playStatus" => "rc_PLAY",\
"shuffle.on" => "rc_SHUFFLE@#e56524",\
"shuffle" => "rc_SHUFFLE",\
"previous" => "rc_PREVIOUS",\
"next" => "rc_NEXT",\
}

automatisierer


Invers

Sehr cool. Kann man auch Sender wählen/einstellen?

Ich bekomme eine Perl-Warnung
2017.11.07 15:32:57 1: PERL WARNING: Argument "K%c3%bcche" isn't numeric in multiplication (*) at ./FHEM/17_SIRD.pm line 329.

Ansonsten läuft es auch bei mir.
Nun geht in der Küche das Radio an, wenn jemand reingeht und wieder aus, wenn alle raus sind.

Danke für die Änderungen, Erweiterungen und die Pflege.
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

ralfix

# $Id: 17_SIRD.pm 41052 2017-03-28 16:41:14Z
Das Datum ist O.K. ?

Browser refreshs hab ich keine mehr bemerkt. :)

Gruß Ralf

mumpitzstuff

Zitat von: Invers am 07 November 2017, 16:02:57
Sehr cool. Kann man auch Sender wählen/einstellen?

Ich bekomme eine Perl-Warnung
2017.11.07 15:32:57 1: PERL WARNING: Argument "K%c3%bcche" isn't numeric in multiplication (*) at ./FHEM/17_SIRD.pm line 329.

Ansonsten läuft es auch bei mir.
Nun geht in der Küche das Radio an, wenn jemand reingeht und wieder aus, wenn alle raus sind.

Danke für die Änderungen, Erweiterungen und die Pflege.

Ich denke mal das hat was mit den Umlauten zu tun. Muss ich mir ansehen. Kannst du das Ding vielleicht erst mal irgendwie umbenennen z.B. in Kueche oder so?

mumpitzstuff

Zitat von: ralfix am 07 November 2017, 19:38:10
# $Id: 17_SIRD.pm 41052 2017-03-28 16:41:14Z
Das Datum ist O.K. ?

Browser refreshs hab ich keine mehr bemerkt. :)

Gruß Ralf

Da schaut aber jemand genau hin. Das ist noch aus dem alten Modul. Ich hab erst mal nur das Notwendigste angepasst.

pflock_y

Guten Morgen alle zusammen,

ich nutze das Modul auch und bin begeistert das es weiter gepflegt wird.

Ein kleines Problem/ kleine Frage hätte ich da trotzdem mal.

Ich nutze FHEM zusammen mit Alexa, funktioniert auch alles bestens!! Jetzt wollte ich auch das Radio in der Küche (Medion MD87480) über Alexa einschalten lassen. Leider findet die Alexa smarthome app das Gerät nicht.
Vielleicht hat jemand noch einen Tip für mich?

Grüße
Pflock_y

Flipper92

Hey,
Ich benutze es aktuell für mein Hama IR 100 und es funktioniert beim ersten Test super.

Eine Frage, gibt es eine Zusammenstellung zu den Befehlen, Gets und den Readings?

Kann man so das Radio auch für Sprachausgaben nutzen?

Gruß Dominik

Zippo2000

Zitat von: Flipper92 am 12 November 2017, 20:28:16
Hey,
Ich benutze es aktuell für mein Hama IR 100 und es funktioniert beim ersten Test super.

Eine Frage, gibt es eine Zusammenstellung zu den Befehlen, Gets und den Readings?

Kann man so das Radio auch für Sprachausgaben nutzen?

Gruß Dominik

Vielleicht hilft Dir das weiter:
https://github.com/flammy/fsapi/blob/master/FSAPI.md

mumpitzstuff

Zitat von: pflock_y am 11 November 2017, 09:40:41
Guten Morgen alle zusammen,

ich nutze das Modul auch und bin begeistert das es weiter gepflegt wird.

Ein kleines Problem/ kleine Frage hätte ich da trotzdem mal.

Ich nutze FHEM zusammen mit Alexa, funktioniert auch alles bestens!! Jetzt wollte ich auch das Radio in der Küche (Medion MD87480) über Alexa einschalten lassen. Leider findet die Alexa smarthome app das Gerät nicht.
Vielleicht hat jemand noch einen Tip für mich?

Grüße
Pflock_y

Ich kenne mich leider mit Alexa nicht wirklich aus, vermute aber das man da sowas wie einen Skill benötigt. Oder man müsste irgendwie über Alexa fhem Befehle auslösen können. Am besten du fragst mal in der Alexa Sektion danach, da ist dein Thema sicher besser aufgehoben.

mumpitzstuff

Zitat von: Flipper92 am 12 November 2017, 20:28:16
Hey,
Ich benutze es aktuell für mein Hama IR 100 und es funktioniert beim ersten Test super.

Eine Frage, gibt es eine Zusammenstellung zu den Befehlen, Gets und den Readings?

Kann man so das Radio auch für Sprachausgaben nutzen?

Gruß Dominik

Leider habe ich das Modul auch nur etwas erweitert bisher und deshalb nicht mehr Informationen als sich auf den einschlägigen Seiten zur fsapi finden lässt. Viele Dinge sind mir daher selbst unklar.
Sprachausgabe unterstützt das Modul nicht, aber das ist für mich der Hauptgrund das Ding überhaupt weiter zu entwickeln. Ich muss in dieser Richtung noch experimentieren und hoffe eine Lösung dafür zu finden.

mumpitzstuff

Habe heute schon mal rausgefunden, das man das Radio grundsätzlich über Upnp ansprechen kann. Das funktioniert z.B. auch mit einem Standard Windows Upnp Server. Falls es jemand testen möchte kann man folgendes tun:

1.) Das Radio einschalten und auf lokale Musik als Input umstellen.

2.) Den Upnp Server wie hier beschrieben aktivieren: https://www.pcwelt.de/ratgeber/Streaming-mit-UPnP-DLNA-im-Heimnetz-Video-Player-9696558.html

3.) Im Explorer ein Mp3 auswählen und an das Radio senden.

Wenn man vorher nicht den richtigen Input im Radio ausgewählt hat, dann erscheint eine endlose Warteuhr, die sich erst beendet, wenn man das Radio auf den richtigen Input umgestellt hat. Aber danach beginnt dann das entsprechende Lied.

Alternativ habe ich auch noch den DLNARenderer (FHEM Modul) probiert. Hier muss man allerdings sehr viele Dinge installieren und selbst dann läuft es nicht besonders stabil. Wenn man es geschafft hat und der DLNARenderer das Radio findet, dann muss man unbedingt zuerst das Radio auf den Input lokale Musik umstellen, sonst stürzt der DLNARenderer ab! Wenn man das beachtet, dann kann man über:
set <dlnarenderer device> speak Das ist ein Test
bereits eine Sprachausgabe realisieren!

Ich bin jetzt guter Hoffnung, dass ich das auch im Modul so umsetzen kann. Es wird aber noch ein wenig dauern...


robbork

Hallo,
freue mich, dass es mit dem Modul weitergeht. Vielen Dank dafür. Ich benutze das Modul für einen Noxon A560+ und es läuft.
Ich kann die Eingänge auswählen, unter DAB funktioniert auch Kanal auf/ab...uvm. Super.
Habe eine Frage zum Muskplayer. Was ist da bis jetzt so möglich? Vieleicht kann das mal jemand auflisten. Ich habe zwar schon einiges durchprobiert, aber bei den meisten Variablen für "set" passiert nichts. Das liegt vmtl. am Noxon. Deshalb wäre es schon interessant für mich, was bei den unterstützten Geräten in diesem Zusammenhang funktioniert.
Danke Gruß Rob

supernova1963

Hallo Ralf,

super, dass du dich bereiterklärt hast weiter zu machen bzw. neu auf zu bauen.
Mein NumanTwo Radio war in ganz groben Zügen steuerbar. Ich habe es jedoch aufgrund diverser Probleme löschen müssen.

Danke,

Gernot


Zippo2000

Hallo Gernot,

hilfreich für die Weiterentwicklung wäre sicherlich, welche diverse Probleme bei Dir auftraten.

Grüße,
Tobi

Zitat von: supernova1963 am 18 November 2017, 07:21:14
Hallo Ralf,

super, dass du dich bereiterklärt hast weiter zu machen bzw. neu auf zu bauen.
Mein NumanTwo Radio war in ganz groben Zügen steuerbar. Ich habe es jedoch aufgrund diverser Probleme löschen müssen.

Danke,

Gernot