jojo Posté(e) le 22 juillet 2017 Signaler Posté(e) le 22 juillet 2017 Salut les experts. J'ai également un Syno 5.2, mais plus de HC2 (donc je ne sais pas importer le VD partagé). Mais je serais SUPER intéressé par le code des différentes API (pour pouvoir le traduire dans ma LD). Faites au plus simple pour vous : vous postez le code de l'entièreté du VD ou juste les différentes URL de l'api. MERCI !
MAM78 Posté(e) le 22 juillet 2017 Signaler Posté(e) le 22 juillet 2017 Le 21/7/2017 à 00:42, domo a dit : Pour ton info, sur mac tu peux faire très simplement une capture d'écran avec l'appli Aperçu (en sélectionnant une partie de ton écran, puis export au format png)
domo Posté(e) le 22 juillet 2017 Signaler Posté(e) le 22 juillet 2017 faut que je regarde ça de plus pres merci pour l'info
domo Posté(e) le 22 juillet 2017 Signaler Posté(e) le 22 juillet 2017 impeccable ça fonctionne c'est validée pour moi merci beaucoup Kana-chan
Kana-chan Posté(e) le 22 juillet 2017 Signaler Posté(e) le 22 juillet 2017 (modifié) @jojo : Voici le code du VD pour récupérer les infos : -------------------------------------------------- -- Synology DSM -- Reboot the disk station -- janvier 2015 -------------------------------------------------- -- User configurable variables local login = fibaro:getGlobal("LoginNAS"); local password = fibaro:getGlobal("MdpNAS"); -- System variables local selfID = fibaro:getSelfId(); local ip = fibaro:get(selfID, 'IPAddress'); local port = fibaro:get(selfID, 'TCPPort'); local nameNAS = fibaro:getName(selfID); local Synology = Net.FHttp(ip, tonumber(port)); local API_AUTH_ERROR_CODE = { [0] = "Sans erreur.", [100] = "Erreur inconnue.", [101] = "Compte non spécifié.", [400] = "Mot de passe invalide.", [401] = "Compte désactivé.", [402] = "Permission refusée.", [403] = "Unique mot de passe non spécifié.", [404] = "Autentification erronée." }; local API_RECORD_ERROR_CODE = { [400] = "Exécution ratée.", }; local OK_connected = false; -- Test connection tcpSocket = Net.FTcpSocket(ip, tonumber(port)); bytes, errorCode = tcpSocket:write("Test"); fibaro:log("Détection"); if errorCode == 0 then OK_connected = true; fibaro:log(nameNAS.." ON"); fibaro:call(selfID, "setProperty", "currentIcon", "52"); --fibaro:call(175, "sendDefinedPushNotification", "Ping ReseauHome OK"); else fibaro:log(nameNAS.." OFF"); fibaro:call(selfID, "setProperty", "currentIcon", "53"); --fibaro:call(175, "sendDefinedPushNotification", "Ping ReseauHome OFF"); end tcpSocket:disconnect(); -- Round function to display percentages round = function(num) local a = math.floor(num*100+0.5)/100; return a,string.format("%.2f",a); end if OK_connected then -- Discover available APIs and corresponding information payload = "/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.API.Auth"; response, status, errorCode = Synology:GET(payload); if tonumber(status) == 200 then jsonTable = json.decode(response); version = jsonTable.data["SYNO.API.Auth"].maxVersion; if version >= 2 then fibaro:debug("Version API Synology OK"); pathAuth = jsonTable.data["SYNO.API.Auth"].path; fibaro:debug("Chemin API Synology = "..pathAuth); cgiUsed_cpu_mem = "/entry.cgi"; cgiUsed_temp = cgiUsed_cpu_mem; cgiUsed_temp_disk = cgiUsed_cpu_mem; cgiUsed_vols = cgiUsed_cpu_mem; apiUsed_cpu_mem = "SYNO.Core.System.Utilization"; apiUsed_temp_system = "SYNO.Core.System"; apiUsed_temp_disk = apiUsed_temp_system; apiUsed_vols = apiUsed_temp_system; apiMethod_cpu_mem="get"; apiMethod_temp = "info"; apiMethod_temp_disk = apiMethod_temp; apiMethod_vols = apiMethod_temp; if version < 6 then cgiUsed_cpu_mem = "/dsm/system_loading.cgi"; cgiUsed_temp = "/dsm/info.cgi"; cgiUsed_temp_disk = "/entry.cgi"; cgiUsed_vols = "/dsm/volume.cgi"; apiUsed_cpu_mem = "SYNO.DSM.SystemLoading"; apiUsed_temp_system = "SYNO.DSM.Info"; apiUsed_temp_disk = "SYNO.Core.System"; apiUsed_vols = "SYNO.DSM.Volume"; apiMethod_cpu_mem = "getinfo"; apiMethod_temp = apiMethod_cpu_mem; apiMethod_temp_disk = "info"; apiMethod_vols = "list"; end -- Create new login session payload = "/webapi/"..pathAuth.."?api=SYNO.API.Auth&method=Login&version=2&account="..login.."&passwd="..password.."&session=DSM&format=sid"; response, status, errorCode = Synology:GET(payload); if tonumber(status) == 200 then jsonTable = json.decode(response); if jsonTable.success == true then SID = jsonTable.data.sid; fibaro:debug("SID API Synology = ["..SID.."]"); -- Prepare string local info_cpu_memory = ""; -- CPU info from the disk station payload = "/webapi"..cgiUsed_cpu_mem.."?api="..apiUsed_cpu_mem.."&version=1&method="..apiMethod_cpu_mem.."&type=current&_sid="..SID; response, status, errorCode = Synology:GET(payload); if tonumber(status) == 200 then jsonTable = json.decode(response); if jsonTable.success == true then info_cpu = jsonTable.data.cpu; info_mem = jsonTable.data.memory; load_cpu = 0; load_mem = 0; if (version < 6) then load_cpu = round(info_cpu.user*100); load_mem = round((info_mem.total-(info_mem.buffer+info_mem.cached+info_mem.free))/info_mem.total*100); else load_cpu = round(info_cpu.other_load+info_cpu.system_load+info_cpu.user_load); load_mem = round(info_mem.real_usage); end fibaro:debug("Memory: "..load_mem.."%"); info_cpu_memory = "Memory: "..load_mem.."% "; fibaro:debug("CPU: "..load_cpu.."%"); info_cpu_memory = info_cpu_memory.."CPU: "..load_cpu.."%"; fibaro:call(selfID, "setProperty", "ui.CPULoad.value", info_cpu_memory); end else fibaro:log("Erreur"); fibaro:debug('<span style="color:red;">Erreur : '..API_AUTH_ERROR_CODE[tonumber(errorCode)]..'</span>'); end -- Temp info from the disk station payload = "/webapi"..cgiUsed_temp.."?api="..apiUsed_temp_system.."&version=1&method="..apiMethod_temp.."&_sid="..SID; response, status, errorCode = Synology:GET(payload); if tonumber(status) == 200 then jsonTable = json.decode(response); if jsonTable.success == true then temp_system = "System: N/A"; if (version < 6) then if jsonTable.data.temperature ~= "undefined" then temp_system = "System: "..round(jsonTable.data.temperature).."°C"; end else if jsonTable.data.sys_temp ~= nil then temp_system = "System: "..round(jsonTable.data.sys_temp).."°C"; end end fibaro:debug("Temperature "..temp_system); fibaro:call(selfID, "setProperty", "ui.SYSTEMTemp.value", temp_system); end else fibaro:log("Erreur"); fibaro:debug('<span style="color:red;">Erreur : '..API_AUTH_ERROR_CODE[tonumber(errorCode)]..'</span>'); end -- Prepare string local temp_disks = ""; -- Temp info from the disk station payload = "/webapi"..cgiUsed_temp_disk.."?api="..apiUsed_temp_disk.."&version=1&method="..apiMethod_temp_disk.."&type=storage&_sid="..SID; response, status, errorCode = Synology:GET(payload); if tonumber(status) == 200 then jsonTable = json.decode(response); if jsonTable.success == true then local disk_tab = jsonTable.data.hdd_info; for nb = 1, #disk_tab do temp_disks = temp_disks..disk_tab[nb].diskno..": "..round(disk_tab[nb].temp).."°C "; end fibaro:debug("Disks temperature: "..temp_disks); fibaro:call(selfID, "setProperty", "ui.DISKSTemp.value", temp_disks); end else fibaro:log("Erreur"); fibaro:debug('<span style="color:red;">Erreur : '..API_AUTH_ERROR_CODE[tonumber(errorCode)]..'</span>'); end -- Prepare string local vols_load = ""; -- Temp info from the disk station payload = "/webapi"..cgiUsed_vols.."?api="..apiUsed_vols.."&version=1&method="..apiMethod_vols.."&type=storage&_sid="..SID; response, status, errorCode = Synology:GET(payload); if tonumber(status) == 200 then jsonTable = json.decode(response); if jsonTable.success == true then local vols_tab = 0; if (version < 6) then vols_tab = jsonTable.data.volumes; else vols_tab = jsonTable.data.vol_info; end for nb = #vols_tab, 1, -1 do if (version < 6) then used_size_vol = vols_tab[nb].used; total_size_vol = vols_tab[nb].total; else used_size_vol = vols_tab[nb].used_size; total_size_vol = vols_tab[nb].total_size; end occupied_size = round(used_size_vol/total_size_vol*100); if (version < 6) then vols_load = vols_load..vols_tab[nb].id..": "..occupied_size.."% "; else vols_load = vols_load..vols_tab[nb].name..": "..occupied_size.."% "; end end fibaro:debug("Volumes Load: "..vols_load); fibaro:call(selfID, "setProperty", "ui.VOLSLoad.value", vols_load); end else fibaro:log("Erreur"); fibaro:debug('<span style="color:red;">Erreur : '..API_AUTH_ERROR_CODE[tonumber(errorCode)]..'</span>'); end -- Destroy current login session payload = "/webapi/"..pathAuth.."?api=SYNO.API.Auth&method=Logout&version=2&session=DSM&_sid="..SID; response, status, errorCode = Synology:GET(payload); fibaro:debug("Déconnexion: "..status); else fibaro:log("Erreur"); fibaro:debug('<span style="color:red;">Erreur : '..API_AUTH_ERROR_CODE[tonumber(jsonTable.error.code)]..'</span>'); end else fibaro:log("Erreur"); fibaro:debug('<span style="color:red;">Erreur : Authentification API ratée</span>'); end else fibaro:log("Erreur"); fibaro:debug('<span style="color:red;">Erreur : Version API Synology trop vieille : <b>DSM 4.0-2251</b> est requise</span>'); end else fibaro:log("Erreur"); fibaro:debug('<span style="color:red;">Erreur : Impossible de se connecter au Disk Station Synology</span>'); end else fibaro:call(selfID, "setProperty", "ui.CPULoad.value", "Memory: N/A % CPU: N/A %"); fibaro:call(selfID, "setProperty", "ui.SYSTEMTemp.value", "System: N/A °C"); fibaro:call(selfID, "setProperty", "ui.DISKSTemp.value", "Disk: N/A °C"); end Modifié le 22 juillet 2017 par Kana-chan 2
jojo Posté(e) le 23 juillet 2017 Signaler Posté(e) le 23 juillet 2017 @Kana-chan, Merci pour ton code. Je suis en DSM 5.2-5967 Toutes tes URL fonctionnent chez moi, sauf celle-ci, pour la température des disques !! -- Disks temp info from the disk station payload = "/webapi"..cgiUsed_temp_disk.."?api="..apiUsed_temp_disk.."&version=1&method="..apiMethod_temp_disk.."&type=storage&_sid="..SID; http://xxx.xxx.xxx.xxx:yyyy/webapi/entry.cgi?api=SYNO.Core.System&version=1&method=info&type=storage&_sid=zzzzzzzzzzz {"error":{"code":105},"success":false} où est mon erreur ?
jojo Posté(e) le 23 juillet 2017 Signaler Posté(e) le 23 juillet 2017 j'ai cette erreur (pour cette url seulement) avec un utilisateur qui appartient au groupe standard admin. Avec l'utilisateur admin que j'ai créé à la création de mon DSM, cela fonctionne. Donc c'est un problème de droits, je continue d'investiguer.
jojo Posté(e) le 23 juillet 2017 Signaler Posté(e) le 23 juillet 2017 après génération d'un nouvel sid, ça à fonctionné : les mystères de l'informatique
Kana-chan Posté(e) le 24 juillet 2017 Signaler Posté(e) le 24 juillet 2017 Bonjour jojo, Je pense que c'est le cache du navigateur (ou du système) qui a dû jouer des tours. Voilà ...
jojo Posté(e) le 24 juillet 2017 Signaler Posté(e) le 24 juillet 2017 En tout cas, merci @kana-chan pour ton aide. M'autorises-tu (quand je serai prêt...) à faire un petit tuto sur le forum Lifedomus (et faisant pointer mes sources ici) pour expliquer la solution ? Envoyé de mon Nexus 5 en utilisant Tapatalk
Kana-chan Posté(e) le 24 juillet 2017 Signaler Posté(e) le 24 juillet 2017 Bonjour jojo, Pas de souci. Faites ce que vous voulez. Voilà ...
Nico Posté(e) le 24 juillet 2017 Signaler Posté(e) le 24 juillet 2017 Top, faudra que je mette à jour ma version.
Talwayseb Posté(e) le 7 septembre 2017 Signaler Posté(e) le 7 septembre 2017 (modifié) Salut @Kana-chan !!! Pourrais tu me donner cette syntaxe : http://<adresse_ip_nas:port_dsm>/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=2&account=<login_admin>&passwd=<password_admin>&session=DSM&format=sid pour DSM6.1 ? En te remerciant d'avance !!! Edit : Mille excuses, ça marche !!!! Je suis aller trop vite !!! Modifié le 7 septembre 2017 par Talwayseb Mille excuses, ça marche !!!!
Kana-chan Posté(e) le 7 septembre 2017 Signaler Posté(e) le 7 septembre 2017 Salut !! Ok, pas grave. Voilà ...
Gandalf Posté(e) le 22 septembre 2017 Signaler Posté(e) le 22 septembre 2017 (modifié) Le 22/07/2017 à 12:02, Kana-chan a dit : Bonjour domo, Voici la dernière (je l'espère !! :D) version avec la prise en charge de la température des disques dur. Pouvez-vous tester de votre coté ? Merci ... Synology_NAS.vfib Bonjour Kana Chan, Voilà tous d'abord merci mille fois de te pencher avec succès sur cette problématique . En effet cela m'intéresse beaucoup de pouvoir allumer ou éteindre mes NAS directement depuis la HC2 cela évitera de lancer une énième apps sur le GSM juste pour faire le WOL puis de me connecter en mode web pour l'éteindre J'ai donc utilisé le dernier fichier vifb que tu as fourni datant du 22 juillet. Je suis sous le DSM 6.1.3-15152 Update 4 avec un premier NAS DS1511+. J'ai donc importé le module virtuel, Puis dans général j'ai modifié le nom, la pièce , l'ip en x.x.x.x , le port ( j'ai utilisé celui que je voie dans mon navigateur internet ) Ensuite je suis allez sur la page avancée : ici dans chaque bouton ( redémarrer / arrêter / état ) J'ai modifié comme suit les 2 premières lignes : local login = fibaro:getGlobal("xxx"); local password = fibaro:getGlobal("yyy"); Puis j'ai modifié les icônes pour que ce soit joli. Je suis sortie pour revenir dans la page pièces , je suis allez sur le module, et j'ai essayé le bouton réveillé. Rien ne se passe. J'ai allumer le NAS via l'apps de mon GSM oui j’ai essayé redémarrer oui 2 min après arrêter et la aussi rien en ce passe. Voilà c'est mon premier module virtuel certainement que j'ai oublié une modification a faire, mais j'ai beau relire le Topic je ne comprends pas ou . Merci de ton aide . Modifié le 22 septembre 2017 par Gandalf
Kana-chan Posté(e) le 22 septembre 2017 Signaler Posté(e) le 22 septembre 2017 Bonjour Gandalf, En fait, il ne faut pas changer les valeurs dans les fonctions fibaro:getGlobal("LoginNAS") et fibaro:getGlobal("MdpNAS"). Il faut créer des variables globales LoginNAS, MdpNAS, MacNAS et BcastNAS dans le panneau de la HC2 pour que les boutons Arrêter, Redémarrer et Etat fonctionnent. Comme vous avez plusieurs NAS, soit vous utilisez le même compte pour les deux (donc LoginNAS et MdpNAS), soit vous utilisez des noms de variables globales différents (LoginNAS1, MdpNAS1, MacNAS1,...). D'ailleurs, pour créer ces variables, il faut créer une scène spéciale pour cela : --[[ %% properties %% events %% globals --]] -- NAS General fibaro:setGlobal("BcastNAS", "ici_adresse_de_broadcast_sur_votre_réseau_finissant_par_.255"); fibaro:setGlobal("LoginNAS1", "ici_compte_admin"); fibaro:setGlobal("MdpNAS1", "ici_mot_de_passe"); fibaro:setGlobal("MacNAS1", "ici_adresse_mac_syno1"); fibaro:setGlobal("LoginNAS2", "ici_compte_admin"); fibaro:setGlobal("MdpNAS2", "ici_mot_de_passe"); fibaro:setGlobal("MacNAS2", "ici_adresse_mac_syno2"); Exécutez cette scène une fois seulement et vous créerez les variables globales avec leur contenu. Enfin, il faut le VD devrait fonctionner. Voilà ...
Gandalf Posté(e) le 23 septembre 2017 Signaler Posté(e) le 23 septembre 2017 Bonjour, Houlla je crois que j'ai compris 50% LoL Pour faire propre je vais reprendre a 0 Je vais donc supprimer le VD ( Virtual Device ? ) que j'ai créé avec ton/votre ? Fichier Synology_NAS.vfib . ET vu que j'ai beaucoup de NAS je vais en créer autant que j'ai de NAS . Je vais renommer dans chaque VD les variables globales LoginNAS, MdpNAS, MacNAS et BcastNAS en LoginNAS, MdpNAS, MacNAS1 et BcastNAS le second en LoginNAS, MdpNAS, MacNAS2 et BcastNAS ect.. Sachant que j'ai créé un USER spécifique avec le même login et le même MdP sur chaque NAS, mais que l'adresse MAC change et le Bcast lui c'est le même pour tous . Puis il faut que je crée une scène LUA que je copie ton code dedans et que je le change pour chaque NAS --[[ %% properties %% events %% globals --]] -- NAS General fibaro:setGlobal("BcastNAS", "10.10.10.255"); fibaro:setGlobal("LoginNAS", "Login"); fibaro:setGlobal("MdpNAS", "password"); fibaro:setGlobal("MacNAS1", "00:09:08:07:06:05"); fibaro:setGlobal("MacNAS2", "00:09:08:07:06:04"); fibaro:setGlobal("MacNAS3", "00:09:08:07:06:03"); fibaro:setGlobal("MacNAS4", "00:09:08:07:06:02"); Puis j'exécute une fois cette scène puis je retourne voir chaque NAS si les infos remontent bien et/ou si les boutons sont OK ? Pardon pour ce récapitulatif, mais j'aime bien être sûr d'avoir compris Merci
Kana-chan Posté(e) le 23 septembre 2017 Signaler Posté(e) le 23 septembre 2017 Bonjour, Oui c'est bien cela ! Mais n'oubliez pas de les créer dans le panneau des variables avant d'exécuter la scène, car je crois qu'il faut qu'elles existent pour être remplies. Voilà ...
Gandalf Posté(e) le 23 septembre 2017 Signaler Posté(e) le 23 septembre 2017 Hiiiiiiiiii Marche po Je m'explique . Phase 1 : Créer les 5 modules virtuels Phase 2 : Modifier les 5 modules virtuels ( Nom / pièces / IP / Port et dans le Code le MACNAS ) Phase 3 : Créer la scène LUA , copier le code , modifier pour qu'elle ne ce lance que manuellement et une seule fois. Phase 4 : Lancer la Scène .. Et la rien .... Bon ok je retourne voir les modules et l’aussi rien ..... Bon je fouille sur la box et je trouve le panneau variable Je regarde dedans vide , aucune info concernant la scène ne crée . Je teste en ajoutant a la main Bcast, Login, password . Je retourne sur un module ... MAGIE LoL ... Les infos remontent. Alors au final ça marche si je les rentre a la main via le panneau qui semble dédié aux variables .... mais pourquoi j'ai 2 mains gauches quand il sage de créé un script même un copy/past ne fonctionne pas Ps : j'ai bien fait attention dans l’éditeur de texte de remettre les " avants et après et coller aux informations données , j'ai aussi vérifié les espaces . PS2 : J'ai noté que dans les script le bouton états avait ne commentaire : -- Synology DSM -- Reboot the disk station -- janvier 2015 -------------------------------------------------- Ce n'est pas un reboot si ? PS3 : au final donc tous fonctionnent, mais est-il possible d'avoir l'affichage des HDD sur 1 ligne par HDD ? Vue GSM Vue Web Merci a toi .
Kana-chan Posté(e) le 23 septembre 2017 Signaler Posté(e) le 23 septembre 2017 Cool ça fonctionne !! Je n'ai pas trouvé comment avoir sur une seule ligne un seul disque. Et c'est une erreur de commentaire, le Reboot dans le bouton Etat. Voilà ...
Gandalf Posté(e) le 23 septembre 2017 Signaler Posté(e) le 23 septembre 2017 Pas d'idée pourquoi avec le script ça ne crée pas les variable global ? Juste pour m'endormir main C0N ce soir Allez je crée les autre mac en global
Kana-chan Posté(e) le 23 septembre 2017 Signaler Posté(e) le 23 septembre 2017 Il y a 1 heure, Kana-chan a dit : Bonjour, Oui c'est bien cela ! Mais n'oubliez pas de les créer dans le panneau des variables avant d'exécuter la scène, car je crois qu'il faut qu'elles existent pour être remplies. Voilà ... Comme je l'ai dit plus haut, il faut créer les variables dans le panneau des variables AVANT de faire la scène. Car de faire fibaro:setGlobal("TOTO", "TITI") ne créera pas la variable. Voilà ...
Gandalf Posté(e) le 23 septembre 2017 Signaler Posté(e) le 23 septembre 2017 (modifié) Haaaa Bay j'avais complètement pas compris ça XD Mais alor sla scène elle sert a quoi ? ( je sens la grosse question conne ) EDIt : Ok je dosi cree les variable masi les laisser vide puis lancer la scène pour les remplir. Mais moi je les ait remplie a la mains LoL Bon je peut supprimer la scène maintenant. LoL En tous cas merci pour ce beau script Modifié le 23 septembre 2017 par Gandalf
Kana-chan Posté(e) le 23 septembre 2017 Signaler Posté(e) le 23 septembre 2017 En fait, dans le panneau des variables, on ne peut entrer que des nombres... Donc pour entrer des caractères alphanumériques, il faut passer par une scène. Voilà ...
Messages recommandés