récupéer des données sur une page WEB simplement

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
marcus_54
Messages : 425
Inscription : 28 févr. 2018, 12:15

Re: récupéer des données sur une page WEB simplement

Message par marcus_54 »

j'ai fusionné les deux scripts, les puissances et celui-ci

Ça fonctionne bien.
J'ai juste "merdé" durant les essais ce qui fait sur l'histogramme, j'ai pour le lundi 647kW h générée à la place de 0.4 et je n'arrive pas à le remettre à la bonne valeur...

sinon le code :

Code : Tout sélectionner

--[[
name : script_time_Altenergy_u_t_P.lua
auteur : papoo
date : 26/08/2018
Principe :
26/08/2018
]]--
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local nom_script = "Altenergy_u_t_P"
local debugging = true                     -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local script_actif = false                   -- active (true) ou désactive (false) ce script simplement
local delai = 5                             -- délai d'exécution de ce script en minutes de 1 à 59
local CapteurVirtuel_puissance = 722
local CapteurVirtuel_temp = 756
local CapteurVirtuel_tension = 757
local adresse1 = "http://192.168.0.6/index.php/home"
local adresse2 = "http://192.168.0.6/index.php/realtimedata"

--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local nom_script = 'Altenergy_u_t_p'
local version = '1'
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
function voir_les_logs (s, debugging) -- nécessite la variable local debugging
    if (debugging) then
      if s ~= nil then
        print (s)
      else
      print ("aucune valeur affichable")
      end
    end
end   -- usage voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------

commandArray = {}
time = os.date("*t")
if script_actif == true then
    --if (time.hour == 00 and time.min == 20) then -- tout les matins à 00h20
    --if (time.min == 20 and ((time.hour == 7) or (time.hour == 13) or (time.hour == 18))) then -- 3 exécutions du script par jour à 7H20, 13h20 et 18H20
    --if time.hour % 2 == 0 then -- toutes les deux heures
    --if (time.hour%1 == 0 and time.min == 10)  then -- Toutes les heures et 10 minutes
    --if time.min% 2 == 0 then
    if ((time.min-1) % delai) == 0 then -- toutes les xx minutes en commençant par xx:01.  xx définissable via la variable delai
        voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)

                if adresse1 ~= '' then voir_les_logs('--- --- --- Adresse : '..adresse1..'  --- --- --',debugging) end           
                local rid = assert(io.popen("/usr/bin/curl -m5 ".. adresse1))
                local testhtml = rid:read('*all')
                rid:close()
                for instance in testhtml:gmatch("<body>(.-)</body>") do
                    div, EnergieTotale=instance:match('Lifetime generation(.-)<td>(.-)kWh </td>') 
                    div1, Puissance=instance:match('Last System Power(.-)<td>(.-)W </td>')
                    div2, EnergieJour=instance:match('Generation of Current Day(.-)<td>(.-)kWh </td>')
                end   

                if EnergieTotale ~= nil then
                    voir_les_logs("--- --- --- Puissance Generee totale: ".. EnergieTotale.."kWh  --- --- --",debugging)
                else
                    voir_les_logs('--- --- --- Puissance Generee totale est vide  --- --- --',debugging)
                end
                
                if Puissance ~= nil then
                    voir_les_logs("--- --- --- Puissance : ".. Puissance.."W  --- --- --",debugging)
                else
                    voir_les_logs('--- --- --- Puissance est vide  --- --- --',debugging)
                end
               if EnergieJour ~= nil then
                    voir_les_logs("--- --- --- EnergieJour : ".. EnergieJour.."kW  --- --- --",debugging)
                else
                    voir_les_logs('--- --- --- EnergieJour est vide  --- --- --',debugging)
                end

                if adresse2 ~= '' then voir_les_logs('--- --- --- Adresse : '..adresse2..'  --- --- --',debugging) end           
                local rid = assert(io.popen("/usr/bin/curl -m5 ".. adresse2))
                local testhtml = rid:read('*all')
                rid:close()
                for instance in testhtml:gmatch("<tbody>(.-)</tbody>") do
                    tensionOnduleur=instance:match("404000251589%-A </td>.-Hz.-<td>(.-) V </td>")                   
                    tempOnduleur=instance:match("404000251589%-A </td>.-middle;'%>.-Hz </td>.-middle;'%>(.-) &#176;C </td>")
                end

                if tensionOnduleur ~= nil then
                    voir_les_logs("--- --- --- Tension reseau : ".. tensionOnduleur.." V--- --- --",debugging)
                else
                    voir_les_logs('--- --- --- tension reseau est vide  --- --- --',debugging)
                end
                if tempOnduleur ~= nil then
                    voir_les_logs("--- --- --- Temperature onduleur : ".. tempOnduleur.." degre --- --- --",debugging)
                else
                    voir_les_logs('--- --- --- Temperature onduleur  --- --- --',debugging)
                end  

                EnergieJour=EnergieJour*1000 --en W pas kW
                local CmdIdx=1
                commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_temp.."|0|"..tempOnduleur}
                CmdIdx=CmdIdx+1
                commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_tension.."|0|"..tensionOnduleur}
                CmdIdx=CmdIdx+1                
                commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_puissance.."|0|"..Puissance..";"..EnergieJour}
                CmdIdx=CmdIdx+1  
                
        voir_les_logs("--- --- --- Puissance Generee totale: ".. EnergieTotale.."kWh  --- --- --",debugging)
        voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
    end -- if time
end
return commandArray
Domoticz 2024.7
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: récupéer des données sur une page WEB simplement

Message par papoo »

shift + clic sur la valeur à supprimer sur l'histogramme
ou
correction directement dans la base de données
https://sulek.fr/index.php?article73/co ... s-domoticz
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
marcus_54
Messages : 425
Inscription : 28 févr. 2018, 12:15

Re: récupéer des données sur une page WEB simplement

Message par marcus_54 »

shift + clic ne fonctionne pas sur l'histogramme de la semaine passée.
Pour l'édition de la base de données, j'ai essayé, les données enregistrées dans Meter s'arrêtent à hier 23h55...
Je vais attendre demain pour réessayer.
Domoticz 2024.7
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: récupéer des données sur une page WEB simplement

Message par papoo »

marcus_54 a écrit : Pour l'édition de la base de données, j'ai essayé, les données enregistrées dans Meter s'arrêtent à hier 23h55...
pour une donnée vieille de 7 jours c'est Meter_Calendar il me semble

bizarre que le shift + clic ne fonctionne pas
chez moi je peux effacer une données vieille de 7 jours
2018-08-27 18_03_30-Domoticz.png
2018-08-27 18_03_30-Domoticz.png (13.1 Kio) Consulté 5550 fois
2018-08-27 18_04_08-Domoticz.png
2018-08-27 18_04_08-Domoticz.png (6.07 Kio) Consulté 5550 fois
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
marcus_54
Messages : 425
Inscription : 28 févr. 2018, 12:15

Re: récupéer des données sur une page WEB simplement

Message par marcus_54 »

Oui sur les graphes, mais pas sur l'histogramme.

Image

Sur le graphe N°2 je ne peux rien faire, par contre je peux sur les 3 autres. (Encore que sur le 3 et 4) l'action est autorisée, mais ne change rien.
J'attends demain pour voir si le graphe se normalise sinon j'interviendrai sur la base de données.
Domoticz 2024.7
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
marcus_54
Messages : 425
Inscription : 28 févr. 2018, 12:15

Re: récupéer des données sur une page WEB simplement

Message par marcus_54 »

C'est bon j'ai supprimé le pic sur la courbe N°3 du coup la barre sur l'histogramme à disparu.
Je préfère cela que d'aller bricoler dans la base de données.
Domoticz 2024.7
Domoticz sur RPI 4B+ : MQTT; MQTTMapper; Zigbee; RFlink DIY 433; Téléinfo; DS18B20; Capteur; compteur eau wmbusmeter, NanoLeaf...
peypin13
Messages : 3
Inscription : 09 déc. 2019, 13:25

Re: récupéer des données sur une page WEB simplement

Message par peypin13 »

Bonjour
Je déterre ce fil car grâce a lui , j'ai pu l'adapter a mon installation solaire : 3 onduleurs triphasés YC1000 et un Ecu-C.
Je remercie papoo a l'origine du script et marcus 54 pour tout le reste.
C'est le premier script que je bidouille,alors il fonctionne , j'ai toutes les info sur Domoticz, mais je n'ai pas tout compris( en particulier time).
C'est la version 1.1

Code : Tout sélectionner

--[[
name : script_time_Altenergy_3u_3t_P.lua
auteur : papoo
date : 22/04/2020
Principe :
26/08/2018
]]--
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local nom_script = "Altenergy_3u_3t_P"
local debugging = true                     -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local script_actif = true                   -- active (true) ou désactive (false) ce script simplement
local delai = 5                             -- délai d'exécution de ce script en minutes de 1 à 59
local CapteurVirtuel_puissance = 18        -- renseigner l'idx du device texte associé (dummy - electrique instantane+compteur)
local CapteurVirtuel_temp1 = 21
local CapteurVirtuel_temp2 = 22
local CapteurVirtuel_temp3 = 23
local CapteurVirtuel_tension1 = 20
local CapteurVirtuel_tension2 = 24
local CapteurVirtuel_tension3 = 25
local adresse1 = "http://192.168.1.11/index.php/home"
local adresse2 = "http://192.168.1.11/index.php/realtimedata"

--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local nom_script = 'Altenergy_3u_3t_p'
local version = '1.1'
--------------------------------------------
---------------- Fonctions -----------------
--------------------------------------------
function voir_les_logs (s, debugging) -- nécessite la variable local debugging
    if (debugging) then
      if s ~= nil then
        print (s)
      else
      print ("aucune valeur affichable")
      end
    end
end   -- usage voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------

commandArray = {}
time = os.date("*t")
if script_actif == true then
    --if (time.hour == 00 and time.min == 20) then -- tout les matins à 00h20
    --if (time.min == 20 and ((time.hour == 7) or (time.hour == 13) or (time.hour == 18))) then -- 3 exécutions du script par jour à 7H20, 13h20 et 18H20
    --if time.hour % 2 == 0 then -- toutes les deux heures
    --if (time.hour%1 == 0 and time.min == 10)  then -- Toutes les heures et 10 minutes
    --if time.min% 2 == 0 then
    if ((time.min-1) % delai) == 0 then -- toutes les xx minutes en commençant par xx:01.  xx définissable via la variable delai
        voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging)

                if adresse1 ~= '' then voir_les_logs('--- --- --- Adresse : '..adresse1..'  --- --- --',debugging) end           
                local rid = assert(io.popen("/usr/bin/curl -m5 ".. adresse1))
                local testhtml = rid:read('*all')
                rid:close()
                for instance in testhtml:gmatch("<body>(.-)</body>") do
                    div, EnergieTotale=instance:match('Lifetime generation(.-)<td>(.-)kWh </td>') 
                    div1, Puissance=instance:match('Last System Power(.-)<td>(.-)W </td>')
                    div2, EnergieJour=instance:match('Generation of Current Day(.-)<td>(.-)kWh </td>')
                end   

                if EnergieTotale ~= nil then
                    voir_les_logs("--- --- --- Puissance Generee totale: ".. EnergieTotale.."kWh  --- --- --",debugging)
                else
                    voir_les_logs('--- --- --- Puissance Generee totale est vide  --- --- --',debugging)
                end
                
                if Puissance ~= nil then
                    voir_les_logs("--- --- --- Puissance : ".. Puissance.."W  --- --- --",debugging)
                else
                    voir_les_logs('--- --- --- Puissance est vide  --- --- --',debugging)
                end
               if EnergieJour ~= nil then
                    voir_les_logs("--- --- --- EnergieJour : ".. EnergieJour.."kW  --- --- --",debugging)
                else
                    voir_les_logs('--- --- --- EnergieJour est vide  --- --- --',debugging)
                end

                if adresse2 ~= '' then voir_les_logs('--- --- --- Adresse : '..adresse2..'  --- --- --',debugging) end           
                local rid = assert(io.popen("/usr/bin/curl -m5 ".. adresse2))
                local testhtml = rid:read('*all')
                rid:close()
                for instance in testhtml:gmatch("<tbody>(.-)</tbody>") do
                    tensionOnduleur1=instance:match("502000014029%-1 </td>.-Hz.-<td> A: (.-) V </td>")  
                    tensionOnduleur2=instance:match("502000013765%-1 </td>.-Hz.-<td> A: (.-) V </td>") 
                    tensionOnduleur3=instance:match("502000012907%-1 </td>.-Hz.-<td> A: (.-) V </td>")                  
                    tempOnduleur1=instance:match("502000014029%-1 </td>.-middle;'%>.-Hz </td>.-middle;'%>(.-) &#176;C </td>")
                    tempOnduleur2=instance:match("502000013765%-1 </td>.-middle;'%>.-Hz </td>.-middle;'%>(.-) &#176;C </td>")
                    tempOnduleur3=instance:match("502000012907%-1 </td>.-middle;'%>.-Hz </td>.-middle;'%>(.-) &#176;C </td>")
                end

                if tensionOnduleur1 ~= nil then
                    voir_les_logs("--- --- --- Tension reseau1 : ".. tensionOnduleur1.." V--- --- --",debugging)
                else
                    voir_les_logs('--- --- --- tension reseau est vide  --- --- --',debugging)
                end
                if tensionOnduleur2 ~= nil then
                    voir_les_logs("--- --- --- Tension reseau2 : ".. tensionOnduleur2.." V--- --- --",debugging)
                else
                    voir_les_logs('--- --- --- tension reseau est vide  --- --- --',debugging)
                end
                if tensionOnduleur3 ~= nil then
                    voir_les_logs("--- --- --- Tension reseau3 : ".. tensionOnduleur3.." V--- --- --",debugging)
                else
                    voir_les_logs('--- --- --- tension reseau est vide  --- --- --',debugging)
                end

                if tempOnduleur1 ~= nil then
                    voir_les_logs("--- --- --- Temperature onduleur1 : ".. tempOnduleur1.." degre --- --- --",debugging)
                else
                    voir_les_logs('--- --- --- Temperature onduleur1  --- --- --',debugging)
                end  
 		        if tempOnduleur2 ~= nil then
                    voir_les_logs("--- --- --- Temperature onduleur2 : ".. tempOnduleur2.." degre --- --- --",debugging)
                else
                    voir_les_logs('--- --- --- Temperature onduleur2  --- --- --',debugging)
                end  

 	        	if tempOnduleur3 ~= nil then
                    voir_les_logs("--- --- --- Temperature onduleur3 : ".. tempOnduleur3.." degre --- --- --",debugging)
                else
                    voir_les_logs('--- --- --- Temperature onduleur3  --- --- --',debugging)
                end  


                EnergieJour=EnergieJour*1000 --en W pas kW
                local CmdIdx=1
                commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_temp1.."|0|"..tempOnduleur1}
                CmdIdx=CmdIdx+1
                commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_temp2.."|0|"..tempOnduleur2}
                CmdIdx=CmdIdx+1
                commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_temp3.."|0|"..tempOnduleur3}
                CmdIdx=CmdIdx+1
                commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_tension1.."|0|"..tensionOnduleur1}
                CmdIdx=CmdIdx+1 
                commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_tension2.."|0|"..tensionOnduleur2}
                CmdIdx=CmdIdx+1 
                commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_tension3.."|0|"..tensionOnduleur3}
                CmdIdx=CmdIdx+1                
                commandArray[CmdIdx] = {['UpdateDevice'] = CapteurVirtuel_puissance.."|0|"..Puissance..";"..EnergieJour}
                CmdIdx=CmdIdx+1  
                
        voir_les_logs("--- --- --- Puissance Generee totale: ".. EnergieTotale.."kWh  --- --- --",debugging)
        voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging)
    end -- if time
end
return commandArray
A+
linkiwearth
Messages : 3
Inscription : 21 févr. 2016, 23:36

Re: récupéer des données sur une page WEB simplement

Message par linkiwearth »

Bonjour,

Je suis tombé sur votre discutions en cherchant à faire une extraction de valeur d'une page web également, mais je n'arrive pas à adapter le code à mon cas ..

Quelqu'un pourrais m'aider svp ?

Voici un bout du code de la page contenant la valeur que je souhaite récupérer :

</div>
<div class="col-xs-6">
<div class="textfill">
<h4>
<span class="textfill-value" v-show="apiResponses.accounts" v-cloak>
{{ account['24hreward']
? (account['24hreward'] * getPaymentsMultiplier()).toFixed(5)
: 0 }}
</span>
<span class="text-placeholder text-large" v-show="!apiResponses.accounts">
0.00000
</span>
</h4>
</div>

Je cherche à extraire la valeur qui vaut 0.00000..

J'espère que c'est faisable ?

Merci à vous :)
Répondre