Besoin d'aide récupération d'info sur site web "Scrape"

Mon problème

Bonjour à tous.

J’aimerais récupérer des infos d’un site web, pour l’intégrer sur mon HA. J’ai commencé à regarder avec la méthode « SCRAPE », qui me semble être LA solution à mon besoin.
Premier problème, pour accéder à ces infos, le site web demande une authentification (login et password).
J’ai beau suivre la doc officielle, je n’y arrive pas…

Pourriez vous m’aider svp ?

Voici le site en question : https://mon.projet-tbh.fr/
Pour compléter, ce site m’affiche les infos d’une tablette qui est chez moi.
Celle ci réceptionne les données reçues par des capteurs de température extérieur et intérieur ainsi que d’un capteur fludia, pour le compteur d’elec.
Avec Domoticz, je pouvais récupérer ces infos, avec un script LUA et un fichier PHP… Je peux les partager si besoin, naturellement.

En vous remerciant !!

Partage tes lignes de yaml… :slightly_smiling_face:

Tu utilises quelque chose dans le genre:

  - platform: scrape
    resource: http...
    select: .class balise
    name: val_html
    unit_of_measurement: m/w/€...
    username: ...
    password: ...

J’utilise scrape ça marche bien :wink:

Bonjour Freddouille78,

Toutes mes excuses pour la réponse tardive.
Je reviens, donc, sur mon « problème ».
Voici les lignes « SCRAPE » :

- platform: scrape
  resource: https://mon.projet-tbh.fr/energie/tableau-de-bord
  select: "puissance"
  name: puissance
  unit_of_measurement: W
  username: mon_username
  password: mon_motdepasse

Voici, ce que l’on voit directement par cette adresse (avec authentification) :

Si quelqu’un peut m’aider…
Par avance merci beaucoup !

Bonjour à tous,

Personne peut m’aider, svp ?

Par avance merci de votre aide !

Hello…

Scrape c’est bien pour récupérer du contenu HTML.
Là tu as du json … Du Rest ça sera mieux

Merci Pulpy pour ton aide.
Par contre… Je suis en train d’essayer de le mettre en place, et bien… Je ne pige strictement rien :sweat_smile:

Salut.
Tu peux commencer par adapter l’exemple.
La version tronquée suffit comme base

rest:
  - authentication: basic
    username: "admin"
    password: "password"
    scan_interval: 60
    resource: http://192.168.1.12/status.xml
    sensor:
      - name: "Adult Pool Data System"
        json_attributes_path: "$.response.system"
        value_template: "OK"
        json_attributes:
          - "runstate"
          - "model"
          - "opmode"
          - "freeze"
          - "time"
          - "sensor1"
          - "sensor2"
          - "sensor3"
          - "sensor4"
          - "sensor5"
          - "version"

$ sera le contenu (json pour toi)

Merci beaucoup, pour le coup de main.
Alors je viens de tester, avec ceci, pour info, ces lignes ont été insérées dans un fichier « sensors.yaml » :

- platform: rest
  authentication: basic
  username: !secret tbh_id
  password: !secret tbh_secret
  scan_interval: 5
  resource: https://mon.projet-tbh.fr/energie/tableau-de-bord
  sensor
    - name: "Puissance"
      json_atributes_path: "$.puissance"
      value_template: "puissance"
      unit_of_measurement: "W"
      json_attributes:
        - "puissance"

Là, c’est le drame !!!

Error loading /config/configuration.yaml: while scanning a simple key
in "/config/sensors.yaml", line 19, column 3
could not find expected ':'
in "/config/sensors.yaml", line 20, column 11

Je présume que la ligne « sensor » doit être supprimée, car on se trouve « déjà » dans le fichier « sensor ».
Mais le reste, vraiment désolé, mais la logique me manque…

Si tu regarde bien il manque le : à la fin de ta ligne sensor… Donc la configuration n’est pas pas interprétée en totalité

Effectivement :innocent:, je viens de le rajouter, mais j’ai toujours une erreur…

Invalid config for [sensor.rest]: [sensor] is an invalid option for [sensor.rest]. Check: sensor.rest->sensor. (See ?, line ?).

Essaye ça

- platform: rest
  authentication: basic
  username: !secret tbh_id
  password: !secret tbh_secret
  scan_interval: 5
  resource: https://mon.projet-tbh.fr/energie/tableau-de-bord
  value_template: "{{ value_json.puissance }}"

Bonjour Pulpy,

Tout d’abord MERCI beaucoup pour ton aide précieuse !
Je viens de faire les modifications, je n’ai plus d’erreur, mais le « REST Sensor » me renvoit « inconnu ».
Voici l’erreur :

Logger: homeassistant.helpers.template
Source: helpers/template.py:1834
First occurred: 09:03:31 (160 occurrences)
Last logged: 09:16:47

Template variable error: 'value_json' is undefined when rendering '{{ value_json.puissance }}'

Encore merci pour ton aide et ta patience !

Bonjour à tous,
je me permet de « réveiller » ce sujet, car je suis toujours bloqué. Est ce que quelqu’un connait, ou utilise ce « projet » ?
Une âme charitable pour me venir en aide svp ? Par avance, merci !

Si cela peut aider, avant je pouvais récupérer cet info, avec Domoticz.
J’utilisais deux fichiers pour ce faire :
Un script LUA :

commandArray = {}
---récupère l'heure en minutes
time=os.time()
minutes=tonumber(os.date('%M',time))
hours=tonumber(os.date('%H',time))
maintenant=tonumber(hours*60+minutes)

if(maintenant%1 ==0 )then
   local appelTBH=assert(io.popen("php /usr/local/domoticz/var/scripts/tbhweb_elec.php username password"))

   local puissanceTBH = appelTBH:read('*all')
   appelTBH:close()
   puissance = tostring(puissanceTBH)
   print(puissance)
   --Ensuite remplissez votre commandArray avec les donnees recueillies :)

commandArray[1] = {['UpdateDevice'] = '14|1|' ..puissance..";0"}

end
return commandArray

Et un fichier PHP (qui était appelé dans le script LUA) :

<?php
///////////////////////////////////////////////
// Slush Coin Check
///////////////////////////////////////////////

if($argc == 3) {
    $username =  $argv[1];
    $password =  $argv[2];
} else {
    die("Usage: username password\n");
}


///////////////////////////////////////////////
// Create the temporary cookie
///////////////////////////////////////////////

$cookiefile = tempnam("", "slush_");

///////////////////////////////////////////////
// Get CSRF
///////////////////////////////////////////////

$url = "https://mon.projet-tbh.fr/accounts/login/?next=/";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiefile);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl);

preg_match("/<input type='hidden' name='csrfmiddlewaretoken' value='(.*?)' \/>/", $data, $csrf);

///////////////////////////////////////////////
// Login to Slush
///////////////////////////////////////////////

$url = "https://mon.projet-tbh.fr/accounts/login/?next=/";
$postfields = "csrfmiddlewaretoken=$csrf[1]&username=$username&password=$password";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiefile);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 20);
$data = curl_exec($curl);
curl_close($curl);

///////////////////////////////////////////////
// Visit earnings page
///////////////////////////////////////////////

$url = "https://mon.projet-tbh.fr/energie/tableau-de-bord";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
curl_close($curl);

///////////////////////////////////////////////
// Capture current power
///////////////////////////////////////////////

try{ 
   $puissance = json_decode($data, true);
    if(isset($puissance['puissance']) ) {
    echo $puissance['puissance'];
   } else {
     echo null;
   }


} catch(Exception $e){
    echo($e);
}


///////////////////////////////////////////////
// Clean up cookie
///////////////////////////////////////////////

unlink($cookiefile);
?>

Merci de votre aide

Salut.

Peux-tu partager le JSON complet de la page ?
Si ‹ puissance › n’est pas présent, il a peut-être un autre nom ou un niveau de hiérarchie différent

Bonjour @Pulpy-Luke et merci pour ta réponse,

Accès à l’adresse : Quarthome-Connexion, et authentification, donne ceci :

{"puissance": 394, "conso_jour": null, "conso_sept": null, "conso_trente": null, "tarif_jour": null, "tarif_sept": null, "tarif_trente": null}

Il y a bien l’information « puissance » que je veux récupérer…

Dans ce cas commence pas essayer
value_template: "{{ value_json}}" voire carrement sans la ligne value_template
Si ça ne retourne rien, c’est que tu as un souci d’accès/authentification

1 « J'aime »

Je viens de tester ceci, dans mon fichier sensors.yaml :

## TBH
- platform: rest
  authentication: basic
  username: !secret tbh_id
  password: !secret tbh_secret
  scan_interval: 5
  resource: https://mon.projet-tbh.fr/energie/tableau-de-bord

Le « sensor.puissance » apparait bien, mais toujours en « inconnu » :

Logger: homeassistant.components.sensor
Source: core.py:1130
Integration: Capteur (documentation, issues)
First occurred: 09:03:40 (2 occurrences)
Last logged: 09:03:40

Error adding entities for domain sensor with platform rest
Error while setting up rest platform for sensor
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 428, in async_add_entities
    await asyncio.gather(*tasks)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 692, in _async_add_entity
    await entity.add_to_platform_finish()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 789, in add_to_platform_finish
    self.async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 545, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 659, in _async_write_ha_state
    self.hass.states.async_set(
  File "/usr/src/homeassistant/homeassistant/core.py", line 1469, in async_set
    state = State(
  File "/usr/src/homeassistant/homeassistant/core.py", line 1130, in __init__
    raise InvalidStateError(
homeassistant.exceptions.InvalidStateError: Invalid state encountered for entity ID: sensor.rest_sensor. State max length is 255 characters.

Vais je y arriver… Merci beaucoup pour ton aide et ta patience, en tout cas !

Bon à priori tu récupères bien un truc mais c’est trop long. Essaye de couper

{{ value_template: "{{ value_json|truncate(200, True) }}

Alors avec ceci dans mon fichier sensors.yaml :

## TBH
- platform: rest
  resource: https://mon.projet-tbh.fr/energie/tableau-de-bord
  authentication: basic
  username: !secret tbh_id
  password: !secret tbh_secret
  scan_interval: 5
  name: Puissance
  value_template: "{{ value_json|truncate(200, True) }}"

Mon sensor.puissance et toujours en « inconnu » et j’ai ceci en erreur :

Logger: homeassistant.helpers.template
Source: helpers/template.py:583
First occurred: 10:37:19 (42 occurrences)
Last logged: 10:40:44

Template variable warning: 'value_json' is undefined when rendering '{{ value_json|truncate(200, True) }}'