Bonjour   Mise à jour: Suite au passage en 4.101 et plus, l'API a changé concernant les backups; voici donc un résumé en fonction des versions
API pour Version < 4.101   BACKUP: URL: http://ip/api/settings/backups TYPE: POST DATA: action=create&description=monbackup HEADER: Content-type: application/x-www-form-urlencoded RESTORE: URL: http://ip/api/settings/backups TYPE: POST DATA: action=restore&id=1051 (par exemple) HEADER: Content-type: application/x-www-form-urlencoded DELETE: URL: http://ip/api/settings/backups?id=xxxx    (xxx: id du backup) TYPE: DELETE DATA: id=xxxx HEADER: Content-type: application/x-www-form-urlencoded             
API pour Version >= 4.101
BACKUP: URL: http://ip/api/service/backups/ TYPE: POST DATA: {"action":"create","params":{"name":"Le descriptif de mon backup"}} HEADER: Content-type: application/x-www-form-urlencoded Authorization: Basic xxxxxxxxxxxxxxxx (mot de passe encodé en base64)             
RESTORE: URL: http://ip/api/service/backups/ TYPE: POST DATA: {"action":"restore","params":{"id":1054}} (1054 est un exemple) HEADER: Content-type: application/x-www-form-urlencoded Authorization: Basic xxxxxxxxxxxxxxxx (mot de passe encodé en base64)   DELETE:  URL: http://ip/api/service/backups/  TYPE: DELETE  DATA: n/a  HEADER: Authorization: Basic xxxxxxxxxxxxxxxx (mot de passe encodé en base64)   Encodage Base64   Pour le couple login/password, ils doivent être encodés en base64; Pour ce faire: Sous linux: echo -n 'monlogin@fai.com:motdepasse' | base64 Sous windows: une scene en lua sur le HC2 : taper base64.lua sous google Le toolkit de @Krikroff (https://www.domotique-fibaro.fr/topic/239-hc2-toolkit-application-v1203/) Advanced RESTful client: faire une requete sur une url de l'api, le couple login/mdp sera demandé et sera affiché ensuite encodé.   Exemple de Scènes   Pour des requêtes externes, cela ne change pas vraiment. En revanche pour ceux qui comptent réaliser des scènes de backup/delete, ces requètes ne sont plus gérées pareil (avant en local, nous utilisions 127.0.0.1:11111 qui est géré par le process HCServer; maintenant il faut utiliser 127.0.0.1 et pointer sur un php)
Donc pour les scènes lua, pas de api.post ou api.get et authentification nécessaire.   Voici 2 scènes exemples; Les scène ne sont pas forcèment optimisées. Elles montrent juste l'utilisation de l'api   Scène de Backup: performBackup.lua --[[ %% properties %% events %% globals --]] -- Message Descriptif du Backup local descriptif = 'Backup du '..os.date("%d/%m/%y - %HH%M") -- Password admin encodé en base64 local password = 'aWRpb3RAZ3Z1bGF2aWVyZ2UuY29tOnR1X3lfY3JveWFpc19oZWlu' local url = 'http://127.0.0.1/api/service/backups' local datas = '{"action":"create","params":{"name":"'..descriptif..'"}}' local httpClient = net.HTTPClient() httpClient:request(url , { success = function(response) if tonumber(response.status) == 201 or tonumber(response.status) == 202then print("Backup Created at " .. os.date()) else print("Error " .. response.status) end end, error = function(err) print('error = ' .. err) end, options = { method = 'POST', headers = { ["content-type"] = 'application/json', ["Authorization"] = 'Basic '..password }, data = datas } });   Scene d'effacement du backup le plus ancien: deleteBackup.lua   --[[ %% properties %% events %% globals --]] -- Flag dryrun; Si true, la requete sur api pour effacer le backup n'est pas effectuée local dryrun = true -- Password admin encodé en base64 local password = 'aWRpb3RAZ3Z1bGF2aWVyZ2UuY29tOnR1X3lfY3JveWFpc19oZWlu' function sortBackup(data) local backups = json.decode(data) -- Vérification de présence Backup if (backups and type(backups == 'table') and #backups > 0) then if #backups > 1 then print(#backups .. ' Backups présents') else print('1 Backup présent') end for i in ipairs(backups) do fibaro:debug('ID: '..backups[i]['id']..' | TIMESTAMP: '..backups[i]['timestamp']..' | DESCRIPTION: '..backups[i]['description']) end else print('Pas de backup ou erreur lors de la récupération de la liste') fibaro:abort() end -- Pour chaque Backup on stock le timestamp de la date de réalisation dans une table -- On classe ensuite les timestamps par ordre croissant local timestamp = {} for i in ipairs(backups) do table.insert(timestamp, backups[i]['timestamp']) end table.sort(timestamp) -- Le 1er timestamp de la table est le plus petit donc le plus ancien en epochtime -- Dans la table de backup on recherche le backup ayant ce timestamp local id = false for i in ipairs(backups) do if (tonumber(backups[i]['timestamp']) == tonumber(timestamp[1])) then id = backups[i]['id'] end end if id then print("ID du backup le plus ancien: "..id) deleteBackup(id) else print("Erreur lors de la récupération de l'ID") fibaro:abort() end end function deleteBackup(id) -- Requete via API pour effacer le backup le plus ancien if (not dryrun) and (id) then print('Effacement du backup '..id..' en cours. Cela peut prendre 30s') local url = 'http://127.0.0.1/api/service/backups/'..id local httpClient = net.HTTPClient() httpClient:request(url , { success = function(response) if tonumber(response.status) == 200 then print("Backup deleted at " .. os.date()) else print("Error " .. response.status) end end, error = function(err) print('error = ' .. err) end, options = { method = 'DELETE', headers = { ["content-type"] = 'application/x-www-form-urlencoded;', ["authorization"] = 'Basic '..password }, data = 'id='..id } }) end end -- Récupération de la list des backups local GETClient = net.HTTPClient() if dryrun then print('Mode DryRun -> La requète pour effacer ne sera pas éxécutée') end GETClient:request('http://127.0.0.1/api/service/backups', { success = function(response) if tonumber(response.status) == 200 then sortBackup(response.data) else print("Error " .. response.status) end end, error = function(err) print('error = ' .. err) end, headers = { ["content-type"] = 'application/x-www-form-urlencoded;', ["authorization"] = 'Basic '..password } });   Nicolas

   
    • Upvote
    3