récuperer une valeur avec password

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 <\>.
mickaelr30
Messages : 210
Inscription : 29 août 2015, 15:57

récuperer une valeur avec password

Message par mickaelr30 »

bonjour,
je me connecte sur internet via une box 4G (huawei - E5180) et comme ils limitent le débit de la connexion après un certains volume de data, j'aimerai récupérer cette valeur.
le problème est que pour se connecter il faut rentrer un username et un password.
de ce que j'ai trouvé le codage du password est en base64.
quelqu'un saurait comment faire pour se connecter (en LUA ou en python je suis pas trop difficile :D )
merci
Domoticz + Imperihome + Mydomoathome
1-wire : 12 DS18b20 + 3 DS2413
Z-Wave : 8 FGR221 + 3 FGS222 + 3 FGSD002
téléinfo : 2 modules ( consommation + production)
Mysensors+2 éclairages ws2812 et WLED
2 caméra IP +1 raspberry piscine + 1 nuc domoticz
fab0030
Messages : 102
Inscription : 24 nov. 2016, 17:04

Re: récuperer une valeur avec password

Message par fab0030 »

mickaelr30
Messages : 210
Inscription : 29 août 2015, 15:57

Re: récuperer une valeur avec password

Message par mickaelr30 »

bonsoir,
maintenant j'arrive à récupérer quelques valeurs avec le Github en php (fab0030 tu bois déja assez de café :D ) :

object(SimpleXMLElement)#8 (4) {
["CurrentMonthDownload"]=>
string(11) "24436159913"
["CurrentMonthUpload"]=>
string(9) "705955609"
["MonthDuration"]=>
string(6) "255737"
["MonthLastClearTime"]=>
string(9) "2018-1-20"
}

maintenant j'aimerai récupérer seulement la valeur "CurrentMonthDownload" en php pour la mettre dans un capteur virtuel
quelqu'un a une idée ?
merci
Domoticz + Imperihome + Mydomoathome
1-wire : 12 DS18b20 + 3 DS2413
Z-Wave : 8 FGR221 + 3 FGS222 + 3 FGSD002
téléinfo : 2 modules ( consommation + production)
Mysensors+2 éclairages ws2812 et WLED
2 caméra IP +1 raspberry piscine + 1 nuc domoticz
fab0030
Messages : 102
Inscription : 24 nov. 2016, 17:04

Re: récuperer une valeur avec password

Message par fab0030 »

Vu que Mickael traîne ( :D :D ) je poste le script qui va bien pour récupérer une donnée sur une box huawei (4G box bouygues).
En l’occurrence les data consommés pour le mois en cours

Code : Tout sélectionner

#!/usr/bin/env python

import requests
import re
import hashlib
import base64
import xml.etree.ElementTree as ET
import urllib2
from StringIO import StringIO
 
 
def login(baseurl, username, password):
    s = requests.Session()
    r = s.get(baseurl + "html/index.html")
    csrf_tokens = grep_csrf(r.text)
 
    s.headers.update({
    '__RequestVerificationToken': csrf_tokens[1],
    })
 
 
    data = login_data(username, password, csrf_tokens[1])
    print("api/user/login")
    r = s.post(baseurl + "api/user/login", data=data)
    print(r.text)
 
    s.headers.update({
    '__RequestVerificationToken': r.headers["__RequestVerificationTokenone"]
    })
 
    return s

 
def change_mode(baseurl, session):
	
	r = s.get(baseurl + "api/monitoring/month_statistics")
	root = ET.fromstring(r.text)
	data5 = root.find('CurrentMonthDownload')
	print(data5.text)
	data6 = str(round((int(data5.text) * 0.000000009699), 2))
	print(data6)
    requete='http://IP_DOMOTICZ:PORT_DOMOTICZ/json.htm?type=command&param=udevice&idx=NUMERO_IDX&nvalue=0&svalue='+data6
    r=requests.get(requete)
	
	
def grep_csrf(html):
    pat = re.compile(r".*meta name=\"csrf_token\" content=\"(.*)\"", re.I)
    matches = (pat.match(line) for line in html.splitlines())
    return [m.group(1) for m in matches if m]
 
 
def login_data(username, password, csrf_token):
    def encrypt(text):
        m = hashlib.sha256()
        m.update(text)
        return base64.b64encode(m.hexdigest())
 
    password_hash = encrypt(username + encrypt(password) + csrf_token)
    return '<?xml version:"1.0" encoding="UTF-8"?><request><Username>admin</Username><Password>'+password_hash+'</Password><password_type>4</password_type></request>'
 
 
WEB = "http://IP_BOX/"
USERNAME = "USER_BOX"
PASSWORD = "PWD_BOX"
 
s = login(WEB, USERNAME, PASSWORD)
change_mode(WEB, s)
Mickaël l'a un peu simplifié...mais l'idée est là !!
Répondre