FHEM - Anwendungen > Multimedia

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

(1/165) > >>

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:


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

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:

--- Code: ---sudo apt-get install libxml-bare-perl
--- Ende Code ---
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:

--- Code: ---sudo cpan
--- Ende Code ---

--- Code: ---install XML::Bare
--- Ende Code ---

--- Code: ---exit
--- Ende Code ---
Damit wird das Modul als Source geladen, kompiliert und dann installiert.

Installation:

--- Code: ---update add http://raw.githubusercontent.com/mumpitzstuff/fhem-SIRD/master/controls_sird.txt
--- Ende Code ---

--- Code: ---update all
--- Ende Code ---

--- Code: ---shutdown restart
--- Ende Code ---

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.

--- Code: ---define TTS_SERVER Text2Speech none
attr TTS_SERVER TTS_Language Deutsch
attr TTS_SERVER TTS_TimeOut 60
attr TTS_SERVER TTS_UseMP3Wrap 1
--- Ende Code ---

Jetzt benötigen wir noch ein notify, um die entstandene mp3 Datei an das SIRD Device zu schicken:

--- Code: ---defmod nty_TTS_SERVER notify TTS_SERVER:lastFilename.* set RADIO_WOHNZIMMER stream $EVTPART1
--- Ende Code ---

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:

--- Code: ---attr RADIO_WOHNZIMMER streamPath /opt/fhem/
--- Ende Code ---

Jetzt kann man dem Text2Speech Server einfach ein Kommando schicken und die Ausgabe sollte auf dem Radio erfolgen:

--- Code: ---set TTS_SERVER tts Das ist ein Test!
--- Ende Code ---


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


--- Code: ---sub filterReading($)
{
  my $reading = shift;

  $reading =~ s/\d://g;

  return $reading;
}

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;
}
--- Ende Code ---

Dann kann die ReadingsGroup erzeugt werden:


--- Code: ---defmod rg_WLAN_RADIO readingsGroup WLAN_RADIO:<{getCoverTitleRG($DEVICE)}@state>\
WLAN_RADIO:!input,!preset,volumeStraight,mute,repeat,shuffle,!previous,playStatus,!next,state
attr rg_WLAN_RADIO alias Steuerung
attr rg_WLAN_RADIO 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', '')),\
"volumeStraight" => "volumeStraight:slider,0,1,".ReadingsVal($DEVICE, '.volumeSteps', 1),\
"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_WLAN_RADIO nonames 1
attr rg_WLAN_RADIO valueColumns { 'r:1,c:1' => 'colspan="10"' }
attr rg_WLAN_RADIO 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",\
}

--- Ende Code ---

automatisierer:
läuft!

Finde gut, dass es weiter geht. Freue mich. Danke!

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

Ich bekomme eine Perl-Warnung

--- Code: ---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.
--- Ende Code ---

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.

ralfix:

--- Code: ---# $Id: 17_SIRD.pm 41052 2017-03-28 16:41:14Z
--- Ende Code ---
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

--- Code: ---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.
--- Ende Code ---

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.

--- Ende Zitat ---

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?

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln