Aller au contenu

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


Messages recommandés

Posté(e)

Oui ben la c'est àmon tour de le faire bosser et gratos enfin j’espère car si le ministère des finances (Madame) tombe la dessus on va avoir droit a une taxe :98:

  • Upvote 1
  • 2 semaines après...
Posté(e)

voici pour les impatients la version 4.1 qui corrige un problème d'authentification

et crée automatiquement une variable globale "SurvStation_Status" qui contient la valeur écrite dans le label Status. Vous pourrez ainsi récupérer l'information dans les autre scripts ou dans GEA.

Lorsque Lazer aura le temps, il mettra àjour le premier post.

Surveillance_Station_v4.1.vfib

Posté(e)

salut jojo.

Premier retour:

[DEBUG] 18:14:56: Error : Synology API version is too old : DSM 4.0-2251 and Surveillance Station 6.3 are required
voici le code que j'utilise avec succès jusqu'à  présent.
Je n'ai pas beacoup de temps pour le moment, j'ai décha chipoté un peu mais sans succès, ça fait longtemps que je ne me suis pas penchcé sur ce code... :-/
 
--------------------------------------------------
-- Synology Surveillance Station v2
-- Start/Stop recording
-- Lazer
-- Mars 2014
--------------------------------------------------

-- User configurable variables
local login = ""
local password = ""
local cameras = {1,2,4,5,6}
local action = "start"

-- System variables
local selfID = fibaro:getSelfId()
local ip = fibaro:get(selfID, 'IPAddress')
local port = fibaro:get(selfID, 'TCPPort')
local Synology = Net.FHttp(ip, tonumber(port))
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 = {
  	[100] = "Unknown error.",
	[101] = "Invalid parameters.",
	[102] = "API does not exist.",
	[103] = "Method does not exist.",
	[104] = "This API version is not supported.",
	[105] = "Insufficient user privilege.",
	[106] = "Connection time out.",
	[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 >= 3 and jsonTable.data["SYNO.SurveillanceStation.ExternalRecording"].maxVersion >= 1 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=1&cameraId="..cameras[i].."&action="..action.."&_sid="..SID
					response, status, errorCode = Synology:GET(payload)
					jsonTable = json.decode(response);
          fibaro:debug(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

dans le mainloop aussi problème:

[ERROR] 18:09:54: line 261: Expected value but found T_END at character 1
 
une idée ?
Posté(e)

si a la ligne +- 169 je met ceci:

if jsonTable.data["SYNO.API.Auth"].maxVersion >= 3 and jsonTable.data["SYNO.SurveillanceStation.Camera"].maxVersion >= 2 then

je n'ai plus le message d'erreur de version mais j'ai ceci: (pour Enable)

[DEBUG] 18:22:23: Synology API version OK
[DEBUG] 18:22:23: Request new SID
[DEBUG] 18:22:24: Synology API Auth OK
[ERROR] 18:22:25: line 138: attempt to index global 'API_CAMERA_ERROR_CODE' (a nil value)
Posté(e)

après avoir créé les variables globales àla main et effacé les fonction de check et création du main loop, ça va déjàmieux, enable et disable fonctionnent avec ce code ci:

--------------------------------------------------
-- Module  : Synology Surveillance Station v4
-- Button  : Start/Stop recording
-- Author  : Lazer
--------------------------------------------------

-- User configurable variables
--[[login = ""
password = ""
cameras = {0}
action = "start" ]]--

local login = ""
local password = ""
local cameras = {1,2,4,5,6}
local action = "Enable" -- start/stop/Enable/Disable

-- System variables
local debug_trace = false
error = false
local selfID = fibaro:getSelfId()
local ip = fibaro:get(selfID, 'IPAddress')
local port = fibaro:get(selfID, 'TCPPort')
local Synology = Net.FHttp(ip, tonumber(port))
local API_COMMON_ERROR_CODE = {
	[100] = "Unknown error",
	[101] = "Invalid parameters",
	[102] = "API does not exist",
	[103] = "Method does not exist",
	[104] = "This API version is not supported",
	[105] = "Insufficient user privilege",
	[106] = "Connection time out",
	[107] = "Multiple login detected"
}
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."
}

-- Message function
function Message(log_msg, label_msg, trace, debug_msg)
	if log_msg then
		fibaro:log(log_msg)
	end
	if debug_msg and (debug_trace or trace) then
		fibaro:debug(debug_msg)
	end
	if label_msg then
		fibaro:call(selfID, "setProperty", "ui.LabelStatus.value", label_msg)
		fibaro:setGlobal('SurvStation_Status', label_msg)
	end
end

-- Get Cameras list
local camera = false
if cameras then
	for k, v in ipairs(cameras) do
		if v > 0 then
			Message(nil, nil, false, "cameras{} exists")
			camera = true
			break
		end
	end
end
if not camera then
	local label = fibaro:get(selfID, "ui.LabelCameras.value")
	if label ~= nil and label ~= "" then
		Message(nil, nil, false, "Create cameras{}")
		cameras = json.decode(label)
	end
end
Message(nil, nil, false, "cameras{} : " .. json.encode(cameras))

-- génération d'un nouvel SID
function GetSID()
	-- Create new login session
	fibaro:debug("Request new SID")
	payload = "/webapi/"..pathAuth.."?api=SYNO.API.Auth&method=Login&version=2&account="..login.."&passwd="..password.."&session=SurveillanceStation&format=sid"
	Message(nil, nil, false, payload)
	response, status, errorCode = Synology:GET(payload)
	if tonumber(errorCode) == 0 and tonumber(status) == 200 then
		if response ~= nil and response ~= "" then
			jsonTable = json.decode(response)
			if jsonTable.success == true then
				fibaro:setGlobal('SurvStation_SID', jsonTable.data.sid)
				Message(nil, nil, true, "Synology API Auth OK")
			else
				fibaro:debug('<span style="color:red;">Error : API Authentication failure, '..(API_AUTH_ERROR_CODE[tonumber(jsonTable.error.code)] or API_COMMON_ERROR_CODE[tonumber(jsonTable.error.code)] or "???")..'</span>')
			end
		else
			fibaro:debug('<span style="color:red;">Error : API Authentication failure, empty response</span>')
		end			
	else
		fibaro:debug('<span style="color:red;">Error : API Authentication failure, errorCode='..errorCode..', status='..status..'</span>')
	end
end

-- Destroy current login session
function Destroy()
	-- fibaro:debug("Destroy current SID")
	payload = "/webapi/"..pathAuth.."?api=SYNO.API.Auth&method=Logout&version=2&session=SurveillanceStation&_sid="..SID
	response, status, errorCode = Synology:GET(payload)
end

-- Start or stop external recording of a camera
function Action()
	for i = 1, #cameras do
		if action == "start" or action == "stop" then
			payload = "/webapi/"..pathRecord.."?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=2&cameraId="..cameras[i].."&action="..action.."&_sid="..SID
		else
			payload = "/webapi/"..pathCamera.."?api=SYNO.SurveillanceStation.Camera&method="..action.."&version=3&cameraIds="..cameras[i].."&_sid="..SID
		end
		Message(nil, nil, false, payload)
		response, status, errorCode = Synology:GET(payload)
		if tonumber(errorCode) == 0 and tonumber(status) == 200 then
			if response ~= nil and response ~= "" then
				jsonTable = json.decode(response);
				if jsonTable.success == true then
					if action == "start" or action == "stop" then
						Message("OK", action.." OK", true, '<span style="color:green;">Synology Surveillance Station '..action..' recording for camera "'..tostring(cameras[i])..'" OK</span>')
					else
						Message("OK", action.." OK", true, '<span style="color:green;">Synology Surveillance Station '..action..' camera "'..tostring(cameras[i])..'" OK</span>')
					end
				else
					if action == "start" or action == "stop" then
						Message("Erreur", action.." failed", true, '<span style="color:red;">Synology Surveillance Station '..action..' recording for camera "'..tostring(cameras[i])..'" FAILED : '..(API_RECORD_ERROR_CODE[tonumber(jsonTable.error.code)] or API_COMMON_ERROR_CODE[tonumber(jsonTable.error.code)] or "???")..', '..response..'</span>')
					else
						Message("Erreur", action.." failed", true, '<span style="color:red;">Synology Surveillance Station '..action..' camera "'..tostring(cameras[i])..'" FAILED : '..(API_CAMERA_ERROR_CODE[tonumber(jsonTable.error.code)] or API_COMMON_ERROR_CODE[tonumber(jsonTable.error.code)] or "???")..', '..response..'</span>')
					end
					if tonumber(jsonTable.error.code) == 105 then error = true end	
				end
			else
				if action == "start" or action == "stop" then
					Message("Erreur", action.." failed", true, '<span style="color:red;">Synology Surveillance Station '..action..' recording for camera failed, empty response</span>')
				else
					Message("Erreur", action.." failed", true, '<span style="color:red;">Synology Surveillance Station '..action..' camera failed, empty response</span>')
				end
			end
		else
			if action == "start" or action == "stop" then
				Message("Erreur", action.." failed", true, '<span style="color:red;">Synology Surveillance Station '..action..' recording for camera failed, errorCode='..errorCode..', status='..status..', response='..(response or "")..'</span>')
			else
				Message("Erreur", action.." failed", true, '<span style="color:red;">Synology Surveillance Station '..action..' camera failed, errorCode='..errorCode..', status='..status..', response='..(response or "")..'</span>')
			end
		end
	end	
end

-- Discover available APIs and corresponding information
if action == "start" or action == "stop" or action == "Enable" or action == "Disable" then
	-- only if a valid action
	fibaro:call(selfID, "setProperty", "ui.LabelStatus.value", action.."...")
	payload = "/webapi/query.cgi?api=SYNO.API.Info&method=Query&version=1&query=SYNO.API.Auth,SYNO.SurveillanceStation.ExternalRecording,SYNO.SurveillanceStation.Camera"
	Message(nil, nil, false, payload)
	response, status, errorCode = Synology:GET(payload)
	if tonumber(errorCode) == 0 and tonumber(status) == 200 then
		if response ~= nil and response ~= "" then
			jsonTable = json.decode(response);
			if jsonTable.data["SYNO.API.Auth"].maxVersion >= 3 and jsonTable.data["SYNO.SurveillanceStation.Camera"].maxVersion >= 2 then
				Message(nil, nil, true, "Synology API version OK")
				pathAuth = jsonTable.data["SYNO.API.Auth"].path
				pathRecord = jsonTable.data["SYNO.SurveillanceStation.ExternalRecording"].path
				pathCamera = jsonTable.data["SYNO.SurveillanceStation.Camera"].path
				Message(nil, nil, false, "Synology API Auth path = "..pathAuth)
				Message(nil, nil, false, "Synology API Surveillance Station Record path = "..pathRecord)
				Message(nil, nil, false, "Synology API Surveillance Station Camera path = "..pathCamera)

				SID = fibaro:getGlobal('SurvStation_SID')
				if SID == nil or SID == "" then
					Destroy()
					GetSID()
					SID = fibaro:getGlobal('SurvStation_SID')
				end
				Message(nil, nil, false, "Synology API Auth SID = "..SID)
				Action()
				if error == true then
					Destroy()
					GetSID()
					SID = fibaro:getGlobal('SurvStation_SID')
					Action()
				end
			else
				Message("Erreur", action.." failed", true, '<span style="color:red;">Error : Synology API version is too old : <b>DSM 4.0-2251</b> and <b>Surveillance Station 6.3</b> are required</span>')
			end
		else
			Message("Erreur", action.." failed", true, '<span style="color:red;">Error : Can not connect to Synology server, empty response</span>')
		end
	else
		Message("Erreur", action.." failed", true, '<span style="color:red;">Error : Can not connect to Synology server, errorCode='..errorCode..', status='..status..', ip='..ip..', port='..port..', payload='..payload..', response='..(response or "")..'</span>')
	end
else
	Message("Erreur", action.." failed", true, '<span style="color:red;">Error : Not a valid action.</span>')
end
Posté(e)

pour start et stop, je dois mettre ceci pour que ça fonctionne: (version=1)

 

function Action()
for i = 1, #cameras do
if action == "start" or action == "stop" then
payload = "/webapi/"..pathRecord.."?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=1&cameraId="..cameras[i].."&action="..action.."&_sid="..SID
Posté(e)

ok, donc avec ces modif, ca fonctionne :-)

 

Par contre j'ai une petite demande:

J'avais créé des boutons style AllOn AllOff jusque là  pas de souci

Mais j'avais créé aussi des boutons In Only et Out Only qui eux activaient les camera 1 et 2 et désactivaient les cameras 3 4 et 5.

 

Donc voilà , si tu ne sais pas comment t'occuper, c'est une idée d'amélioration ;-)

 

Sinon le retour d'état est vraiment sympa et ça va beaucoup plus vite qu'avant...

Posté(e)

Jojo, j'ai vraiment pas le temps de jeter un oeil àce code en ce moment, tu as le temps de traiter, avec toutes les infos de Sebcbien ?

Tu sais que ton VD marche très bien chez moi, mais apparemment il reste des incompatibilités !!

Posté(e)

J'ai vu les commentaires de sebcbien. Je ne comprends pas, car je n'ai rien changé àvotre logique. J'y regarde.

Sebcbien, la v4 fonctionnait ?

Envoyé de mon Nexus 5 en utilisant Tapatalk

Posté(e)

@ sebcbien,

tu n'as vraiment pas de chance, je regarde à  ton problème après le souper lol

 

Sérieusement, le problème de création automatique des variables ne fonctionne qu'en v4.x, car l'API a changé.

J'ai vu que tu utilisais également une vieille version du code de Lazer, pas la version 4.0 ?

 

Comme Lazer et moi avons validé cette version sur le firmware V4.x, je propose de le laisser tel quel, étant donné que tu as un firmware v3.600, dautant plus que tu as trouvé une solution.

 

ok ?

Posté(e)

je confirme, je n'ai rien changé à  la logique des API etc de Lazer.

 

Comme sebcbien a trouvé la solution pour faire fonctionner le module en v3.600

Comme nous avons validé que cela fonctionnait impec avec la version 4.x de HC2

 

Je propose de ne rien changer à  cette version publiée.

 

SAUF si quand sebcbien est passé en v4.x (mais ça j'ai le temps de prendre des vacances  ;) ) et qu'il a encore des problèmes.

 

ok ?

Posté(e)

Voilà, suis en V4, ton script modifié (avec mes valeurs de version pour la validation de l'API) continue de fonctionner :-)

Posté(e)

Bonjour,

 

il faut rajouter les codes d'erreur dans quasi tous les boutons:

Sinon quand l'erreur arrive le script plante car il ne trouve pas ce tableau

local API_CAMERA_ERROR_CODE = {
[400] = "Execution failed.",
[401] = "Parameter invalid.",
[402] = "Camera disabled."
}
Posté(e)

et avec les valeurs de versions originales ?

 

Voilà , j'ai pris le tremps de tester, voici les message d'erreur:

 

List:
 

[DEBUG] 21:34:24: Synology Surveillance Station number of cameras = 5
[DEBUG] 21:34:24: Found camera  ID=1 Vendor=AXIS Model=xxx PTZ Enabled=true address=XXX.XXX.XXX.XXX
[DEBUG] 21:34:25: Found PTZ preset Salon et Cuisine ID=4          
[DEBUG] 21:34:25: Found PTZ preset All ID=5          
[DEBUG] 21:34:25: Found PTZ preset Hall ID=3          
[DEBUG] 21:34:25: Found PTZ preset Hall et Salon ID=6          
[DEBUG] 21:34:25: Found PTZ patrol Pat Hall vr cuisi ID=1          
[DEBUG] 21:34:25: Found camera  ID=2 Vendor=ONVIF Model=Generic_ONVIF Enabled=true address=XXX.XXX.XXX.XXX
[DEBUG] 21:34:26: Error : Synology Surveillance Station list PTZ presets failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:26: Error : Synology Surveillance Station list PTZ patrols failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:26: Found camera ID=4 Vendor=AXIS Model=207W Enabled=true address=XXX.XXX.XXX.XXX
[DEBUG] 21:34:27: Error : Synology Surveillance Station list PTZ presets failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:27: Error : Synology Surveillance Station list PTZ patrols failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:27: Found camera  ID=5 Vendor=ONVIF Model=Generic_ONVIF Enabled=true address=XXX.XXX.XXX.XXX
[DEBUG] 21:34:28: Error : Synology Surveillance Station list PTZ presets failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:28: Error : Synology Surveillance Station list PTZ patrols failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:28: Found camera ID=6 Vendor=ONVIF Model=Generic_ONVIF Enabled=false address=XXX.XXX.XXX.XXX
[DEBUG] 21:34:29: Error : Synology Surveillance Station list PTZ presets failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:30: Error : Synology Surveillance Station list PTZ patrols failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}

Start ou Stop, ou enable ...

[DEBUG] 21:41:29: Error : Synology API version is too old : DSM 4.0-2251 and Surveillance Station 6.3 are required
 

 

All On: avis c'est parceque vous testez sur xpenology ?

Posté(e)

@sebcbien

 

il faut rajouter les codes d'erreur dans quasi tous les boutons:

Mais il faudrait également les traiter, ce qui n'est pas prévu actuellement.

         
[DEBUG] 21:34:25: Found camera  ID=2 Vendor=ONVIF Model=Generic_ONVIF Enabled=true address=XXX.XXX.XXX.XXX
[DEBUG] 21:34:26: Error : Synology Surveillance Station list PTZ presets failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:26: Error : Synology Surveillance Station list PTZ patrols failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:26: Found camera ID=4 Vendor=AXIS Model=207W Enabled=true address=XXX.XXX.XXX.XXX
[DEBUG] 21:34:27: Error : Synology Surveillance Station list PTZ presets failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:27: Error : Synology Surveillance Station list PTZ patrols failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:27: Found camera  ID=5 Vendor=ONVIF Model=Generic_ONVIF Enabled=true address=XXX.XXX.XXX.XXX
[DEBUG] 21:34:28: Error : Synology Surveillance Station list PTZ presets failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:28: Error : Synology Surveillance Station list PTZ patrols failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:28: Found camera ID=6 Vendor=ONVIF Model=Generic_ONVIF Enabled=false address=XXX.XXX.XXX.XXX
[DEBUG] 21:34:29: Error : Synology Surveillance Station list PTZ presets failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}
[DEBUG] 21:34:30: Error : Synology Surveillance Station list PTZ patrols failed, Execution failed., {"error":{"code":400,"errors":{"param1":"","param2":""}},"success":false}

c'est probablement que c'est caméra n'ont pas de PTZ définies => pas de problème

[DEBUG] 21:41:29: Error : Synology API version is too old : DSM 4.0-2251 and Surveillance Station 6.3 are required

quelles sont tes versions de DSM et de Surveillance Station ?

Posté(e)

note to self:

 

erreur 117 = pas assez de permissions...

 

ce qui est fou c'est que ça marche depuis un mois, que je n'ai pas changé de version, ni de droits et que ça marchait... ?!?

 

bref, on peut ajouter ceci:

local API_CAMERA_ERROR_CODE = {
[117] = "Not Enough Permission or access denied.",
[400] = "Execution failed.",
[401] = "Parameter invalid.",
[402] = "Camera disabled."
}

edit: 

ok j'ai compris... j'avais utilisé admin pour enable et disable, donc le sid a été généré avec. ensuite une fois le sid bon, on peut mettre n'importe quel user/passwor, ça fonctionnera jusqu'a ce que le sid soit révoqué

Posté(e)

@sebcbien,

je te promets, je n'ai rien bu. Mais je ne comprends plus rien, sauf que peut-être que l'utilisateur que tu as renseigné ne serait pas admin de tes caméras (cfr le 1° post de Lazer)

Je veux bien regarder, mais comme tu sembles être le seul àavoir des problèmes, ce sera plus difficile : il faudrait que je puisse reproduire l'erreur (mais laquelle ?) chez moi

Posté(e)

L'erreur était due àun utilisateur qui n'avais pas assez de droits.

J'avais généré ce sid avec un compte admin, mais une fois le sid généré, j'avais mis un autre user.

Or, si on change user/password dans le script lua après avoir généré un sid, ça n'a pas d'impact car le système utilisé toujours le sid précédent.

Je pensais donc que ça marchait.

Mais après quelques jours, lorsque le sid àexpiré, le nouveau généré (avec un user qui n'avait pas assez de droits) donnait une erreur 117.

L'erreur 117 n'existait pas et le script plantais.

Il faut donc ajouter l'erreur 117 àAPI_CAMERA_ERROR_CODE

... Et cette variable doit être présente dans le script derrière chaque bouton (elle n'y est pas dans ta dernière version) car sinon le script plante au lieu de retourner une erreur.

Sent from my SM-N910F using Tapatalk

Posté(e)

ok rajouter l'erreur 117, mais la table API_CAMERA_ERROR_CODE n'est définie que dans le bouton List.

Ne serait-ce pas mieux de le rajouter dans la table API_AUTH_ERROR_CODE, qui existe dans tous les boutons ?

Posté(e)

C'est bizarre que ça plante quand le code 117 apparait, normalement le script est censé gérer le cas de figure d'un code inconnu en renvoyant "???" :

..(self.API_CAMERA_ERROR_CODE[tonumber(jsonTable.error.code)] or self.API_COMMON_ERROR_CODE[tonumber(jsonTable.error.code)] or "???")..

Donc ça veut dire qu'il y a un endroit où on a oublié de mettre cette protection en place ?

C'est àquelle ligne que ça se produit ?

Posté(e)

merci de prendre le relais Lazer, car en effet je ne comprenais pas non plus, d'autant plus que je n'ai jamais été autant dans le détail du code

×
×
  • Créer...