Odczyt wartości z linku bezpośredniego
-
shimano73
- Posts: 2174
- Joined: Sun Feb 28, 2016 12:27 pm
- Location: Orzesze
- Been thanked: 1 time
Witajcie , czy ktoś podpowie jak odczytać wartość z linku bezpośredniego np wodomierza. Przeglądałem inne projekty np viewtopic.php?t=15048 ale jakoś tego nie czuje a w zamieszczonym przykładzie nie ma supli, a gui-generic to taka kobyła że nie potrafię tego tam znaleźć. Chciałbym do szkicu webinterface.ino dodać wartość z licznika wody jako zmienna. nie chcę tworzyć kanału , potrzebna jest mi tylko jego wartość.
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie
Wezmę udział w Supla Offline Party 2024
Wezmę udział w Supla Offline Party 2024
-
malarz
- Posts: 506
- Joined: Wed Jan 27, 2021 4:04 pm
- Been thanked: 2 times
Trochę jak wshimano73 wrote: Sun Mar 16, 2025 4:45 pm Witajcie , czy ktoś podpowie jak odczytać wartość z linku bezpośredniego np wodomierza. Przeglądałem inne projekty np viewtopic.php?t=15048 ale jakoś tego nie czuje a w zamieszczonym przykładzie nie ma supli, a gui-generic to taka kobyła że nie potrafię tego tam znaleźć. Chciałbym do szkicu webinterface.ino dodać wartość z licznika wody jako zmienna. nie chcę tworzyć kanału , potrzebna jest mi tylko jego wartość.
https://github.com/malarz-supla/supla-d ... ronius.cpp (po https://...)
https://github.com/malarz-supla/supla-d ... aredge.cpp (po https://....)
W skrócie: łączysz się z hostem, ściągasz stronę, czytasz (z opisu wynika, że będzie pewnie kilka(naście) znaków a nie cały json), konwertujesz napis na wartość i ... koniec. Trochę podobne jak wysyłanie danych stacji pogodowej, tylko zapytanie prostsze, ale trzeba odczytać odpowiedź.
Napisz trochę więc (link, skopiuj wynik z przeglądarki, ...) bo ciężko więcej podpowiedzieć
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.
-
shimano73
- Posts: 2174
- Joined: Sun Feb 28, 2016 12:27 pm
- Location: Orzesze
- Been thanked: 1 time
Dzięki bardzo, w przypadku licznika wody jakiej szukać nazwy w json'ie z wartością -> " calculatedValue" ?malarz wrote: Sun Mar 16, 2025 5:37 pmTrochę jak wshimano73 wrote: Sun Mar 16, 2025 4:45 pm Witajcie , czy ktoś podpowie jak odczytać wartość z linku bezpośredniego np wodomierza. Przeglądałem inne projekty np viewtopic.php?t=15048 ale jakoś tego nie czuje a w zamieszczonym przykładzie nie ma supli, a gui-generic to taka kobyła że nie potrafię tego tam znaleźć. Chciałbym do szkicu webinterface.ino dodać wartość z licznika wody jako zmienna. nie chcę tworzyć kanału , potrzebna jest mi tylko jego wartość.
https://github.com/malarz-supla/supla-d ... ronius.cpp (po https://...)
https://github.com/malarz-supla/supla-d ... aredge.cpp (po https://....)
W skrócie: łączysz się z hostem, ściągasz stronę, czytasz (z opisu wynika, że będzie pewnie kilka(naście) znaków a nie cały json), konwertujesz napis na wartość i ... koniec. Trochę podobne jak wysyłanie danych stacji pogodowej, tylko zapytanie prostsze, ale trzeba odczytać odpowiedź.
Napisz trochę więc (link, skopiuj wynik z przeglądarki, ...) bo ciężko więcej podpowiedzieć
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie
Wezmę udział w Supla Offline Party 2024
Wezmę udział w Supla Offline Party 2024
-
shimano73
- Posts: 2174
- Joined: Sun Feb 28, 2016 12:27 pm
- Location: Orzesze
- Been thanked: 1 time
Napisałem sobie coś procedurę na podstawie softu kolegi roman106. Wywołuje ją w sekcji loop po uzyskaniu statusdevice=17 no i nie działa, no i nie wiem dlaczego .
Code: Select all
void ReadDirectLink() {
std::unique_ptr<BearSSL::WiFiClientSecure> client(new BearSSL::WiFiClientSecure);
client->setInsecure();
HTTPClient https;
https.begin(*client, host1); // HTTPS
int httpCode = https.GET();
Serial.print("httpCode : ");Serial.println(httpCode);
String json = https.getString();
Serial.print("JSON : ");Serial.println(json);
JsonDocument doc;
deserializeJson(doc, json);
https.end();
ValueDirectLink = doc["calculatedValue"];
Serial.print("odczyt linku : ");Serial.println(ValueDirectLink);
}
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie
Wezmę udział w Supla Offline Party 2024
Wezmę udział w Supla Offline Party 2024
-
SOYER
- Posts: 1623
- Joined: Wed Aug 10, 2022 12:29 pm
- Location: Kryry
- Been thanked: 2 times
Czemu nie zaglądniesz tu:shimano73 wrote: Sun Mar 16, 2025 4:45 pm Witajcie , czy ktoś podpowie jak odczytać wartość z linku bezpośredniego np wodomierza. Przeglądałem inne projekty np viewtopic.php?t=15048 ale jakoś tego nie czuje a w zamieszczonym przykładzie nie ma supli, a gui-generic to taka kobyła że nie potrafię tego tam znaleźć. Chciałbym do szkicu webinterface.ino dodać wartość z licznika wody jako zmienna. nie chcę tworzyć kanału , potrzebna jest mi tylko jego wartość.
viewtopic.php?t=16698
potem tu:
https://github.com/Soyer79/waterMeterX3 ... 3valve.ino
tam masz między innymi to:
Code: Select all
top1 = "supla/"+String(mqtt_user)+"/devices/"+String(dv_id_1)+"/channels/"+String(chann_id_1)+"/state/calculated_value";
top2 = "supla/"+String(mqtt_user)+"/devices/"+String(dv_id_2)+"/channels/"+String(chann_id_2)+"/state/calculated_value";
top3 = "supla/"+String(mqtt_user)+"/devices/"+String(dv_id_3)+"/channels/"+String(chann_id_3)+"/state/calculated_value";
Last edited by SOYER on Tue Mar 18, 2025 6:27 pm, edited 2 times in total.
https://youtube.com/@tomaszhamer8134?si=_J1cT_QWsXxgt1Fm
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
https://kryry01.aqi.eco/pl
https://app.weathercloud.net/d4311785603
https://github.com/Soyer79
-
malarz
- Posts: 506
- Joined: Wed Jan 27, 2021 4:04 pm
- Been thanked: 2 times
Nie chciałem (ze względu na pamięć) korzystać z httpclient'a i mam coś takiego
Jak nie wyciąłem za dużo to powinno działać. Jakbyś podał log swojego rozwiązania to łatwiej byłoby szukać błędu. Bo nie wiadomo na którym etapie jest ten błąd. Podejrzane wydaje mi się
Tam raczej powinno być coś w nawiasie (przynajmniej "/").
Code: Select all
char output2[1000];
WiFiClientSecure client;
client.setInsecure();
if (client.connect("adres.internetowy.pl", 443)) {
client.println("GET /sciezka/do/strony.php?parametr=wartsc HTTP/1.1");
client.println("Host: adres.internetowy.pl");
client.println("Connection: close");
client.println();
for (int i=0; client.available(); i++) {
output2[i] = client.read();
}
SUPLA_LOG_DEBUG(output2);
}
Code: Select all
int httpCode = https.GET();
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.
-
shimano73
- Posts: 2174
- Joined: Sun Feb 28, 2016 12:27 pm
- Location: Orzesze
- Been thanked: 1 time
A w którym momencie jest coś o czytaniu linków bezpośrednich bo nie umiem znaleźć ?SOYER wrote: Tue Mar 18, 2025 6:17 pmCzemu nie zaglądniesz tu:shimano73 wrote: Sun Mar 16, 2025 4:45 pm Witajcie , czy ktoś podpowie jak odczytać wartość z linku bezpośredniego np wodomierza. Przeglądałem inne projekty np viewtopic.php?t=15048 ale jakoś tego nie czuje a w zamieszczonym przykładzie nie ma supli, a gui-generic to taka kobyła że nie potrafię tego tam znaleźć. Chciałbym do szkicu webinterface.ino dodać wartość z licznika wody jako zmienna. nie chcę tworzyć kanału , potrzebna jest mi tylko jego wartość.
viewtopic.php?t=16698
potem tu:
https://github.com/Soyer79/waterMeterX3 ... 3valve.ino
tam masz między innymi to:
a także całą obsługę czytania linku bezpośredniego.Code: Select all
top1 = "supla/"+String(mqtt_user)+"/devices/"+String(dv_id_1)+"/channels/"+String(chann_id_1)+"/state/calculated_value"; top2 = "supla/"+String(mqtt_user)+"/devices/"+String(dv_id_2)+"/channels/"+String(chann_id_2)+"/state/calculated_value"; top3 = "supla/"+String(mqtt_user)+"/devices/"+String(dv_id_3)+"/channels/"+String(chann_id_3)+"/state/calculated_value";
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie
Wezmę udział w Supla Offline Party 2024
Wezmę udział w Supla Offline Party 2024
-
shimano73
- Posts: 2174
- Joined: Sun Feb 28, 2016 12:27 pm
- Location: Orzesze
- Been thanked: 1 time
Z tym "/" program sie nie kompiluje wywala bładmalarz wrote: Tue Mar 18, 2025 6:20 pm Nie chciałem (ze względu na pamięć) korzystać z httpclient'a i mam coś takiegoJak nie wyciąłem za dużo to powinno działać. Jakbyś podał log swojego rozwiązania to łatwiej byłoby szukać błędu. Bo nie wiadomo na którym etapie jest ten błąd. Podejrzane wydaje mi sięCode: Select all
char output2[1000]; WiFiClientSecure client; client.setInsecure(); if (client.connect("adres.internetowy.pl", 443)) { client.println("GET /sciezka/do/strony.php?parametr=wartsc HTTP/1.1"); client.println("Host: adres.internetowy.pl"); client.println("Connection: close"); client.println(); for (int i=0; client.available(); i++) { output2[i] = client.read(); } SUPLA_LOG_DEBUG(output2); }Tam raczej powinno być coś w nawiasie (przynajmniej "/").Code: Select all
int httpCode = https.GET();
Code: Select all
C:\Users\user\OneDrive\Dokumenty\Arduino\WebInterface_SP111\WebInterface_SP111.ino: In function 'void ReadDirectLink()':
C:\Users\user\OneDrive\Dokumenty\Arduino\WebInterface_SP111\WebInterface_SP111.ino:132:31: error: no matching function for call to 'HTTPClient::GET(const char [2])'
132 | int httpCode = https.GET("/");
| ^
In file included from C:\Users\user\OneDrive\Dokumenty\Arduino\WebInterface_SP111\WebInterface_SP111.ino:58:
C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266HTTPClient\src/ESP8266HTTPClient.h:190:9: note: candidate: 'int HTTPClient::GET()'
190 | int GET();
| ^~~
C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\ESP8266HTTPClient\src/ESP8266HTTPClient.h:190:9: note: candidate expects 0 arguments, 1 provided
exit status 1
Compilation error: no matching function for call to 'HTTPClient::GET(const char [2])'
Ta moja metoda wstawiona do projektu viewtopic.php?t=15048 z którego zaczerpnąłem - działa prawidłowo ale tam nie ma supli
W elektronice jak nie wiadomo o co chodzi to zwykle chodzi o zasilanie
Wezmę udział w Supla Offline Party 2024
Wezmę udział w Supla Offline Party 2024
-
malarz
- Posts: 506
- Joined: Wed Jan 27, 2021 4:04 pm
- Been thanked: 2 times
Czyli masz ścieżkę podaną od razu w "host".shimano73 wrote:
A co się wyświetla na konsoli po liniach:
Code: Select all
Serial.print("httpCode : ");Serial.println(httpCode);
Serial.print("JSON : ");Serial.println(json);
Serial.print("odczyt linku : ");Serial.println(ValueDirectLink);
Próbuję przerobić pomysły na działające projekty w ArduinoIDE.
