NEWS
Javascript verändern
-
Hey Leute,
leider bin ich was JavaScript angeht nicht die Große Leuchte. Aber vielleicht kann mir jemand helfen ein bestehendes Script zu "verändern".
Vor einer ganzen Weile habe ich von jemand hier schon Hilfe bekommen für den Sonos Player um die Liste meiner Favoriten zu erzeugen. Da ich nun meine Visualisierung umbauen möchte, passt das aktuelle Script nicht mehr dafür.
Hier erstmal das Script:
//GetSonosFavorites var FavoritesObj = $('channel[state.id=*.favorites_list]'); function GetSonosFavorites() { FavoritesObj.each(function (id, i){ var Favorites = String(getState(id).val); var Favorites_list = []; var SonosDevice; var NewFavorites = ""; SonosDevice = (id.split("."))[3]; Favorites_list = Favorites.split(","); Favorites_list.forEach(function (FavoriteName){ var FavoriteNameTrimmed = (FavoriteName.trim()).replace(/\s+/g, '%20'); // NewFavorites += "[" + FavoriteName +"](\"http://192.168.178.40:8082/vis/index.html?#Sonos\")"; NewFavorites += "[" + FavoriteName +"](\"http://192.168.178.40:8082/vis/index.html?#Sonos\")"; }); createState('Sonos.' + SonosDevice + '_Favorites', ""); setState('Sonos.' + SonosDevice + '_Favorites', NewFavorites); log("Sonos Favoriten aktualisiert für " + SonosDevice); }); } FavoritesObj.on(function() { GetSonosFavorites(); //Aktualisiert die Favoriten, wenn sie geändert werden. });
Aktuell erzeugt das Script in dem Datenpunkt Favorites_list eine Liste mit folgendem Aufbau:
Amazon Musik, Antenne Unna 102.3 (Adult Contemporary), Ilmwelle 90s (90er), Max, Radio Lippe Welle Hamm 105.0 (Adult Contemporary), RSA Radio 106.1 (Classic Rock), SchwarzwaldRadio, Testliste, WDR 2 Südwestfalen 99.4 (Adult Contemporary), WDR4 103.8 (Oldies)
Ich benötige für das neue Projekt einen anderen Datenpunkt new_Favorites_list folgende Form an Daten:
Amazon Musik=Amazon Musik,Antenne Unna 102.3 (Adult Contemporary)=Antenne Unna 102.3 (Adult Contemporary),Ilmwelle 90s (90er)=Ilmwelle 90s (90er),...
Also zum einen die Leerfelder zwischen dem , und dem nächsten Sender müssen weg und die Sendernamen müssen 2 mal aufgelistet werden mit einem = Zeichen dazwischen.
Das Listen Widget im Habpanel, braucht zum Füllen der Items dieses Format. Ich habe es zum Testen mal manuell gemacht. Was natürlich auf Dauer etwas mühsam ist.
Ich hoffe man kann mir ggf. helfen.
Ich mit meinen recht Wenigen Erfahrungen mit Javascript, würde tippen dass folgende Zeile Hauptsächlich für das erstellen der Liste benötigt wird:
... var FavoriteNameTrimmed = (FavoriteName.trim()).replace(/\s+/g, '%20'); ...
Habe versucht die Zeile um zu bauen nur leider kein Ergebnis bekommen, was man brauchen kann. Also die Zeile sah wie folgt aus:
... var FavoriteNameTrimmed = (FavoriteName.trim()).replace(/\s+/g, '') + "=" + (FavoriteName.trim()).replace(/\s+/g, ''); ...
Michael
-
@raspido sagte in Javascript verändern:
Die Variable FavoriteNameTrimmed wird in Zeile 15 definiert und belegt, danach aber nie wieder im Script verwendet. Außer das Script ist hier unvollständig.
Ich würde Zeile 17 Testweise modifizieren.
NewFavorites += "[" + FavoriteNameTrimmed + "=" + FavoriteNameTrimmed +"](\"http://192.168.178.40:8082/vis/index.html?#Sonos\")";
Ggf. noch Zeiel 12 anpassen, und aus "," ein ", " machen. Sehe bisher noch nicht, woher das Leerezeichen vor dem Komma in deiner Liste kommt.
-
@chrunchy Oder hast du ggf. einen anderen Ansatz um die Favoriten aus dem Sonos Lautsprechersystem in einen Datenpunkt zu überführen? Also in dem Format, welches ich benötige. Weil irgendwie komme ich so im Moment nicht auf einen grünen Zweig.
Und das ich bislang primär in Blockly gearbeitet habe und eher weniger mit JavaScript geübt habe, macht das Problem leider nicht kleiner.
Michael
-
Ich habe meine Scripte nochmal durch gesehen und mir ist aufgefallen, dass zu dem ganzen noch ein Zweites Scipt gehört. Vermute da kommt das Leerzeichen her.
Hier einmal der Code:
createState('sonos.favTexte', '', { type: 'string', def: '' }); function formatList(list) { setState('sonos.favTexte', list.replace(/, /g,';')); } var favList = getState("sonos.0.root.192_168_178_40.favorites_list").val; formatList(favList); // Script start // Änderung der Favoriten-Liste on("sonos.0.root.192_168_178_40.favorites_list", function(dp) { formatList(dp.state.val); });
Habe mittlerweile einige Scripte und "Versuchsballons" bei den Scripten, daher ist mir das untergegangen. Schande auf mein Haupt
Michael
-
@raspido Ich kenne mich mit dem sonos nicht aus, sry.
Hast du denn einen Datenpunkt new_Favorites_list?
Wenn ja, Zwischen Zeile 22 und 23 folgendes einfügen:setState('Sonos.' + SonosDevice + 'new_Favorites_list', NewFavorites);
Sofern du meine anderen Änderungsvorschläge probiert hast.
-
@chrunchy Ich habe es getestet, nur leider ohne Erfolg. Aber naja ich denke, ich werde mich mit JavaScript mehr auseinander setzen und naja was eigenes entwickeln müssen. Leider finde ich den hier im Forum nicht mehr, der mir damals geholfen hat. Aber naja hat auch was gutes. Nächste mal bekomme ich es vielleicht selber hin. Muss nur gucken wie ich ans Ziel komme.
Bis dahin wird es noch etwas dauern, aber es wird schon irgendwie.
Muss nur gucken, wie ich ein Array erstelle, zerlege und im Anschluß neu zusammenfüge.
Michael