-
Compteur de contenus
2 501 -
Inscription
-
Dernière visite
-
Jours gagnés
28
Tout ce qui a été posté par MAM78
-
Tout ce que tu viens de dire je l'avais bien compris. Et c'est bien sur tes VD et ta Scène MusicCast que je capitalise. J'ai garder la logique d'ensemble. Dans ton code MusicCast tu n'utilises pas non plus le Main Loop des VD pour solliciter l'API. Tout est dans ta scène et c'est bien ça que je cherche à reproduire. Mettre tout le code concernant l'API dans la Scène. Mon questionnement vient en fait sur l'écriture d'une fonction (Action) dans la scène, lorsque celle-ci nécessite des appels à l'API en cascade à l'intérieur de celle-ci. Cf. les différentes étapes du traitement que j'exposais précédemment, dont chacune des étapes doit correspond re à une fonction afin de pouvoir utiliser le mécanisme de callback pour connaitre le résultat de la fonction (étape). Effectivement, de part le mécanisme de traitement asynchrone, c'est difficile à expliquer. Merci néanmoins pour tes explications précieuses
-
J'ai un peu de mal à comprendre comment organiser le code pour executer l'enchainement suivant chaque fois que la scène est appelée par une action. On se connect au serveur pour récupérer des paramètres de l'API nécessaire pour se connecter au serveur, si la requête est bone, on passe au point 2 On se reconnect au serveur via un ID de connection stocker dans une VG mais que celui-ci ne fonctionne pas/plus ou qu'il n'est pas encore renseigné dans la VG l'on passe au point 2.1 sinon au point 3 On se reconnect au serveur via un login et mot de passe pour obtenir un nouvel ID qui est stocker dans une VG On se reconnect au serveur serveur via l'ID et les paramètres de l'API et l'on execute une requête pour soit : (En fait mon action demandé pas le VD) obtenir des infos de l'API executer d'une fonction de lAPI modère une propriété de l'API Sachant que les paramètre de l'API peuvent changer dans le temps, idem pour l'ID, il peut ne plus être valable après un certain temps. Autant les paramètre d'API, je pourrais les charger dans une VG depuis le main des VD puisqu'il n'est pas nécessaire de s'identifier sur le serveur pour obtenir ces paramètres. Mais pour l'ID je souhaiterais éviter de devoir mettre dans chacun des mes VD mon login et mot de passe pour générer un nouvel ID et le stocker dans une VG. Sachant comme tu t'en doute, l'objectif principal est de mettre tous (ou le maximum) le code lié à l'API dans la scène et alléger de fait les VD au maximum. a) Compte-tenu mode asynchrone, est-ce que cela signifie que pour chaque des actions lancées par les VD, je dois dans la scène créer un fonction correspondante qui devra contenir l'ensemble de la séquence énoncée ci-dessus ? Excepte la recherche des paramètres si elle est ramenée dans le main du VD (ce que souhaiterais néanmoins éviter b) Est-ce qu'il y une limite du nombre d'imbrications des séquences d'appels à l'API via des requêtes HTTPClient() ? c) Comment organiser ces imbrications avec le principe de callback des fonctions ? Nota : c'est vraiment lourdingue de ne pas avoir mis à disposition la fonction Net.FHttp() dans les scènes. Il font ch... chez Fibaro. Cela nous oblige du coup à monter du code d'une complexité, s'il on veut limiter sa redondance
-
@Lazer Laisse tomber mon message ci-dessus. J'ai trouvé J'ignore pourquoi, mais lorsque je lance la scène depuis un VD, ça fonctionne Mais lorsque je lance la scène en manuel, ça ne marche pas. Je sais ce n'est pas l'objet de ce type de scène qui doivent être lancé depuis une autre scène ou VD. Mais maintenant, je m'arrache les cheveux pour construire la structure du code pour que les enchainements se fassent bien
-
J'ai avancé sur mon code, mais je n'arrive à faire fonctionner les appels via la fonction setTimeout. Elle n'execute pas la fonction les appels aux fonction getAPI() ou postAPI(). SI je prends l'exemple de ta fonction : power ci-dessous, dans la ligne : setTimeout(function() getAPI("/YamahaExtendedControl/v1/".._parameters[VD_s_id].zone.."/setPower?power=".._value, "setPower", power) end, 0) l'appel de la fonction getAPI ne s'execute pas. J'ai mis des traces au début de la fonctions getAPI() mais elles n'apparaissent pas. Si j'enlève la partie setTimeout(function() de la façon suivante : getAPI("/YamahaExtendedControl/v1/".._parameters[VD_s_id].zone.."/setPower?power=".._value, "setPower", power) dans ce cas, je rentre bien dans la fonction getAPI (avec affichage de mes traces), mais là, l'appel à la fonction : httpClient:request("http://" .. ip .. ":" .. tostring(port) .. url, { ne provoque aucun retour, ni dans success, ni error. Je ne vois vraiment pas d'où vient le PB. Tu pourrais STP m'indiquer la cause ? local function power(verb, data) if not verb then if debug then Message("pink", "power() : call getAPI(setPower)") end setTimeout(function() getAPI("/YamahaExtendedControl/v1/".._parameters[VD_s_id].zone.."/setPower?power=".._value, "setPower", power) end, 0) elseif verb == "setPower" then Success() else Die('Warning : verb "' .. (verb or "???") .. '" unknown') end end -- function
-
Je viens de regarder ta scene : Yamaha MusicCast - Scene v1.0.lua et ses VD associé. C'est exactement cette mécanique que je souhaite mettre en place une scene qui : Sollicite une API via des requêtes HTTPClient() reçoit des ordres (action) en provenance d'un ensemble de VD met à jour des labels de ses même VD en fonction des ordres reçus Maintenant, je vais devoir comprendre son fonctionnement pour l'adapter à mon besoin. C'est une très bonne base de départ Mais j'ai un peu de mal a comprendre le fonctionnement des lignes ci-dessous dans tes fonctions ( getAPI() et getAPI() ), notamment la ligne : setTimeout(function() callback(verb, jsonTable) end, 0) -- Execute callback function if callback and type(callback) == "function" then if debug then Message("purple", "getAPI() : callback...") end setTimeout(function() callback(verb, jsonTable) end, 0) end Je suppose que pour comprendre qu'il faut l'associer à l'exemple du code suivant : if debug then Message("pink", "link() : call postAPI(setClientInfo)") end setTimeout(function() postAPI("/YamahaExtendedControl/v1/dist/setClientInfo", "setClientInfo", link, {group_id=group_id, zone={_parameters[client_vd_s_id].zone}}, client_ip, client_port) end, 0) elseif verb == "setClientInfo" then Je l'impression que c'est bien là le fond du sujet évoqué précédemment ? Pourrais-tu STP m'expliquer un peu le principe de fonctionnement et notamment au regard de nos échanges précédents ?
-
En faite ma question j'aurais du préciser ma question. Comment ext-ce que l'on fait dans le cas d'une de l'appel à la fonction HTTPClient() dans une boucle ?
-
1) Il n'est donc pas possible de créer une fonction générique HTTPClient() puisque chaque fois que l'utilise il faut qu'elle contienne les traitements spécifique que l'on veut exécuter. C'est bien ça ? 2) est-ce que l'on peut dans success() lancer une autre fonction HTTPClient() ? 3) si oui à la question précédente ça devient vite compliquer à programmer, je prends l'exemple suivant : On se connect à un serveur via un ID de connection mais que celui-ci ne fonction plus On se reconnect au un serveur via un login et mot de passe pour obtenir un nouvel ID On se reconnect au au serveur serveur via le nouvel ID et l'on execute une requête pour obtenir des premiers infos via une API. On se reconnect au au serveur serveur via le nouvel ID et l'on execute une requête pour obtenir des deuxièmes infos via une API. On se reconnect au au serveur serveur via le nouvel ID et l'on execute une requête pour obtenir des Xièmes infos via une API. Cela veux dire que le code doit être structuré de façon à cascader chacune des étapes ? Ca m'a l'air bien lourd ou il y a quelque chose qui m'échappe. 4) Comment s'assurer que l'appel à une fonction HTTPClient() est terminée pour poursuivre les traitements suivants ?
-
Je viens de trouver ton post sur le sujet : Il y a probablement les réponses mes questions
-
Merci Laser pour tes réponse, Pour les scènes le fonction Net.FHttp() n'étant pas disponible, je suis obligé d'utiliser HTTPClient(). 1) Sont-elle toutes le 2 deux asynchrone ? 2) Tu veux dire que que l'appel à http:request() va me redonner la main alors que sont traitement ne serait pas terminé. C'est bien ce que tu veux dire par asynchrone ? 3) C'est ce que je supposais également. Mais comment faire le test ? Ralentir le serveur cible pour que le requête tombe en timeout ?
-
Y-a personne pour m'aider ?
-
Hello, Je cherche à écrire une fonction générique pour executer une requête HTTPClient. Voici mon code et j'ai quelques questions sur celui-ci : 1) Dans que cas il est conseillé d'encadrer la fonction http.request par une fonction pcall() comme ceci ? local ok = pcall(function() http:request(Query, { 2) Dans que cas il est conseillé d'encadrer la fonction json.decode, response.data par une fonction pcall() comme ceci ? pcall(json.decode, response.data) 3) Dans mon code ci-dessous le traitement des données retournée par la requête est lancé à l'intérieur de la fonction. Est-ce possible (souhaitable) que le traitement des données soit fait à l'extérieur de la requête, soit par exemple : success, data = GetData(Query) if success then traitement_data(data) end Sachant que dans le code ci-dessous, après la ligne if (status and data) then, il aurait : return true, data et dans les autres cas return false 4) Comment intercepté que la requête est tombée timeout ? Ou fait-il mettre un test pour détecter le timeout et comment faire ce test. Merci d'avance pour vos explications local TimeOut = 3000 function GetData(Query) local Synology = net.HTTPClient({ timeout = TimeOut }) local ok = function() http:request(Query, { options = { method = 'GET', headers ={ ["Content-Type"] = "application/json", ["Authorization"] = "BASIC "..User_code_API_Encode64}, data = body }, success = function(response) if response.status == 200 then Trace("blue","Traitement ok : ".."") local status, data = json.decode, response.data if (status and data) then Trace("orange"," OK -> Traitement des données") else Trace("orange"," Attention : Aucunes données à traiter") end else if response.status == 500 or response.status == 503 then Trace("orange","Erreur d'indisponibilité du serveur") else Trace("orange","Erreur requête serveur, response.status = "..response.status) end end end, error = function(err) Trace("orange","Erreur de reception de données, Erreur = ".. err) end }) end if not(ok) then Trace("orange","Erreur dans l'exécution de http:request(Query...") end end
-
Plugin Developer Plugin - Virtual Sensor
MAM78 a répondu à un(e) sujet de Krikroff dans Plugins Developpeur
C'est toujours sans aucun espoir qu'ils nous donnent un jour l'accès que DEV de plugins ?- 932 réponses
-
- Plugin
- Virtual Sensor
-
(et 3 en plus)
Étiqueté avec :
-
Merci @Lazer c'était bien ça. L'upgrade de CAM à modifié le paramètre précédent. J'ai trouvé ça sur le NET : HIKVISION released a new firmware v5.5.0 for all the IP cameras in Sep, 2017. If you upgrade your camera with this firmware or higher version, the ONVIF function would be DISABLEDas default. If you has enabled this function before, it would be turned into DISABLED as well after the upgrade. Fallait juste le savoir
- 1 631 réponses
-
- 1
-
-
- topic unique
- surveillance
-
(et 2 en plus)
Étiqueté avec :
-
Plugin Developer Plugin - Virtual Sensor
MAM78 a répondu à un(e) sujet de Krikroff dans Plugins Developpeur
Ca veux dire que vous avez abandonné l'utilisation de ces Virtual Device maison ?- 932 réponses
-
- Plugin
- Virtual Sensor
-
(et 3 en plus)
Étiqueté avec :
-
Pour info au sujet de la question posée sur les capacités de lecture selon les formats de fichers vidéo sur l’Apple TV. https://www.igen.fr/apple-tv/2018/12/plex-necessitera-bientot-un-serveur-moins-puissant-pour-lapple-tv-106172
-
Je n'ai pas accès à mon NAS pour le moment. Mais de mémoire, c'est bien ça mais je vérifierais ce soir.
- 1 631 réponses
-
- topic unique
- surveillance
-
(et 2 en plus)
Étiqueté avec :
-
Me 4 cam sont à jour. Ca c'est fait. Mais je constate un dégradation de la qualité des images sur l'application DS CAM sur iOS. J'ai un effet pixellisation (en damier) sur le live) que je n'avais eu précédemment. Il doit probablement y avoir une option qui à du changer. Mais laquelle ?
- 1 631 réponses
-
- topic unique
- surveillance
-
(et 2 en plus)
Étiqueté avec :
-
C'est bon, j'ai réussi. En passant par me VM Win10 sur mon Mac. C'est peut-être lié au plugin Hikvision pour IE qui n'était pas la toute dernière version. En fait, j'étais probablement sur une version plus récente. J'avais confondu 2 lignes les infos de base de la caméra : Version du plug-in : V3.0.6.26 Version du micrologiciel : IPC_G1_EN_STD_V5.4.41_Build170310.zip Mais j'avais pas vu que ce n'était pas la toute dernière version que j'avais chargé. La dernière version est la : V5.5.80 build 180911.zip
- 1 631 réponses
-
- 1
-
-
- topic unique
- surveillance
-
(et 2 en plus)
Étiqueté avec :
-
Je suis en version : V3.0.6.26
- 1 631 réponses
-
- topic unique
- surveillance
-
(et 2 en plus)
Étiqueté avec :
-
Plugin Developer Plugin - Virtual Sensor
MAM78 a répondu à un(e) sujet de Krikroff dans Plugins Developpeur
Au sujet de ce Virtual Sensor, si j'ai bien compris Fibaro ne supportant plus ce type de plugin, il est nécessaire de briquer sa HC2 pour pouvoir l'installer. Mais à chaque mise à jour, il conviendra de rebriquer sa HC2 et réinstaller ses Plugin Virtual Sensor. Je dispose d'une deuxième HC2 que j'avais acheté pour faire des tests et l'utiliser comme secours. Mais dans les fait je ne l'utilise pratiquement pas. Je me demandais si je ne pourrais pas l'utiliser en extension de ma HC2 principale tout en évitant de mettre à jour cette HC2 en extension aussi souvent que la principale. Est-ce que selon vous la mise à jour de la principale oblige de mettre à jour l'extension pour qu'elle continue de fonctionner ?- 932 réponses
-
- Plugin
- Virtual Sensor
-
(et 3 en plus)
Étiqueté avec :
-
J4ai bien évidement suivi le tuto cette fois ci et j'avais bien noté qu'il fallait utiliser IE.Et oui j'ai bien utilisé le bon fichier. Ma CAM est une : DS-2CD2185FWD-I Le fichier téléchargé est le : digicap.dav extrait du fichier IPC_G1_EN_STD_V5.4.41_Build170310.zip J'ai fais ça sur une VM sur mon MAC, vu que ça ne marchait pas, je suis passé sur un vrai PC windows 10. Et toujours pas, c'est le même message.
- 1 631 réponses
-
- topic unique
- surveillance
-
(et 2 en plus)
Étiqueté avec :
-
Merci pour les info, mais je viens d'essayé et je n'arrive pas à charger le firmware. J'ai chaque fois le message suivant : Vous avez une idée du PB ?
- 1 631 réponses
-
- topic unique
- surveillance
-
(et 2 en plus)
Étiqueté avec :
-
J'ai plusieurs Hikvision à la maison et je me commande si je dois mettre à jour les firmwares. Il paraît que certaine CAM Hikvision ne doivent pas être mises à jour (versions chinoises) au risque de les rendre inutilisables. Mais comment savoir avec certitude si celle que l'on possède peut ou non être mise à jour. Et si oui, ou est-il préférable de récupérer les dernières versions fiables ?
- 1 631 réponses
-
- topic unique
- surveillance
-
(et 2 en plus)
Étiqueté avec :
-
@Lazer c'est qui qui disais ça il y a quelques jours : Tu vois toi aussi tu fais ton @jojo
- 1 289 réponses
-
- 1
-
-
- topic unique
-
(et 1 en plus)
Étiqueté avec :
-
C'est un peu comme pour moi, lorsque je n'arrivais plus à accéder à ma HC2 pour des problèmes login/psw, c'est qu'une fois l'avoir redémarrer que j'ai pu y avoir accès Fibaro = Windows. Un petit coup de reboot et ça repart Du coup @Lazer tu vas pouvoir jouer de nouveau ?
- 1 289 réponses
-
- topic unique
-
(et 1 en plus)
Étiqueté avec :