Bonjour,
J'essaye de connecter mon NAS Syno (DS918+) mais sans succès....
Suis sous DSM 6.1.5 15254 update1
NB1 création des variables
NB2 création du module: Adresse IP ? et Port ? c peut être de la que vient mon problème?
NB3 Redémarrer
--------------------------------------------------
-- Synology DSM
-- Reboot the disk station
-- janvier 2015
--------------------------------------------------
-- User configurable variables
local login = fibaro:getGlobal("LoginNAS1");
local password = fibaro:getGlobal("MdpNAS1");
-- System variables
local selfID = fibaro:getSelfId();
local ip = fibaro:get(selfID, "192.168.1.55"); -----ici c bien " ou '
local port = fibaro:get(selfID, "5000");-------------idem
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.",
};
-- 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);
local 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="/entry.cgi";
apiUsed="SYNO.Core.System";
if version < 6 then
cgiUsed="/dsm/system.cgi";
apiUsed="SYNO.DSM.System";
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.."]");
-- Reboot the disk station
payload = "/webapi"..cgiUsed.."?api="..apiUsed.."&version=1&method=reboot&_sid="..SID;
response, status, errorCode = Synology:GET(payload);
if tonumber(status) == 200 then
fibaro:debug("Response ["..response.."]");
jsonTable = json.decode(response);
if jsonTable.success == true then
fibaro:log("Redémarrage OK");
fibaro:debug('<span style="color:green;">Redémarrage Disk Station Synology OK</span>');
else
fibaro:log("Erreur");
fibaro:debug('<span style="color:red;">Disk Station Synology n\'a pas redémarré</span>');
end
--
else
fibaro:log("Erreur");
fibaro:debug('<span style="color:red;">Erreur : '..API_AUTH_ERROR_CODE[tonumber(errorCode)]..'</span>');
--fibaro:debug('<span style="color:red;">Erreur : '..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(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
NB4 Réveiller
-- convert MAC adress, every 2 Chars (7-bit ASCII), to one Byte Char (8-bits)
function convertMacAddress(address)
local s = string.gsub(address, ":", "");
local x = ""; -- will contain converted MAC
for i=1, 12, 2 do
x = x .. string.char(tonumber(string.sub(s, i, i+1), 16));
end
return x;
end
fibaro:log("Réveiller");
-- MAC adress
local _macAdd = fibaro:getGlobal("MacNAS1");
local _macAddress = convertMacAddress(_macAdd);
-- Create Magic Packet 6 x FF
local _magicPacket = string.char(0xff, 0xff, 0xff, 0xff, 0xff, 0xff);
-- Broadcast Address
local _broadcastAddress = fibaro:getGlobal("BcastNAS");
-- Default port used
local _wakeOnLanPort = 9;
fibaro:sleep(750);
for i = 1, 16 do
_magicPacket = _magicPacket .. _macAddress;
end
fibaro:log("Magic packet créé");
fibaro:sleep(1000);
socket = Net.FUdpSocket();
socket:setBroadcast(true);
local bytes, errorCode = socket:write(_magicPacket, _broadcastAddress, _wakeOnLanPort);
--check for error
if errorCode == 0 then
fibaro:log("Envoyé");
else
fibaro:log("Envoi raté");
end
-- clean up memory
socket = nil;
fibaro:log("Attendre le réveil.");
NB5 Boucle principale
-- Interval d'execution en minutes
local pollingTime = 10;
-- ID du virtual device
local selfID = fibaro:getSelfId();
fibaro:call(selfID, "pressButton", "3");
fibaro:sleep(pollingTime * 60000);
Merci pour votre aide.....