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
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
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