Arduino JSON
Miroslav Mraz
mrazik na volny.cz
Čtvrtek Září 15 15:21:10 CEST 2022
Jen mi nešlo do hlavy, proč to původní nefungovalo. Ze zdrojáků té
knihovny je to poměrně zřejmé - ty přetížené operátory v JSONVar si
interně kontrolují typ proměnné a pokud je to číslo vrátí pro operator
const char* () nullptr. Takže to samo sebou na atoi(nullptr) spadlo. Je
na tom vidět, proč má hodně lidí k C++ odpor. Dají se s tím dělat
kouzla, ale čert aby pochopil, jak to původní autor vlastně myslel.
Mrazík
On 15. 09. 22 9:41, Jan Půhoný wrote:
> Díky všem, takto mi to funguje: pro sensory purpleAir na vnitřní síti:
>
> int getAirQuality(int sensor_id)
> {
> if ((WiFi.status() == WL_CONNECTED)) {
> HTTPClient http;
> if(sensor_id==ID_SENSOR_IN){
> http.begin("http://IP_ADDR_IN/json <http://IP_ADDR_IN/json>");
> // HTTP
> }
> else if (sensor_id== ID_SENSOR_OUT ){
> http.begin("http:// IP_ADDR_OUT/json"); // HTTP
> }
> int httpCode = http.GET();
> //httpCode will be negative on error
> if (httpCode > 0) {
> // file found at server
> if (httpCode == HTTP_CODE_OK) {
> String response = http.getString();
> //Serial.print(response);
> JSONVar myObject = JSON.parse(response);
> int PM2_5 = myObject["pm2.5_aqi"];
> response = "";
> http.end();
> return PM2_5;
> }
> } else {
> http.end();
> return httpCode;
> }
> } else {
> return WiFi.status();
> }
> }
>
> Honza Půhoný
>
>
> čt 15. 9. 2022 v 8:36 odesílatel Pavel Brychta <pavel.brychta na duhasys.eu
> <mailto:pavel.brychta na duhasys.eu>> napsal:
>
> Ale jeste moment - to neni ArduinoJSON knihovna, ale nejaka jina, takze
> nejdriv doporucuju prejit na ArduinoJSON - s ni mam nejlepsi zkusenosti
> co se tyce parsovani i dlouhych dokumentu, popripade per partes
> parsovani.
>
> Pavel Brychta
>
> Dne 15. 09. 22 v 8:32 Pavel Brychta napsal(a):
> > ... anebo to udelat tak, jak je ArduinoJSON napsane - tedy int
> PM2_5 =
> > myObject["pm2.5_aqi"].as<int>(); Tedy za predpokladu, ze myObject je
> > objekt typu JSONDocument...
> >
> > Pavel Brychta
> >
> > Dne 14. 09. 22 v 17:03 Miroslav Mraz napsal(a):
> >> Podstatný je typ (JSONVar) a ten je značně polymorfní. Takže podle
> >> kontextu to může být String, const char *, bool, int nebo double.
> >> Patrně by stačilo přiřadit
> >> int PM2_5 = myObject["pm2.5_aqi"];
> >> nebo exaktněji
> >> int PM2_5 = static_cast<int>(myObject["pm2.5_aqi"]);
> >>
> >> Přetěžování operátorů v této podobě je zvěrstvo, hlavně pro
> toho, kdo
> >> se v tom zas tak moc nevyzná. Nicméně tak jak to bylo původně
> >> napsáno, by to mělo fungovat také, funkce atoi() by měla pobrat
> jako
> >> argument const char* a vyhodit int hodnotu. Bude to chtít nějaký
> >> debug výpis té proměnné - jestli tam je vůbec něco, nějaký test
> parseru.
> >>
> >> Mrazík
> >>
> >> On 14. 09. 22 16:17, Jindroush wrote:
> >>> Co je za hodnotu v tom myObject["pm2.5_aqi"]?
> >>> Je to primo int 36 nebo je to retezec "36"?
> >>> Coz bych hledal v dokumentaci toho JSON.parse, jaka je pametova
> >>> reprezentace.
> >>> j.
> >>>
> >>>
> >> _______________________________________________
> >> HW-list mailing list - sponsored by www.HW.cz <http://www.HW.cz>
> >> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
> >> http://list.hw.cz/mailman/listinfo/hw-list
> <http://list.hw.cz/mailman/listinfo/hw-list>
> > _______________________________________________
> > HW-list mailing list - sponsored by www.HW.cz <http://www.HW.cz>
> > Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
> > http://list.hw.cz/mailman/listinfo/hw-list
> <http://list.hw.cz/mailman/listinfo/hw-list>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz <http://www.HW.cz>
> Hw-list na list.hw.cz <mailto:Hw-list na list.hw.cz>
> http://list.hw.cz/mailman/listinfo/hw-list
> <http://list.hw.cz/mailman/listinfo/hw-list>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list