Aller au contenu

Messages recommandés

Posté(e)

Hello,

 

Question de noob sur une requête https :)

 

Etant chez Urban Solar Energy (USE) avec la Batterie Virtuelle (BV), j'aimerai bien connaitre nativement la valeur de celle-ci (nativement  = valeur calculée par USE).

Depuis peu de temps, USE donne à la fin de chaque période mensuelle (si on est mensualisé) la valeur de BV sur une page html liée à notre compte

 

accessible via l'adresse : https://espace-client.urbansolar.energy/pdl/<NUMERO DU POINT DE LIVRAISON (PDL)>/ma-conso

pdl, login & password sont évidement nécessaire.

 

Capture.thumb.JPG.4decbb60f1a625235b7055f1eccc6a83.JPG

 

Si j'enregistre cette page, j'obtient un html (css), et toutes les infos sont accessibles (ne pas préter attention au caractère NNBSP qui correspond à l'encodage d'un espace étroit)

image.thumb.png.b409d4476ee9659e8bb3df86c17e3ef5.png

 

Est'il possible de récupérer ces 2 informations sur cette page ?

 

Merci ;)

 

Posté(e)

Une page HTML, c'est du format XML.

Avec string.match() et la bonne expression régulière tu peux extraire les informations désirées entre les balises.

Tu trouveras des exemples sur le forum car ce sujet a déjà été traité dans le passé (même si le format XML est complètement tombé en désuétude, avantageusement remplacé par le JSON)
Mais c'est un peu pénible à faire, surtout si la page Web change sans prévenir (nouvelle mise en forme, etc)

 

Cela dit je pense que tu prends le problème à l'envers.

Je suppose que USE ne propose pas d'API.
Mais alors pourquoi ne pas aller prendre l'information à la source ?
Idéalement sur ton compteur Linky, avec la télé-information, tu auras la mesure d'injection en temps-réel, et tu pourras faire tes statistiques par jour, moins, année.

Ou bien sur ton compte Enedis, puisque les infos du Linky y remontent également.

Ainsi, en prenant l'information à la source, depuis le compteur, tu pourras en plus vérifier que ce que tu vois dans ton dashboard USE correspond à ce que tu as réellement injecté.

 

Posté(e)

Je fais déjà cette opération sur excel. Et je pourrais le faire via les datas enphase via la qa partagée.

 

Néanmoins, la problématique de la batterie virtuelle est qu'elle ne peut jamais être négative. Hors sur une même période mensuelle, elle peut très bien passé plusieurs fois en positif et valeurs nulles. Ce que ne me donnera pas le linky, enedis ou enphase. Au final, la valeur retenue sera celle correspondante à la fin de période mensuelle.

 

J'aimerais avoir cette information pour suivre ma BV de façon fiable et en lien avec ce qui fera foi pour le calcul final de consommation.

 

Je t'avoue avoir déjà bien cherché sur le forum, mais j'ai sûrement très mal utilisé les mots clefs. Je n'ai pas cherché XML par exemple.

 

Je suis totalement en ligne sur le fait que si USE change de structure, mon code sera à revoir... Et c'est bien le point très négatif du développement. USE m'ayant confirmé qu'ils ne proposaient pas d'api... Faut-il comprendre qu'il y en a une mais qu'ils ne veulent pas la soumettre pour éviter une saturation de leurs serveurs, c'est possible...

 

Concernant la qa que j'ai partagée sur enphase, la partie extraction était déjà faite par tes soins, j'ai juste appelé un autre json et joué avec l'arborescence. (Pas très compliqué)

 

Étant une quiche dev web et associé, j'ai préféré poser la question dès que j'ai vu qu'il ne s'agissait pas d'un Json.

Posté(e)

Hum... Je pense que tu pourrais faire le calcul de la charge de la BV avec ta domotique, en faisant la somme de ce qui est injecté et de ce qui est soutiré (l'une des 2 valeurs étant négative), depuis que tu as activé ce contrat chez USE.

 

Met ta ligne HTML au format texte (et pas image), j'essaierai d'écrire la regex correspondante.

Posté(e)
il y a 13 minutes, Lazer a dit :

Hum... Je pense que tu pourrais faire le calcul de la charge de la BV avec ta domotique, en faisant la somme de ce qui est injecté et de ce qui est soutiré (l'une des 2 valeurs étant négative), depuis que tu as activé ce contrat chez USE.

Compliqué sans connaître précisément l'historique des passages à zéro sur la BV. Néanmoins, J'ai un palier au 28 déc. Donc je dois pouvoir faire le calcul depuis ce jour là. Même si celà ne m'aidera pas si ma BV est nulle lundi à 8h du matin et positive à 16h puis nulle à 23h59.. 

il y a 17 minutes, Lazer a dit :

Met ta ligne HTML au format texte (et pas image), j'essaierai d'écrire la regex correspondante.

La ligne contient pas mal d'info, j'essaie d'épurer les infos perso et poste.

Merci.

Posté(e)

Je t'ai envoyé les data.

D'ailleurs j'aurias également besoin d'un coup de main pour les lignes de commande pour passer le login et le pass dans l'url :)

Mais te prends pas le choux si c'est compliqué ou que tu as autre chose à faire :)

Posté(e) (modifié)

Essaye avec ceci :

string.match(string.gsub(TEXT, " ", ""), 'Chargeactuelle<spanclass="font%-boldtext%-primary">&nbsp;(%d+)kWh</span>')

 

Les astuces utilisées :

  • On commence par un string.gsub afin de retirer tous les espaces, ce qui me simplifie l'extraction de la valeur numérique (à cause de l'espace des milliers)
  • les caractères - sont préfixés avec un signe % pour les protéger afin qu'ils ne soient pas interprétés dans la regex
  • La sélection de la valeur numérique se fait avec %d+ qui signifie 1 ou plusieurs chiffres numériques
  • les parenthèses autour de la sélection numérique servent à l'extraction de la valeur

 

EDIT : string.match() renvoie une chaine de caractères, donc il faudra faire un tonumber() pour obtenir un vrai nombre exploitable dans des calculs.

 

Modifié par Lazer
  • Like 1
Posté(e)

Bon, en fait, je crois que je me suis sentis un peu trop le newbie confiant :D

 

Pour commencer, il faut la bonne requette mais là j'ai pondu un truc... qui dit donne un status OK pour n'importe quel login/password :1:

 
local Pwd_Base64 = 'toto'
local PDL = '1935'
local Auth = "Basic " .. Pwd_Base64

local URL = "https://espace-client.urbansolar.energy/pdl/"
local API = PDL.."/ma-conso"

local http = net.HTTPClient()

function RequestHTTP()

    http:request(URL .. API, {
        options = {
            checkCertificate = false,
            method = 'GET',
            headers = {
                ['Accept'] = 'application/xml',
                ['Content-Type'] = 'application/xml' ,
                ['Authorization'] = Auth },
            timeout = 10000
            },
        success = function(response)
            local result = response.data;

            if response.status == 200 or response.status == 201 then
            -- réponse OK
                print("OK",response.status)                
            else
            -- réponse Pas OK
                print("KO",response.status)                   
            end
        end,
        
        -- Erreur sur la fonction
        error = function(err)
            fibaro:debug('function(err) : ' .. err)            
        end
    })
    
    --setTimeout(RequestHTTP,1*1000) -- boucle toute les secondes
    
end

RequestHTTP()
J'ai essayer de ne pas mettre le ['Authorization'] = Auth et j'ai toujours OK
 

Bon j'avoue, que je ne sais même pas quel est le type de codage pour l'authentification car je n'y connais rien du tout ... J'ai pris un basic avec derrière un codage base 64 "Basic 'login:password'"

 

Bref, je patauge :)

 

 

Posté(e)

Dans ton navigateur tu fais F12 pour voir les outils de développement, puis tu observes la méthode de connexion : URL, en-têtes de la requête, type de méthode, données passées en paramètres, etc... c'est pas toujours simple.

Posté(e)

Pour le xml[mention=339]Steven[/mention] avait fais une fonction pour transformer le xml en table

 

Je l'utilise dans le qa météo que j'avais fais il y a un petit moment

 

Envoyé de mon BLA-L29 en utilisant Tapatalk

 

 

 

 

Posté(e)
Il y a 18 heures, Lazer a dit :

Dans ton navigateur tu fais F12 pour voir les outils de développement, puis tu observes la méthode de connexion : URL, en-têtes de la requête, type de méthode, données passées en paramètres, etc... c'est pas toujours simple.

Effectivement avec Firefox, j'ai accès à certaines fonctionnalité, mais aucune ne m'offre la possibilité de catcher la requête.

 

Il y a 17 heures, mprinfo a dit :

Pour le xml[mention=339]Steven[/mention] avait fais une fonction pour transformer le xml en table

 

Je l'utilise dans le qa météo que j'avais fais il y a un petit moment

 

Envoyé de mon BLA-L29 en utilisant Tapatalk

 

 

 

 

Merci à tous les 2, je vais laisser de côté pour le moment, c'est un poil trop time consumming pour une retour sur investissement assez faible :) à tous les 2,

Posté(e)
Il y a 3 heures, TitiXsi a dit :

Effectivement avec Firefox, j'ai accès à certaines fonctionnalité, mais aucune ne m'offre la possibilité de catcher la requête.

C'est dans l'onglet "Réseau"

 

image.thumb.png.ab16f8bdb1af87baad74180bd8c36f9d.png

 

Mais effectivement ça peut être consommateur de temps cette analyse...

 

  • Thanks 1
Posté(e)
Il y a 3 heures, Lazer a dit :

C'est dans l'onglet "Réseau"

 

image.thumb.png.ab16f8bdb1af87baad74180bd8c36f9d.png

 

Mais effectivement ça peut être consommateur de temps cette analyse...

 

Merci ! J'ai trouvé un Bearer et un Basic, donc on a surement à faire à une connexion en 2 temps password et Token.

Posté(e)

Surement, il faut que tu regardes les entêtes de la 1ère réponse, et de la 2nde requête, il doit y avoir un token, cookie, ou autre astuce dans le genre.

×
×
  • Créer...