J'ai besoin d'un fichier JSON pour stocker es donnée sur une carte SD

Bonjour à tous,

J'ai un petit module qui track les positions GPS, quans il se déplace.
Il log aussi les erreurs et d'autre message sur une carte SD sans problème.

A chaque fois qu'il recoit une position GPS, il l'envoi sur un serveur distant et en cas d'échec, il l'enregistre sur une carte SD (fichier .txt)

J'aimerais éviter qu'il se connecte toutes les 10 secondes pour envoyer ces données sur un serveur distant.

C'est pourquoi, j'ai pensé enregistré les positions dans un fichier .json et toutes les 10 seconde, il met a jour ce fichier et que toutes les minutes (ou toutes le 2mn), il envoi ce fichier json sur le serveur qui lui va le lire et mettre à jour labase de donnée.

Simplement, voilà, je connais très peux json et je ne sais pas quelle libraitie pourrait m'aider.

J'ai vu cette libraire GitHub - interactive-matter/aJson: aJson is an Arduino library to enable JSON processing with Arduino. It easily enables you to decode, create, manipulate and encode JSON directly from and to data structures. mais j'au un peude mal à comprende comment créer ée fichier mes_positions.json et le mettre à jour.

Cette exemple, me semble parlant

aJsonObject *root,*fmt;
    root=aJson.createObject();  
    aJson.addItemToObject(root, "name", aJson.createItem("Jack (\"Bee\") Nimble"));
    aJson.addItemToObject(root, "format", fmt = aJson.createObject());
    aJson.addStringToObject(fmt,"type",     "rect");
    aJson.addNumberToObject(fmt,"width",        1920);
    aJson.addNumberToObject(fmt,"height",       1080);
    aJson.addFalseToObject (fmt,"interlace");
    aJson.addNumberToObject(fmt,"frame rate",   24);

mais je ne vois toujours pas comment, et ou on donne l'instruction de crer le dossier mes_positions.json et comment on ajouter des nouvelles positions.

Si vous connaisez cette librairie, pourriez-vous me mettre sur la piste pour sauver des positions dans un fichier?

Est-ce un désaventage d'utiliser?

malloc

Ceci dit, cette librairire me semble vielle et je me demandais si vous ne connaitriez pas une autre librairie plus récente et intiutive.

Merci pour vos lumières

pierrot10:
A chaque fois qu'il recoit une position GPS, il l'envoi sur un serveur distant et en cas d'échec, il l'enregistre sur une carte SD (fichier .txt)

je ne vois toujours pas comment, et ou on donne l'instruction de crer le dossier mes_positions.json et comment on ajouter des nouvelles positions.

Ceci dit, cette librairire me semble vielle et je me demandais si vous ne connaitriez pas une autre librairie plus récente et intiutive.

Tu nous dis qu'actuellement tu places tes données dans le fichier fichier.txt donc tu sais déjà créée un fichier et écrire dedans.
JSON c'est juste un fichier texte avec des mots-clés qui encadrent des "variables" avec leur valeurs. Renseigne-toi sur la structure d'un fichier JSON et tu verras que ce n'est vraiment pas sorcier

Qu'une librairie soit vieille ou récente ne change rien si elle fait ce dont on a besoin.

Bonjour,
Merci pour ces explications.

En fait, oui, si je peux écrire dans un fichier .txt, je peux aussi écrire dans un fichier .json, puisque c'est un fichier texte.

Voici comment est enregistré chaque position qui n'a pas pu etre envoyer au serveur.

?id=865067020750884&valid=false&lat=46.786594&lon=7.071332&speed=0.001&batt=95&desc=GSM%20Localisation&tower=228,03,1773,3a0d,47,09&timestamp=2016-12-05%2006:56:58

Il me faudrait donc juste l'enregistrer en respectant le format json.

Maintenant pour répondre à pepe, ma carte Sd est uniuqmene utilisée si l'envoi au serveur (HTTP) n'est pas réussi.

A chaque position recue, elle est envoyée. Si pour une raison ou une autre (pas de connection), les positions n'ont pas pu etre envoyé, la position est souvée sous ce fichier:

/GPS/2016/12/05/15-10-00.txt

ou l'on retrouve l'exemple. ci-dessus.

J'aimerais donc éviter que toues les 10 sec, une connection est faite pour envoyer qu'une donnée. J e souhaite donc profiter d'avoir une carte SD pour sauver dans un fichier un certain nombre de position, par exemple

/GPS/2016/12/05/15-10-00.json

et que toutes les minutes, il envoye ce fichier et l'efface si l'envoi est réussi. Ce qui me permettrait d'envoyer un fichier json avec plusieurs positions d'un coup, tous les x temps.

L'idée serait d'avoir un truc du genre (je ne sais pas si j'ai fait des erreurs de syntaxe) en respectant le format GeoJSON
/json/mon-jeson.json

{
 "type": "FeatureCollection",
    "features": [{
 "type": "Feature",
        "geometry": {
 "type": "Point",
 "coordinates": [46.786594, 7.071332]
        },
        "properties": {
 "id": "865067020750884",
 "valid": false,
 "speed": 0.001,
 "bat": 95,
 "desc": "GSM%20Localisation",
 "tower": "228,03,1773,3a0d,47,09",
 "timestamp":"2016-12-05%2006:56:58"
        }
    }],
 [{
 "type": "Feature",
        "geometry": {
 "type": "Point",
 "coordinates": [46.786594, 7.171332]
        },
        "properties": {
 "id": "865067020750884",
 "valid": false,
 "speed": 0.001,
 "bat": 95,
 "desc": "GSM%20Localisation",
 "tower": "228,03,1773,3a0d,47,09",
 "timestamp":"2016-12-05%2006:56:59"
        }
    }],
 [{
 "type": "Feature",
        "geometry": {
 "type": "Point",
 "coordinates": [46.786594, 7.271332]
        },
        "properties": {
 "id": "865067020750884",
 "valid": false,
 "speed": 0.001,
 "bat": 95,
 "desc": "GSM%20Localisation",
 "tower": "228,03,1773,3a0d,47,09",
 "timestamp":"2016-12-05%2006:57:00"
        }
    }]
}

Chaque 10sec, il ajoute des lignes comme ceci (pour autant que la syntaxe soitcorrect)

[{
 "type": "Feature",
        "geometry": {
 "type": "Point",
 "coordinates": [46.786594, 7.271332]
        },
        "properties": {
 "id": "865067020750884",
 "valid": false,
 "speed": 0.001,
 "bat": 95,
 "desc": "GSM%20Localisation",
 "tower": "228,03,1773,3a0d,47,09",
 "timestamp":"2016-12-05%2006:0:08"
        }
    }]

et d'envoyer ce fichier rempli d'environ 6 positions au serveur, toutes les minutes-.
Vous voyez?

Je ne sais pas si je me complique les choses, ... :slight_smile: :o