SUPLA Filesensors - odczyt danych z API XML/HTML

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

wt lut 04, 2020 8:25 pm

szym3k jeśli dobrze wszystko wypełniłem

Kod: Zaznacz cały

#!/bin/sh

url='http://192.168.1.81/getregister.cgi?device=0'
sciezka='/home/pi/supla-filesensors/var'
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
to po wykonaniu skryptu dostaję takie coś

Kod: Zaznacz cały

-:6: parser error : Opening and ending tag mismatch: hr line 5 and body
</body>
       ^
-:7: parser error : Opening and ending tag mismatch: body line 3 and html
</html>
       ^
-:8: parser error : Premature end of data in tag html line 1

^
-:6: parser error : Opening and ending tag mismatch: hr line 5 and body
</body>
       ^
-:7: parser error : Opening and ending tag mismatch: body line 3 and html
</html>
       ^
-:8: parser error : Premature end of data in tag html line 1

^
-:6: parser error : Opening and ending tag mismatch: hr line 5 and body
</body>
       ^
-:7: parser error : Opening and ending tag mismatch: body line 3 and html
</html>
       ^
-:8: parser error : Premature end of data in tag html line 1

^
-:6: parser error : Opening and ending tag mismatch: hr line 5 and body
</body>
       ^
-:7: parser error : Opening and ending tag mismatch: body line 3 and html
</html>
       ^
-:8: parser error : Premature end of data in tag html line 1

^
-:6: parser error : Opening and ending tag mismatch: hr line 5 and body
</body>
       ^
-:7: parser error : Opening and ending tag mismatch: body line 3 and html
</html>
       ^
-:8: parser error : Premature end of data in tag html line 1

^
-:6: parser error : Opening and ending tag mismatch: hr line 5 and body
</body>
       ^
-:7: parser error : Opening and ending tag mismatch: body line 3 and html
</html>
       ^
-:8: parser error : Premature end of data in tag html line 1

^
-:6: parser error : Opening and ending tag mismatch: hr line 5 and body
</body>
       ^
-:7: parser error : Opening and ending tag mismatch: body line 3 and html
</html>
       ^
-:8: parser error : Premature end of data in tag html line 1

^
Awatar użytkownika
fracz
Posty: 1829
Rejestracja: pt paź 28, 2016 10:56 pm
Lokalizacja: Rybna

wt lut 04, 2020 8:37 pm

Dlatego że to nie jest poprawny XML. pup jest bardziej tolerancyjny, spróbuj tego rozwiązania o którym pisałem wcześniej
szym3k
Posty: 192
Rejestracja: pn maja 15, 2017 10:32 am

wt lut 04, 2020 8:38 pm

Dziś przetestowałem u mnie, wszystko działa.
Obrazek

Widzę, że operujesz na innym IP niż wczoraj tak powinno być? Nie wiem skąd praser widzi u Ciebie body i html w tym zwracanym xml nie powinno nic takiego być.

Rozwiązanie chodzi od wczoraj bez problemu.
Awatar użytkownika
PuteR
Posty: 790
Rejestracja: śr gru 06, 2017 10:07 am

wt lut 04, 2020 8:50 pm

aaaa nie potrzebnie zawracam głowę, oczywiście że wszystko chodzi wpisałem nie to IP :lol:
Awatar użytkownika
PuteR
Posty: 790
Rejestracja: śr gru 06, 2017 10:07 am

sob lut 08, 2020 8:34 am

A pytanko takie jak zrobić żeby z dwóch plików zrobić jeden chodzi o przesyłanie danych do pliku w dwóch liniach

Napisałem coś takiego

Kod: Zaznacz cały

 cat /home/pi/supla-filesensors/var/weather/temp.txt > "$folder_location/temp&humidity.txt";
cat /home/pi/supla-filesensors/var/weather/humidity.txt >> "$folder_location//temp&humidity.txt";
else  
Ale w ten sposób wysyła dane ale w jednej linii.
Awatar użytkownika
klew
Posty: 825
Rejestracja: czw cze 27, 2019 12:16 pm

sob lut 08, 2020 9:27 am

Wstaw coś w stylu
printf "/n" >> plik
Pomiędzy tamtymi cat
Awatar użytkownika
PuteR
Posty: 790
Rejestracja: śr gru 06, 2017 10:07 am

sob lut 08, 2020 9:59 am

Super dzięki, udało się :]
szym3k
Posty: 192
Rejestracja: pn maja 15, 2017 10:32 am

ndz lut 09, 2020 6:47 pm

Jeśli wykorzystujesz mój skrypt po prostu użyj w drugiej wartości >> zamiast > wtedy doda bufora zamiast go nadpisać ;)

np.

Kod: Zaznacz cały

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

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

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

pn lut 10, 2020 11:09 pm

Próbuję wyciągnąć dane z Airly a konkretnie wartoś CAQI. Wszystkie inne wartości pobierają się bez problemu a z tym jednym jest problem skrypt mam napisany w ten sposób

Kod: Zaznacz cały

curl -s 'https://airapi.airly.eu/v2/measurements/nearest?lat=53.284041&lng=21.865889&maxDistanceKM=30&apikey=API_KEY' | jq '.current.values[] | select(.name=="AIRLY_CAQI") .value' - > $sciezka/caqi.txt
Czy te wskazanie pobiera się inaczej??
lukfud
Posty: 230
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

pn lut 10, 2020 11:36 pm

PuteR pisze:
pn lut 10, 2020 11:09 pm
Próbuję wyciągnąć dane z Airly a konkretnie wartoś CAQI. Wszystkie inne wartości pobierają się bez problemu a z tym jednym jest problem skrypt mam napisany w ten sposób

Kod: Zaznacz cały

curl -s 'https://airapi.airly.eu/v2/measurements/nearest?lat=53.284041&lng=21.865889&maxDistanceKM=30&apikey=API_KEY' | jq '.current.values[] | select(.name=="AIRLY_CAQI") .value' - > $sciezka/caqi.txt
Czy te wskazanie pobiera się inaczej??
Zamień

Kod: Zaznacz cały

'.current.values[] | select(.name=="AIRLY_CAQI") | .value'
na

Kod: Zaznacz cały

'.current.indexes[] | .value'
caqi.png
caqi.png (19.74 KiB) Przejrzano 290 razy
.newbie
ODPOWIEDZ