Witam
Od penego czasu ogrzewam wodę grzałką elektryczną, prąd wykorzystje z paneli fotowoltaicznych. Chciałbym efektywnie wykorzystywać prąd tzn aby grzałka właczała się tylko wtedy gdy produkcja prądu jest powyrzej 1400W gdyż taką moc ma grzłka zamontowana w boilerze, aby nie pobierać prądu z sieci i nie tracić 20% które operator zabiera za magazynowanie prądu. Mój inwerer jest firmy STECA mam dostęp do danych przez www po jego IP.
Potrzebuję skrypt który by te dane pobierał np co 30sek i zapisywał je w domoticzu np w wirtualnym czujniku, te dane domoticz wy wykorzystywał jako informacja czy załączać grzałkę czy rozłaczyć ją.
Pomoże ktoś napisać taki skrypt pod RPI?
Kombinuj z biblioteką bs4 w pythonie:
#!/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://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)
W url zamiast admin:admin dajesz własny login i hasło do inwentera oraz poprawy url.
Co do elementu class_ lab_r2 to musisz w kodzie źródłowym poszukać jak nazywa się twoja zmienna gdzie zapisane są wartości produkcji prądu.
@leckimarcin bardzo dziękuję tylko ten skrypt gdzie wpisać?
@muchac35 to jest skrypt w języku python, wrzucasz do edytora tekstowego np. nano, zapisujesz jako nazwa.py i odpalasz poleceniem #python nazwa.py.
Możesz go wrzucić do autostartu. Jak już ogarniesz wszystkie zmienne to dobrze jest dorzucić jeszczed sprawdzanie czy falownik jest zalogowany w sieci, bo pewnie w nocy nic nie wysyła:
import os hostname = "192.168.1.x" response = os.system("ping -c 1 " + hostname) if response == 0: #tutaj wywołujesz instrukcje z postu wyżej
Ok potestuje i dam znac
plik wykonawczy zrobiłem zmieniłem ip jaki ma falownikzmieniłem na poprawne ip domoticza ale czy trzeba gdzieś wpisać port na którym jest dostęp do domoticza?
nie jestem w stanie zrozumieć tych
klasy_div=soup.findAll('div', class_='lab_r2')
#requests.get(DOMOTICZ_IP + "/json.htm?type=command¶m=udevice&idx=" + DEVICE_IDX_total + "&svalue=" + total)
print(klasy_div)
#print(klasy_div[0].text)
#total = klasy_div[6].text
Pierwsza linijka wyszukuje wszystkie elementy div na stronie falownika - musisz otworzyć źródło strony i poszukać odpowiedni element, pod którym znajduje się wartość, która Cię interesuje.
Druga linijka jest zakomentowana, bo póki nie znajdziesz odpowiedniego elementu to python by się wysypywał.
Polecenie print tylko pomaga sprawdzić działanie skryptu - później to zakomentuj haszem.
Jeżeli skrypt znajdzie kilka elementów div to w kwadratowym nawiasie podajesz numer zaczynając od 0.
Na YT jest dużo filmów jak używać skryptów skrobiacych do stron www. Jak co pytaj;)
P.S. domoticz na razie zostaw w spokoju, najpierw za pomocą polecenia print próbuj wyświetlić interesującą cię wartość, a następnie zajmujesz się przesłaniem tego do domoticza za pomocą json.
@leckimarcin ok wyszukałem na YT może pokapuje
ale muszę jakieś biblioteki instalować na RPI? i czy ten port domoticza w tym skrypcie mam gdzieś wpisać?
na stronie falownika wyszukałem
1959.6 ta liczba się ciągle zmienia i właśnie te dane aby domoticz miał
klasy_div=soup.findAll('td', class_='invisible_narow')
Musisz zainstalować poprzez pip bs4 i requests.
A w domoticzu musisz sobie stworzyć odpowiednie okienko i wpisać w skrypt idx z domoticza.
klasy_div=soup.findAll('td', class_='invisible_narow')Musisz zainstalować poprzez pip bs4 i requests.
jak to się indstaluje?
jeśli juz dodałem do tego skryptu klasy_div=soup.findAll('td', class_='invisible_narow') to przy uruchomieniu tego skryptu gdzie mogę zobaczyć jakie dane pobiera ?
@muchac35 pip inatall bs4
Jak używasz python3 to musisz dać pip3, i wtedy wywołujesz program też przez python3 nazwa.py
Ja uruchamiam ten skrypt gdy jestem zalogowany przez ssh i włączam sudo MC
Następnie podświetlenie mój skrypt o nazwie steca.sh i enter
zainstalowałem:
pip install bs4
uruchamiam komendą:
python3 steca.py
odpowiedż mam taką:
Traceback (most recent call last):
File "steca.py", line 19, in <module>
print(klasy_div[0].text)
IndexError: list index out of range
co robię nie tak?