UWAGA: Strona oraz Forum Smart'ny Dom nie będzie dostępne 23 Grudnia 2024 ze względu na przenoszenie serwisu na mocniejszą maszynę.
W tym czasie polecam poświęcenie swojego czasu na pomoc partnerowi w przygotowaniu udanych Świąt 😉
Za niedogodności z góry przepraszam, admin
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)
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:)
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¶m=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)
Moim zdaniem podstawowy powód to
curl -s --connect-timeout 2 --max-time 5 "http8082/json.htm?type=command¶m=udevice&idx=45&nvalue=0&svalue=$output" #YOUR_$
Tu powinien być pełny json czyli IP domoticz z portem
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¶m=udevice&idx=" + DEVICE_IDX_total + "&svalue=" + total) #requests.get(DOMOTICZ_IP + "/json.htm?type=command¶m=udevice&idx=" + DEVICE_IDX_today + "&svalue=" + today) #requests.get(DOMOTICZ_IP + "/json.htm?type=command¶m=udevice&idx=" + DEVICE_IDX_power + "&svalue=" + power)
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ć.
@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.