Aller au contenu
jjacques68

Exploiter l'historique des device

Recommended Posts

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

 

image.png.e9c44813d4e8f34fe58b6b161f88e3d5.png

 

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...

image.png.3e6e5fca39bcdcd1e880b61187db6f8d.png

 

 

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.

Partager ce message


Lien à poster
Partager sur d’autres sites

×