Skrypt który pobier...
 
Powiadomienia
Wyczyść wszystko

Pomoc Skrypt który pobiera dane ze strony www i zapisuje te dane w Domoticz

muchac35
(@muchac35)
Ekspert

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?

Cytuj
Autor tematu Dodane : 09/06/2021 9:03 pm
leckimarcin
(@leckimarcin)
Stażysta

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&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)

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.

OdpowiedzCytuj
Dodane : 07/11/2021 6:34 pm
muchac35
(@muchac35)
Ekspert

@leckimarcin bardzo dziękuję tylko ten skrypt gdzie wpisać?

OdpowiedzCytuj
Autor tematu Dodane : 07/11/2021 6:47 pm
leckimarcin
(@leckimarcin)
Stażysta

@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
OdpowiedzCytuj
Dodane : 07/11/2021 6:59 pm
muchac35
(@muchac35)
Ekspert

Ok potestuje i dam znac

OdpowiedzCytuj
Autor tematu Dodane : 07/11/2021 7:03 pm
leckimarcin
(@leckimarcin)
Stażysta

@muchac35 Jest tego dużo w necie jak wpiszesz scraping python.

OdpowiedzCytuj
Dodane : 07/11/2021 7:17 pm
muchac35
(@muchac35)
Ekspert

@leckimarcin 

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&param=udevice&idx=" + DEVICE_IDX_total + "&svalue=" + total)
print(klasy_div)
#print(klasy_div[0].text)
#total = klasy_div[6].text
OdpowiedzCytuj
Autor tematu Dodane : 10/11/2021 9:01 am
leckimarcin
(@leckimarcin)
Stażysta

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.

OdpowiedzCytuj
Dodane : 10/11/2021 11:00 am
muchac35
(@muchac35)
Ekspert

@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

se

1959.6 ta liczba się ciągle zmienia i właśnie te dane aby domoticz miał

OdpowiedzCytuj
Autor tematu Dodane : 10/11/2021 11:10 am
leckimarcin
(@leckimarcin)
Stażysta
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.

OdpowiedzCytuj
Dodane : 10/11/2021 4:10 pm
muchac35
(@muchac35)
Ekspert
Dodane przez: @leckimarcin
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 ?

 

OdpowiedzCytuj
Autor tematu Dodane : 10/11/2021 4:14 pm
leckimarcin
(@leckimarcin)
Stażysta

@muchac35 pip inatall bs4

Jak używasz python3 to musisz dać pip3, i wtedy wywołujesz program też przez python3 nazwa.py

OdpowiedzCytuj
Dodane : 10/11/2021 4:17 pm
muchac35
(@muchac35)
Ekspert

@leckimarcin 

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

OdpowiedzCytuj
Autor tematu Dodane : 10/11/2021 4:43 pm
muchac35
(@muchac35)
Ekspert

@leckimarcin 

Tak krok po kroku jak to uruchomić?

Napisz proszę jaką komendą uruchamiać ten skrypt?

Czy są potrzeba instalować jakieś dodatkowe pakiety na RPI3

OdpowiedzCytuj
Autor tematu Dodane : 23/11/2021 2:20 pm
Udostępnij: