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

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

5 Wpisów
3 Użytkownicy
0 Reactions
2,566 Wyświetleń
leckimarcin
(@leckimarcin)
Wpisów: 53
Kontrybutor
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 
[#2414]

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)

 
Dodane : 19/07/2021 10:44 pm
isom
 isom
(@isom)
Wpisów: 5319
Szef wszystkich szefów Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

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 


 
Dodane : 20/07/2021 7:46 pm
leckimarcin
(@leckimarcin)
Wpisów: 53
Kontrybutor
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

 

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)

 
Dodane : 07/10/2021 9:44 am
lukas121
(@lukas121)
Wpisów: 543
Ekspert Zasłużony dla Forum Donator 2K19
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

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


 
Dodane : 07/10/2021 8:29 pm
leckimarcin
(@leckimarcin)
Wpisów: 53
Kontrybutor
Autor tematu
Translate
English
Spanish
French
German
Italian
Portuguese
Russian
Chinese
Japanese
Korean
Arabic
Hindi
Dutch
Polish
Turkish
Vietnamese
Thai
Swedish
Danish
Finnish
Norwegian
Czech
Hungarian
Romanian
Greek
Hebrew
Indonesian
Malay
Ukrainian
Bulgarian
Croatian
Slovak
Slovenian
Serbian
Lithuanian
Latvian
Estonian
 

@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.


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