Lazer Posté(e) le 15 septembre 2015 Auteur Signaler Posté(e) le 15 septembre 2015 Ce qui me fait penser que je n'ai toujours pas mis le nouveau VD de Jojo en première page. J'attends de voir avec Sebcbien si y'a effectivement un bug àcorriger et je m'en occupe.
angusperde Posté(e) le 16 septembre 2015 Signaler Posté(e) le 16 septembre 2015 Comme d' habitude à chaque fois que je veux faire une chose nouvelle, je galère dès le départ : Mon Synology est en DSM 5.2-5592 Update 4, Surveillance station en : 7.0.3778, mon FC2 en 4.056. J' ai renseigné le login et le mot de passe de mon Sinology dans votre code, ainsi que son IP et port, Je lance le module de Lazer version 4.1 que je viens d' importer avec DEBUG=true et l' instruction : local Synology = Net.FHttp(IP, tonumber(port)) se fâche tout rouge et me renvois à ma triste incompétence.... Merci à Lazer, JoJo, Secbien ou tout autre chantre du LUA de m' éclairer de leurs LUAmières....
Lazer Posté(e) le 16 septembre 2015 Auteur Signaler Posté(e) le 16 septembre 2015 C'est que tu t'es trompé dans la saisie de l'IP et du port. Capture d'écran du module virtuel ? Message d'erreur exact de la ligne qui plante ?
jojo Posté(e) le 16 septembre 2015 Signaler Posté(e) le 16 septembre 2015 c'est bien le port 5000 que tu as renseigné ?il n'y a pas d'espaces ?
angusperde Posté(e) le 16 septembre 2015 Signaler Posté(e) le 16 septembre 2015 -- User configurable variables login = "admin" password = "xxxxxxxx" cameras = {1} action = "start" -- start/stop/Enable/Disable -- System variables local debug_trace = true error = false local selfID = fibaro:getSelfId() local ip = fibaro:get(selfID, '192.168.1.200') local port = fibaro:get(selfID, '5000') local Synology = Net.FHttp(ip, tonumber(port)) Et l' erreur apparait : [ERROR] 15:24:40: line FHttp: non, pas d' espace. Merci Lazer,
Lazer Posté(e) le 16 septembre 2015 Auteur Signaler Posté(e) le 16 septembre 2015 mais non, mais les IP et ports, c'est dans les paramètres du VD, pas dans le code !!
Lazer Posté(e) le 16 septembre 2015 Auteur Signaler Posté(e) le 16 septembre 2015 relis la 1ère page, y'a même une capture d'écran que tu as du couper dans le chapitre Configuration
angusperde Posté(e) le 16 septembre 2015 Signaler Posté(e) le 16 septembre 2015 J' ai du mal àsuivre : c' est quoi les paramètres du VD ?
Lazer Posté(e) le 16 septembre 2015 Auteur Signaler Posté(e) le 16 septembre 2015 (modifié) regarde la capture d'écran en première page Modifié le 16 septembre 2015 par Lazer 1
angusperde Posté(e) le 16 septembre 2015 Signaler Posté(e) le 16 septembre 2015 Ok, j' ai renseigné l' IP et ports au niveau du module virtuel. Maintenant j' ai l' erreur suivante : [DEBUG] 16:13:20: /webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=2&account=admin&passwd=xxxxxxxxx&session=SurveillanceStation&format=sid [DEBUG] 16:13:20: Error : API Authentication failure, Permission denied., {"error":{"code":402},"success":false}
Lazer Posté(e) le 16 septembre 2015 Auteur Signaler Posté(e) le 16 septembre 2015 t'es sur de ton login/password ? tu as bien appliqué àla lettre les étapes de la première page ?
angusperde Posté(e) le 16 septembre 2015 Signaler Posté(e) le 16 septembre 2015 Tu veux dire la première page (1/14) de ce sujet : surveillance station ? Oui je l' ai suivie, mais par acquis de confiance je recommencerais tout demain à tête reposée......
Lazer Posté(e) le 16 septembre 2015 Auteur Signaler Posté(e) le 16 septembre 2015 Oui la première page de ce sujet Normalement tout y est bien expliqué, avec les screeshots de chaque étape, sur le Syno et sur la HC2. 1
sebcbien Posté(e) le 20 septembre 2015 Signaler Posté(e) le 20 septembre 2015 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 ? le script plante a cause de la gestion d'erreur ;-) Quand il ne trouve pas ce tableau: Il faut donc l'ajouter dans le code de tous les boutons local API_CAMERA_ERROR_CODE = { [117] = "Not Enough Permission or access denied.", [400] = "Execution failed.", [401] = "Parameter invalid.", [402] = "Camera disabled." }
sebcbien Posté(e) le 20 septembre 2015 Signaler Posté(e) le 20 septembre 2015 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) Ce qui me fait penser que je n'ai toujours pas mis le nouveau VD de Jojo en première page. J'attends de voir avec Sebcbien si y'a effectivement un bug à corriger et je m'en occupe. désolé du retard, mis de côté puis oublié de répondre :-/ Voici le résumé des modifications: J'ai un vrai synology, ceci explique peut être la différence ? (surveillance station V7.x) et dernière version du dsm en cours 1) Ajout de la table api camera error code avec entrée 117 (ligne 46 du code ci-dessous) J'ai mis aussi la table ptz, inutile je pense, mais comme dirait ma femme, .. on ne sais jamais ;-) bref, on peut l'enlever mais maintenant c'est la même série pour tous les boutons. 2) Versions de l'api qui donne l'erreur suivante: [DEBUG] 18:14:56: Error : Synology API version is too old : DSM 4.0-2251 and Surveillance Station 6.3 are required code avec la table camera (mais manque l'entrée de l'erreur 117) http://www.domotique-fibaro.fr/index.php/topic/709-piloter-lenregistrement-des-cam%C3%A9ras-avec-synology-surveillance-station/page-13#entry85858 et code complet avec modification de la ligne 170 pour la version de l'api: (177 du code ci-dessous) maxVersion >= 3 au lieu de maxVersion >= 2 3) Modification pour le start/stop: (&version= 1 au lieu de &version=2) (ligne 127 du code ci-dessous) http://www.domotique-fibaro.fr/index.php/topic/709-piloter-lenregistrement-des-cam%C3%A9ras-avec-synology-surveillance-station/page-13#entry85859 Voici le code complet (pour le bouton start stop): -------------------------------------------------- -- Module : Synology Surveillance Station v4 -- Button : Start/Stop recording -- Author : Lazer -------------------------------------------------- -- User configurable variables local login = "XXXXXXXX" local password = "XXXXXXXXX" local cameras = {1,2,4,5,6} local action = "start" -- 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." } local API_CAMERA_ERROR_CODE = { [117] = "Not Enough Permission or access denied.", [400] = "Execution failed.", [401] = "Parameter invalid.", [402] = "Camera disabled." } local API_PTZ_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=1&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
Sakkhho Posté(e) le 15 janvier 2016 Signaler Posté(e) le 15 janvier 2016 du coup je suis perdu, est ce que le vd est 1ere page est fonctionnel avec un "vrai" syno ? oui je dois adapter avec le code de seb ?
sebcbien Posté(e) le 15 janvier 2016 Signaler Posté(e) le 15 janvier 2016 Chez moi le vd de la 1ere page ne fonctionne pas (bien). Mais chez d'autres pas de problème. Essaye avec le vd et si ça va pas, essaye mon code et dis nous ce qu'il en est ;-) Sent from my Note4
Lazer Posté(e) le 15 janvier 2016 Auteur Signaler Posté(e) le 15 janvier 2016 hum, faudrait que je fasse le point et que je me replonge làdedans, je n'y ai pas touché depuis plusieurs mois. En tout cas le VD fonctionne sans broncher sur mon HC2.
jojo Posté(e) le 16 janvier 2016 Signaler Posté(e) le 16 janvier 2016 @Lazer, Il me semble que tu n'as pas mis àjour la première page avec les modifications qu'on avaient apportées (principalement réutilisation du SID) Ou je me trompe ?
Lazer Posté(e) le 16 janvier 2016 Auteur Signaler Posté(e) le 16 janvier 2016 hum, c'est bien possible ça.... bon je courre me cacher (et je mettrai àjour la première page comme si de rien n'était, mais pas tout de suite....) 1
flamalex Posté(e) le 27 janvier 2016 Signaler Posté(e) le 27 janvier 2016 Lazer, c'est un super comme module virtuel il est extra j'ai suivi à la lettre l'ensemble des pages de ton tuto. néanmoins j'ai une question, de temps en temps, lorsque je clic (une scène GEA ou moi physiquement) sur le bouton start ou stop (j'ai 6 cameras sur syno, je fais les tests avec 3) j'ai le message "start failed" ou "stop failed" dans le LABELstatut. j'ai une scene GEA, si intrusion alors alarme, clic sur le bouton start (ID1) du VD, si arret alarme alors "stop" cameras dans les deux cas, c'est incertain, il arrive (lors des tests alarme) que le start soit resté sur "failed" je pense avoir absolument respecté l’ensemble des paramétres login, password, local cameras .... ne pourrait on pas, dans ma scène GEA, lui dire de clic sur start du VD, jusqu'a statut "start OK"? ou autre solution -- ALARME -- Quand la Sirene s'active si alarme activée, alors on allume tout et on ferme les volets et REC CAMERA (1=START cam) GEA.add({{"Value",id["SIRENE"],id["ALARMESTATUT"],0}}, -1 , "ALARME INTRUSION SIRENE en Marche" , {{"Inverse"},{"VirtualDevice",id["VD_CAMERA"],1},{"turnOn", id["DIM_SAM"]},{"turnOn", id["DIM_ENTREE"]},{"turnOn", id["DIM_ESC"]},{"turnOn", id["ECL_SAM1"]},{"turnOn", id["ECL_SAM2"]},{"turnOn", id["ECL_JARDIN"]},{"Close",id["VR_SALON"],100},{"Close",id["VR_CUISINE"],100},{"Close",id["VB_ENTREE"],100},{"Close",id["VB_SAM"],100}}) -- Quand la sirène s'arrète, si l'alarme est desactivée alors arret eclairage jardin, DIM SAM et DIM ESC et STOP CAMERA (2=STOP cam) GEA.add({id["SIRENE"],id["ALARMESTATUT"]}, -1 , "stop tt apres alarme" , {{"VirtualDevice",id["VD_CAMERA"],2},{"turnOff", id["ECL_JARDIN"]},{"turnOff", id["DIM_SAM"]},{"turnOff", id["DIM_ESC"]}})
Lazer Posté(e) le 27 janvier 2016 Auteur Signaler Posté(e) le 27 janvier 2016 Oui tu as le problème du SID, qui est résolu par la version de Jojo, disponible dans les dernières pages, et que je n'ai toujours pas intégré en première page..... (honte àmoi)
flamalex Posté(e) le 27 janvier 2016 Signaler Posté(e) le 27 janvier 2016 oui en effet j'ai vu, mais c'est pas mieux, c'est mm pire, cette fois j'ai FAILED constamment
sebcbien Posté(e) le 27 janvier 2016 Signaler Posté(e) le 27 janvier 2016 Essaye avec ma version alors Sent from my Note4
flamalex Posté(e) le 27 janvier 2016 Signaler Posté(e) le 27 janvier 2016 Salut Sebcbien, euh, c'est de la tienne dont je parlais, j'ai remplacé par ton code le start stop.#290 rien à faire c'est vraiment curieux en revanche, je vais regarder celle de jojo, que j'ai zappé. EDIT: la version qui fonctionne maintenant chez moi, et pour le moment sans bug "Surveillance_Station_v4.1.vfib" j'ai un autre souci maintenant, je cherche le numero de ce nouveau VD, HC2 toolkit 1.1.0.6 HC2 v4.070 ne fonctionne plus chez moi 1
Messages recommandés