Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [Vorlage] Spotify Skript

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    [Vorlage] Spotify Skript

    This topic has been deleted. Only users with topic management privileges can see it.
    • Alex1808
      Alex1808 last edited by

      @twonky:

      @Alex1808: Da die States leer sind, kann auch nix angezeigt werden. Ist dein Spotify Adapter denn korrekt authorisiert, also steht der State "spotify-premium.0.authorization.authorized" auf true?

      Die States spotify-premium.0.devices.availableDeviceList* sollten auf jedenfall was enthalten, wenn du gerade eine Playlist abspielst. `

      Adapter komplet runter und neu installiert. Alle Daten sind wieder da.

      Jetzt habe alle drei Häkchen bei Einstellungen aktiviert.

      Werde nach einer Woche berichten 🙂

      1 Reply Last reply Reply Quote 0
      • Mic
        Mic Developer last edited by

        Hallo,

        falls Ihr auch mit der Problematik betroffen seid:

        wenn eine Alexa-Gruppe verwendet wird (z.B. "Überall") und ein oder mehrere Alexa dieser Gruppe vom Strom getrennt und wieder angeschlossen werden, so werden diese Geräte teils doppelt als Datenpunkte mit neuen IDs angelegt, ebenso wie die Gruppe(n). Wird in den Adapter-Einstellungen "Nicht mehr vorhandene Geräte löschen" gesetzt, löscht dieser dann auch die doppelten Geräte mit der "alter" ID. Hierbei werden aber auch neue IDs für Alexa-Gruppen (z.B. "Überall") vergeben, so dass man diese nicht mehr per Javascript mit z.B. "spotify-premium.0.devices.d1326ee273282053fe764144b8cd2376e2df5f88.useForPlayback" ansprechen kann, da diese ja nicht mehr vorhanden ist.

        Fehlermeldung im Log alle 5 Sekunden: "no playback content".

        Mein Workaround hierzu ist folgender:

        Ich ermittle über den Namen des Gerätes bzw. der Gruppe die Geräte-ID:

            /** 
             * Get the device ID from Spotify Premium Adapter for a given Device Name (like "Überall")
            */
            function spotifyGetDeviceIDfromName(strAlexaDeviceName) {
        
                // Get Device information string, separated by ";"
                var strDeviceIDs = getState("spotify-premium.0.devices.availableDeviceListIds").val;
                var strDeviceNames = getState("spotify-premium.0.devices.availableDeviceListString").val;
        
                // Split into Array
                var aDeviceIDs = strDeviceIDs.split(";");
                var aDeviceNames = strDeviceNames.split(";");
        
                // Get Array position of name
                var intPos = aDeviceNames.indexOf(strAlexaDeviceName);
        
                // Get device ID string
                var strDevID = aDeviceIDs[intPos];
        
                return strDevID;
        
            }
        

        Dann kann man diese über setState() entsprechend per Geräte-Namen (und nicht neu vergebener ID) steuern:

        var strDeviceID = spotifyGetDeviceIDfromName('Überall');
        setState("spotify-premium.0.devices." + strDeviceID + ".useForPlayback", true);
        
        1 Reply Last reply Reply Quote 0
        • besterquester
          besterquester Developer last edited by

          Hallo Zusammen,

          Ich habe die Skripts getestet und die laufen bei mir sehr gut. Ich habe auch noch ein paar kleine Änderungen durchgeführt damit man danach noch mit CSS das Layout ändern kann.

          `createState('javascript.0.spotify-premium.trackListHtml', '', false);
          
          function refreshTrackList() {
          	var current = getState('spotify-premium.0.playbackInfo.playlist.trackList').val;
          	var source = getState('spotify-premium.0.playbackInfo.playlist.trackListArray').val;
          
          	var html = ' ';
          
              var strRowClass = '';
              var strSelectedClass = '';
          
              // create caption
          	html += '';
              html += '';
              html += '';
              html += '';
              html += '';
          
          	for (var i = 0; i < source.length; i++) {
          
          	    if ((i%2) === 0) {
          	        strRowClass = "idRowOdd";
          	    } else {
          	        strRowClass = "idRowEven";
          	    }
          	    if (current == i) {
          	       strSelectedClass = "selectedRow";
          	    } else {
          	       strSelectedClass = "";
          	    }
          
          		html += '';
          
          		html += '';
          
          		html += '';
          
          		html += '';
          
          		html += '';
          	}
          
          	html += '
          
          |  Nr  |  Artist  |  Title  |
          | ';
          		html += i.toString();
          	    html += ' | ';
          		html += source[i].artist;
          		html += ' | ';
          		html += source[i].title;
          		html += ' |
          
          ';
          
          	setState('javascript.0.spotify-premium.trackListHtml', html, true);
          }
          
          on('spotify-premium.0.playbackInfo.playlist.trackList', refreshTrackList);
          on('spotify-premium.0.playbackInfo.playlist.trackListArray', refreshTrackList);
          
          refreshTrackList();` 
          
          Hier mein Widget welches ich verwende:
          `~~[code]~~[{"tpl":"tplHtml","data":{"g_fixed":true,"g_visibility":false,"g_css_font_text":false,"g_css_background":false,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signals":false,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","refreshInterval":"0","signals-cond-0":"==","signals-val-0":true,"signals-icon-0":"/vis/signals/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":false,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"/vis/signals/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"html":"{javascript.0.spotify-premium.trackListHtml}","class":"myTextStyle myBoxStyle"},"style":{"left":"576px","top":"178px","width":"674px","height":"465px","overflow-y":"visible"},"widgetSet":"basic"}]
          [/code]`
          
          und hier noch die CSS Codes:
          `~~[code]~~.table1  {
             width:100%;    
          }
          
          .idRowOdd{
              background-color: #3c495e;
          }
          
          .selectedRow {
              background-color: #234690;
              color: white;
          } 
          
          .idRowEven:hover,
          .idRowOdd:hover{
              background-color: #f8f8f8;
          }
          .myBoxStyle div {
              border-top-right-radius:8px;
              border-top-left-radius:8px;
          }
          
          .myBoxStyle  {
               border: #76869e solid 1px !important;
               border-radius: 10px !important;
               border-color: #a8b3c2;
               box-shadow: 0 0 6px 5px #76869e99;
               color: #d4d4d4;
               background:#111b2c;
          }
          
          .myTextStyle {
              color: #a8b3c2;
              font-family:Verdana, Geneva, sans-serif
          }
          [/code]`
          
          Was mir noch aufgefallen ist, dass im State Playlists auch gelöschte Playlists auftauchen. Kann man da noch etwas machen  :?
          
          lg BQ[/i][/i]
          
          D 1 Reply Last reply Reply Quote 0
          • Alex1808
            Alex1808 last edited by

            @besterquester:

            Was mir noch aufgefallen ist, dass im State Playlists auch gelöschte Playlists auftauchen. Kann man da noch etwas machen :?

            lg BQ `

            513_screenshot_at_juni_29_08-36-10.png

            1 Reply Last reply Reply Quote 0
            • besterquester
              besterquester Developer last edited by

              @Alex1808: Thanks so einfach 😄

              1 Reply Last reply Reply Quote 0
              • S
                schubi82 last edited by

                @twonky: Danke, aber das war es nicht (hatte ja auch alles ohne -premium eingerichtet, nun aber wie vorgeschlagen). Die Liste bleibt leer, auch wenn ich Copy/Paste von besterquesters-Skript mache. Im Adapter ist z.B. trackList aber auch leer, muss das so?

                1 Reply Last reply Reply Quote 0
                • M
                  Marcel85 last edited by

                  Morgen!

                  Hat noch jemand das Problem, dass der Spotify-Adapter euch den Log zumüllt?

                  Mein Log ist voll mit "no playback content" Warnungen.

                  spotify-premium.0	2018-07-01 09:50:06.734	warn	no playback content
                  spotify-premium.0	2018-07-01 09:50:01.614	warn	no playback content
                  spotify-premium.0	2018-07-01 09:49:56.549	warn	no playback content
                  spotify-premium.0	2018-07-01 09:49:51.481	warn	no playback content
                  spotify-premium.0	2018-07-01 09:49:46.415	warn	no playback content
                  spotify-premium.0	2018-07-01 09:49:41.339	warn	no playback content
                  spotify-premium.0	2018-07-01 09:49:36.259	warn	no playback content
                  spotify-premium.0	2018-07-01 09:49:31.183	warn	no playback content
                  spotify-premium.0	2018-07-01 09:49:26.114	warn	no playback content
                  spotify-premium.0	2018-07-01 09:49:21.039	warn	no playback content
                  spotify-premium.0	2018-07-01 09:49:15.969	warn	no playback content
                  spotify-premium.0	2018-07-01 09:49:10.893	warn	no playback content
                  spotify-premium.0	2018-07-01 09:49:05.820	warn	no playback content
                  spotify-premium.0	2018-07-01 08:49:00.771	warn	no playback content
                  

                  Gruß

                  Marcel

                  1 Reply Last reply Reply Quote 0
                  • Alex1808
                    Alex1808 last edited by

                    @Marcel85:

                    Morgen!

                    Hat noch jemand das Problem, dass der Spotify-Adapter euch den Log zumüllt?

                    Mein Log ist voll mit "no playback content" Warnungen.

                    Gruß

                    Marcel `

                    Ja, hatte auch. Deswegen wen nicht im gebrauch schalte ich Adapter aus.

                    1 Reply Last reply Reply Quote 0
                    • Alex1808
                      Alex1808 last edited by

                      Gestern vergessen auszuschalten..

                      ! 513_screenshot_at_juli_03_09-33-55.png

                      1 Reply Last reply Reply Quote 0
                      • twonky
                        twonky last edited by

                        Halb so wild. Das sag einfach nur das Spotify gerade keine Infos hat.

                        1 Reply Last reply Reply Quote 0
                        • M
                          mikiline last edited by

                          @twonky:

                          Halb so wild. Das sag einfach nur das Spotify gerade keine Infos hat. `

                          Das ist richtig, jedoch "müllt" es den Log zu und macht ihn unübersichtlich. Schön wäre es wenn man diesen Log nur sieht wenn man auf Debug stellt

                          1 Reply Last reply Reply Quote 0
                          • Alex1808
                            Alex1808 last edited by

                            @mikiline:

                            Das ist richtig, jedoch "müllt" es den Log zu und macht ihn unübersichtlich. Schön wäre es wenn man diesen Log nur sieht wenn man auf Debug stellt `

                            Mache eventuell auch ausschalten?

                            Script für Adapter zum Ein/Ausschalten aus VIS

                            ! ````
                            /* Spritpreis Spotify adapter neu starten
                            ! erzeugt Objekt, das in VIS geschaltet werden kann
                            Schaltung triggert Neustart eines Adapters
                            ! 28.03.2018 erstellt von pix
                            ! */
                            const logging = true; // (true;false) Logausgabe zentral schalten, da 5minütlich ein Mehrzeiler geloggt wird.
                            const instanz = "javascript." + instance;
                            const fC = false; // force Create
                            const idSchalter = instanz + ".Spotify.Adapter.Schalter";
                            const adapter = "spotify-premium.0"; // Name und Instanz des Adapters
                            ! // Ab hier nix mehr ändern
                            if (logging) log("Skript " + name + " in der Instanz " + instance + " gestartet");
                            ! var idAdapter = "system.adapter." + adapter;
                            ! createState(idSchalter, false, fC, {
                            name: adapter + " Adapter neu starten",
                            type: "boolean",
                            desc: "Schaltet den <" + adapter + "> Adapter per Skript zB aus VIS",
                            role: "switch"
                            });
                            ! // Neustart triggern
                            on({
                            id: idSchalter,
                            change: "ne",
                            from: "system.adapter.web.0" // Schaltung nur aus VIS möglich
                            }, function (dpobj) {
                            var obj = getObject(idAdapter);
                            if (dpobj.state.val) {
                            obj.common.enabled = true; // Adapter einschalten
                            } else if (!dpobj.state.val) {
                            obj.common.enabled = false; // Adapter ausschalten
                            }
                            setObject(idAdapter, obj);
                            if (logging) log("Adapter <" + adapter + "> wurde " + ((obj.common.enabled) ? "ein" : "aus") + "geschaltet");
                            });

                            
                            Und ich hänge noch ein Indikator mit dazu, dann ist auch wirklich klar ob Adapter An oder Aus ist
                            
                            system.adapter.spotify-premium.0.alive
                            1 Reply Last reply Reply Quote 0
                            • T
                              the-triple last edited by

                              Hi,

                              wenn ich den Script ausführe bekomme ich immer eine Fehlermeldung im Log und der Java Adapter Startet sich neu. Das selbe Problem hab ich auch bei dem Alexa Script, nur Leider wird dieser nicht mehr Supportet. Deshalb bin ich auch auf den Spotify Script umgestiegen.

                              Bei dem Spotify Adapter 0.3.1 bekomme ich zwar keine Fehlermeldung aber da bringt der Adapter mir meine zwei Alexa Geräte durcheinander und bennent beide in AEOBC um (auch in der Spotify App, in der Alexa App jedoch nicht). Dies kann ich nur Rückgängig machen wenn ich die Echo Dots in der Alexa App umbenenne.

                              Hier der Log:

                              host.raspberrypi	2018-07-05 15:56:01.844	info	Restart adapter system.adapter.javascript.0 because enabled
                              host.raspberrypi	2018-07-05 15:56:01.844	error	instance system.adapter.javascript.0 terminated with code 0 (OK)
                              Caught	2018-07-05 15:56:01.844	error	by controller[0]: at IncomingMessage. <anonymous>(/opt/iobroker/node_modules/request/request.js:1085:12)
                              Caught	2018-07-05 15:56:01.843	error	by controller[0]: at Request.emit (events.js:188:7)
                              Caught	2018-07-05 15:56:01.843	error	by controller[0]: at emitOne (events.js:96:13)
                              Caught	2018-07-05 15:56:01.843	error	by controller[0]: at Request. <anonymous>(/opt/iobroker/node_modules/request/request.js:1163:10)
                              Caught	2018-07-05 15:56:01.843	error	by controller[0]: at Request.emit (events.js:191:7)
                              Caught	2018-07-05 15:56:01.843	error	by controller[0]: at emitTwo (events.js:106:13)
                              Caught	2018-07-05 15:56:01.842	error	by controller[0]: at Request.self.callback (/opt/iobroker/node_modules/request/request.js:186:22)
                              Caught	2018-07-05 15:56:01.842	error	by controller[0]: at Request._callback (script.js.common.Spotify:178:24)
                              Caught	2018-07-05 15:56:01.841	error	by controller[0]: at script.js.common.Spotify:774:31
                              Caught	2018-07-05 15:56:01.840	error	by controller[0]: at CreatePlaybackInfo (script.js.common.Spotify:251:12)
                              Caught	2018-07-05 15:56:01.831	error	by controller[0]: TypeError: Cannot read property 'hasOwnProperty' of null
                              javascript.0	2018-07-05 15:56:01.755	info	terminating
                              javascript.0	2018-07-05 15:56:01.739	error	at IncomingMessage. <anonymous>(/opt/iobroker/node_modules/request/request.js:1085:12)
                              javascript.0	2018-07-05 15:56:01.739	error	at Request.emit (events.js:188:7)
                              javascript.0	2018-07-05 15:56:01.739	error	at emitOne (events.js:96:13)
                              javascript.0	2018-07-05 15:56:01.739	error	at Request. <anonymous>(/opt/iobroker/node_modules/request/request.js:1163:10)
                              javascript.0	2018-07-05 15:56:01.739	error	at Request.emit (events.js:191:7)
                              javascript.0	2018-07-05 15:56:01.739	error	at emitTwo (events.js:106:13)
                              javascript.0	2018-07-05 15:56:01.739	error	at Request.self.callback (/opt/iobroker/node_modules/request/request.js:186:22)
                              javascript.0	2018-07-05 15:56:01.739	error	at Request._callback (script.js.common.Spotify:178:24)
                              javascript.0	2018-07-05 15:56:01.739	error	at script.js.common.Spotify:774:31
                              javascript.0	2018-07-05 15:56:01.739	error	at CreatePlaybackInfo (script.js.common.Spotify:251:12)
                              javascript.0	2018-07-05 15:56:01.739	error	TypeError: Cannot read property 'hasOwnProperty' of null
                              javascript.0	2018-07-05 15:56:01.738	error	uncaught exception: Cannot read property 'hasOwnProperty' of null</anonymous></anonymous></anonymous></anonymous>
                              

                              Ich hoffe ihr könnt mir helfen. 🙂

                              1 Reply Last reply Reply Quote 0
                              • M
                                mikiline last edited by

                                @Alex1808:

                                @mikiline:

                                Das ist richtig, jedoch "müllt" es den Log zu und macht ihn unübersichtlich. Schön wäre es wenn man diesen Log nur sieht wenn man auf Debug stellt `

                                Mache eventuell auch ausschalten?

                                Script für Adapter zum Ein/Ausschalten aus VIS

                                ! ````
                                /* Spritpreis Spotify adapter neu starten
                                ! erzeugt Objekt, das in VIS geschaltet werden kann
                                Schaltung triggert Neustart eines Adapters
                                ! 28.03.2018 erstellt von pix
                                ! */
                                const logging = true; // (true;false) Logausgabe zentral schalten, da 5minütlich ein Mehrzeiler geloggt wird.
                                const instanz = "javascript." + instance;
                                const fC = false; // force Create
                                const idSchalter = instanz + ".Spotify.Adapter.Schalter";
                                const adapter = "spotify-premium.0"; // Name und Instanz des Adapters
                                ! // Ab hier nix mehr ändern
                                if (logging) log("Skript " + name + " in der Instanz " + instance + " gestartet");
                                ! var idAdapter = "system.adapter." + adapter;
                                ! createState(idSchalter, false, fC, {
                                name: adapter + " Adapter neu starten",
                                type: "boolean",
                                desc: "Schaltet den <" + adapter + "> Adapter per Skript zB aus VIS",
                                role: "switch"
                                });
                                ! // Neustart triggern
                                on({
                                id: idSchalter,
                                change: "ne",
                                from: "system.adapter.web.0" // Schaltung nur aus VIS möglich
                                }, function (dpobj) {
                                var obj = getObject(idAdapter);
                                if (dpobj.state.val) {
                                obj.common.enabled = true; // Adapter einschalten
                                } else if (!dpobj.state.val) {
                                obj.common.enabled = false; // Adapter ausschalten
                                }
                                setObject(idAdapter, obj);
                                if (logging) log("Adapter <" + adapter + "> wurde " + ((obj.common.enabled) ? "ein" : "aus") + "geschaltet");
                                });

                                
                                Und ich hänge noch ein Indikator mit dazu, dann ist auch wirklich klar ob Adapter An oder Aus ist
                                
                                system.adapter.spotify-premium.0.alive `  
                                

                                Danke 🙂 Hab das Skript mal implementiert

                                1 Reply Last reply Reply Quote 0
                                • S
                                  schubi82 last edited by

                                  Ich würde gerne versuchen ein Skript zu bauen, was bei einer Statusänderung von "is active" beim Echodot das ganze stattdessen auf meinen Onkyo ausgibt. Vermutlich ist das nicht möglich, weil sich im Network-Standby befindliche Geräte nicht ausgewählt werden können, oder?

                                  Hintergrund: Es ist ja toll, dass Alexa von Spotify abspielen kann, aber auf dem Dot hört sich das eher bescheiden an…

                                  1 Reply Last reply Reply Quote 0
                                  • Alex1808
                                    Alex1808 last edited by

                                    @schubi82:

                                    Ich würde gerne versuchen ein Skript zu bauen, was bei einer Statusänderung von "is active" beim Echodot das ganze stattdessen auf meinen Onkyo ausgibt. Vermutlich ist das nicht möglich, weil sich im Network-Standby befindliche Geräte nicht ausgewählt werden können, oder?

                                    Hintergrund: Es ist ja toll, dass Alexa von Spotify abspielen kann, aber auf dem Dot hört sich das eher bescheiden an… `

                                    Dann schliße doch das Echodot via 3.5 Klinker direkt an Onkyo 😉

                                    1 Reply Last reply Reply Quote 0
                                    • S
                                      schubi82 last edited by

                                      Keine gute Qualität und ich muss die Anlage manuell anschalten 🙂

                                      1 Reply Last reply Reply Quote 0
                                      • Alex1808
                                        Alex1808 last edited by

                                        @schubi82:

                                        Keine gute Qualität und ich muss die Anlage manuell anschalten 🙂 `

                                        also was Qualität angeht so kann man darüber streiten 😉 Soll auf jeden fahl besser als drahtlose Geschichte sein (BT). Hat dein Onkyo kein Netzwerk Anschluss? Außerdem die Power-taste lässt sich mit nur weniger Schritten automatisieren 😉

                                        1 Reply Last reply Reply Quote 0
                                        • S
                                          schubi82 last edited by

                                          Ja, hört man wahrscheinlich nicht… Der Onkyo hat Netzwerk, aber wie bringe ich Alexa dazu den Receiver einzuschalten, die Audioausgabe über Klinke auszugeben und den Eingang auf AUX zu stellen? Geht das mit Node-Red und dem Alexa-local Plugin? Über die iobroker-Cloud wollte ich möglichst nicht gehen.

                                          1 Reply Last reply Reply Quote 0
                                          • M
                                            mikiline last edited by

                                            @schubi82:

                                            Ja, hört man wahrscheinlich nicht… Der Onkyo hat Netzwerk, aber wie bringe ich Alexa dazu den Receiver einzuschalten, die Audioausgabe über Klinke auszugeben und den Eingang auf AUX zu stellen? Geht das mit Node-Red und dem Alexa-local Plugin? Über die iobroker-Cloud wollte ich möglichst nicht gehen. `

                                            Mit dem Onkyo-Vis Adapter?

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            665
                                            Online

                                            31.7k
                                            Users

                                            79.7k
                                            Topics

                                            1.3m
                                            Posts

                                            javascript
                                            95
                                            745
                                            190370
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo