[Gelöst] Leerzeichen in %20 konvertieren für HTTPMOD

Begonnen von michaelz, 17 August 2017, 18:02:22

Vorheriges Thema - Nächstes Thema

michaelz

Hallo,
ich hätte gerne mal ein Problem. Folgendes: Ich benutze KODI zur Hausbeschallung. Um ein einfaches Multiroom zu ermöglichen habe ich die Kombi Darkice/Icecast2 aufgesetzt was sehr gut funktioniert. Das Problem ist, daß ich auf diesem Weg (geht über den Standardaudio Output) keine Metatags (currentArtist, currenttitle...) von Kodi bekomme.

Icecast2 läßt sich mit Metatags versorgen über ein HTTP-Get, etwa http://<ip>:8000/metadata??pass=xxxxx&mode=updinfo&mount=/sample192&song=<artist> - <title> , was das Problem lösen würde.

Da ich Kodi bereits in FHEM integriert habe, dachte ich, HTTPMOD dafür zu verwenden, was auch sehr gut manuell funktioniert, per "set Metadata Icecast Artist%20Title". Per "set Metadata Icecast Artist Title" tut sich nichts, nichtmal ein Fehler im Log (Logtiefe Standard)
Wenn ich aber ein Reading von Kodi verwende, gibt es keine Übertragung, weil vermutlich bei der Tagausgabe Leerzeichen verwendet werden, die für das HTTP get nicht standardkonform sind.

Zum HTTPMOD feeden benutze ich ein Notify.

Wer hat eine Idee?

Danke schonmal

Michael

dev0

Du könntest urlEncode($) aus HttpUtils.pm zum encoden nutzen.

michaelz

Hallo,

ich hab mal kurz in der Referenz drübergeschaut. Im Moment ist mir das meterweit zu hoch, da muß ich mich erst einarbeiten.
Jedenfalls vielen Dank für den Tipp.

VG
Michael

dev0

Um HttpUtils FHEMweit nutzen zu können:

define HttpUtilsInit notify global:INITIALIZED {use HttpUtils}


In notify dann:

my $enc = urlEncode($url);

$url ist der String, den Du encoden möchtest.
$enc ist der codierte string.

michaelz

#4
Puh.....schwierige Geburt. Dein Vorschlag funktioniert perfekt, nur habe ich noch ein Problem mit dem Reading, ich krieg nichts.

So sieht die Def vom Notify aus;(webDisplay2:Line1.*) {
my $url = "[webDisplay2:Line1]";
my $enc = urlEncode($url); {
fhem( "set Metadata Icecast $enc" );
}
}


Das "webDisplay" liefert die Ausgabe vorformatiert als "Artist - Title". Die Übertragung nach Icecast2 funktioniert, es wird aber genau "[webDisplay2:Line1]" angezeigt. Zum Testen habe ich auch Leerzeichen eingefügt, läuft perfekt. Der Event zum Update wird auch ausgelöst.

Was mache ich falsch?

michaelz

Ok, geschafft. Es funktioniert, eventuell ist die Konfig noch nicht optimal, aber es tut. Wen es interessiert:

(webDisplay2:Line1.*) {
my $url = ReadingsVal("webDisplay2","Line1","");
my $enc = urlEncode($url); {
fhem( "set Metadata Icecast $enc" );
}
}


Vielen Dank an Dev0 für die Unterstützung

Amenophis86

Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...