Connecteur Synology Surveillance Station
#11
(05-06-2017, 01:45 PM)jojo a écrit : @grichka,
@moicphil dans son tuto pushover avait montré comment on pouvait inclure des variables (celles des automates) dans les commandes.
Mais c'était pour des commandes ASCII, pas du JS.
Et donc sa méthode ne fonctionne pas. Comme tu t'y connais plus que moi, j'espère que tu vas trouver.
Mais si tu trouves la solution, c'est génial.
Je verrais 2 variables : SS_Camera_id, SS_Camera_action (start/stop/enable/disable).
et Il y aurait un automate pour gérer les "actions" des caméras en fonction des valeurs de ces variables.
et dans l'équipement, on limiterait les commandes : Update sid / Logout / Enable or Disable / Start or stop recording

Pour récupérer le statut d'une caméra, je suppose qu'il faut modifier le petit code JS du connecteur. Mais il "pousse" les données dans la variable de l'équipement. Sais-tu comment on pourrait récupérer cette valeur dans une variable d'automate ? (on pourrait déjà faire le test avec le Idsession)

et là, on aurait un Roll-Royce ;-)

Je ne sais pas s'il est possible d'inclure des variables "Lifedomus" dans une commande JS ou s'il est possible d'écrire dans une variable d'équipement via un automate. Mais il serait, à mon avis, possible de tout passer en commande  ASCII et de passer les variables souhaitées en paramètres dans les automates comme dans le tuto de @moicphil, y compris le Idsession puisque les variables des équipements sont lisibles/exploitables dans un automate.

Lifedomus Vision
Interface graphique : Windows Seven, Smartphone/Tablette Androïd
Domotique : KNX, ZWave [wallplug Fibaro, Keyfob], Multiroom Sonos, Ecodevice, Alarme Paradox
Répondre
#12
en effet, si tu trouves le moyen d'incoporer le Idsession dans ASCII, on as gagné
Répondre
#13
bon, j'ai continué mes investigations.
Et la question qui m'a taraudé l'esprit toute la journée : "Pourquoi le Enable/Disable qui fonctionnait hier soir ne fonctionnait plus ce matin, alors que le start/stop recording fonctionnait toujours ?".
De plus l'appel via l'API depuis ma HC2 fonctionnait toujours. => à n'y rien comprendre.
A la lecture de plusieurs infos, j'ai vu que la doc de l'api de Synology était bourrée de fautes, et même qu'ils n'étaient pas cohérents dans leurs exemples.
J'ai donc fait du reverse engineering du VD de @Lazer de a HC2, pour torouver les bonnes commandes et versions, ...

Donc voici ce qui fonctionne pour ma version 7.1.-4146 de Surveillance Station :


Citation :Update SID :
command = "/auth.cgi?api=SYNO.API.Auth&method=Login&version=2&account=Fibaro&passwd=Camera123&session=SurveillanceStation&format=sid" ;

===========
désactiver caméra 3 :
command = "/entry.cgi?api=SYNO.SurveillanceStation.Camera&method=Disable&version=3&cameraIds=3&_sid=" + Idsession ;

===========
activer caméra 3 :
command = "/entry.cgi?api=SYNO.SurveillanceStation.Camera&method=Enable&version=3&cameraIds=3&_sid=" + Idsession ;

===========
Record Start caméra 3 :
command = "/entry.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=1&cameraId=3&action=start&_sid=" + Idsession ;

===========
Record Stop caméra 3 :
command = "/entry.cgi?api=SYNO.SurveillanceStation.ExternalRecording&method=Record&version=1&cameraId=3&action=stop&_sid=" + Idsession ;

===========
Liste des caméras :
command = "/entry.cgi?api=SYNO.SurveillanceStation.Camera&method=List&version=4&_sid=" + Idsession ;

===========
Logout :
command = "/auth.cgi?api=SYNO.API.Auth&method=Logout&version=2&session=SurveillanceStation&_sid=" + Idsession ;

La commande "Liste des caméras" permet d'afficher dans le débuggeur du connecteur les ID des caméras installées.
Répondre
#14
Je vois que tu es à fond dessus Eek-1e6fb  ...
Effectivement, j'avais remarqué des anomalies dans les exemples de l'API. Je n'ai pas eu de problème particulier sur les commandes que j'ai utilisées.

Je te confirme qu'il est possible de passer tout ce que tu veux en paramètres.

Le principe :
Au niveau de l'équipement
Passer les commandes en ASCII, supprimer tous les éléments JS (guillemets ...)
Mettre entre des accolades {} les éléments que tu veux passer en paramètre et notamment le numéro de SID à leur emplacement normal dans la commande [exemple : {numerodecam} et {SID}]

Au niveau de l'automate :
Une fois passée la commande pour récupérer le Idsession [Update SID] tu le stockes dans une variable de ton choix de type string [Le Idsession est récupérable dans l'état de l'équipement]
Tu lances tes commandes avec les paramètres [numéro de caméra ...] de ton choix et notamment le SID où tu indiques ta variable.

Cela fonctionne très bien chez moi ...

NB : J'ai des soucis d'actualisation de l'équipement quand j'effectue des modifications. Mes modifications ne sont pas toujours répercutées et je ne les retrouve pas dans l'automate. Je suis obligé de me déconnecter/reconnecter de Lifedomus CS. Je ne sais pas si c'est un bug ou un souci de mon installation.

Lifedomus Vision
Interface graphique : Windows Seven, Smartphone/Tablette Androïd
Domotique : KNX, ZWave [wallplug Fibaro, Keyfob], Multiroom Sonos, Ecodevice, Alarme Paradox
Likes Received: 20 in 10 posts
Likes Given: 1
Répondre
#15
Merci pour tes recommandations.
Je vais tester tout cela demain.
Tu vois que ton tuto, tu ne l'as pas fait pour rien ...

Pour tes soucis d'actualisation, j'expérimente le même soucis, et j'applique la même solution, c'est donc un bug ..., mais difficilement reproductible à 100%
Répondre
#16
Alors là messieurs, je dis bravo.

Faut un peu de code js pas accessible à tout le monde, mais c'est super..

Faut arreter vraiment ;-)

@jojo je t'ai retrouvé !!

Merci à vous
Répondre
#17
Le JavaScript est accessible, si j'y suis arrivé.
et ce n'est pas le bout du monde. Le voici d'ailleurs :

Citation :var obj = JSON.parse(trame)
if (typeof obj.data != "undefined") {
    // Update SID
    if (typeof obj.data.sid != "undefined") {
        Idsession = obj.data.sid
        ldprint ("ID : " + Idsession)
    // list of cameras
    } else if (typeof obj.data.total != "undefined") {
        ldprint ("data.total (cameras) : " + obj.data.total)
        for (i=0; i<obj.data.total; i++) {
            ldprint ("data.cameras[" + i + "].id : " + obj.data.cameras[i].id)
            ldprint ("data.cameras[" + i + "].name : " + obj.data.cameras[i].name)
            ldprint ("data.cameras[" + i + "].recStatus : " + obj.data.cameras[i].recStatus)
            ldprint ("data.cameras[" + i + "].enabled : " + obj.data.cameras[i].enabled)
        }
        // camera 0
        Cameras0_id = obj.data.cameras[0].id
        Cameras0_name = obj.data.cameras[0].name
        Cameras0_recStatus = obj.data.cameras[0].recStatus
        Cameras0_enabled = obj.data.cameras[0].enabled
        // camera 1
        Cameras1_id = obj.data.cameras[1].id
        Cameras1_name = obj.data.cameras[1].name
        Cameras1_recStatus = obj.data.cameras[1].recStatus
        Cameras1_enabled = obj.data.cameras[1].enabled
        // camera 2
        Cameras2_id = obj.data.cameras[2].id
        Cameras2_name = obj.data.cameras[2].name
        Cameras2_recStatus = obj.data.cameras[2].recStatus
        Cameras2_enabled = obj.data.cameras[3].enabled
        // camera 3
        Cameras3_id = obj.data.cameras[3].id
        Cameras3_name = obj.data.cameras[3].name
        Cameras3_recStatus = obj.data.cameras[3].recStatus
        Cameras3_enabled = obj.data.cameras[3].enabled
    }
} else {
    ldprint ("else obj.data : " + obj.success)
}

Alors voici donc ce que j'ai fait, mais je ne l'aime pas ce que j'ai du faire : j'aurais préféré remplir les variables de l'équipement par la boucle for.

Dans les variables d'équipement, elles peuvent être de 3 type : "Chaîne", "double" ou "liste".
Seules les variables de type "chaîne" sont récupérables via l'état de l'équipement.

A quoi servent (et comment sont-elles exploitables) les variables de type "double" et "liste" ?

Merci
Répondre
#18
Tu ne peux pas mettre dans la boucle la recup de Idsession ?
Répondre
#19
non, l'Idsession n'est récupéré que lors d'un certain API. Les info sur les caméras, avec un autre API.


L'Idsession, je n'en ai besoin qu'une seule fois au début.

Regarde le remplissage de mes variables Cameras0_id, ... c'est leur nom que je voudrais pouvoir changer dynamiquement ...
Répondre
#20
A tester, mais il est possible que cela fonctionne avec la fonction eval ...


Du genre :

Code :
Eval("Cameras"+ i + "_id = obj.data.cameras["+ i + "].id ;") ;

Lifedomus Vision
Interface graphique : Windows Seven, Smartphone/Tablette Androïd
Domotique : KNX, ZWave [wallplug Fibaro, Keyfob], Multiroom Sonos, Ecodevice, Alarme Paradox
Répondre


Sujets apparemment similaires...
Sujet Auteur Réponses Affichages Dernier message
  Demande d'aide Paramétrage connecteur HTTP / json / commandes linux Popovitch 15 15,586 05-11-2020, 11:51 AM
Dernier message: Popovitch
  Connecteur API Deezer fransiouz 19 25,772 04-30-2020, 12:47 PM
Dernier message: Jlr
  parser le retour d'une commande initiale connecteur HTTP sud-domotique-expert 2 4,181 01-20-2020, 11:42 PM
Dernier message: sud-domotique-expert
  connecteur bluetooth Domo-TIC 0 2,633 10-29-2018, 03:58 PM
Dernier message: Domo-TIC
  Configuration du connecteur Hsd 0 3,423 01-15-2017, 09:54 PM
Dernier message: Hsd
  connecteur ping 889laurent 3 6,399 12-09-2016, 05:46 PM
Dernier message: AucuneID
  Erreur sur connecteur HTTP JT28_vbulletin4_import503 1 4,773 09-09-2016, 03:48 PM
Dernier message: JT28_vbulletin4_import503
  Connecteur IP Denon et message d'erreur "la littérale de la chaine n'a pas de limite" zozotte 6 9,064 01-08-2016, 11:27 PM
Dernier message: zozotte
  Synology Surveillance Station -> Lifedomus Gnol86 20 23,821 01-06-2016, 02:54 PM
Dernier message: Ives
  Connecteur TV connecté vneil 4 6,981 12-24-2015, 04:23 PM
Dernier message: vneil



Utilisateur(s) parcourant ce sujet : 1 visiteur(s)