[PicoC] C Opvragen gegevens uit URL

Pagina: 1
Acties:
  • 1.712 views

Vraag


Acties:
  • 0 Henk 'm!

  • K!K
  • Registratie: April 2008
  • Laatst online: 07:04
Hallo Allemaal,

Ik ben bezig met een programma blok te maken in PicoC.

De bedoeling is dat ik data uit een API (JSON Response) lees ( zie onder een voorbeeld van de data uit de api) in mijn geval gaat het om de "precipIntensity"
Ik heb het eerste stuk gemaakt dat URL ingevoerd wordt binnen het script ( zie de code hieronder).

Probleem:
Ik kan niet vinden hoe ik de juiste regel uit de API (JSON Response) data kan opslaan in een variable binnen het script.


Huidige aanvraag van url ( de %s worden hoger in het programma ingevuld met de juiste gegevens.
code:
1
2
3
4
5
6
7
8
9
10
char *HTTPPtr;
if(true) {
    char buffer[200];
    // Read data from API
    sprintf(buffer, "/forecast/%s/%s,%s?lang=%s&exclude=%s&units=%s", ApiKey, Latitude, Longitude, Language, Exclude, Units);
    HTTPPtr = httpget("https://api.darksky.net", buffer);
    setoutputtext(2,buffer);
    setlogtext(buffer);
    free(HTTPPtr);
}


Voorbeeld van de API layout die ik verkrijg van DarkSky
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
GET https://api.darksky.net/forecast/0123456789abcdef9876543210fedcba/42.3601,-71.0589,255657600?exclude=currently,flags
      
{
    "latitude": ,
    "longitude": ,
    "timezone": "Europe/Dublin",
    "currently": {
        "time": 1554367142,
        "summary": "Overwegend bewolkt",
        "icon": "partly-cloudy-day",
        "nearestStormDistance": 27,
        "nearestStormBearing": 145,
        "precipIntensity": 0,
        "precipProbability": 0,
        "temperature": 5.83,
        "apparentTemperature": 1.16,
        "dewPoint": 3.57,
        "humidity": 0.85,
        "pressure": 986.15,
        "windSpeed": 8.28,
        "windGust": 10.65,
        "windBearing": 9,
        "cloudCover": 0.9,
        "uvIndex": 1,
        "visibility": 16.09,
        "ozone": 444.87
    },
    "hourly": {
        "summary": "Lichte regen gedurende morgenochtend.",
        "icon": "rain",
        "data": [
            {
                "time": 1554364800,
                "summary": "Overwegend bewolkt",
                "icon": "partly-cloudy-day",
                "precipIntensity": 0.1092,
                "precipProbability": 0.25,
                "precipType": "rain",
                "temperature": 5.84,
                "apparentTemperature": 1.19,
                "dewPoint": 3.62,
                "humidity": 0.86,
                "pressure": 986.28,
                "windSpeed": 8.24,
                "windGust": 10.52,
                "windBearing": 9,
                "cloudCover": 0.9,
                "uvIndex": 0,
                "visibility": 16.09,
                "ozone": 444.72
            },
            {
                "time": 1554368400,
                "summary": "Overwegend bewolkt",
                "icon": "partly-cloudy-day",
                "precipIntensity": 0.0508,
                "precipProbability": 0.15,
                "precipType": "rain",
                "temperature": 5.82,
                "apparentTemperature": 1.14,
                "dewPoint": 3.53,
                "humidity": 0.85,
                "pressure": 986.08,
                "windSpeed": 8.31,
                "windGust": 10.72,
                "windBearing": 9,
                "cloudCover": 0.9,
                "uvIndex": 1,
                "visibility": 16.09,
                "ozone": 444.95
            },
            {
                "time": 1554372000,
                "summary": "Overwegend bewolkt",
                "icon": "partly-cloudy-day",
                "precipIntensity": 0.0483,
                "precipProbability": 0.14,
                "precipType": "rain",
                "temperature": 5.89,
                "apparentTemperature": 1.23,
                "dewPoint": 3.51,
                "humidity": 0.85,
                "pressure": 986.28,
                "windSpeed": 8.31,
                "windGust": 10.64,
                "windBearing": 8,
                "cloudCover": 0.91,
                "uvIndex": 1,
                "visibility": 16.09,
                "ozone": 445.03
            },

[ Voor 55% gewijzigd door K!K op 04-04-2019 12:23 ]

Alle reacties


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
K!K schreef op donderdag 4 april 2019 @ 11:11:
Graag wil ik de informatie van 3 dagen vooruit ontvangen per uur de "time"is in secondes vanaf 1 januari 1970 en wordt elk uur dus met 3600 seconde opgehoogd. voor mijn gevoel is dit een variabel die te gebruiken is om de waarde van elk uur op te halen. maar mischien zijn hier ook andere methodes voor.
Je beschrijft hier gewoon UNIX time (ook wel Unix epoch). Veel functies die met datum/tijd te maken hebben werken daarmee; ik ben niet bekend met PicoC maar 't lijkt me stug dat daar geen functies in te vinden zijn die daar niet ook mee overweg kunnen.

Edit: Hier lijken ze te staan onder "DESCRIPTION OF TIME FUNCTIONS"
getcurrenttime
unsigned int getcurrenttime();

Get UTC time in seconds since 1.1. 2009.
:X
Maar goed; dat is óók (een) epoch; moet je alleen even corrigeren met een constante (2019-1-1 - 1970-1-1 = 1230768000 seconden), die kom je (o.a.) hier, hier en hier tegen.

[ Voor 30% gewijzigd door RobIII op 04-04-2019 11:44 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • K!K
  • Registratie: April 2008
  • Laatst online: 07:04
Roblll Bedankt voor je antwoord.
Deze informatie was mij inderdaad al bekend maar toch bedankt voor het aanvullen.
Natuurlijk voegt dit verder niks meer toe aan de vraag waar ik mee zit.
Dat hier binnen Pico C waarschijnlijk ook zeker mogelijkheden zijn twijfel ik niet over ik kom er alleen niet goed achter hoe ik deze moet gebruiken. Het andere probleem er bij is dat er voor de Loxone programma bouwsteen en PicoC geen Compileer functie is. dus het heel lastig is om te debuggen vandaar dat ik wat hulp vraag vanuit hier.
RobIII schreef op donderdag 4 april 2019 @ 11:36:
[...]

Je beschrijft hier gewoon UNIX time (ook wel Unix epoch). Veel functies die met datum/tijd te maken hebben werken daarmee; ik ben niet bekend met PicoC maar 't lijkt me stug dat daar geen functies in te vinden zijn die daar niet ook mee overweg kunnen.

Edit: Hier lijken ze te staan onder "DESCRIPTION OF TIME FUNCTIONS"


[...]

:X
Maar goed; dat is óók (een) epoch; moet je alleen even corrigeren met een constante (2019-1-1 - 1970-1-1 = 1230768000 seconden), die kom je (o.a.) hier, hier en hier tegen.

Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
K!K schreef op donderdag 4 april 2019 @ 11:50:
Dat hier binnen Pico C waarschijnlijk ook zeker mogelijkheden zijn twijfel ik niet over ik kom er alleen niet goed achter hoe ik deze moet gebruiken.
Dan moet je misschien even een concrete vraag stellen en geen "het lukt niet"; zo lees ik ook in je topicstart:
K!K schreef op donderdag 4 april 2019 @ 11:11:
Dus zijn er mensen hier die mij op weg kunnen helpen?
Zoals je in Kan iemand even...? zult lezen is dat niet echt de bedoeling hier in de Devschuur®. Als je een concrete vraag hebt is die van harte welkom, maar geef dan dus duidelijk aan wat je probleem is, wat je geprobeerd hebt, wat er niet lukte (welke foutmeldingen) enz. Als je het wil laten doen moet ik je helaas verwijzen naar Devschuurder werven? Gebruik Vraag & Aanbod!.
K!K schreef op donderdag 4 april 2019 @ 11:50:
Natuurlijk voegt dit verder niks meer toe aan de vraag waar ik mee zit.
Graag gedaan hoor. Stel dan een concrete vraag i.p.v. dat je ons laat raden wat je niet snapt. Hanteer volgende keer a.u.b. onze Quickstart; dan weet je ook (bijna) zeker dat je topic goed is.
K!K schreef op donderdag 4 april 2019 @ 11:50:
Roblll Bedankt voor je antwoord.
Oh, en mijn nick is RobIII, niet RobLLL :X ;)
Afbeeldingslocatie: https://tweakers.net/ext/f/k0N0qjxeztN5eWeeIF8UhrA1/full.png

[ Voor 25% gewijzigd door RobIII op 04-04-2019 11:58 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • K!K
  • Registratie: April 2008
  • Laatst online: 07:04
@ RobIII

Ik heb het starttopic aangepast om het zo duidelijke mogelijk te formuleren.

Daarbij vraag ik niet of iemand het voor me wil maken maar wil ik het zelf doen en er dus van leren. Ik vraag om een voorzetje bijvoorbeeld een duidelijke verwijzing waar het uitgelegd staat hoe ik dit het beste kan aanpakken of vergelijkbare informatie.

Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
K!K schreef op donderdag 4 april 2019 @ 11:11:
Probleem:
Ik kan niet vinden hoe ik de juiste regel uit de API data kan opslaan in een tag binnen het script.
Je bedoelt dus hoe je uit de JSON response een bepaalde waarde plukt en opslaat in een variabele?
Sowieso is het handig als je de juiste termen gebruikt; ik ben geen PicoC kenner maar volgens mij wordt 't gecompileerd en praten we dus niet over scripts (dat is meer 't domein van interpreted talen) en het is geen markup zoals HTML dus praten we niet over tags maar variabelen (en methodes en ... vanalles)

Ik zie toch eigenlijk best wat voorbeelden. Dus kun je aangeven wát je dan niet snapt?

[ Voor 28% gewijzigd door RobIII op 04-04-2019 12:18 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • K!K
  • Registratie: April 2008
  • Laatst online: 07:04
Klopt ik inderdaad om uit een JSON response een waarde op te halen en deze op te slaan in een variable.
Ik wil gebruik maken van de weersvoorsspelling van 3 dagen x 24 uur dus in totaal 72 variable bij elkaar opgeteld mogen worden waar uiteindelijk 1 variable uitkomt die ik kan gebruiken in de berekening.

Ik begrijp niet hoe ik na de url oproep ( uit het starttopic) moet navigeren naar de gewenste variable uit de JSON.

In het voorbeeld dat door jou gebruikt wordt wordt namelijk ook een TCP Stream gebruikt dit werkt volgens mij weer anders dan dat ik gebruik.

Ik heb als voorbeeld het volgende gebruikt Zie hier
RobIII schreef op donderdag 4 april 2019 @ 12:11:
[...]

Je bedoelt dus hoe je uit de JSON response een bepaalde waarde plukt en opslaat in een variabele?
Sowieso is het handig als je de juiste termen gebruikt; ik ben geen PicoC kenner maar volgens mij wordt 't gecompileerd en praten we dus niet over scripts en het is geen markup zoals HTML dus praten we niet over tags maar variabelen (en methodes en ... vanalles)

Acties:
  • 0 Henk 'm!

  • PageFault
  • Registratie: April 2002
  • Laatst online: 30-09 14:14
Geen antwoord op je vraag, maar waarom zet je in je code if (true)???

Er is vast wel een PicoC JSON parser ergens te downloaden.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
@Verwijderd Wellicht dat je om te beginnen eens de volgende dingen kan uitleggen, want volgens mij is je vraag nog helemaal niet van toepassing.

Wat staat er in je buffer? Want ik zou verwachten nav regel 2 dat er slechts 200 tekens instaan, en dan heb je geen valide json meer daarin staan en het is maar net de vraag of je "gewenste regel" er wel instaat.

En wat is setoutputtext / setlogtext voor iets, want in principe mits je buffer groot genoeg is om de complete JSON valide op te slaan, dan hoef je enkel een JSON parser over die buffer heen te gooien waarne je je waarde kan uitlezen.

Alleen tja, als je buffer niet groot genoeg is dan kan je wel wat gaan zitten martelen met stringfuncties / regexp'en etc alleen dit zal heel snel breken.
K!K schreef op donderdag 4 april 2019 @ 12:21:
Ik begrijp niet hoe ik na de url oproep ( uit het starttopic) moet navigeren naar de gewenste variable uit de JSON.

In het voorbeeld dat door jou gebruikt wordt wordt namelijk ook een TCP Stream gebruikt dit werkt volgens mij weer anders dan dat ik gebruik.
Tja, zoals ik je al vraag, heb je wel valide json in je buffer staan en daarnaast, welke json parser gebruik je etc. etc.

Acties:
  • 0 Henk 'm!

  • Vuikie
  • Registratie: December 2003
  • Laatst online: 01-10 08:22
Het lijkt erop dat PicoC een small C interpreter is. Dus idd is debuggen wat lastiger(Print statements?)

Maar ik denk dat je moet kijken naar een JSON parser(Zoals al gezegd)
Ik weet niet hoe goed PicoC met libraries omgaat, maar je zou de ArduinoJson parser kunnen gebruiken. Ik heb deze ook gebruikt voor een Raspberry PI programma, dus opzich moet dat wel werken. Ik weet alleen niet of PicoC met de wat geavanceerde methodes, die ArduinoJson gebruikt, om kan gaan.

Daar zit wel de grootste uitdaging in denk ik. De decoderen van de JSON en die omzetten in waardes die jij nodig hebt.

Je zou er natuurlijk ook voor kunnen kiezen om zelf een JSON parser te schrijven, maar dat is wel een uitdaging denk ik. O-)

Acties:
  • 0 Henk 'm!

  • K!K
  • Registratie: April 2008
  • Laatst online: 07:04
Gomez12 schreef op donderdag 4 april 2019 @ 12:23:
Wat staat er in je buffer? Want ik zou verwachten nav regel 2 dat er slechts 200 tekens instaan, en dan heb je geen valide json meer daarin staan en het is maar net de vraag of je "gewenste regel" er wel instaat.
Zoals ik het begrijp staat alleen het adres in deze buffer. maar mocht hier de hele JSON in kom dan zou deze inderdaad te klein zijn.
Gomez12 schreef op donderdag 4 april 2019 @ 12:23:
En wat is setoutputtext / setlogtext voor iets, want in principe mits je buffer groot genoeg is om de complete JSON valide op te slaan, dan hoef je enkel een JSON parser over die buffer heen te gooien waarne je je waarde kan uitlezen.
Setoutputtext= zorgt er voor dat een string die je ergens aanmaakt met een bepaalde text op een text uitgang van het programma blok gescherven wordt.

Setlogtext= dit zorgt er voor dat de gegevens uit de url naar een log bestand van het systeem zelf geschreven worden.

Zie hier voor volledige omschrijvingen van bepaalde functies
Vuikie schreef op donderdag 4 april 2019 @ 12:28:
Het lijkt erop dat PicoC een small C interpreter is. Dus idd is debuggen wat lastiger(Print statements?)

Maar ik denk dat je moet kijken naar een JSON parser(Zoals al gezegd)
Ik weet niet hoe goed PicoC met libraries omgaat, maar je zou de ArduinoJson parser kunnen gebruiken. Ik heb deze ook gebruikt voor een Raspberry PI programma, dus opzich moet dat wel werken. Ik weet alleen niet of PicoC met de wat geavanceerde methodes, die ArduinoJson gebruikt, om kan gaan.

Daar zit wel de grootste uitdaging in denk ik. De decoderen van de JSON en die omzetten in waardes die jij nodig hebt.

Je zou er natuurlijk ook voor kunnen kiezen om zelf een JSON parser te schrijven, maar dat is wel een uitdaging denk ik. O-)
bedankt voor je duidelijke omschrijving. Dit klopt PicoC is een small C interpreter.
Ik zal eens kijken naar een json parser zoals eerder al omschreven.


Volgens mij gebeurt in onderstaande link precies wat ik moet hebben alleen vanuit een andere bron dus ander JSON formaat
Zie hier

[ Voor 35% gewijzigd door K!K op 04-04-2019 12:41 ]


Acties:
  • 0 Henk 'm!

  • Vuikie
  • Registratie: December 2003
  • Laatst online: 01-10 08:22
Ik zit net de functies te bekijken en ik zie dat ze standaard een XML parser hebben(getxmlvalue). Is het dan niet handiger om openweathermap te gebruiken? Deze bieden namelijk ook de data in XML aan. Bij Dark Sky lijkt dit niet het geval, daar zie ik alleen JSON.

[ Voor 4% gewijzigd door Vuikie op 04-04-2019 12:42 ]


Acties:
  • 0 Henk 'm!

  • K!K
  • Registratie: April 2008
  • Laatst online: 07:04
Vuikie schreef op donderdag 4 april 2019 @ 12:41:
Ik zit net de functies te bekijken en ik zie dat ze standaard een XML parser hebben(getxmlvalue). Is het dan niet handiger om openweathermap te gebruiken? Deze bieden namelijk ook de data in XML aan. Bij Dark Sky lijkt dit niet het geval, daar zie ik alleen JSON.
Openweathermap had ik ook bekken maar Dark sky sprak mij wat meer aan met de opties die hun bieden.
Ook met de refresh tijd. zo is het bij Dark sky toegestaan 1000 keer per dag op te vragen en bij openweather maar 300 keer.

Vandaar mijn keuze voor dark sky

Heb nog eens goed gekeken maar ik denk dat ik Openweathermap ook zou kunnen gebruiken. Misschien is het dan wel verstandig dit eerst te doen omdat de XML parser wel standaard te krijgen is.

[ Voor 12% gewijzigd door K!K op 04-04-2019 13:24 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
K!K schreef op donderdag 4 april 2019 @ 12:30:
[...]
Zoals ik het begrijp staat alleen het adres in deze buffer. maar mocht hier de hele JSON in kom dan zou deze inderdaad te klein zijn.
Dan zie ik hem helemaal niet, dan zou je JSON dus belanden in HTTPPtr en het enige wat je daarmee doet is dat je die leeggooit met free volgens mij.

Ik verwacht dat httpget de daadwerkelijke JSON ophaalt en die dus opslaat in de buffer of in HTTPPtr.
Volgens mij gebeurt in onderstaande link precies wat ik moet hebben alleen vanuit een andere bron dus ander JSON formaat
Zie hier
Die link laat inderdaad goed zien dat je momenteel geen ene barst doet met de JSON data, je gooit het in je HTTPPtr en die free je daarna weer. Daartussenin moet je aan de slag met het parsen van JSON (en/of XML)

Acties:
  • 0 Henk 'm!

  • K!K
  • Registratie: April 2008
  • Laatst online: 07:04
Gomez12 schreef op donderdag 4 april 2019 @ 14:00:
[...]

Dan zie ik hem helemaal niet, dan zou je JSON dus belanden in HTTPPtr en het enige wat je daarmee doet is dat je die leeggooit met free volgens mij.

Ik verwacht dat httpget de daadwerkelijke JSON ophaalt en die dus opslaat in de buffer of in HTTPPtr.


[...]

Die link laat inderdaad goed zien dat je momenteel geen ene barst doet met de JSON data, je gooit het in je HTTPPtr en die free je daarna weer. Daartussenin moet je aan de slag met het parsen van JSON (en/of XML)
Dat is dan duidelijk ik heb inmiddels de data uit een XML file van OpenWeatherMaps zoals hier boven aangegeven. dus ik ga eens proberen met de standeraart xml parser de gevens er uit te krijgen. Daarna kijk ik wel weer verder.

Acties:
  • 0 Henk 'm!

  • K!K
  • Registratie: April 2008
  • Laatst online: 07:04
Zoals ik aangegeven heb ben ik overgestapt op de OpenWeathermap XML file. er komt inmiddels wel iets aan data uit maar niet wat ik verwacht. ik heb een voorbeeld vergeleken en wat meer gelezen over de functies die in dit stuk gebruikt worden maar het is wat lastig debuggen.
Output 6 is netjes hoog met de waarde 98. Dit zou betekenen dat er data in cDatenA zit.
Output 8 weergeeft nog niks. dus ik denk dat het misgaat bij het zoeken naar een tekst "number=".

Wat gaat er fout?

Huidige Code
code:
1
2
3
4
5
6
7
8
9
10
        char DataReadOut[2048];
        sprintf(DataReadOut, "/data/2.5/%s?lat=%s&lon=%s&mode=%s&appid=%s",Type ,Latitude, Longitude, Mode, ApiKey);
        char *cDatenA = httpget("https://api.openweathermap.org", DataReadOut);   
        if ((cDatenA != NULL) && (cDatenA != 0)){     
            setoutput(6,98);                       // Impuls als cDatanA niet leeg is.
        char *Precipitation3hXML;
            if((Precipitation3hXML =getxmlvalue(cDatenA,0,"number=")) != NULL){
                setoutput(8,Precipitation3hXML);
            }
            free(Precipitation3hXML);



Voorbeeld XML Data uit de API
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?xml version="1.0" encoding="UTF-8"?>
<weatherdata>
    <location>
        <name>Op den Bosch</name>
        <type></type>
        <country>NL</country>
        <timezone></timezone>
        <location altitude="0" latitude="56.0000" longitude="6.0000" geobase="geonames" geobaseid=""></location>
    </location>
    <credit></credit>
    <meta>
        <lastupdate></lastupdate>
        <calctime>0.0063</calctime>
        <nextupdate></nextupdate>
    </meta>
    <sun rise="2019-04-04T05:05:07" set="2019-04-04T18:12:33"></sun>
    <forecast>
        <time from="2019-04-04T12:00:00" to="2019-04-04T15:00:00">
            <symbol number="500" name="light rain" var="10d"></symbol>
            <precipitation unit="3h" value="0.305" type="rain"></precipitation>
            <windDirection deg="96.5054" code="E" name="East"></windDirection>
            <windSpeed mps="2.07" name="Light breeze"></windSpeed>
            <temperature unit="kelvin" value="282.34" min="282.261" max="282.34"></temperature>
            <pressure unit="hPa" value="1000.83"></pressure>
            <humidity value="77" unit="%"></humidity>
            <clouds value="overcast clouds" all="92" unit="%"></clouds>
        </time>
        <time from="2019-04-04T15:00:00" to="2019-04-04T18:00:00">
            <symbol number="500" name="light rain" var="10d"></symbol>
            <precipitation unit="3h" value="0.13" type="rain"></precipitation>
            <windDirection deg="92.0009" code="E" name="East"></windDirection>
            <windSpeed mps="1.62" name="Light breeze"></windSpeed>
            <temperature unit="kelvin" value="281.37" min="281.312" max="281.37"></temperature>
            <pressure unit="hPa" value="1002.16"></pressure>
            <humidity value="73" unit="%"></humidity>
            <clouds value="overcast clouds" all="88" unit="%"></clouds>
        </time>
        <time from="2019-04-04T18:00:00" to="2019-04-04T21:00:00">
            <symbol number="803" name="broken clouds" var="04n"></symbol>
            <precipitation></precipitation>
            <windDirection deg="95.504" code="E" name="East"></windDirection>
            <windSpeed mps="1.52" name=""></windSpeed>
            <temperature unit="kelvin" value="277.74" min="277.699" max="277.74"></temperature>
            <pressure unit="hPa" value="1003.71"></pressure>
            <humidity value="93" unit="%"></humidity>
            <clouds value="broken clouds" all="76" unit="%"></clouds>

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
K!K schreef op donderdag 4 april 2019 @ 15:29:
Zoals ik aangegeven heb ben ik overgestapt op de OpenWeathermap XML file. er komt inmiddels wel iets aan data uit maar niet wat ik verwacht. ik heb een voorbeeld vergeleken en wat meer gelezen over de functies die in dit stuk gebruikt worden maar het is wat lastig debuggen.
...
Wat gaat er fout?
Je zit te klooien in iets waarvan je totaal niets snapt en je maakt het alleen maar erger?

Wat moet bijv dit doen :
C:
1
getxmlvalue(cDatenA,0,"number=")

Want er is geen xml-tag number, er zijn attributen maar dan zal je toch echt meer info moeten meegeven over welke je wilt hebben.

Lees nou gewoon eens rustig de documentatie door en ga niet enkel blind copy-pasten om daarna te vragen :Wat gaat er fout?

Acties:
  • 0 Henk 'm!

  • K!K
  • Registratie: April 2008
  • Laatst online: 07:04
Wat moet bijv dit doen :
C:
1
getxmlvalue(cDatenA,0,"number=")

Want er is geen xml-tag number, er zijn attributen maar dan zal je toch echt meer info moeten meegeven over welke je wilt hebben.
deze xml-tag komt wel voor op regel 19 en heeft een waarde van 500 in het voorbeeld. Deze waarde kan ik ook gewoon via een andere manier uitlezen!
Lees nou gewoon eens rustig de documentatie door en ga niet enkel blind copy-pasten om daarna te vragen :Wat gaat er fout?
Gisteravond en vandaag heb ik aardig wat gelezen over de functies de gebruikt worden en hoe ik deze beter kan gebruiken.
Inmiddels krijg ik ook een waarde uit het programma bouwsteen alleen is de uitkomst nog onleesbaar dit ben ik nu nog aan het uitzoeken. ik verwacht dat ik de waarde zou moeten omzetten naar een ander formaat

Acties:
  • 0 Henk 'm!

  • K!K
  • Registratie: April 2008
  • Laatst online: 07:04
Zoals eerder aangegeven krijg ik een waarde uit de aanvraag. De waarde bestaat alleen uit onleesbare tekens, zie afbeelding hieronder. Heeft iemand van hier een idee waar dit vandaan komt en wat hier een oorzaak van kan zijn. ik heb aardig wat rond gezocht maar krijg nergens een echte oorzaak gevonden.

Hier lees ik over een vergelijkbaar probleem maar de oplossing daar brengt geen verandering. De teken reeks blijft vergelijkbaar.

setoutput(6,.....) gebruik ik om te controleren of er data opgehaald wordt deze is netjes 1 dus er zou data opgehaald worden.
Als ik bij setoutput(7,batof(WindSpeed3hXML)); vervang door setoutput(7,true); na de "if" voorwaarde een regel hoger wordt deze ook netjes true. dit zou betekenen dat ook hier data in staat. echter als ik de stukje code als hier beneden in het voorbeeld gebruik, krijg ik een onleesbare teken reeks terug.
Ook zie ik de onleesbare teken reek veranderen als de waardes in het XML bestand veranderen.


het stukje code waar ik het nu mee opvraag is als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    if(true) {
    char* DataOne = httpget(Url, buffer);
    if (DataOne != NULL) {
        setoutput(6,true);
        char* WindSpeed3hXML;
        WindSpeed3hXML = getxmlvalue(DataOne,0,"windSpeed mps");
        if (WindSpeed3hXML != NULL) {
            setoutput(7,batof(WindSpeed3hXML));
            setlogtext(WindSpeed3hXML);
            setoutputtext(2,WindSpeed3hXML);
            free(WindSpeed3hXML);
            }
        free(DataOne);
        }
    }


Het ziet er uit als onderstaande (dit is het logboek van Loxone):
Afbeeldingslocatie: https://www.loxforum.com/filedata/fetch?id=196969&d=1554723070

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Lees nou gewoon eens rustig de documentatie door en ga niet enkel blind copy-pasten om daarna te vragen :Wat gaat er fout?

Er is bijv geen xmlvalue "windspeed mps" oftewel daar gaat nooit iets zinnigs uitkomen.
En als picoC geen fatsoenlijke debugmogelijkheden kent, ga dan voor de ouderwetse manier : setlogtext bij elke regel zodat je elke regel kan controleren en zien of het gaat zoals je verwacht.

Staat er dus in dataone datgene wat je verwacht?
Staat er dan na regel 3 nogsteeds wat je verwacht?
etc. etc. etc.

Acties:
  • 0 Henk 'm!

  • K!K
  • Registratie: April 2008
  • Laatst online: 07:04
Het werkt inmiddels!
zoals je omschrijft te debuggen was ik tevens al mee begonnen.

Acties:
  • 0 Henk 'm!

  • JHe
  • Registratie: September 2012
  • Laatst online: 07:05

JHe

K!K schreef op donderdag 11 april 2019 @ 10:20:
Het werkt inmiddels!
zoals je omschrijft te debuggen was ik tevens al mee begonnen.
Hier echt een leek met PicoC, maar kun je toevallig helpen bij het lezen van een API key uit een file? Hieronder de response van een POST virtuele uitgang van Loxone die ik opsla in een bestand (locatie /user/common/Sensoterra_API_Key.txt).

{
"notification_email": "OFF",
"notifications_app": "ON",
"role": "CUSTOMER",
"email": "xxx@xxx.nl",
"id": "6785",
"disclaimer_agreed": "YES",
"api_key": "XXX",
"expires_in": 86400
}

[ Voor 12% gewijzigd door RobIII op 22-08-2023 23:55 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een topic van 4 jaar oud uit de sloot trekken en kapen met je eigen vraag is niet de bedoeling, open even een eigen topic a.u.b. ;)

Neem even onze Quickstart door en open dan een nieuw topic :Y)

Tot slot: Ik heb even je API key uit je post gehaald, niet heel handig die te posten ;)

[ Voor 63% gewijzigd door RobIII op 22-08-2023 23:55 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1

Dit topic is gesloten.