Lazer Posté(e) le 18 juin 2015 Auteur Signaler Posté(e) le 18 juin 2015 bon ok.... je pense quand même que la meilleure solution est de modifier le code pour conserver le même SID aussi longtemps que possible;
jojo Posté(e) le 18 juin 2015 Signaler Posté(e) le 18 juin 2015 je veux bien regarder à cela, mais j'ai observé que tu as programmé cela d'une manière que je ne maîtrise pas (encore) : une partie du code serait dans une table ? Je reverrais la partie authentification du main loop (dans un premier temps), mais alors en la réécrivant d'une façon que je maîtrise. ok ?
Lazer Posté(e) le 18 juin 2015 Auteur Signaler Posté(e) le 18 juin 2015 si tu réécris la main loop de façon classique, elle va planter comme toutes les main loop La méthode employée est la seule que j'ai trouvé qui ne fasse pas crasher la main loop tôt ou tard. Je n'ai rien inventé, je me suis inspiré d'un module de Krikroff. Les variables et la fonction appelée sont toutes encapsulées dans un objet/classe (je ne connais pas le nom de cette structure en LUA) ce qui évite de la redéclarer à chaque appel de la main loop, donc limite l'usage de la RAM qui fait planter toutes les main loop.
jojo Posté(e) le 18 juin 2015 Signaler Posté(e) le 18 juin 2015 ok, merci. En effet je n'ai pas pu m'empêcher de déjà commencer, en le réécrivant de manière classique. Et le 1° 1/4 d'heure, pas d'erreur malgré un refresh toutes les 60s Mais maintenant il est planté. J'ai une autre idée : écrire le main loop dans un bouton, et dans le main loop faire appel au bouton ?
Lazer Posté(e) le 18 juin 2015 Auteur Signaler Posté(e) le 18 juin 2015 oui oui pourquoi pas, mais j'avais tenté de maintenir un virtual device élégant, sans bouton inutile, en laissant la main loop faire son job. Si tu refais tout àzero, je te sens parti pour faire un nouveau tuto comme tu sais si bien le faire
jojo Posté(e) le 18 juin 2015 Signaler Posté(e) le 18 juin 2015 Non non, surtout pas de nouveau tuto. effectivement ta solution à beaucoup d'avantages : c'est plus élégant, pas de bouton inutile si on appuye sur le debug de la mainloop, puis start, on voit tout le debug depuis la dernière sauvegarde du VD, ce qui n'est pas le cas avec un bouton. Donc je vais essayer de le faire fonctionner sans erreur avec un bouton (=développement classique) et ensuite on le traduirait vers ta solution. Mais je ne garanti rien, je ne suis pas un développeur
Lazer Posté(e) le 18 juin 2015 Auteur Signaler Posté(e) le 18 juin 2015 Je pense que tu pourrais tout aussi bien y arriver en conservant la structure actuelle. En fin de compte, le code est le même, c'est juste qu'il est encapsulé dans une fonction, elle même dans une classe. Comme j'ai tout bien tabulé, si tu utilises un bon éditeur comme Notepad++, tu verras facilement les zones utiles. (euh je crois que tu es sur Mac, mais tu dois avoir un éditeur équivalent).
jojo Posté(e) le 18 juin 2015 Signaler Posté(e) le 18 juin 2015 Eh Jojo, réfléchit un peu, tu es vraiment stupide quand tu veux ! Pourquoi se casse-t-on la tête pour le mainloop ? Il n'a pas de problème. Car en fait que voudrait-on faire pour le MAINLOOP ? Si erreur de SID, on recommence, étant donné qu'on est incapable de prédire quand arrivera l'erreur. Mais c'est ce qu'il fait déjà ! Donc on fait un refresh toutes les 15s, et le tour est joué, d'autant plus qu'il ne fait "que" un refresh de l'icone. Par contre là où est le problème, c'est dans les boutons. Si on automatise l'appuis sur le bouton et qu'il y a une erreur, il faut réappuyer dessus. Il y a 2 solutions pour cela : réécrire le code des boutons stocker dans une variable le status d'erreur et le traiter par GEA, si l'erreur est problématique. Pourquoi se casser la tête ?
Lazer Posté(e) le 18 juin 2015 Auteur Signaler Posté(e) le 18 juin 2015 Le module doit être autonome, et ne doit pas dépendre de GEA pour la gestion des erreurs. Que GEA fasse appel au module est une chose normale, mais pas l'inverse. Donc il reste : réécrite le code des boutons ! En fait, ce sont les même modifs que pour la main loop. Donc il suffit de commencer le travail sur la main loop, puis recopier ensuite.
jojo Posté(e) le 18 juin 2015 Signaler Posté(e) le 18 juin 2015 Oui, d'accord avec toi our l'aspect autonome. Dans les boutons ce sera la même chose que dans le mainloop, sauf qu'il n'y a pas cette problématique d'encapsulation. Et j'aurais bien utilisé des fonctions pour générer un SID, et je ne vois pas comment avec cette encapsulation => si on règle le problème des boutons, ok
Lazer Posté(e) le 18 juin 2015 Auteur Signaler Posté(e) le 18 juin 2015 OK donc tu n'as pas imaginé la même solution que moi. Je vais essayer de donner l’algorithme tel que je le vois : - Lors de l'initialisation de l'objet CheckRecording, on définit la variable SID = nil (même mieux : cette variable SID ne devrait pas être local, mais être dans un label afin que les autres boutons puissent s'en servir) - dans la fonction main, si SID == nil, alors on appelle une fonction connect() qui établie une nouvelle connexion - sinon on passe direct à la suite - la suite est une boucle dans laquelle on doit passer 2 fois maxi - dans cette boucle, on liste les caméras, met à jour les icones et tout le tralala - si le liste caméra est en échec, alors c'est qu'il faut définir un nouvel SID.... donc on appelle la fonction connect() vue précédemment.... puis grâce à la boucle, on repasse une 2nde fois ce qui permet de lister à nouveau les caméras et tout le tralala.... Bon j'ai presque fait tout le boulot là .... le reste c'est pour les codeurs fous Quand même, c'est toujours pareil, on ne peut jamais compter sur Sid, il n'est vraiment pas fiable :
jojo Posté(e) le 18 juin 2015 Signaler Posté(e) le 18 juin 2015 là tu as fais un véritable travail de patron. Merci pour l'analyse, je me dois de l'implémenter maintenant. Si on veut garder un aspect esthétique au VD, il ne faudrait pas mettre le SID dans un label, mais dans une variable globale, mais là aussi j'hésite car alors le VD n'est plus autonome, il faut penser à la créer, et j'aime autant éviter si possible.
Lazer Posté(e) le 18 juin 2015 Auteur Signaler Posté(e) le 18 juin 2015 Oui je pense comme toi.... la variable globale "ne se voit pas", mais dans ce cas faut implémenter une fonction pour sa création via l'API.... On trouve tout ça sur le forum, mais ça surcharge encore un peu plus le code.
jojo Posté(e) le 18 juin 2015 Signaler Posté(e) le 18 juin 2015 pas de soucis pour création automatique de la variable si elle n'existe pas, j'ai fait un VD backup/restore des variable. C'est ce que je ferai, ce n'est pas si lourd que ça
jojo Posté(e) le 26 juin 2015 Signaler Posté(e) le 26 juin 2015 @Lazer, Encore une idée d'optimisation du VD. J'ai 3 caméras sur mon Synology. Il y en a une qui est déconnectée (status Disconnected dans Surveillance Station). Lorsque j'ai appuyé sur le bouton enable, il en a bien activé 2 et évidemment, il n'a pas réussi àactiver la 3°. Mais dans le VD, il affiche toujours le Status activating et l'icône désactivée. Serait-il possible de récupérer depuis Synology ce status particulier et de mettre une icône "Error" ? par exemple.
Lazer Posté(e) le 26 juin 2015 Auteur Signaler Posté(e) le 26 juin 2015 Ca devient compliqué àgérer ce genre de cas particulier.... Est-ce que ça ne serait pas plus simple pour toi de dupliquer les boutons et d'utiliser la variable locale cameras afin de limiter chaque bouton àune seule caméra ? Voir carrément de dupliquer le VD complet, ce qui te permettrait d'avoir le label de chaque VD qui correspond précisément au statut de chaque caméras.
jojo Posté(e) le 26 juin 2015 Signaler Posté(e) le 26 juin 2015 Perso, j'ai ZERO, ZERO problème avec ça. Comme il est làil est plus que parfait àmes yeux. Tu voulais des idées, c'était le seul et unique objectif de mon post
Lazer Posté(e) le 26 juin 2015 Auteur Signaler Posté(e) le 26 juin 2015 yep, merci pour les idées Pour un jour, si j'ai le temps et la motivation....
mprinfo Posté(e) le 26 juin 2015 Signaler Posté(e) le 26 juin 2015 @jojo pour les licences on peut avoir 10 caméra 2 gratuites + 8 avec une licence qui est sur le net. Je peux pas t'en dire plus. Les russes sont sur le coup pour trouver une solution Envoyé de mon SM-G900F 1
jojo Posté(e) le 2 août 2015 Signaler Posté(e) le 2 août 2015 OK donc tu n'as pas imaginé la même solution que moi. Je vais essayer de donner l’algorithme tel que je le vois : - Lors de l'initialisation de l'objet CheckRecording, on définit la variable SID = nil (même mieux : cette variable SID ne devrait pas être local, mais être dans un label afin que les autres boutons puissent s'en servir) @Lazer, j'avance DOUCEMENT, j'ai déjà fait le point 1 avec une variable globale qui est créée automatiquement si nécessaire
Lazer Posté(e) le 2 août 2015 Auteur Signaler Posté(e) le 2 août 2015 Ah bien,j'avoue que je ne me suis pas du tout replongé dedans pour le moment .
jojo Posté(e) le 2 août 2015 Signaler Posté(e) le 2 août 2015 j'ai terminé (selon moi) de rivoir le code de la main loop, il (tourne avec le même SID sans erreur depuis 45min à une fréquence de 10s. Je te l'envoie en MP pour validation, avant de le reproduire pour les boutons ?
Lazer Posté(e) le 2 août 2015 Auteur Signaler Posté(e) le 2 août 2015 OK je vais essayer de tester ça .
Shyrka973 Posté(e) le 13 août 2015 Signaler Posté(e) le 13 août 2015 Surveillance Station 7.1 Beta est sorti. Quelqu'un peut confirmer que le VD Surveillance fonctionne toujours avec cette version: l'API n'a pas trop bougé ? Merci.
PITP2 Posté(e) le 14 août 2015 Signaler Posté(e) le 14 août 2015 Je n'ai pas encore installé la 7,1 mais j'ai un message d'erreur actuellement ... [DEBUG] 09:43:00: Synology API version OK [DEBUG] 09:43:05: Error : API Authentication failure, Invalid password., {"error":{"code":400},"success":false}
Messages recommandés