ioBroker Forum


Nutzungsbedingungen |Datenschutzrichtlinie
Cloud |Dokumentation
Aktuelle Zeit: 21.01.2018, 13:36

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 116 Beiträge ]  Gehe zu Seite Vorherige 1 2 3 4 5 6 Nächste
Autor Nachricht
 Betreff des Beitrags: Re: RE: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 07.12.2017, 16:21 
Offline
professional

Registriert: 28.05.2015, 15:47
Beiträge: 120
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal
Zitat:
Gerne.
Hab es gerade ausprobiert. Bei Klick auf Get User Playlists werden darunter die Playlist Ordner angelegt.


Ja hat jetzt bei mir jetzt auch funktioniert musste nur iobroker einmal neu starten dann ging es.

Noch eine Frage habt ihr euch damit schon eine View gebastelt? Würde mich über Ideen sehr freuen vielleicht kann ich mir da ein wenig anschauen.
Kann man das Widget vom Sonos Player zur Steuerung benutzen oder ist dieser nur für Sonos geeignet?

LG Torsten


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 09.12.2017, 22:26 
Offline

Registriert: 09.12.2017, 22:06
Beiträge: 9
Hat sich bedankt: 2 Mal
Hallo zusammen,

erst einmal danke für dieses Skript. Ich habe aber leider folgende Probleme.

1. Paket querystring. Ich habe das rauf und runter installiert und es kam dennoch beim starten die folgende Meldung:

Error: Cannot find module '/opt/iobroker/node_modules/iobroker.javascript/node_modules/querystring'

Ich habe dann in der Instanz vom Javascript Adapter bei NPM-Module einfach querystring eingetragen und danach kam diese Meldung nicht mehr. Ich vermute also das hat sich erledigt? Richtig?

2. Wenn ich den Button "Get_Authorization" drücke, dann erscheint eine URL in "Authorization_URL". Diese sieht wie folgt aus:

https://accounts.spotify.com/de/authorize/?client_id=<MEINE_ID>&response_type=code&redirect_uri=https%3A%2F%2Fexample.com%2Fcallback%2F&state=<HIERSTEHTEINENUMMER>&scope=user-modify-playback-state%20user-read-playback-state%20user-read-currently-playing%20playlist-read-private

In <Meine_ID> steht nat. meine ID der DEV-APP von Spotify und bei <HIERSTEHTEINENUMMER> steht eine Zeichen/Zahlenkette. Wenn ich diese URL dann aber im Browser eingebe, dann erscheint die folgende Meldung:

INVALID_CLIENT: Invalid redirect URI

An dieser Stelle komme ich dann also nicht weiter, weil ich nicht gefragt werde, ob ich die App zulassen möchte etc..

Was mache ich hier falsch?

Ich danke euch!

Grüße
Ben


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 09.12.2017, 23:15 
Offline

Registriert: 09.12.2017, 22:06
Beiträge: 9
Hat sich bedankt: 2 Mal
Hallo nochmal,

nach ein bisschen gucken habe ich gesehen, dass es am "/" am Ende von Callback in der ..example.com.. URL lag. Dort das "/" entfernt und schon läuft es.

Ist es normal, dass im Log extrem viele WARN Einträge geschrieben werden?

Die Steuerung von Spotify funktioniert zwar über die Buttons (unter Objekte), aber wie kann man nun über eine Szene/Skript etc. die Wiedergabe quasi von Null starten. Ich habe eine Szene die "Guten Morgen" heißt. Diese startet eine Lichtszene und schaltet meine Stereoanlage ein (dort hängt der Echo dran). Nun möchte ich, dass bei dieser Szene auch gleich eine bestimmte Playlist auf dem Echo wiedergegeben wird. Dieses Starten der Wiedergabe bei vorherig inaktivem Spotify ist das was ich brauche. Kann ich das mit diesem Skript überhaupt erreichen.

Danke!

Grüße
Ben


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 11.12.2017, 18:31 
Offline
starter

Registriert: 28.04.2017, 01:34
Beiträge: 90
Wohnort: Hannover
Danksagung erhalten: 24 Mal
sollte gehen..

1. unter Devices "Use_for_Playback" beim entsprechendem Gerät setzen
2. unter Playlists "Play_this_List" setzen

bei mir geht es so


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 11.12.2017, 22:04 
Offline

Registriert: 09.12.2017, 22:06
Beiträge: 9
Hat sich bedankt: 2 Mal
Hi,

danke für deine Hilfe, aber leider funktioniert es bei mir nicht. Wenn ich auf dem iPhone das Playback von Spotify starte, dann kann ich über die Buttons unter Objekte steuern und der Wechsel zu meinem Echo etc. klappt auch. Wenn aber alles aus ist. Also kein Spotify am iPhone an bzw. das Telefon ist gesperrt oder aus, dann tut sich da nichts, wenn ich die von dir beschriebenen states/buttons auf true setze. Im Log steht immer:

Code:
script.js.common.Spotify: Code 500 wird nicht verarbeitet !


Irgendwo klappt da leider etwas nicht. Ich habe schon die Devices mal gelöscht und neu anlegen lassen. Auch habe ich alles nochmal von vorne gestartet etc., aber es kommt immer das Gleich raus. Spotify von Null (also ohne irgendwo ein aktives Playback zu haben) zu starten klappt nicht. Hat noch jemand eine Idee was ich ausprobieren kann, oder woran es liegen könnte? Kann es etwas mit dem "querystring" Paket zu tun haben? Dieses habe ich nicht per Kommandozeile installiert sondern in der Instant des Adapters angegeben, ich vermute dadurch wurde es installiert.

Danke und Grüße
Ben


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 11.12.2017, 23:39 
Offline
starter

Registriert: 28.04.2017, 01:34
Beiträge: 90
Wohnort: Hannover
Danksagung erhalten: 24 Mal
Nein, mit dem querystring hat das überhaupt nichts zu tun. Code 500 bedeutet Server error... Möglicherweise wird kein aktiver Player gesetzt, ich schau morgen mal nach..

Nachtrag: Fehler gefunden, behebe ich morgen :D


Nach oben
   
BeitragVerfasst: 11.12.2017, 23:48 
Offline
professional

Registriert: 18.11.2016, 07:07
Beiträge: 144
Danksagung erhalten: 6 Mal
Hallo zusammen,

ich wollte das Spotify Script probieren aber bekomme das packet querystring nicht installiert.

Muss es in iobroker ordner gestartet werden?

Code:
cd /opt/iobroker
sudo npm install querystring


Hier ist der npm-debug.log
Spoiler: Show hidden text
0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node',
1 verbose cli '/usr/bin/npm',
1 verbose cli 'install',
1 verbose cli 'querystringnpm',
1 verbose cli 'install',
1 verbose cli 'querystring' ]
2 info using npm@3.10.10
3 info using node@v6.12.2
4 silly loadCurrentTree Starting
5 silly install loadCurrentTree
6 silly install readLocalPackageData
7 silly fetchPackageMetaData querystringnpm
8 silly fetchPackageMetaData install
9 silly fetchPackageMetaData querystring
10 silly fetchNamedPackageData querystringnpm
11 silly mapToRegistry name querystringnpm
12 silly mapToRegistry using default registry
13 silly mapToRegistry registry https://registry.npmjs.org/
14 silly mapToRegistry data Result {
14 silly mapToRegistry raw: 'querystringnpm',
14 silly mapToRegistry scope: null,
14 silly mapToRegistry escapedName: 'querystringnpm',
14 silly mapToRegistry name: 'querystringnpm',
14 silly mapToRegistry rawSpec: '',
14 silly mapToRegistry spec: 'latest',
14 silly mapToRegistry type: 'tag' }
15 silly mapToRegistry uri https://registry.npmjs.org/querystringnpm
16 silly fetchNamedPackageData install
17 silly mapToRegistry name install
18 silly mapToRegistry using default registry
19 silly mapToRegistry registry https://registry.npmjs.org/
20 silly mapToRegistry data Result {
20 silly mapToRegistry raw: 'install',
20 silly mapToRegistry scope: null,
20 silly mapToRegistry escapedName: 'install',
20 silly mapToRegistry name: 'install',
20 silly mapToRegistry rawSpec: '',
20 silly mapToRegistry spec: 'latest',
20 silly mapToRegistry type: 'tag' }
21 silly mapToRegistry uri https://registry.npmjs.org/install
22 silly fetchNamedPackageData querystring
23 silly mapToRegistry name querystring
24 silly mapToRegistry using default registry
25 silly mapToRegistry registry https://registry.npmjs.org/
26 silly mapToRegistry data Result {
26 silly mapToRegistry raw: 'querystring',
26 silly mapToRegistry scope: null,
26 silly mapToRegistry escapedName: 'querystring',
26 silly mapToRegistry name: 'querystring',
26 silly mapToRegistry rawSpec: '',
26 silly mapToRegistry spec: 'latest',
26 silly mapToRegistry type: 'tag' }
27 silly mapToRegistry uri https://registry.npmjs.org/querystring
28 verbose request uri https://registry.npmjs.org/querystringnpm
29 verbose request no auth needed
30 info attempt registry request try #1 at 23:46:11
31 verbose request id 71114a987bb3d0b6
32 http request GET https://registry.npmjs.org/querystringnpm
33 verbose request uri https://registry.npmjs.org/install
34 verbose request no auth needed
35 info attempt registry request try #1 at 23:46:11
36 http request GET https://registry.npmjs.org/install
37 verbose request uri https://registry.npmjs.org/querystring
38 verbose request no auth needed
39 info attempt registry request try #1 at 23:46:11
40 verbose etag "5a251ea2-1864"
41 verbose lastModified Mon, 4 Dec 2017 10:08:34 GMT
42 http request GET https://registry.npmjs.org/querystring
43 http 200 https://registry.npmjs.org/install
44 verbose headers { 'content-type': 'application/json; charset=UTF-8',
44 verbose headers server: 'UploadServer',
44 verbose headers 'cache-control': 'max-age=300',
44 verbose headers 'last-modified': 'Thu, 16 Nov 2017 22:24:25 GMT',
44 verbose headers etag: '"5a0e1019-11fdf"',
44 verbose headers 'content-length': '73695',
44 verbose headers 'accept-ranges': 'bytes',
44 verbose headers date: 'Mon, 11 Dec 2017 22:46:11 GMT',
44 verbose headers via: '1.1 varnish',
44 verbose headers age: '12272',
44 verbose headers connection: 'keep-alive',
44 verbose headers 'x-served-by': 'cache-hhn1546-HHN',
44 verbose headers 'x-cache': 'HIT',
44 verbose headers 'x-cache-hits': '1',
44 verbose headers 'x-timer': 'S1513032372.521302,VS0,VE1',
44 verbose headers vary: 'Accept-Encoding, Accept' }
45 silly get cb [ 200,
45 silly get { 'content-type': 'application/json; charset=UTF-8',
45 silly get server: 'UploadServer',
45 silly get 'cache-control': 'max-age=300',
45 silly get 'last-modified': 'Thu, 16 Nov 2017 22:24:25 GMT',
45 silly get etag: '"5a0e1019-11fdf"',
45 silly get 'content-length': '73695',
45 silly get 'accept-ranges': 'bytes',
45 silly get date: 'Mon, 11 Dec 2017 22:46:11 GMT',
45 silly get via: '1.1 varnish',
45 silly get age: '12272',
45 silly get connection: 'keep-alive',
45 silly get 'x-served-by': 'cache-hhn1546-HHN',
45 silly get 'x-cache': 'HIT',
45 silly get 'x-cache-hits': '1',
45 silly get 'x-timer': 'S1513032372.521302,VS0,VE1',
45 silly get vary: 'Accept-Encoding, Accept' } ]
46 verbose get saving install to /root/.npm/registry.npmjs.org/install/.cache.json
47 verbose correctMkdir /root/.npm correctMkdir not in flight; initializing
48 http 304 https://registry.npmjs.org/querystring
49 verbose headers { date: 'Mon, 11 Dec 2017 22:46:11 GMT',
49 verbose headers via: '1.1 varnish',
49 verbose headers 'cache-control': 'max-age=300',
49 verbose headers etag: '"5a251ea2-1864"',
49 verbose headers age: '4681',
49 verbose headers connection: 'keep-alive',
49 verbose headers 'x-served-by': 'cache-hhn1529-HHN',
49 verbose headers 'x-cache': 'HIT',
49 verbose headers 'x-cache-hits': '2',
49 verbose headers 'x-timer': 'S1513032372.646045,VS0,VE0',
49 verbose headers vary: 'Accept-Encoding, Accept' }
50 silly get cb [ 304,
50 silly get { date: 'Mon, 11 Dec 2017 22:46:11 GMT',
50 silly get via: '1.1 varnish',
50 silly get 'cache-control': 'max-age=300',
50 silly get etag: '"5a251ea2-1864"',
50 silly get age: '4681',
50 silly get connection: 'keep-alive',
50 silly get 'x-served-by': 'cache-hhn1529-HHN',
50 silly get 'x-cache': 'HIT',
50 silly get 'x-cache-hits': '2',
50 silly get 'x-timer': 'S1513032372.646045,VS0,VE0',
50 silly get vary: 'Accept-Encoding, Accept' } ]
51 verbose etag https://registry.npmjs.org/querystring from cache
52 verbose get saving querystring to /root/.npm/registry.npmjs.org/querystring/.cache.json
53 verbose correctMkdir /root/.npm correctMkdir not in flight; initializing
54 http 404 https://registry.npmjs.org/querystringnpm
55 verbose headers { 'content-type': 'application/json',
55 verbose headers 'cache-control': 'max-age=0',
55 verbose headers 'content-length': '2',
55 verbose headers 'accept-ranges': 'bytes',
55 verbose headers date: 'Mon, 11 Dec 2017 22:46:12 GMT',
55 verbose headers via: '1.1 varnish',
55 verbose headers connection: 'keep-alive',
55 verbose headers 'x-served-by': 'cache-hhn1524-HHN',
55 verbose headers 'x-cache': 'MISS',
55 verbose headers 'x-cache-hits': '0',
55 verbose headers 'x-timer': 'S1513032372.526893,VS0,VE1410',
55 verbose headers vary: 'Accept-Encoding' }
56 silly get cb [ 404,
56 silly get { 'content-type': 'application/json',
56 silly get 'cache-control': 'max-age=0',
56 silly get 'content-length': '2',
56 silly get 'accept-ranges': 'bytes',
56 silly get date: 'Mon, 11 Dec 2017 22:46:12 GMT',
56 silly get via: '1.1 varnish',
56 silly get connection: 'keep-alive',
56 silly get 'x-served-by': 'cache-hhn1524-HHN',
56 silly get 'x-cache': 'MISS',
56 silly get 'x-cache-hits': '0',
56 silly get 'x-timer': 'S1513032372.526893,VS0,VE1410',
56 silly get vary: 'Accept-Encoding' } ]
57 silly fetchPackageMetaData Error: Registry returned 404 for GET on https://registry.npmjs.org/querystringnpm
57 silly fetchPackageMetaData at makeError (/usr/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:302:12)
57 silly fetchPackageMetaData at CachingRegistryClient.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:280:14)
57 silly fetchPackageMetaData at Request._callback (/usr/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:210:14)
57 silly fetchPackageMetaData at Request.self.callback (/usr/lib/node_modules/npm/node_modules/request/request.js:187:22)
57 silly fetchPackageMetaData at emitTwo (events.js:106:13)
57 silly fetchPackageMetaData at Request.emit (events.js:191:7)
57 silly fetchPackageMetaData at Request.<anonymous> (/usr/lib/node_modules/npm/node_modules/request/request.js:1048:10)
57 silly fetchPackageMetaData at emitOne (events.js:96:13)
57 silly fetchPackageMetaData at Request.emit (events.js:188:7)
57 silly fetchPackageMetaData at IncomingMessage.<anonymous> (/usr/lib/node_modules/npm/node_modules/request/request.js:969:12)
57 silly fetchPackageMetaData error for querystringnpm { Error: Registry returned 404 for GET on https://registry.npmjs.org/querystringnpm
57 silly fetchPackageMetaData at makeError (/usr/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:302:12)
57 silly fetchPackageMetaData at CachingRegistryClient.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:280:14)
57 silly fetchPackageMetaData at Request._callback (/usr/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:210:14)
57 silly fetchPackageMetaData at Request.self.callback (/usr/lib/node_modules/npm/node_modules/request/request.js:187:22)
57 silly fetchPackageMetaData at emitTwo (events.js:106:13)
57 silly fetchPackageMetaData at Request.emit (events.js:191:7)
57 silly fetchPackageMetaData at Request.<anonymous> (/usr/lib/node_modules/npm/node_modules/request/request.js:1048:10)
57 silly fetchPackageMetaData at emitOne (events.js:96:13)
57 silly fetchPackageMetaData at Request.emit (events.js:188:7)
57 silly fetchPackageMetaData at IncomingMessage.<anonymous> (/usr/lib/node_modules/npm/node_modules/request/request.js:969:12) pkgid: 'querystringnpm', statusCode: 404, code: 'E404' }
58 silly rollbackFailedOptional Starting
59 silly rollbackFailedOptional Finishing
60 silly runTopLevelLifecycles Finishing
61 silly install printInstalled
62 verbose stack Error: Registry returned 404 for GET on https://registry.npmjs.org/querystringnpm
62 verbose stack at makeError (/usr/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:302:12)
62 verbose stack at CachingRegistryClient.<anonymous> (/usr/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:280:14)
62 verbose stack at Request._callback (/usr/lib/node_modules/npm/node_modules/npm-registry-client/lib/request.js:210:14)
62 verbose stack at Request.self.callback (/usr/lib/node_modules/npm/node_modules/request/request.js:187:22)
62 verbose stack at emitTwo (events.js:106:13)
62 verbose stack at Request.emit (events.js:191:7)
62 verbose stack at Request.<anonymous> (/usr/lib/node_modules/npm/node_modules/request/request.js:1048:10)
62 verbose stack at emitOne (events.js:96:13)
62 verbose stack at Request.emit (events.js:188:7)
62 verbose stack at IncomingMessage.<anonymous> (/usr/lib/node_modules/npm/node_modules/request/request.js:969:12)
63 verbose statusCode 404
64 verbose pkgid querystringnpm
65 verbose cwd /opt/iobroker
66 error Linux 4.9.35-v7+
67 error argv "/usr/bin/node" "/usr/bin/npm" "install" "querystringnpm" "install" "querystring"
68 error node v6.12.2
69 error npm v3.10.10
70 error code E404
71 error 404 Registry returned 404 for GET on https://registry.npmjs.org/querystringnpm
72 error 404
73 error 404 'querystringnpm' is not in the npm registry.
74 error 404 You should bug the author to publish it (or use the name yourself!)
75 error 404 Note that you can also install from a
76 error 404 tarball, folder, http url, or git url.
77 verbose exit [ 1, true ]


Vielen dank im Voraus für eure Hilfe.

Edit: Erledigt! Habe es in JS Adapter eingetragen... (Aus post von Worn abgelesen) Danke


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 12.12.2017, 00:04 
Offline
professional

Registriert: 18.11.2016, 07:07
Beiträge: 144
Danksagung erhalten: 6 Mal
Lucky. Dein Script ist einfach GENIAL!!!

Funktioniert einwandfrei... Danke.


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 13.12.2017, 13:44 
Offline

Registriert: 09.12.2017, 22:06
Beiträge: 9
Hat sich bedankt: 2 Mal
Hi,

@Lucky: Postest du hier nochmal, wenn du den Fehler entfernen konntest? Wenn das läuft wäre ich sehr happy, das (Spotify auf einem Gerät starten in einer Routinge) fehlt bei Alexa nämlich meiner Meinung nach am meisten! Hast du eine Amazon Wunschliste oder kann man donaten ;)?

Grüße
Ben


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 13.12.2017, 13:58 
Offline
starter

Registriert: 03.05.2017, 01:32
Beiträge: 53
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal
Ich habe auch ein Problem.

Ich bekomme zwar bei der Verbindung dann "true" wiedergegeben aber leider lässt sich Spotify nicht steuern :(
Wo könnte sich da noch ein Fehler eingeschlichen haben?

Lieben Gruß, Karim.

_________________
SmarthomeAssistent - Smarthome in Verbindung mit Sprachassistenten!


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 13.12.2017, 16:51 
Offline
starter

Registriert: 28.04.2017, 01:34
Beiträge: 90
Wohnort: Hannover
Danksagung erhalten: 24 Mal
Zitat:
@Lucky: Postest du hier nochmal, wenn du den Fehler entfernen konntest? Wenn das läuft wäre ich sehr happy, das (Spotify auf einem Gerät starten in einer Routinge) fehlt bei Alexa nämlich meiner Meinung nach am meisten! Hast du eine Amazon Wunschliste oder kann man donaten


ja ich bin dran !

Zitat:
Ich bekomme zwar bei der Verbindung dann "true" wiedergegeben aber leider lässt sich Spotify nicht steuern :(
Wo könnte sich da noch ein Fehler eingeschlichen haben?


könntest du das Problem etwas genauer beschreiben ? kann ich so nicht nachvollziehen
hast du einen Premium Account ?


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 13.12.2017, 19:12 
Offline
starter

Registriert: 03.05.2017, 01:32
Beiträge: 53
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal
Hallo Lucky,

Danke für deine Hilfsbereitschaft.

Ja, ich habe einen Premium Account und habe alles so gemacht wie in der Anleitung beschrieben. Script läuft auch Fehlerfrei (nach eintragen von Querystring in JS).
Ich konnte nun auch wie in der Anleitung beschrieben, die URL in ioBroker unter den Objekten eintragen und bekomme im Anschluss unter Authorized "true" angezeigt.

Wenn ich aber nun die Devices oder Playlists abfragen möchte passiert einfach nichts. Auch wenn ich bereits auf Spotify Musik abspiele und dann mit Hilfe des Buttons und den Objekten "Pause" drücke passiert nichts.

Der Log spuckt auch nichts aus, wenn ich den Button drücke.

Ich hoffe das hilft dir irgendwie weiter :/

Lieben Gruß, Karim.

_________________
SmarthomeAssistent - Smarthome in Verbindung mit Sprachassistenten!


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 13.12.2017, 20:12 
Offline
starter

Registriert: 28.04.2017, 01:34
Beiträge: 90
Wohnort: Hannover
Danksagung erhalten: 24 Mal
Hier nun die angepasste Version

es ist jetzt möglich direkt den Player zu starten mit folgendem Vorgehen:

1.unter Devices den State 'Use_for_Playback' setzen
2.unter Playlist 'Play_this_List' setzen


Es wird immer das zuletzt gesteuerte Gerät angesprochen für das 'Use_for_Playback' gesetzt wurde, solange dieses verfügbar ist ! Ansonst das letzte was der Spotify Server als Aktiv angesehen hat.

Play und Pause usw funktionieren logischerweise nur bei aktiver Wiedergabe

hier der Aktuelle Code

Spoiler: Show hidden text
Code:
//Version 0.4.1
//letzte änderung 09.01.2018 18:48


createState('javascript.0.Spotify.Player.Play', false,{type: "boolean", role: "button"});
createState('javascript.0.Spotify.Player.Pause', false,{type: "boolean", role: "button"});
createState('javascript.0.Spotify.Player.Skip_Plus', false,{type: "boolean", role: "button"});
createState('javascript.0.Spotify.Player.Skip_Minus', false,{type: "boolean", role: "button"});
createState('javascript.0.Spotify.Player.Repeat_Track', false,{type: "boolean", role: "button"});
createState('javascript.0.Spotify.Player.Repeat_Context', false,{type: "boolean", role: "button"});
createState('javascript.0.Spotify.Player.Repeat_off', false,{type: "boolean", role: "button"});
createState('javascript.0.Spotify.Player.Volume', 0,{type: "number", role: "Volume %"});
createState('javascript.0.Spotify.Player.TrackId','' ,{type: "string", role: "Track Id to Play"});
createState('javascript.0.Spotify.Player.Playlist_ID','' ,{type: "string", role: "Playlist Id to Play"});
createState('javascript.0.Spotify.Player.Seek', 0,{type: "number", role: "Seek To Position (s)"});
createState('javascript.0.Spotify.Player.Shuffle', false,{type: "boolean", role: "Shuffle"});


createState('javascript.0.Spotify.Devices.Get_Devices', false,{type: "boolean", role: "button"});
createState('javascript.0.Spotify.Authorization.Get_Authorization', false,{type: "boolean", role: "button"});
createState('javascript.0.Spotify.Authorization.Authorization_URL','',{type: "string", role: "Authorization_URL",write:false});
createState('javascript.0.Spotify.Authorization.Authorization_Return_URI','',{type: "string", role: "Authorization_Return_URI"});
createState('javascript.0.Spotify.Authorization.User_ID','',{type: "string", role: "User ID",write:false});
createState('javascript.0.Spotify.Authorization.Authorized',false,{type: "boolean", role: "Authorized",write:false});
//createState('javascript.0.Spotify.Get_Playback_Info', false,{type: "boolean", role: "button"});
createState('javascript.0.Spotify.Get_User_Playlists', false,{type: "boolean", role: "button"});

createState('javascript.0.Spotify.PlaybackInfo.Track_Id','' ,{type: "string", role: "Track Id",write:false});
createState('javascript.0.Spotify.PlaybackInfo.Artist_Name','' ,{type: "string", role: "Artist Name",write:false});
createState('javascript.0.Spotify.PlaybackInfo.Type','' ,{type: "string", role: "Type",write:false});
createState('javascript.0.Spotify.PlaybackInfo.Album','' ,{type: "string", role: "Album",write:false});
createState('javascript.0.Spotify.PlaybackInfo.timestamp',0 ,{type: "number", role: "Timestamp",write:false});
createState('javascript.0.Spotify.PlaybackInfo.progress_ms',0 ,{type: "number", role: "progress_ms",write:false});
createState('javascript.0.Spotify.PlaybackInfo.is_playing',false ,{type: "boolean", role: "is_playing",write:false});
createState('javascript.0.Spotify.PlaybackInfo.image_url','' ,{type: "string", role: "Image URL",write:false});
createState('javascript.0.Spotify.PlaybackInfo.Track_Name','' ,{type: "string", role: "Track_Name",write:false});
createState('javascript.0.Spotify.PlaybackInfo.duration_ms',0 ,{type: "number", role: "Duration ms",write:false});

createState('javascript.0.Spotify.PlaybackInfo.Device.id','',{type: "string", role: "id",write:false});
createState('javascript.0.Spotify.PlaybackInfo.Device.is_active',false,{type: "boolean", role: "is active",write:false});
createState('javascript.0.Spotify.PlaybackInfo.Device.is_restricted',false,{type: "boolean", role: "is restricted",write:false});
createState('javascript.0.Spotify.PlaybackInfo.Device.name','',{type: "string", role: "Name",write:false});
createState('javascript.0.Spotify.PlaybackInfo.Device.type','',{type: "string", role: "Type",write:false});
createState('javascript.0.Spotify.PlaybackInfo.Device.volume_percent',0,{type: "number", role: "volume_percent",write:false});



var request = require('request');
var querystring = require('querystring');
var fs = require('fs');

var Application = {
    User_ID:'',//Nichts eintragen !!
    BaseURL:'https://api.spotify.com',
    Client_ID:'HIER DEINE CLIENT ID !!',
    Client_Secret:'HIER DEIN CLIENT SECRET !!',
    redirect_uri:'https://example.com/callback/',
    Token:'', //Nichts eintragen !!
    refresh_token:'',//Nichts eintragen !!
    code:'',//Nichts eintragen !!
    State:''//Nichts eintragen !!
};

var Device_Data={
    last_active_device_id:'',
    last_select_device_id:'',
};

//############### Initial ##########
ReadTokenFiles(function(err){

if(!err) {
      SendRequest('/v1/me','GET','',function(err,data){
              if(!err) {
                  GetUserInformation(data);
                  setState('javascript.0.Spotify.Authorization.Authorized',val=true,akt=true);
                 
                         SendRequest('/v1/me/player/devices','GET','',function(err,data){
                                if(!err){CreateDevices(data)}
                         });
              }
              else{setState('javascript.0.Spotify.Authorization.Authorized',val=false,akt=true)}
      });
       

}       
});

//#################################



function ReadTokenFiles(callback){

fs.readFile('SpotifyAccessToken.txt', function(err, data) {
    if(!err){ //wenn keine Fehler
        console.log('SpotifyAccessToken gelesen');
        Application.Token=data;
   
            fs.readFile('SpotifyRefreshToken.txt', function(err, data) {
              if(!err){
                console.log('SpotifyRefreshToken gelesen');
                Application.refresh_token=data;
               
                return callback(false);
               }
                else{ //wenn Fehler
                    console.log(err);
                    return callback(true);
                   
                }
          });
    }
    else{ //wenn Fehler
        console.log (err);
        return callback(true);
    }
});
 

 
 
 
}// End of Function ReadTokenFiles

//###################################################################################### FUNCTION SEND REQUEST ###################################################################################
function SendRequest(Endpoint,Method,Send_Body,callback){

var options = {
    url: Application.BaseURL+Endpoint,
    method: Method,
    headers: {Authorization: 'Bearer '+Application.Token},
    form:Send_Body
};


//console.log(options.form);
//console.log('Spotify API Call...'+ Endpoint);

request(options,function (error, response, body){
   
    if(!error){
 
        var ParsetBody  ;     

        switch (response.statusCode){
           
            case 200: // OK
                return callback(false,JSON.parse(body));
           
            case 202: //Accepted, processing has not been completed.
            DummyBody={
                is_playing:false                //tritt ein wenn kein Player geöffnet ist
            };
                return callback(false,DummyBody);

            case 204: // OK, No Content
                return callback(false,null);
           
            case 400: //Bad Request, message body will contain more information
                return callback(true,null);
           
            case 500: //Server Error
                return callback(true,null);
           
            case 502: //Bad Gateway
                console.warn('502 Spotify Server Bad Gateway');   
                return callback(true,null);
           
            case 503: //Service Unavailable
                console.warn('503 Spotify Service Unavailable');   
                return callback(true,null);     
               
            case 404: //Not Found
                return callback(true,null);   
               
            case 401: //Unauthorized
                if(JSON.parse(body).error.message=='The access token expired'){
                             console.log('Access Token Abgelaufen!!');
                   
                             Refresh_Token(Endpoint,Method,Send_Body,function(err,NewData){
                                 
                                 return callback(err,NewData); //neue Daten
                             });
                           
                }
                         else{ //wenn anderer Fehler mit Code 401
                             setState('javascript.0.Spotify.Authorization.Authorized',val=false,akt=true);  // neu 05.01.2018
                             console.error(JSON.parse(body).error.message);
                             return callback(true,null);
                         }
           
                break;
           
        default:
                console.warn('HTTP Request Fehler wird nicht behandelt, bitte Debuggen !!');
                return callback(true,null);
        }
    }
    else(console.error('erron in Request'));

});//end Request


 
}//End of Function SendRequest
//###################################################################################### END OF FUNCTION SEND REQUEST ###################################################################################

function CreatePlaybackInfo(P_Body){
     setState('javascript.0.Spotify.PlaybackInfo.is_playing',val=P_Body.is_playing,akt=true);
     
     //console.log(JSON.stringify(P_Body));
     
 if ("undefined" !== typeof  P_Body.device){
     Device_Data.last_active_device_id=P_Body.device.id;
     setState( 'javascript.0.Spotify.PlaybackInfo.Device.id',val=P_Body.device.id,akt=true);
 }     

 if(P_Body.is_playing===true){
     
     
     
 
 setState('javascript.0.Spotify.PlaybackInfo.Track_Id',val=P_Body.item.id,akt=true);
 setState('javascript.0.Spotify.PlaybackInfo.Artist_Name',val=P_Body.item.artists[0].name,akt=true);
 setState('javascript.0.Spotify.PlaybackInfo.Type',val=P_Body.item.type,akt=true);
 setState('javascript.0.Spotify.PlaybackInfo.Album',val=P_Body.item.album.name,akt=true);
 setState('javascript.0.Spotify.PlaybackInfo.timestamp',val=P_Body.timestamp,akt=true);
 setState('javascript.0.Spotify.PlaybackInfo.progress_ms',val=P_Body.progress_ms,akt=true);
 setState('javascript.0.Spotify.PlaybackInfo.image_url',val=P_Body.item.album.images[0].url,akt=true);
 setState( 'javascript.0.Spotify.PlaybackInfo.Track_Name',val=P_Body.item.name,akt=true);
 setState( 'javascript.0.Spotify.PlaybackInfo.duration_ms',val=P_Body.item.duration_ms,akt=true);
 
 
 setState( 'javascript.0.Spotify.PlaybackInfo.Device.is_active',val=P_Body.device.is_active,akt=true);
 setState( 'javascript.0.Spotify.PlaybackInfo.Device.is_restricted',val=P_Body.device.is_restricted,akt=true);
 setState( 'javascript.0.Spotify.PlaybackInfo.Device.name',val=P_Body.device.name,akt=true);
 setState( 'javascript.0.Spotify.PlaybackInfo.Device.type',val=P_Body.device.type,akt=true);
 setState( 'javascript.0.Spotify.PlaybackInfo.Device.volume_percent',val=P_Body.device.volume_percent,akt=true);

 }   
}//End of Function CreatePlaybackInfo

function GetUserInformation(P_Body){

    Application.User_ID=P_Body.id;
    setState('javascript.0.Spotify.Authorization.User_ID',val=P_Body.id,akt=true);
   
}//End of Function GetUserInformation

function GetUsersPlaylist(P_Body){

    for (i = 0; i < P_Body.items.length; i++) {
       
        var Pfad='javascript.0.Spotify.Playlists.'+P_Body.items[i].name.replace(/\s+/g, '');

        if (getObject(Pfad+'.id')===null) {    //verursacht Warnung
            createState(Pfad+'.Play_this_List',false,{type:'boolean', role:'button'});
            createState(Pfad+'.id',P_Body.items[i].id,{type:'string', role:'id',write:false});
            createState(Pfad+'.owner',P_Body.items[i].owner.id,{type:'string', role:'owner',write:false});
            createState(Pfad+'.name',P_Body.items[i].name,{type:'string', role:'Name',write:false});
            createState(Pfad+'.tracks_total',P_Body.items[i].tracks.total,{type:'number', role:'tracks_total',write:false});
           
       }
       else {
           
            setState(Pfad+'.id',P_Body.items[i].id,akt=true);
            setState(Pfad+'.owner',P_Body.items[i].owner.id,akt=true);
            setState(Pfad+'.name',P_Body.items[i].name,akt=true);
            setState(Pfad+'.tracks_total',P_Body.items[i].tracks.total,akt=true);
       }
       Get_Playlist_Tracks(P_Body.items[i].owner.id,P_Body.items[i].id,Pfad);
    }

   
}

function Device_Handel(Device_Data){
    if (Device_Data.last_select_device_id===""){
        return Device_Data.last_active_device_id;
    }
    else{
        return Device_Data.last_select_device_id;
    }
}


function Get_Playlist_Tracks(owner,id,Pfad){   //NEU
     var reg_param=owner+'/playlists/'+id+'/tracks';
     var query={
         fields:'items.track.name,items.track.id,items.track.artists.name,total,offset',
         limit:100,
         offset:0
     };
     
     SendRequest('/v1/users/'+reg_param+'?'+querystring.stringify(query),'GET','',function(err,data){
         if(!err){
                 var StateString='';
                 var Track_ID_String='';
                 
    for (i = 0; i < data.items.length; i++) {
       
         StateString=StateString+i.toString()+':'+data.items[i].track.name+'-'+data.items[i].track.artists[0].name+';';
         Track_ID_String=Track_ID_String+i.toString()+':'+data.items[i].track.id+';';
    }

        createState(Pfad+'.Track_List',-1,{type: "number", role: "Tracks",states:StateString,Track_ID:Track_ID_String});
       
         }
     });   
}//End of Function Get_Playlist_Tracks

function CreateDevices(P_Body){
   
    for (i = 0; i < P_Body.devices.length; i++) {
                 
                 for (var ObjName in P_Body.devices[i]) {
                     
                     if (!getObject('javascript.0.Spotify.Devices.'+P_Body.devices[i].name.replace(/\s+/g, '')+'.'+ObjName)){
                           
                         createState('javascript.0.Spotify.Devices.'+P_Body.devices[i].name.replace(/\s+/g, '')+'.'+ObjName,P_Body.devices[i][ObjName],{type: typeof P_Body.devices[i][ObjName], role: ObjName});
                         createState('javascript.0.Spotify.Devices.'+P_Body.devices[i].name.replace(/\s+/g, '')+'.'+'Use_for_Playback',false,{type:'boolean', role:'button'});
                     }
                     
                     else{setState('javascript.0.Spotify.Devices.'+P_Body.devices[i].name.replace(/\s+/g, '')+'.'+ObjName,P_Body.devices[i][ObjName],akt=true)}
                 }
    }
}//End of Function CreateDevices


function generateRandomString (length) {
  var text = '';
  var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';

  for (var i = 0; i < length; i++) {
    text += possible.charAt(Math.floor(Math.random() * possible.length));
  }
  return text;
}


function request_authorization(){
   
    Application.State=generateRandomString (20);
   
    var query ={
        client_id:Application.Client_ID,
        response_type: 'code',
        redirect_uri :Application.redirect_uri,
        state:Application.State,
        scope:'user-modify-playback-state user-read-playback-state user-read-currently-playing playlist-read-private'
    };

   
    var options = {
    url:'https://accounts.spotify.com/de/authorize/?'+querystring.stringify(query),
    method: 'GET',
    followAllRedirects: true,
};

setState('javascript.0.Spotify.Authorization.Authorization_URL',val=options.url);
var debug=false;
if(debug===true){

    request(options, function (error, response,body,formData){
     // console.log(options.url);
     //console.log('CODE*****' +response.statusCode);
     //console.log('RESPONSE*************'+JSON.stringify(response));
     //console.log('BODY*****'+body);
     //console.log('ERROR'+error);
     //console.log('FORM'+request.form);
     //console.log('HEADERS   *****'+JSON.stringify(response.headers));
     //console.log('HTML   *****'+JSON.stringify(response.html));
    });
}   

}// End of Function request_authorization


function GetToken(){
var options = {
    url: 'https://accounts.spotify.com/api/token',
    method: 'POST',
    headers: {Authorization: 'Basic '+Buffer.from(Application.Client_ID + ':' + Application.Client_Secret).toString('base64')},
    form: {grant_type:'authorization_code',code:Application.code,redirect_uri:Application.redirect_uri}
};

    request(options, function (error, response, body){
        if(SaveToken(body)===true){
            setState('javascript.0.Spotify.Authorization.Authorization_URL',val='',akt=true);
            setState('javascript.0.Spotify.Authorization.Authorization_Return_URI',val='',akt=true);
            setState('javascript.0.Spotify.Authorization.Authorized',val=true,akt=true);
        }
       
    });

}//End of Function GetToken

function Refresh_Token(Endpoint,Method,Send_Body,callback){
 console.log('Token wird erneut angefordert ! ');
 
    var options = {
    url: 'https://accounts.spotify.com/api/token',
    method: 'POST',
    headers: {Authorization: 'Basic '+Buffer.from(Application.Client_ID + ':' + Application.Client_Secret).toString('base64')},
    form: {grant_type:'refresh_token',refresh_token:Application.refresh_token}
};

if(Application.refresh_token!==''){

    request(options, function (error, response, body){
        if(error){console.log(error)}
       
        if (SaveToken(body)===true){  // wenn Token erfolgreich gespreichert wurde
        console.log('neuer Token eingetroffen');
              SendRequest(Endpoint,Method,Send_Body,function(err,data){
                 if (!err){console.log('Daten mit neuem Token')}
                 else{console.error('FEHLER BEIM ERNEUTEN DATEN ANFORDERN !')}
            callback(err,data); 
            });
           
        }
       
       
    else {callback(true,null)}
   
    });
}
else{
    console.warn('kein Refresh Token gefunden !!');
    callback(true,null); 
}
   
}//End of Function Refresh_Token

function SaveToken(Body){
   
   
     var ParsedBody=JSON.parse(Body);
       
         if ("undefined" !== typeof  ParsedBody.access_token){ 
             
              Application.Token=ParsedBody.access_token;
             
                    fs.writeFile('SpotifyAccessToken.txt', Application.Token, function (err) {
                    if (err) {throw err}
                    else{
                    console.log('SpotifyAccessToken Saved!');
                   
                    }
               
                 });
         }   
           
        if ("undefined" !== typeof  ParsedBody.refresh_token){ 
           
            Application.refresh_token=ParsedBody.refresh_token;
           
                fs.writeFile('SpotifyRefreshToken.txt', Application.refresh_token, function (err) {
                    if (err) {throw err}
                    else{
                    console.log('SpotifyRefreshToken Saved!');
                   
                    }
               });
        }
        return true;
       
}//End of Function SaveToken


 on({id:'javascript.0.Spotify.Authorization.Authorization_Return_URI',change:"any"}, function (obj){
     if (!obj.state.ack) {
     
         var return_uri=querystring.parse(obj.state.val.slice(obj.state.val.search('[?]')+1, obj.state.val.length));
         if(return_uri.state==Application.State){
             Application.code=return_uri.code;
               GetToken();
         }
     }
     
  });

 on({id:'javascript.0.Spotify.Authorization.Get_Authorization',val:true}, function (obj){
    request_authorization();
    setState('javascript.0.Spotify.Authorization.Authorized',val=false,akt=true);
  });

 on({id: /\.Use_for_Playback$/, val:true},function (obj){
     

   Device_Data.last_select_device_id=getState(obj.id.slice(0,obj.id.lastIndexOf("."))+'.id').val;
   
   var send={
       device_ids:[Device_Data.last_select_device_id],  //Divice IDs als Array !
       //play:false  //True = Wiedergabe startet sofort auf diesem Gerät, FALSE = Wiedergabe anhängig von Playback State
   };
     SendRequest('/v1/me/player','PUT',JSON.stringify(send),function(err,data){
         
     });
  });
 
 on({id: /\.Track_List$/,valGe:0,valNe:null,ack:false},function (obj){ //eine bestimmten Track aus Playliste  sofort abspielen
 
 
   var StateName = obj.common.Track_ID.split(';');
   var StateArr=[];
    for(var i = 0; i < StateName.length; i++) {
            var ele = StateName[i].split(':');
            StateArr[ele[0]] = ele[1];
        }   

 if(StateArr[obj.state.val]!==''&&(StateArr[obj.state.val]!==null)){

                  var send ={
                     uris:['spotify:track:'+StateArr[obj.state.val]],
                     offset:{
                         position:0
                     }
                 };
                 
                 SendRequest('/v1/me/player/play','PUT',JSON.stringify(send),function(err){
                     if(!err){setState(obj.id,obj.state.val,ack=true)}
                 });
                            }                 
 });
 
 
 on({id: /\.Play_this_List$/, val:true},function (obj){ //eine bestimmte Playlist sofort abspielen

var send ={
             context_uri:'spotify:user:'+getState(obj.id.slice(0,obj.id.lastIndexOf("."))+'.owner').val+':playlist:'+getState(obj.id.slice(0,obj.id.lastIndexOf("."))+'.id').val,
             offset:{
                 position:1
             }
         };
         
         var query ={device_id:Device_Handel(Device_Data)};
         SendRequest('/v1/me/player/play?'+querystring.stringify(query),'PUT',JSON.stringify(send),function(){
             SendRequest('/v1/me/player','GET','',function(err,data){
            if(!err) {CreatePlaybackInfo(data)}
                });
         });
  });
 

 on({id:'javascript.0.Spotify.Player.Play',val:true}, function (obj){
     var query ={device_id:Device_Handel(Device_Data)};
    SendRequest('/v1/me/player/play?'+querystring.stringify(query),'PUT','',function(){});
  });

 on({id:'javascript.0.Spotify.Player.Pause',val:true}, function (obj){
     var query ={device_id:Device_Handel(Device_Data)};
     SendRequest('/v1/me/player/pause?'+querystring.stringify(query),'PUT','',function(){});
  });
 
 on({id:'javascript.0.Spotify.Player.Skip_Plus',val:true}, function (obj){
     var query ={device_id:Device_Handel(Device_Data)};
         SendRequest('/v1/me/player/next?'+querystring.stringify(query),'POST','',function(err,data){
             
         });
  });
 
 on({id:'javascript.0.Spotify.Player.Skip_Minus',val:true}, function (obj){
     var query ={device_id:Device_Handel(Device_Data)};
         SendRequest('/v1/me/player/previous?'+querystring.stringify(query),'POST','',function(){});
  });
 
 on({id:'javascript.0.Spotify.Player.Repeat_Track',val:true}, function (obj){
         SendRequest('/v1/me/player/repeat?state=track','PUT','',function(){});
  });
 
 on({id:'javascript.0.Spotify.Player.Repeat_Context',val:true}, function (obj){
         SendRequest('/v1/me/player/repeat?state=context','PUT','',function(){});
  });
 
 on({id:'javascript.0.Spotify.Player.Repeat_off',val:true}, function (obj){
         SendRequest('/v1/me/player/repeat?state=off','PUT','',function(){});
  });
 
 on({id:'javascript.0.Spotify.Player.Volume'}, function (obj){
         SendRequest('/v1/me/player/volume?volume_percent='+obj.state.val,'PUT','',function(err){
             if (!err){
                // setState('javascript.0.Spotify.Player.Volume', true/*ack*/);
             }
         });
  });
 
 on({id:'javascript.0.Spotify.Player.Seek'}, function (obj){
         SendRequest('/v1/me/player/seek?position_ms='+obj.state.val*1000,'PUT','',function(){});
  });
 
 on({id:'javascript.0.Spotify.Player.Shuffle'}, function (obj){
     if (obj.state.val===true){ SendRequest('/v1/me/player/shuffle?state=true','PUT','',function(){})}
     else{ SendRequest('/v1/me/player/shuffle?state=false','PUT','',function(){})}
 });
 
 
 on({id:'javascript.0.Spotify.Player.TrackId'}, function (obj){
         
         var send ={
             uris:['spotify:track:'+obj.state.val],
             offset:{
                 position:0
             }
         };
         
         SendRequest('/v1/me/player/play','PUT',JSON.stringify(send),function(){});
  });
 
 on({id:'javascript.0.Spotify.Player.Playlist_ID'}, function (obj){
         
         var send ={
             context_uri:'spotify:user:'+Application.User_ID+':playlist:'+obj.state.val,   //spotify:user:user:playlist:
             offset:{
                 position:1
             }
         };
         
         SendRequest('/v1/me/player/play','PUT',JSON.stringify(send),function(){});
  });
 
 on({id:'javascript.0.Spotify.Get_User_Playlists'}, function (obj){
       if(Application.User_ID!==''){
            var query ={
                limit:40,
                offest:0
            };
           
         SendRequest('/v1/users/'+Application.User_ID+'/playlists?'+querystring.stringify(query),'GET','',function(err,data){
             if(!err) {GetUsersPlaylist(data)}
         });
       }
  });
 
 on({id:'javascript.0.Spotify.Devices.Get_Devices'}, function (obj){
       
        SendRequest('/v1/me/player/devices','GET','',function(err,data){
            if(!err){CreateDevices(data)}
        });
       
  });
 
 on({id:'javascript.0.Spotify.Get_Playback_Info'}, function (obj){
         
         SendRequest('/v1/me/player','GET','',function(err,data){
            if(!err) {CreatePlaybackInfo(data)}
         });
  });
 
 
  on({id:'javascript.0.Spotify.Authorization.Authorized'}, function (obj){
     
      if(obj.state.val===true){
     
             Intervall = setInterval(function () {
                 
                 SendRequest('/v1/me/player','GET','',function(err,data){
                    if(!err) {CreatePlaybackInfo(data)}
                    else{clearInterval(Intervall)}
                 });
                 
             },5000);
      }
      else{
          if ("undefined" !== typeof  Intervall){clearInterval(Intervall)}
      }

  });
 
 onStop(function () {
            setState('javascript.0.Spotify.Authorization.Authorization_URL',val='',akt=true);
            setState('javascript.0.Spotify.Authorization.Authorization_Return_URI',val='',akt=true);
            setState('javascript.0.Spotify.Player.TrackId',val='',akt=true);
            setState('javascript.0.Spotify.Player.Playlist_ID',val='',akt=true);
            setState('javascript.0.Spotify.Authorization.User_ID',val='',akt=true);
            setState('javascript.0.Spotify.Authorization.Authorized',val=false,akt=true);
            if ("undefined" !== typeof  Intervall){clearInterval(Intervall)}
}, 1000 /*ms*/); 

 


Zuletzt geändert von Lucky am 09.01.2018, 18:49, insgesamt 3-mal geändert.

Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 13.12.2017, 20:46 
Offline
starter

Registriert: 28.04.2017, 01:34
Beiträge: 90
Wohnort: Hannover
Danksagung erhalten: 24 Mal
Karim hat geschrieben:
Hallo Lucky,

Danke für deine Hilfsbereitschaft.

Ja, ich habe einen Premium Account und habe alles so gemacht wie in der Anleitung beschrieben. Script läuft auch Fehlerfrei (nach eintragen von Querystring in JS).
Ich konnte nun auch wie in der Anleitung beschrieben, die URL in ioBroker unter den Objekten eintragen und bekomme im Anschluss unter Authorized "true" angezeigt.

Wenn ich aber nun die Devices oder Playlists abfragen möchte passiert einfach nichts. Auch wenn ich bereits auf Spotify Musik abspiele und dann mit Hilfe des Buttons und den Objekten "Pause" drücke passiert nichts.

Der Log spuckt auch nichts aus, wenn ich den Button drücke.

Ich hoffe das hilft dir irgendwie weiter :/

Lieben Gruß, Karim.


Aktualisiere mal bitte deine States
bei IoBroker scheinen States die zur Laufzeit erstellt werden, nicht immer sofort sichtbar zu sein


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 13.12.2017, 22:15 
Offline
starter

Registriert: 03.05.2017, 01:32
Beiträge: 53
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal
Wenn du mit States aktualisieren das kleine "Aktualisieren Symbol" bei de Objekten meinst, das hat keine Veränderung gebracht :(

Im Reiter "Zustände" kann ich leider nichts aktualisieren und dort sind noch alte Zeiten bei "Zeit" und "geändert" eingetragen.

Wie kann ich das dort aktualisieren?

Lieben Gruß, Karim.

_________________
SmarthomeAssistent - Smarthome in Verbindung mit Sprachassistenten!


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 14.12.2017, 08:21 
Offline

Registriert: 09.12.2017, 22:06
Beiträge: 9
Hat sich bedankt: 2 Mal
Hi,

Vielen Dank! Probiere ich heute Abend aus!

@Karim: Ich musste iobroker komplett neu starten (hab den pi durchgestartet) damit das bei mir lief. Erst danach konnte ich die Listen laden etc..

Grüße Ben


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 14.12.2017, 08:34 
Offline
starter

Registriert: 03.05.2017, 01:32
Beiträge: 53
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal
Den Raspi habe ich bereits neu gestartet, was auch zu keiner Veränderung geführt hat :(

Habe es auch eben noch ein weiteres mal getestet, leider wieder ohne Erfolg.

Andere Ideen woran es noch liegen könnte? Kann ich euch irgendwas posten, was euch weitere Informationen geben kann?

Lieben Gruß, Karim.

_________________
SmarthomeAssistent - Smarthome in Verbindung mit Sprachassistenten!


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 14.12.2017, 21:59 
Offline

Registriert: 09.12.2017, 22:06
Beiträge: 9
Hat sich bedankt: 2 Mal
Hi,

oh man ist das genial :)! Ich bin happy, es läuft! Ich habe noch STATES für shuffle hinzugefügt. Problem war, dass ich mit einer Szene "Guten Morgen" direkt eine Spotify Playliste starte, diese aber leider immer mit Shuffle OFF startete, egal was vorher in Spotify aktiviert war. Resultat war dann, dass die Playlist immer mit dem gleichen Song gestartet hat. Dann würde ich also morgens immer die gleichen 2-3 Lieder hören. Mit Shuffle aktiviert und einem Button-Klick auf Skip (plus oder minus) hab ich dann einen Random-Song aus der Playlist.

Im Code ergänzt:

Anfang bei den States:

Code:
createState('javascript.0.Spotify.Player.ShuffleOn', false,{type: "boolean", role: "button"});
createState('javascript.0.Spotify.Player.ShuffleOff', false,{type: "boolean", role: "button"});


Weiter unten bei den Event-Handlern:

Code:
on({id:'javascript.0.Spotify.Player.ShuffleOn',val:true}, function (obj){ 
   SendRequest('/v1/me/player/shuffle?state=true','PUT','',function(){});
});

on({id:'javascript.0.Spotify.Player.ShuffleOff',val:true}, function (obj){
   SendRequest('/v1/me/player/shuffle?state=false','PUT','',function(){});
}); 


@Luck: Ich bin Lucky! Würde dir gerne ein Bier ausgeben! Sehr coole Sache... sehr cool.

Grüße
Ben


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 15.12.2017, 12:50 
Offline

Registriert: 09.12.2017, 22:06
Beiträge: 9
Hat sich bedankt: 2 Mal
Hi,

@Karim: Du könntest mal schauen, ob bei der App bei Spotify überhaupt was ankommt. Da gibt es so ein Dashboard. Möglicherweise geht sonst irgendwas nicht raus/rein? Ansonsten ggf. alles rausschmeißen und nochmal neu starten?

Grüße
Ben


Nach oben
   
 Betreff des Beitrags: Re: [Vorlage] Spotify Skript
BeitragVerfasst: 16.12.2017, 19:36 
Offline
starter

Registriert: 28.04.2017, 01:34
Beiträge: 90
Wohnort: Hannover
Danksagung erhalten: 24 Mal
Worn hat geschrieben:
@Luck: Ich bin Lucky! Würde dir gerne ein Bier ausgeben! Sehr coole Sache... sehr cool.
Ben


ich trinke Herry :D


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 116 Beiträge ]  Gehe zu Seite Vorherige 1 2 3 4 5 6 Nächste

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: Alex220773, looxer01 und 12 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu Forum:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de