Falownik BBECO - wy...
 
Powiadomienia
Wyczyść wszystko

Domoticz Falownik BBECO - wyodrębnianie danych po WIFI (scraping)

leckimarcin
(@leckimarcin)
Stażysta

Witam,

posiadam falownik bbeco, który podobno ma "bebechy" sofara.

Po zalogowaniu się na adres IP falownika, można podejrzeć moc chwilową (webdata_now_p) oraz dzisiejszą (webdata_today_e)

webdata now p
webdata today e

Zmodyfikowałem skrypt, ale niestety wyświetla tylko 0. Czy ktoś może nakierować mnie co jeszcze muszę zmienić? Ewentualnie podrzucić jakieś materiały, które nauczą mnie ekstrakcji danych w skryptach shell:)

domoticz

Załączam mój skrypt:

#!/usr/bin/env bash

username=admin
password=admin #Your admin password if different than default
inverter=192.168.2.108 # Change to your inverter's IP/hostname
curlOpts="-s -o - --user ${username}:${password}"

poll(){
curl ${curlOpts}    http://${inverter}/index_cn.html.html    2>&1 |\ #/status.html
egrep '^var webdata_now_p' |\ #var webdata_(now)
sed 's/var webdata_//' |\
sed 's/[^0-9]//g' |\
sed 's/\r$//g'
}

output=$(poll)
if [[ ! -z "${output}" ]]; then
echo -e "${output}"
curl -s --connect-timeout 2 --max-time 5 "http8082/json.htm?type=command&param=udevice&idx=45&nvalue=0&svalue=$output" #YOUR_$
else
echo "FAIL"
fi

EDIT:

coś namodziłem w pythonie i na innych stronach działa, więc w następnym tygodniu jak będę miał czas to spróbuję już pobrać dane bezpośrednio w falownika:

#!/usr/bin/env python

from bs4 import BeautifulSoup
import requests

url='http://192.168.2.108/index_cn.html'
page = requests.get(url).text
soup = BeautifulSoup(page,  "html.parser")
klasy_div=soup.findAll('div', class_='lab_r2')
print(klasy_div[7].text)
Cytuj
Autor tematu Dodane : 19/07/2021 10:44 pm
Tagi tematu
isom
 isom
(@isom)
Prezes Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20

Moim zdaniem podstawowy powód to 

curl -s --connect-timeout 2 --max-time 5 "http8082/json.htm?type=command&param=udevice&idx=45&nvalue=0&svalue=$output" #YOUR_$

Tu powinien być pełny json czyli IP domoticz z portem 

OdpowiedzCytuj
Dodane : 20/07/2021 7:46 pm
leckimarcin
(@leckimarcin)
Stażysta

 

webdata now p
webdata today e

Witam ponownie,

próbowałem jeszcze wyskrobać tę wartość za pomocą pythona i biblioteki BeautifulSoup.

Niestety kod źródłowy strony i to co udaje mi się pobrać za pomocą pythona znacznie sięróżni od siebie. Według kodu źródłowego z przeglądarki wartość mocy aktualnej jest zakodowana w elemencie class "lab_r2". Niestety strona, którą importuję za pomocą pythona jest "zakodowana" i nie posiada takiej zmiennej. Wydaje mi się, że problem leży po stronie pythona, który nie loguje usera i dlatego dostaje inną treść.

Sposób logowania jest zawarty w adresie strony tj. url='http://admin:admin@192.168.18.110/index_cn.html'.

Możliwe, że występuje też inny sposób na zalogowanie się, który by pomógłw zaistniałej sytuacji.

Zamieszczam kod źródłowy python oraz printscreeny.

#!/usr/bin/env python

from bs4 import BeautifulSoup
import requests
import re

DOMOTICZ_IP = 'http://192.168.18.101'
DEVICE_IDX_total = '45'
DEVICE_IDX_today = '46'
DEVICE_IDX_power = '47'

#url='http://192.168.18.110/index_cn.html'
url='http://admin:admin@192.168.18.110/index_cn.html'

page = requests.get(url).text
soup = BeautifulSoup(page,  "html.parser")
klasy_div=soup.findAll('div', class_='lab_r2')


print(klasy_div)
#print(klasy_div[0].text)
#total = klasy_div[6].text
#today = klasy_div[7].text
#power = klasy_div[8].text

#requests.get(DOMOTICZ_IP + "/json.htm?type=command&param=udevice&idx=" + DEVICE_IDX_total + "&svalue=" + total)
#requests.get(DOMOTICZ_IP + "/json.htm?type=command&param=udevice&idx=" + DEVICE_IDX_today + "&svalue=" + today)
#requests.get(DOMOTICZ_IP + "/json.htm?type=command&param=udevice&idx=" + DEVICE_IDX_power + "&svalue=" + power)
OdpowiedzCytuj
Autor tematu Dodane : 07/10/2021 9:44 am
lukas121
(@lukas121)
Ekspert Donator 2K19 Zasłużony dla Forum

Tu masz inna możliwość odczytania danych z falownika tyle tylko że z sofara, a że bbeco to przemalowany sofar to może zadziałać.

https://github.com/pawelka/sofarsolar_esp_rs485_logger

OdpowiedzCytuj
Dodane : 07/10/2021 8:29 pm
leckimarcin
(@leckimarcin)
Stażysta

@lukas121 dzięki za linka.

Akurat mam falownik obok rpi i konwenter USB RS 485 to spróbuję bezpośrednio się połączyć:)

Muszę tylko iść sprawdzić czy mój falownik ma dodatkowe wyjścia rj do komunikacji bus.

OdpowiedzCytuj
Autor tematu Dodane : 08/10/2021 11:04 am
Udostępnij: