FHEM Forum

FHEM => Sonstiges => Thema gestartet von: karo am 15 Dezember 2016, 20:57:08

Titel: HTTPMOD, RecombineExpr, Sortier-Reihenfolge
Beitrag von: karo am 15 Dezember 2016, 20:57:08
Hallo,
ich bin noch ganz am Anfang meiner Schritte mit FHEM und mein letztes Perl-Programm liegt so etwa 15 Jahre zurück ... also falls ich Unsinn erzähle - nicht übel nehmen.
Ich habe ein InternetRadio mit einem anderen Pi gebaut, darauf läuft zur Steuerung ein Web-Server. Um dieses abzufragen habe ich HTTPMOD eingesetzt. Es existiert die Möglichkeit eine Liste der gespeicherten Sender abzufragen, wobei ich diese gern in der vom Server gelieferten Reihenfolge hätte. Die Antwort sieht wie folgt aus:

{"infoText":"listOnlyStationNames","result":["WDR 5","WDR 2","1Live","Antenne Bayern","Best Of 80s","Hit Radio","RPR1.80er","RPR1.Koeln","RPR1.Rock","RPR1.TanzBar","SWR1.RP","SWR3","big FM (Hannah)"],"state":0}

Ich verwende:

attr raspio get01JSON result
attr raspio get01Name SenderListe
attr raspio get01RecombineExpr join ",", @matchlist
attr raspio get01URL http://192.168.0.200/radio/php/ajaxSender.php?action=listOnlyStationNames

Damit ist die Liste jedoch nicht in der Reihenfolge, da result_0,result_1,result_10 ... nicht numerisch sortiert wird.
Meine Lösung ist es (sehr unschön, da 98_HTTPMOD.pm geändert) eine Zeile
unter Zeile 1757 einzufügen:

my @keylist = sort grep /^$json/, keys (%{$hash->{ParserData}{JSON}}); 
@keylist = sort { (substr $a , (index $a,"_")+1) <=> (substr $b , (index $a,"_")+1) } @keylist;       

damit sortiere ich nachträglich numerisch - ich fände es schöner, wenn result_xyz in der "richtigen" Reihenfolge wäre.
Die Änderung traue ich mir angesichts meiner Perl-Kenntnisse nicht zu, bzw. ich würde recht lange brauchen.
Außerdem wird jetzt  zweimal sortiert - das dürfte ziemlich überflüssig sein.

Also meine Anregung - falls das sinnvoll ist - könnte HTTMOD einen Patch bekommen, der die Reihenfolge der Antworten beibehält?
Grüße und Danke für das schöne Modul
Karsten
Titel: Antw:HTTPMOD, RecombineExpr, Sortier-Reihenfolge
Beitrag von: StefanStrobel am 18 Dezember 2016, 10:46:03
Hallo Karsten,

Du könntest alles in die get01RecombineExpr reinpacken. In der Expression kannst Du auf $hash zugreifen und dann auch an @keylist und @matchlist vorbei gehen, z.B.:


attr raspio get01RecombineExpr join ",", sort map ($hash->{ParserData}{JSON}{$_}, grep /^result/, sort keys (%{$hash->{ParserData}{JSON}}))


Gruss
    Stefan
Titel: Antw:HTTPMOD, RecombineExpr, Sortier-Reihenfolge
Beitrag von: karo am 18 Dezember 2016, 14:17:22
Hallo Stefan,
ja, das ist eine Lösung, wenn ich direkt auf die Daten zugreifen kann, dann bekomme ich das hin.
Ich bin noch auf eine andere Problematik gestoßen, daher habe ich - wohl auch aus Neugier - mal ein
eigenes Modul für "mein Radio" gebaut.
Danke Dir
Karsten