Aller au contenu

Messages recommandés

Posté(e) (modifié)

Bonjour a tous

Je voudrais envoyer tous les nuit vers 4h du matin l'index de production de mes panneaux vers le site dbpv

La requête est la suivante

https://www.bdpv.fr/webservice/majProd/expeditionProd_v3.php?util=xxxx-jc&apiKey=xxxx&source=homeassistant&typeReleve=onduleur&index=7 562738

?util (nom d'utilisateur sur le site)

apikey (apikey pour mise a jour de la production)

index de production (7562738)

comment le faire selon vous ?

L'id de mon compteur est le 600

sachant que la valeur qu'attend dbpv doit être en Wh sans virgule

Modifié par flacon030
Posté(e)

via un QA classique qui compose ton url comme tu veux.

Ensuite, tu utilises GEA comme trigger tous les jours à 4h00

Posté(e)

Le QA sera à écrire entièrement, mais tu peux t'inspirer de la documentation Fibaro officielle des nombreux exemples du forum.

 

Pour la requête HTTP, voir :

 

Posté(e) (modifié)

Bon une fois de plus merci chatgpt pour son aide

 

Je viens de faire un QA qui envoie mes données a 4:00 les index de production de mon installation

 

-- QuickApp : BDPV Updater HC3
-- Version : 1.0

-- ================================
--     CONFIGURATION UTILISATEUR
-- ================================
local DEVICE_ID = 600          			-- ID du compteur de production de la HC3
local BDPV_USER = "xxxxx"				--nom du user sur dbpv
local BDPV_API_KEY = "xxxx"				--apikey sur dbpv
local BDPV_SOURCE = "homeassistant"		-- ne pa toucher
local BDPV_TYPE = "onduleur"			-- ne pas toucher

-- ================================
--         INITIALISATION
-- ================================
function QuickApp:onInit()
    self:debug("QuickApp BDPV initialisé")

    -- Bouton : envoyer maintenant
    self:updateView("sendButton", "text", "Envoyer maintenant")

    -- Mise à jour automatique chaque jour à 4:00 (mettez l'heure que vous voulez)
    self:scheduleDailySend(4, 0)
end

-- ================================
--     ENVOI MANUEL PAR BOUTON
-- ================================
function QuickApp:sendNow()
    self:sendBDPV()
end

-- ================================
--           ENVOI AUTO
-- ================================
function QuickApp:scheduleDailySend(h, m)
    local now = os.time()
    local nextRun = os.time({
        year = os.date("*t").year,
        month = os.date("*t").month,
        day = os.date("*t").day,
        hour = h,
        min = m,
        sec = 0
    })

    if nextRun <= now then
        nextRun = nextRun + 24*60*60  -- ajouter 24h si l'heure est passée
    end

    local delaySeconds = nextRun - now
    local delayMinutesTotal = math.floor(delaySeconds / 60)

    local hours = math.floor(delayMinutesTotal / 60)
    local minutes = delayMinutesTotal % 60

    local countdownText = string.format("Envoi index dans %02dh %02dmin", hours, minutes)

    -- Mise à jour variable Dashboard et label UI
    self:setVariable("NEXT_SEND", countdownText)
    self:updateView("nextSendLabel", "text", countdownText)

    -- Debug : on affiche seulement le texte final, pas de répétition
    self:debug(countdownText)

    -- Planification de l'envoi
    setTimeout(function()
        self:sendBDPV()
        self:scheduleDailySend(h, m)
    end, delaySeconds * 1000)
end

-- ================================
--       ENVOI BDPV (fonction)
-- ================================
function QuickApp:sendBDPV()
    -- Lecture du compteur en kWh (valeur en string)
    local raw = fibaro.getValue(DEVICE_ID, "value")
    raw = tostring(raw):gsub(",", ".")  -- remplace virgule par point
    local index_kwh = tonumber(raw)

   if not index_kwh then
        self:error("Valeur compteur invalide : " .. tostring(raw))
        self:setVariable("STATUS_BDPV", "Valeur compteur invalide")
        self:updateView("statusLabel", "text", "Valeur compteur invalide")
        return
    end

    -- Conversion kWh -> Wh et arrondi à l'entier le plus proche
    local index_wh = math.floor(index_kwh * 1000 + 0.5)  -- arrondi correct

    self:debug("Index compteur (kWh) : " .. tostring(index_kwh))
    self:debug("Index converti (Wh) : " .. tostring(index_wh))

    -- VERIF: si index_wh est inférieur au dernier envoyé, log et sortie (prévention -11)
    -- (optionnel : tu peux stocker le dernier index dans un variable persistante)
    -- construction de l'URL : attention à la valeur de BDPV_SOURCE
    local url =
        "https://www.bdpv.fr/webservice/majProd/expeditionProd_v3.php"
        .. "?util=" .. tostring(BDPV_USER)
        .. "&apiKey=" .. tostring(BDPV_API_KEY)
        .. "&source=" .. tostring(BDPV_SOURCE)
        .. "&typeReleve=" .. tostring(BDPV_TYPE)
        .. "&index=" .. tostring(index_wh)

    -- Debug: montrer exactement ce qu'on envoie (utile pour logs)
    self:debug("URL envoyée à BDPV: " .. url)

    -- Requête HTTP GET
    local http = net.HTTPClient()
    http:request(url, {
        options = { method = "GET", timeout = 8000 },
        success = function(response)
            local msg = "BDPV : " .. response.data
            self:debug(msg)
            -- Mise à jour label UI
            self:updateView("statusLabel", "text", msg)
            -- Mise à jour variable Dashboard
            self:setVariable("STATUS_BDPV", msg)
        end,
        error = function(err)
            local msg = "Erreur : " .. tostring(err)
            self:error(msg)
            self:updateView("statusLabel", "text", msg)
            self:setVariable("STATUS_BDPV", msg)
        end
    })
end

 

Modifié par flacon030
  • Like 2
×
×
  • Créer...