SUPLA Filesensors - odczyt danych z API XML/HTML

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

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: 2256
Rejestracja: pt paź 28, 2016 10:56 pm
Lokalizacja: Kraków

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: 268
Rejestracja: pn maja 15, 2017 10:32 am

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: 1421
Rejestracja: śr gru 06, 2017 10:07 am

aaaa nie potrzebnie zawracam głowę, oczywiście że wszystko chodzi wpisałem nie to IP :lol:
Awatar użytkownika
PuteR
Posty: 1421
Rejestracja: śr gru 06, 2017 10:07 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: 8278
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Wstaw coś w stylu
printf "/n" >> plik
Pomiędzy tamtymi cat
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
PuteR
Posty: 1421
Rejestracja: śr gru 06, 2017 10:07 am

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

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: 1421
Rejestracja: śr gru 06, 2017 10:07 am

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??
Awatar użytkownika
lukfud
Posty: 2101
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

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 2223 razy
https://www.facebook.com/groups/supladiy/
ODPOWIEDZ

Wróć do „Pomoc”