Timestamp unix ou format UTC ?

J'ai des PCs dédié pour faire certaine tâches à des dates/heures programmées par une action extérieure, donc les dates peuvent changer et il peut y en avoir plusieurs à des dates/heures différentes.

J'ai fait un script bash qui contrôle si des tâches existent, le cas échéant les timestamps de ces tâches sont comparés au timestamp courant.

Un Cronjob inscrit dans un fichier le timestamp et/ou la date UTC de la prochaine tâche à effectuer.

Avec un arduino et un shield ethernet, je lis le contenu de ce fichier afin de garder en mémoire cette "date", ainsi je peux mettre mes PCs en veille ou les éteindre et les rallumer avec l'arduino 5 minutes avant l'execution de cette tâche.

En cas de panne de courant,lors du rétablissement de ce dernier le setup allumerait par défaut les PCs, connecterait l'arduino afin de remettre à jour le timestamp actuel et contrôler si une tâche est programmée.... ça m'évite d'utiliser une carte SD ou l'Eeprom.... de toute façon, en cas de panne de courant, l'arduino n'arrivera pas à allumer les PCs XD

Le problème :

  • Le format UTC, l'aquisition et le traitement de la date est un peux ardue, ensuite, il faut tenir compte des horaires d'été/hiver. Utilisation d'une RTC possible (ds1307), directement utilisable pour lire sur un lcd la prochaine occurrence

  • Le format timestamp Unix, facilité d'aquisition et de traitement, on ne tient compte que d'une différence entre deux timestamp pour lancer l'exécution d'une tâche. Un quartz d'horloge et une interruption par seconde permettrait de tenir à jour "précisement" le timestamp. Il faut convertir dans un autre format pour lire la prochaine occurrence sur un lcd.

Quel format choisir et comment le mettre en oeuvre/convertir ?

La précision ne doit pas être à la seconde, une latence de une à deux minutes est envisageable, le Cronjob ne remet à jour le fichier qu'un fois par minute (d'ailleurs si quelqu'un connait un moyen d'augmenter cette fréquence... :grin:)

Pour moi, si ton appli n'a pas besoin de durer jusqu'en 2036, le bon timestamp c'est le timestamp unix traditionnel time_t qui exprime le nombre de secondes écoulées depuis le 1 janvier 1970 00:00 UTC.

Après dans Linux tu as si besoin des fonctions pour convertir ce timestamp en heure légale en tenant compte de changements heure d'été/hiver

par contre l'Arduino n'aura pas accès à cette gestion des locales donc a voir si tu as besoin de communiquer à l'Arduino des heures UTC ou pas.

Il me semble que l'Arduino n'a pas besoin de ca. Si elle à une RTC callée en UTC et que le fichier est créé en UTC, ca sera bon.

Tu confortes ce que je pensais.... XD

Après en lisant ta réponse, je me disais que la méthode la "plus simple" est d'envoyer à l'arduino le timestamp Unix actuel (précision dans la minute), le timestamp Unix et UTC de la tâches à effectuer.

L'arduino fait le décompte avec le système Unix, mais m'affiche sur le lcd l'échéance en UTC ......

Salut,

Tu devrais aimer cette librairie :wink:

Merci Skywodd,

Je vais malgré tout garder la solution du traitement maxi de l'information par les PCs.