Last active
September 19, 2020 01:09
-
-
Save yobud/b7fd3995255cf3fd7da2c12f90e33266 to your computer and use it in GitHub Desktop.
À lancer en console depuis la page https://alexa.amazon.fr/api/behaviors/automations
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
let humanReadable = { | |
'Volet Cuisine': 'volet de la cuisine', | |
'Volet Salon': 'volet du salon', | |
'Volet Salle à manger': 'volet de la salle à manger', | |
'Volets Pièce à vivre': 'volets de la pièce à vivre', | |
'Volet Chambre de Léo': 'volet de la chambre de Léo', | |
'Volet Chambre': 'volet de la chambre' | |
}; | |
// Delete all routines | |
function deleteIndex(index) { | |
var routinesToDelete = JSON.parse(document.body.innerText.split('\n')[0]).filter(v => v.name.startsWith('[AUTO] ')); | |
var csrf = document.cookie.match(/ csrf=(.*?);/)[1]; | |
const request = new Request(`https://alexa.amazon.fr/api/behaviors/automations/${routinesToDelete[index].automationId}`, { | |
method: 'DELETE', | |
headers: new Headers({ 'csrf': csrf }), | |
}); | |
return fetch(request) | |
.then((response) => { | |
if (routinesToDelete.length > index+1) { | |
deleteIndex(index+1); | |
} | |
}); | |
} | |
function deleteAllRoutines() { | |
deleteIndex(0); | |
} | |
var payload = JSON.parse(document.body.innerText.split('\n')[0])[0].triggers[0].payload; | |
var marketplaceId = payload.marketplaceId; | |
var customerId = payload.customerId; | |
function addRoutinesForAllMyBlinds() { | |
const request = new Request(`https://alexa.amazon.fr/api/phoenix?includeRelationships=true`, { | |
method: 'GET' | |
}); | |
return fetch(request) | |
.then((response) => { | |
response.json().then(data => { | |
var items = Object.values(JSON.parse(data.networkDetail).locationDetails.locationDetails.Default_Location.amazonBridgeDetails.amazonBridgeDetails); | |
items.forEach(v => { | |
Object.values(v.applianceDetails.applianceDetails).forEach(item => { | |
if (item.applianceTypes && item.applianceTypes[0] === 'EXTERIOR_BLIND') { | |
generateRoutinesFor(item); | |
} | |
}); | |
}); | |
}); | |
}); | |
} | |
const routineTemplate = {"triggerJson":"{\"@type\":\"com.amazon.alexa.behaviors.model.Trigger\",\"skillId\":\"amzn1.ask.1p.customutterance\",\"type\":\"CustomUtterance\",\"payload\":\"{\\\"locale\\\":\\\"fr-FR\\\",\\\"marketplaceId\\\":\\\"__MAKETPLACE_ID__\\\",\\\"utterance\\\":\\\"__UTTERANCE__\\\",\\\"customerId\\\":\\\"__CUSTOMER_ID__\\\",\\\"@type\\\":\\\"com.amazon.alexa.behaviors.model.CustomUtteranceTriggerPayload\\\"}\"}","sequenceJson":"{\"@type\":\"com.amazon.alexa.behaviors.model.Sequence\",\"startNode\":{\"@type\":\"com.amazon.alexa.behaviors.model.SerialNode\",\"nodesToExecute\":[{\"@type\":\"com.amazon.alexa.behaviors.model.OpaquePayloadOperationNode\",\"type\":\"Alexa.SmartHome.Batch\",\"operationPayload\":{\"target\":\"__TARGET__\",\"customerId\":\"__CUSTOMER_ID__\",\"operations\":[{\"instance\":\"Blind.Lift\",\"rangeValue\":{\"value\":__RANGE_VALUE__,\"unitOfMeasure\":\"\"},\"type\":\"setRangeValue\"}]},\"skillId\":\"amzn1.ask.1p.smarthome\"}]}}","status":"ENABLED","name":"__NAME__"}; | |
// const routineTemplate = {"triggerJson":"{\"@type\":\"com.amazon.alexa.behaviors.model.Trigger\",\"skillId\":\"amzn1.ask.1p.customutterance\",\"type\":\"CustomUtterance\",\"payload\":\"{\\\"locale\\\":\\\"fr-FR\\\",\\\"marketplaceId\\\":\\\"A13V1IB3VIYZZH\\\",\\\"utterance\\\":\\\"ouvre le volet de la cuisine\\\",\\\"customerId\\\":\\\"AVXRGHVGLT3BP\\\",\\\"@type\\\":\\\"com.amazon.alexa.behaviors.model.CustomUtteranceTriggerPayload\\\"}\"}","sequenceJson":"{\"@type\":\"com.amazon.alexa.behaviors.model.Sequence\",\"startNode\":{\"@type\":\"com.amazon.alexa.behaviors.model.SerialNode\",\"nodesToExecute\":[{\"@type\":\"com.amazon.alexa.behaviors.model.OpaquePayloadOperationNode\",\"type\":\"Alexa.SmartHome.Batch\",\"operationPayload\":{\"target\":\"44f2ce8c-dc60-441c-bd24-f6d4e59b914b\",\"customerId\":\"AVXRGHVGLT3BP\",\"operations\":[{\"instance\":\"Blind.Lift\",\"rangeValue\":{\"value\":100,\"unitOfMeasure\":\"\"},\"type\":\"setRangeValue\"}]},\"skillId\":\"amzn1.ask.1p.smarthome\"}]}}","status":"ENABLED","name":"Ouvrir volet cuisine"} | |
var someUuids = document.body.innerText.match(/amzn1.alexa.sequence.(.*?)\"/mg).map(v => v.match(/(amz.*)\"/)[1]); | |
function generateRoutinesFor(item) { | |
let params = { | |
__MAKETPLACE_ID__: marketplaceId, | |
__CUSTOMER_ID__: customerId, | |
__TARGET__: item.entityId, | |
__UTTERANCE__: `ouvre le ${humanReadable[item.friendlyName]}`, | |
__RANGE_VALUE__: 100, | |
__NAME__: `[AUTO] Ouvrir ${item.friendlyName}`, | |
} | |
var csrf = document.cookie.match(/ csrf=(.*?);/)[1]; | |
let request = new Request(`https://alexa.amazon.fr/api/behaviors/automations`, { | |
method: 'POST', | |
headers: new Headers({ | |
'csrf': csrf, | |
'Content-type': 'application/json; charset=utf-8', | |
// 'Routines-Version': '3.0.45305', | |
// 'x-amzn-RequestId': someUuids[0] | |
}), | |
body: JSON.stringify(routineTemplate).replace(RegExp(Object.keys(params).join('|'), 'gi'), (matched) => params[matched]) | |
}); | |
fetch(request) | |
.then((response) => { | |
response.json().then(_ => { | |
console.log(`Routine créée : ${params.__NAME__}`); | |
}); | |
}); | |
params = { | |
...params, | |
__UTTERANCE__: `ferme le ${humanReadable[item.friendlyName]}`, | |
__RANGE_VALUE__: 0, | |
__NAME__: `[AUTO] Fermer ${item.friendlyName}`, | |
} | |
var csrf = document.cookie.match(/ csrf=(.*?);/)[1]; | |
request = new Request(`https://alexa.amazon.fr/api/behaviors/automations`, { | |
method: 'POST', | |
headers: new Headers({ | |
'csrf': csrf, | |
'Content-type': 'application/json; charset=utf-8', | |
// 'Routines-Version': '3.0.45305', | |
// 'x-amzn-RequestId': someUuids[0] | |
}), | |
body: JSON.stringify(routineTemplate).replace(RegExp(Object.keys(params).join('|'), 'gi'), (matched) => params[matched]) | |
}); | |
// console.log(JSON.stringify({triggerJson: routineTemplate.triggerJson})); | |
// console.log(JSON.stringify({...routineTemplate, ...{triggerJson: routineTemplate.triggerJson.replace(RegExp(Object.keys(params).join('|'), 'gi'), (matched) => params[matched])}})); | |
fetch(request) | |
.then((response) => { | |
response.json().then(_ => { | |
console.log(`Routine créée : ${params.__NAME__}`); | |
}); | |
}); | |
} | |
const routines = { | |
add: addRoutinesForAllMyBlinds, | |
delete: deleteAllRoutines | |
} | |
console.error(`IL FAUT LIRE ICI !`); | |
console.warn(`IL FAUT LIRE ICI !`); | |
console.error(`IL FAUT LIRE ICI !`); | |
console.log(`n'oublie pas de faire tes associations, en clé, le friendlyName défini sur ton script serveur, en valeur, ce que tu veux dire à voix haute ! Voici tes entrées :`); | |
console.dir(humanReadable); | |
console.log(`Maintenant tu peux lancer deux méthodes :`) | |
console.log(`routines.add() et routines.delete()`); | |
console.log(`routines.add() boucle sur tous les éléments EXTERIOR_BLIND et fait une routine d'ouverture et une de fermeture !`); | |
console.log(`routines.delete() supprime toutes les routines commençant par [AUTO] (celles créées par ce script)`); | |
console.log(`Des bisous`); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment