jjacques68 Posté(e) le 11 avril 2020 Signaler Posté(e) le 11 avril 2020 Hello ! j'étais intéressé de pouvoir récupérer l'historique de ce qu'il se passe avec nos device. Ce que l'on peut voir dans la page "history". L'objectif final est de sauvegarder tout ça dans une base de données externe à la HC3... bref. donc voici dans un QA la méthode que j'utilise pour récupérer les données de l'API : Le principe est que je cherche toutes les X minutes le contenu. (pour le moment le déclenchement est manuel, il faut que je réfléchisse à l'interval de bouclage...) J'utilise une variable au QA "TimeStart" qui contient le TimeStamp de fin de la dernière recherche. Par précaution, je vérifie que l'interval de recherche ne soit pas supérieur (pour le moment) à 1 h. Si c'est le cas, je force donc à 1 heure max. --------------------------------------------------------------------------------------- -- CHERCHE LES DONNEES --------------------------------------------------------------------------------------- function QuickApp:CheckLogs() local TimeStart = tonumber(self:getVariable("TimeStart")) local TimeEnd = os.time() local http = net.HTTPClient({timeout=3000}) --Pour ne pas récupérer plus de x temps de log (cas d'un plantage, arrêt, autre...) if os.difftime(TimeEnd, TimeStart) > 3600 then TimeStart = TimeEnd - 3600 end print("<<<<<<<<<<<< start : "..os.date("%d/%m/%Y %H:%M:%S", TimeStart).." - end : "..os.date("%d/%m/%Y %H:%M:%S", TimeEnd).." >>>>>>>>>>>>") http:request("http://127.0.0.1:11111/api/panels/event?type=time&from="..TimeStart.."&to="..TimeEnd, { options = { method = "GET" }, success = function(res) Display(res.data) end, error = function(error) print(json.encode(error)) end }) --mémorise l'heure de fin pour qu'elle soit la procaine heure de début self:setVariable("TimeStart", tostring(TimeEnd)) end et voici comment je sors les données avec la fonction Display() : --------------------------------------------------------------------------------------- -- TRAITEMENT DU RESULTAT --------------------------------------------------------------------------------------- local function Display(alldata) --formate le tableau json alldata = json.decode(alldata) --pour chaque élément du tableau for k,v in pairs(alldata) do --chope le nom du device local NameDevice = api.get("/devices/"..v.deviceID).name --créé la trame local Message = v.type.." - "..os.date("%d/%m/%Y %H:%M:%S", v.timestamp).." - "..v.deviceID.." - "..NameDevice.." - "..tostring(v.event.data.newValue) print(Message) end end Pour le moment je ne fait que un print du résultat, mais celui-ci sera envoyé en base de donnée... (pas voulu en parler dans ce sujet). le résultat dans le debug donne ça : on obtient donc, le type d’événement (DEVICE_EVENT), son Timecode, l'ID du device, son nom et pour finir sa valeur. d'autres information son dispo dans l'API, mais pour le moment, celles-ci me suffisent... Je lance actuellement le process manuellement pas un bouton, mais je vais mettre un bouclage par setTimeout en place, afin de le faire boucler régulièrement.
Messages recommandés