Aller au contenu

Piloter L'enregistrement Des Caméras Avec Synology Surveillance Station


Lazer

Messages recommandés

J'ai mis à  jour le fichier joint au premier post. Je ne sais pas trop d'où sort ce "5", mais ça devrait être corrigé.

 

Si l'import ne fonctionne pas, voici le code source du module à  copier/coller :

 

Pour les 2 boutons Start et Stop, c'est le même code, il faut simplement changer la variable action en début de script :

--------------------------------------------------
-- Synology Surveillance Station
-- Start/Stop recording
-- Lazer
-- Mars 2014
--------------------------------------------------

-- User configurable variables
local Synology = Net.FHttp("192.168.1.1", 5000)
local login = "user"
local password = "password"
local cameras = {1, 2, 3}
local action = "start" -- "stop"

-- System variables
local API_AUTH_ERROR_CODE = {
	[100] = "Unknown error.",
	[101] = "The account parameter is not specified.",
	[400] = "Invalid password.",
	[401] = "Guest or disabled account.",
	[402] = "Permission denied.",
	[403] = "One time password not specified.",
	[404] = "One time password authenticate failed."
}
local API_RECORD_ERROR_CODE = {
	[400] = "Execution failed.",
	[401] = "Parameter invalid.",
	[402] = "Camera disabled."
}

-- Discover available APIs and corresponding information
payload = "/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.API.Auth,SYNO.SurveillanceStation.ExternalRecording"
response, status, errorCode = Synology:GET(payload)
if tonumber(status) == 200 then
	jsonTable = json.decode(response);
	if jsonTable.data["SYNO.API.Auth"].maxVersion >= 2 and jsonTable.data["SYNO.SurveillanceStation.ExternalRecording"].maxVersion >= 2 then
		fibaro:debug("Synology API version OK")
		pathAuth = jsonTable.data["SYNO.API.Auth"].path
		pathRecord = jsonTable.data["SYNO.SurveillanceStation.ExternalRecording"].path
		fibaro:debug("Synology API Auth path = "..pathAuth)
		fibaro:debug("Synology API Surveillance Station Record path = "..pathRecord)

		-- Create new login session
		payload = "/webapi/"..pathAuth.."?api=SYNO.API.Auth&method=Login&version=2&account="..login.."&passwd="..password.."&session=SurveillanceStation&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("Synology API Auth SID = "..SID)

				for i = 1, #cameras do
					-- Start or stop external recording of a camera
					payload = "/webapi/"..pathRecord.."?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=2&cameraId="..cameras[i].."&action="..action.."&_sid="..SID
					response, status, errorCode = Synology:GET(payload)
					jsonTable = json.decode(response);
					if jsonTable.success == true then
						fibaro:log("OK")
						fibaro:debug('<span style="color:green;">Synology Surveillance Station '..action..' recording for camera "'..tostring(cameras[i])..'" OK</span>')
					else
						fibaro:log("Erreur")
						fibaro:debug('<span style="color:red;">Synology Surveillance Station '..action..' recording for camera "'..tostring(cameras[i])..'" FAILED : '..API_RECORD_ERROR_CODE[tonumber(jsonTable.error.code)]..'</span>')
					end
				end

				-- Destroy current login session
				payload = "/webapi/"..pathAuth.."?api=SYNO.API.Auth&method=Logout&version=2&session=SurveillanceStation&_sid="..SID
				response, status, errorCode = Synology:GET(payload)
			else
				fibaro:log("Erreur")
				fibaro:debug('<span style="color:red;">Error : '..API_AUTH_ERROR_CODE[tonumber(jsonTable.error.code)]..'</span>')
			end
		else
			fibaro:log("Erreur")
			fibaro:debug('<span style="color:red;">Error : API Authentication failure</span>')
		end
	else
		fibaro:log("Erreur")
		fibaro:debug('<span style="color:red;">Error : Synology API version is too old : <b>DSM 4.0-2251</b> and <b>Surveillance Station 6.1</b> are required</span>')
	end
else
	fibaro:log("Erreur")
	fibaro:debug('<span style="color:red;">Error : Can not connect to Synology server</span>')
end

.

 

Pour le bouton List :

--------------------------------------------------
-- Synology Surveillance Station
-- List cameras
-- Lazer
-- Mars 2014
--------------------------------------------------

-- User configurable variables
local Synology = Net.FHttp("192.168.1.1", 5000)
local login = "user"
local password = "password"

-- System variables
local API_AUTH_ERROR_CODE = {
	[100] = "Unknown error.",
	[101] = "The account parameter is not specified.",
	[400] = "Invalid password.",
	[401] = "Guest or disabled account.",
	[402] = "Permission denied.",
	[403] = "One time password not specified.",
	[404] = "One time password authenticate failed."
}

-- Discover available APIs and corresponding information
payload = "/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.API.Auth,SYNO.SurveillanceStation.Camera"
response, status, errorCode = Synology:GET(payload)
if tonumber(status) == 200 then
	jsonTable = json.decode(response);
	if jsonTable.data["SYNO.API.Auth"].maxVersion >= 2 and jsonTable.data["SYNO.SurveillanceStation.Camera"].maxVersion >= 2 then
		fibaro:debug("Synology API version OK")
		pathAuth = jsonTable.data["SYNO.API.Auth"].path
		pathCamera = jsonTable.data["SYNO.SurveillanceStation.Camera"].path
		fibaro:debug("Synology API Auth path = "..pathAuth)
		fibaro:debug("Synology API Surveillance Station Camera path = "..pathCamera)

		-- Create new login session
		payload = "/webapi/"..pathAuth.."?api=SYNO.API.Auth&method=Login&version=2&account="..login.."&passwd="..password.."&session=SurveillanceStation&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("Synology API Auth SID = "..SID)

				-- Get the list of all cameras
				payload = "/webapi/"..pathCamera.."?api=SYNO.SurveillanceStation.Camera&method=List&version=1&_sid="..SID
				--fibaro:debug(payload)
				response, status, errorCode = Synology:GET(payload)
				--fibaro:debug(response)
				--fibaro:debug(status)
				--fibaro:debug(errorCode)
				jsonTable = json.decode(response);

				if jsonTable.success == true then
					fibaro:debug('Synology Surveillance Station number of cameras = '..tostring(jsonTable.data.total))
					for i = 1, #jsonTable.data.cameras do
						fibaro:debug('<span style="color:green;">Found camera <b>'..jsonTable.data.cameras[i].name..'</b> ID=<b>'..jsonTable.data.cameras[i].id..'</b> address='..jsonTable.data.cameras[i].host..'</span>')
					end
					fibaro:log("OK")
				else
					fibaro:log("Erreur")
					fibaro:debug('<span style="color:red;">Synology Surveillance Station list cameras FAILED</span>')
				end

				-- Destroy current login session
				payload = "/webapi/"..pathAuth.."?api=SYNO.API.Auth&method=Logout&version=2&session=SurveillanceStation&_sid="..SID
				response, status, errorCode = Synology:GET(payload)
			else
				fibaro:log("Erreur")
				fibaro:debug('<span style="color:red;">Error : '..API_AUTH_ERROR_CODE[tonumber(jsonTable.error.code)]..'</span>')
			end
		else
			fibaro:log("Erreur")
			fibaro:debug('<span style="color:red;">Error : API Authentication failure</span>')
		end
	else
		fibaro:log("Erreur")
		fibaro:debug('<span style="color:red;">Error : Synology API version is too old : <b>DSM 4.0-2251</b> and <b>Surveillance Station 6.1</b> are required</span>')
	end
else
	fibaro:log("Erreur")
	fibaro:debug('<span style="color:red;">Error : Can not connect to Synology server</span>')
end
Lien vers le commentaire
Partager sur d’autres sites

Narsil,

 

Non, je ne pense pas que ça tournera sur HCL, car il me semble bien qu'il n'est pas possible d'importer un Virtual Device comportant du code LUA.

Peut-être qu'en v4 avec les plugins ça sera possible, mais pour le moment ce ne sont que des suppositions.

Avec la HC Lite, tu peux seulement appeler des URL simples, avec la commande HTTP GET. Donc il faudrait que les scripts de ce module virtuel soient hébergés sur un autre serveur. Mais comme tu as peu de chances de pouvoir faire tourner du LUA sur une autre plateforme, il faudrait transcrire le code en PHP par exemple.... bref, ce n'est que déporter la complexité sur un autre serveur.

 

EDIT : grillé par Shad !

Lien vers le commentaire
Partager sur d’autres sites

Pour la configuration HC2 , j'ai fais deux groupes donc deux modules, un Module Intérieur (5 cams record) et un Module Extérieur (4cams record). On peut créer aussi un module par cam ( mais ça fait beaucoup de bouton a appuyer en même temps).

 

merci encore et toujours

Lien vers le commentaire
Partager sur d’autres sites

Oui tout est possible :)

Mais comme je ne connais pas du tout l'API Qnap, et que je n'ai pas de Qnap pour tester, je te laisse t'y coller ;)

Tu peux reprendre les scripts, et créer un nouveau sujet dédié.

Lien vers le commentaire
Partager sur d’autres sites

j'ai enfin eu le temps de mettre ça en place  :60:

Super Lazer,  ça marche nickel.

j'ai du copier le code pour le "STOP" car cela ne fonctionné pas direct avec le VD, mais une fois copier/coller et mis mes paramètres , super  ;)

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...