NEWS
[Vorlage] Spotify Skript
-
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.
-
> @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 !
` > 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 ?
-
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.
-
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
! ```
`//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/);` [/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i] -
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
-
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.
-
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
-
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.
-
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:
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:
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
-
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
-
@Luck: Ich bin Lucky! Würde dir gerne ein Bier ausgeben! Sehr coole Sache… sehr cool.
Ben `
ich trinke Herry
-
Danke, nun klappt es.
Ich glaube es lag daran, dass ich die URL nicht in der erstellten App eingetragen hatte.
Vielen dank für eure Hilfe
Jetzt geht es an die Visualisierung. Mal sehen wie es damit voran geht
Lieben Gruß, Karim.
-
-
Ich habe mal wieder ein Problem.
Nach ein paar Stunden / Tagen aktualisieren sich manche Werte in den Objekten nicht mehr, womit es auch nicht mehr möglich ist, die Steuerung per Vis zu übernehmen.
Wenn ich allerdings in den Objekten direkt einen Button nutze, klappt es komischerweise von dort aus wieder.
Über die Vis kommt beim Drücken eines Buttons auch folgendes:
javascript.0 2017-12-26 15:41:14.562 error script.js.Skripte.Spotify: FEHLER BEIM ERNEUTEN DATEN ANFORDERN !
Hat jemand eine Idee, woran es liegen könnte?
Lieben Gruß, Karim.
-
PERFEKT! Funktioniert super. Bis auf eine Kleinigkeit. Das Auslesen der Playlist …
Drücke ich den Button kommt nichts an.
Habe im Script diesen Fehler entdeckt:
Hat der vielleicht was damit zu tun?
SG
Mario
-
du meinst das Ausrufezeichen ? das ist soweit ich weis ein Fehler im Editor und kommt bei allen Skripten vor ab einer bestimmten Zeilenanzahl..
Zu deinem Problem, wenn du die Playlists abgerufen hast, aktualisiere mal deine States
-
Ich habe mal wieder ein Problem.
Nach ein paar Stunden / Tagen aktualisieren sich manche Werte in den Objekten nicht mehr, womit es auch nicht mehr möglich ist, die Steuerung per Vis zu übernehmen.
Wenn ich allerdings in den Objekten direkt einen Button nutze, klappt es komischerweise von dort aus wieder.
Über die Vis kommt beim Drücken eines Buttons auch folgendes:
javascript.0 2017-12-26 15:41:14.562 error script.js.Skripte.Spotify: FEHLER BEIM ERNEUTEN DATEN ANFORDERN !
Hat jemand eine Idee, woran es liegen könnte?
Lieben Gruß, Karim. `
benutzt du die letzte Version ?
sollte eigentlich nicht mehr vorkommen, mein Skript lief jetzt eine mind. eine Woche ohne einen Benutzereingriff, und hat heute auf Anhieb wider funktioniert
Ich denke nicht das es mit VIS zutun hat,hast du vielleicht den Javascript Adapter zwischendurch neu gestartet, oder ist er abgestürzt ?
-
Hallo Lucky,
Ja, ich nutze die Version 0.35.
Jetzt gerade ging es die Musik aus ioBroker direkt zu starten, aber über die Vis. hat es dann nicht mehr geklappt.
Zurück am Computer hat es dann auch nicht mehr mit den Buttons geklappt
Etwas verwirrend alles.
Lieben Gruß und guten Rutsch ins neue Jahr,
Karim.
-
hm, ich kann das leider nicht rekonstruieren, bei mir geht es
-
du meinst das Ausrufezeichen ? das ist soweit ich weis ein Fehler im Editor und kommt bei allen Skripten vor ab einer bestimmten Zeilenanzahl..
Zu deinem Problem, wenn du die Playlists abgerufen hast, aktualisiere mal deine States `
… hat geklappt, danke.
SG
Mario