Sensor Web Scraping ne renvoie rien
Bonjour,
J’ai essayé de créé un sensor web scraping mais celui-ci me renvoie – au lieu d’un chiffre
Le site (PiAlert) n’est accessible que dans le LAN.
J’ai bien retrouvé le css selector, via l’inspecteur du navigateur.
Voici la définition de mon sensor :
- platform: scrape
name: NewDeviceLan
scan_interval: 60
resource: http://192.168.10.99/pialert/
select: "#devicesNew"
index: 0
Voila la partie inspecteur dans le navigateur avec le site :
J’ai essayé plusieurs index différends (0,1,2,3,4,5), comment trouver ce fameux index ?
Il n’y en a pas malheureusement…
SI tu affiches le code source de la page, tu va tomber sur :
<!-- top small box 3 ------------------------------------------------------- -->
<div class="col-lg-3 col-sm-6 col-xs-6">
<a href="#" onclick="javascript: getDevicesList('new');">
<div class="small-box bg-yellow pa-small-box-yellow">
<div class="inner">
<h4>New Devices</h4>
<h3 id="devicesNew"> -- </h3>
</div>
<div class="icon"> <i class="ion ion-plus-round"></i> </div>
<div class="small-box-footer"> Details <i class="fa fa-arrow-circle-right"></i> </div>
</div>
</a>
et donc on retrouve bien les 2 tirets…
En fait, le problème est que la valeur est renseigné par du javascript :
// -----------------------------------------------------------------------------
function getDevicesTotals () {
// stop timer
stopTimerRefreshData();
// get totals and put in boxes
$.get('php/server/devices.php?action=getDevicesTotals', function(data) {
var totalsDevices = JSON.parse(data);
$('#devicesAll').html (totalsDevices[0].toLocaleString());
$('#devicesConnected').html (totalsDevices[1].toLocaleString());
$('#devicesNew').html (totalsDevices[2].toLocaleString());
$('#devicesDown').html (totalsDevices[3].toLocaleString());
// Timer for refresh data
newTimerRefreshData (getDevicesTotals);
} );
}
et ça, le scrape ne sait pas le récupérer…
Tu ne peux donc pas le faire avec cette intégration…
Par contre !
En analysant le code, tu peux très bien récupérer les valeurs des 4 tuiles 
Il te faut pour cela utiliser l’intégration Rest de la manière suivante :
- platform: rest
name: PiAlert
resource: http://192.168.10.99/pialert/php/server/devices.php?action=getDevicesTotals
- platform: template
sensors:
pialert_all:
friendly_name: "Total d'appareils"
value_template: >
{% set list = states('sensor.pialert')[1:] %}
{% set list = list[:-1] %}
{% set list = list.split(',') %}
{{list[0]}}
- platform: template
sensors:
pialert_connected:
friendly_name: "Appareils connectés"
value_template: >
{% set list = states('sensor.pialert')[1:] %}
{% set list = list[:-1] %}
{% set list = list.split(',') %}
{{list[1]}}
- platform: template
sensors:
pialert_newdevices:
friendly_name: "Nouveaux appareils"
value_template: >
{% set list = states('sensor.pialert')[1:] %}
{% set list = list[:-1] %}
{% set list = list.split(',') %}
{{list[2]}}
- platform: template
sensors:
pialert_down:
friendly_name: "Appareils déconnectés"
value_template: >
{% set list = states('sensor.pialert')[1:] %}
{% set list = list[:-1] %}
{% set list = list.split(',') %}
{{list[3]}}
Ce qui donne :
1 « J'aime »
Merci beaucoup,
Je teste ça cette après midi.
Merci pour la réponse et surtout merci pour toutes les explications c est beaucoup plus claire
Edit:
Cela fonctionne parfaitement chapeau l’artiste 