SUPLA Filesensors - odczyt danych z API XML/HTML

Awatar użytkownika
PuteR
Posty: 818
Rejestracja: śr gru 06, 2017 10:07 am

pn lut 03, 2020 11:53 pm

do crontaba mam dodane tylko wykonywanie skryptu co minutę

Kod: Zaznacz cały

* * * * * /home/pi/supla-filesensors/temp.sh
a sam skrypt wygląda tak

Kod: Zaznacz cały

#!/bin/sh

curl -u root:root "http://192.168.1.47/getregister.cgi?device=0&tkot_value" --silent --show-error --location | xmllint --xpath "string(//cmd/device/reg /@v)" - > /home/pi/supla-filesensors/temp_zewnetrzna.txt
Awatar użytkownika
PuteR
Posty: 818
Rejestracja: śr gru 06, 2017 10:07 am

pn lut 03, 2020 11:54 pm

szym3k pisze:
pn lut 03, 2020 11:52 pm
Spróbuj najpierw w konsoli wpisać

Kod: Zaznacz cały

curl -u root:root "http://192.168.XX.XX/getregister.cgi?device=0&tzew_value" --silent --show-error --location | xmllint --xpath "string(//cmd/device/reg/@v)" -
i zobacz czy konsola "wypluwa" dane, powinno wyglądać to tak:

Obrazek
nic nie wypluła
szym3k
Posty: 193
Rejestracja: pn maja 15, 2017 10:32 am

pn lut 03, 2020 11:58 pm

To po kolei

Kod: Zaznacz cały

curl -u root:root "http://192.168.XX.XX/getregister.cgi?device=0&tzew_value"
zobaczy czy to zwróci Ci czysty xml w konsoli
Awatar użytkownika
PuteR
Posty: 818
Rejestracja: śr gru 06, 2017 10:07 am

wt lut 04, 2020 12:01 am

szym3k pisze:
pn lut 03, 2020 11:58 pm
To po kolei

Kod: Zaznacz cały

curl -u root:root "http://192.168.XX.XX/getregister.cgi?device=0&tzew_value"
zobaczy czy to zwróci Ci czysty xml w konsoli
teraz otrzymałem taką odpowiedź

Kod: Zaznacz cały

<cmd status="ok"><device id="0"><reg vid="0" tid="tzew_value" status="outdated_data"/></device></cmd>
szym3k
Posty: 193
Rejestracja: pn maja 15, 2017 10:32 am

wt lut 04, 2020 12:04 am

PuteR pisze:
wt lut 04, 2020 12:01 am
szym3k pisze:
pn lut 03, 2020 11:58 pm
To po kolei

Kod: Zaznacz cały

curl -u root:root "http://192.168.XX.XX/getregister.cgi?device=0&tzew_value"
zobaczy czy to zwróci Ci czysty xml w konsoli
teraz otrzymałem taką odpowiedź

Kod: Zaznacz cały

<cmd status="ok"><device id="0"><reg vid="0" tid="tzew_value" status="outdated_data"/></device></cmd>
Czyli tu leży problem, Twój sterownik nie daje nam pola z temperaturą zewnętrzną.

Wejdź w przeglądarkę i pokaż mi co wyświetla strona http://192.168.xx.xx/getregister.cgi?de ... fuel_level

Zobaczymy przy czym masz wartości.
Awatar użytkownika
PuteR
Posty: 818
Rejestracja: śr gru 06, 2017 10:07 am

wt lut 04, 2020 12:09 am

szym3k proszę bardzo

Kod: Zaznacz cały

<cmd status="ok">
<device id="0">
<reg vid="0" tid="tkot_value" v="67.30" min="-50.00" max="120.00"/>
<reg vid="0" tid="tpow_value" v="46.40" min="-50.00" max="120.00"/>
<reg vid="0" tid="tpod_value" v="47.68" min="-50.00" max="120.00"/>
<reg vid="0" tid="tcwu_value" v="43.42" min="-50.00" max="120.00"/>
<reg vid="0" tid="twew_value" status="outdated_data"/>
<reg vid="0" tid="tzew_value" status="outdated_data"/>
<reg vid="0" tid="tsp_value" v="59.57" min="-50.00" max="600.00"/>
<reg vid="0" tid="fuel_level" v="94" min="0" max="100"/>
</device>
</cmd>
Powiedzcie mi jeszcze jak restartować to supla-filesensors bo teraz bo każdej zmianie muszę usuwać z cloda i na nowo startować żeby zmiany zostały wprowadzone.
szym3k
Posty: 193
Rejestracja: pn maja 15, 2017 10:32 am

wt lut 04, 2020 12:19 am

nano temp.sh czy vi temp.sh i wklej tak jak tu

Kod: Zaznacz cały

#!/bin/sh

curl -u root:root "http://192.168.XX.XX/getregister.cgi?device=0&tkot_value" --silent --show-error --location | xmllint --xpath "string(//cmd/device/reg /@v)" - > /home/supla/supla-filesensors/tkot_value.txt
curl -u root:root "http://192.168.XX.XX/getregister.cgi?device=0&tpow_value" --silent --show-error --location | xmllint --xpath "string(//cmd/device/reg /@v)" - > /home/supla/supla-filesensors/tpow_value.txt
curl -u root:root "http://192.168.XX.XX/getregister.cgi?device=0&tpod_value" --silent --show-error --location | xmllint --xpath "string(//cmd/device/reg /@v)" - > /home/supla/supla-filesensors/tpod_value.txt
curl -u root:root "http://192.168.XX.XX/getregister.cgi?device=0&tcwu_value" --silent --show-error --location | xmllint --xpath "string(//cmd/device/reg /@v)" - > /home/supla/supla-filesensors/tcwu_value.txt
curl -u root:root "http://192.168.XX.XX/getregister.cgi?device=0&tsp_value" --silent --show-error --location | xmllint --xpath "string(//cmd/device/reg /@v)" - > /home/supla/supla-filesensors/tsp_value.txt
curl -u root:root "http://192.168.XX.XX/getregister.cgi?device=0&fuel_level" --silent --show-error --location | xmllint --xpath "string(//cmd/device/reg /@v)" - > /home/supla/supla-filesensors/fuel_level.txt
mało eleganckie, ale powinno działać :D

później daj

Kod: Zaznacz cały

./temp.sh
i sprawdź czy pliki jak wyżej się utworzyły, jeśli tak możesz sobie dodać je jako kanały do supli lub wyciąć co Ci faktycznie potrzebne
Awatar użytkownika
PuteR
Posty: 818
Rejestracja: śr gru 06, 2017 10:07 am

wt lut 04, 2020 12:39 am

Super, wygląda na to że się udało. Wielkie dzięki. :D
szym3k
Posty: 193
Rejestracja: pn maja 15, 2017 10:32 am

wt lut 04, 2020 1:00 am

@PuteR

zobacz ten skrypt, bo w nie mam już dostępu do sterownika - robiłem znajomemu

Kod: Zaznacz cały

#wystarczy zakomentować linie z pomiarem ktorego nie uzywamy
#prosze uzupelnic poprawnie url,sciezka,user,pass

#!/bin/sh

url='http://192.168.XX.XX/getregister.cgi?device=0'
sciezka='/home/USER/supla-filesensors'
user='root'
pass='root'

#temperatura zasilania (temperatura na kotle)
curl -u $user:$pass "$url&tkot_value" --silent | xmllint --xpath "string(//cmd/device/reg /@v)" - > $sciezka/tkot_value.txt

#temperatura powrotu
curl -u $user:$pass "$url&tpow_value" --silent | xmllint --xpath "string(//cmd/device/reg /@v)" - > $sciezka/tpow_value.txt

#temperatura podajnika
curl -u $user:$pass "$url&tpod_value" --silent | xmllint --xpath "string(//cmd/device/reg /@v)" - > $sciezka/tpod_value.txt

#temperatura ciepłej wody użytkowej
curl -u $user:$pass "$url&tcwu_value" --silent | xmllint --xpath "string(//cmd/device/reg /@v)" - > $sciezka/tcwu_value.txt

#temperatura wewnętrzna
curl -u $user:$pass "$url&twew_value" --silent | xmllint --xpath "string(//cmd/device/reg /@v)" - > $sciezka/twew_value.txt

#temperatura zewnętrzna
curl -u $user:$pass "$url&tzew_value" --silent | xmllint --xpath "string(//cmd/device/reg /@v)" - > $sciezka/tzew_value.txt

#temperatura spalin
curl -u $user:$pass "$url&tsp_value" --silent | xmllint --xpath "string(//cmd/device/reg /@v)" - > $sciezka/tsp_value.txt

#poziom paliwa
curl -u $user:$pass "$url&fuel_level" --silent | xmllint --xpath "string(//cmd/device/reg /@v)" - > $sciezka/fuel_level.txt

#temperatura czujnika dodatkowego nr 1
curl -u $user:$pass "$url&t1_value" --silent | xmllint --xpath "string(//cmd/device/reg /@v)" - > $sciezka/t1_value.txt

#temperatura czujnika dodatkowego nr 2
curl -u $user:$pass "$url&t2_value" --silent | xmllint --xpath "string(//cmd/device/reg /@v)" - > $sciezka/t2_value.txt
ładnie byłoby ściągać to jednym curlem i prasować ale szczerze nie mam pomysłu jak to zrobić to w shellu
Awatar użytkownika
PuteR
Posty: 818
Rejestracja: śr gru 06, 2017 10:07 am

wt lut 04, 2020 6:00 am

szym3k sprawdzę po pracy.
ODPOWIEDZ

Wróć do „Pomoc”