script pour mettre à la date et heure le RPI après le boot

Parce qu'il en faut pour tout le monde, discutez ici d'ADA, de shell et autres Wolfram...

Modérateur : Francois

piper
Modérateur
Messages : 745
Enregistré le : sam. 5 juin 2021 18:57

Re: script pour mettre à la date et heure le RPI après le boot

Message par piper » sam. 18 févr. 2023 19:26

Il y a un moment, j'avais un projet avec un horloge RTC
Un script me permettait :
- de mettre à jour l'horloge RTC à partir de l'horloge systême
- de mettre à jour l'horloge systeme à partir de l'horloge RTC
- de mettre à jour manuellement l'horloge RTC
- de mettre à jour manuellement l'horloge système

Voici un extrait de cette dernière partie (comme tu n'as pas d'horloge RTC) :
Je le faisais en 2 temps :
Mise à jour de la date avec datestr au format SSAAMMJJ (Ex : 20230218)

Code : Tout sélectionner

date +%Y%m%d -s $datestr
Mise à jour de l'heure, avec hs au format hh:mm:ss (Ex 17:02:29)

Code : Tout sélectionner

date +%T -s $hs
Oui, pour les plus attentif, j'ai zappé les fractions de seconde.
Et il s'agit de l'heure locale (pas UTC)
Donc pb potentiel au changement d'heure

Les commandes

Code : Tout sélectionner

man date
et

Code : Tout sélectionner

date --help
te diront toutes les options possibles pour la commande date (et elles sont nombreuses !)
3 Pi5 : Emby / Samba , Librelec, Android TV
3 Pi4 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi3 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

MSG
Raspinaute
Messages : 121
Enregistré le : ven. 26 déc. 2014 18:31

Re: script pour mettre à la date et heure le RPI après le boot

Message par MSG » sam. 27 déc. 2025 13:34

Bonjour ,

Il est possible de calculer le jour exact où le changement horaire de l'heure d' Eté intervient . J'ai pu faire une simulation ci-dessous .

Code : Tout sélectionner

calendrier(2026)
           

   Jan    |   Fev    |   Mar    |   Avr    |   Mai    |   Jun    |   Jul    |   Aou    |   Sep    |   Oct    |   Nov    |   Dec    |
Jeu  1    |Dim  1    |Dim  1    |Mer  1 H+1|Ven  1 H+1|Lun  1 H+1|Mer  1 H+1|Sam  1 H+1|Mar  1 H+1|Jeu  1 H+1|Dim  1    |Mar  1    |
Ven  2    |Lun  2    |Lun  2    |Jeu  2 H+1|Sam  2 H+1|Mar  2 H+1|Jeu  2 H+1|Dim  2 H+1|Mer  2 H+1|Ven  2 H+1|Lun  2    |Mer  2    |
Sam  3    |Mar  3    |Mar  3    |Ven  3 H+1|Dim  3 H+1|Mer  3 H+1|Ven  3 H+1|Lun  3 H+1|Jeu  3 H+1|Sam  3 H+1|Mar  3    |Jeu  3    |
Dim  4    |Mer  4    |Mer  4    |Sam  4 H+1|Lun  4 H+1|Jeu  4 H+1|Sam  4 H+1|Mar  4 H+1|Ven  4 H+1|Dim  4 H+1|Mer  4    |Ven  4    |
Lun  5    |Jeu  5    |Jeu  5    |Dim  5 H+1|Mar  5 H+1|Ven  5 H+1|Dim  5 H+1|Mer  5 H+1|Sam  5 H+1|Lun  5 H+1|Jeu  5    |Sam  5    |
Mar  6    |Ven  6    |Ven  6    |Lun  6 H+1|Mer  6 H+1|Sam  6 H+1|Lun  6 H+1|Jeu  6 H+1|Dim  6 H+1|Mar  6 H+1|Ven  6    |Dim  6    |
Mer  7    |Sam  7    |Sam  7    |Mar  7 H+1|Jeu  7 H+1|Dim  7 H+1|Mar  7 H+1|Ven  7 H+1|Lun  7 H+1|Mer  7 H+1|Sam  7    |Lun  7    |
Jeu  8    |Dim  8    |Dim  8    |Mer  8 H+1|Ven  8 H+1|Lun  8 H+1|Mer  8 H+1|Sam  8 H+1|Mar  8 H+1|Jeu  8 H+1|Dim  8    |Mar  8    |
Ven  9    |Lun  9    |Lun  9    |Jeu  9 H+1|Sam  9 H+1|Mar  9 H+1|Jeu  9 H+1|Dim  9 H+1|Mer  9 H+1|Ven  9 H+1|Lun  9    |Mer  9    |
Sam 10    |Mar 10    |Mar 10    |Ven 10 H+1|Dim 10 H+1|Mer 10 H+1|Ven 10 H+1|Lun 10 H+1|Jeu 10 H+1|Sam 10 H+1|Mar 10    |Jeu 10    |
Dim 11    |Mer 11    |Mer 11    |Sam 11 H+1|Lun 11 H+1|Jeu 11 H+1|Sam 11 H+1|Mar 11 H+1|Ven 11 H+1|Dim 11 H+1|Mer 11    |Ven 11    |
Lun 12    |Jeu 12    |Jeu 12    |Dim 12 H+1|Mar 12 H+1|Ven 12 H+1|Dim 12 H+1|Mer 12 H+1|Sam 12 H+1|Lun 12 H+1|Jeu 12    |Sam 12    |
Mar 13    |Ven 13    |Ven 13    |Lun 13 H+1|Mer 13 H+1|Sam 13 H+1|Lun 13 H+1|Jeu 13 H+1|Dim 13 H+1|Mar 13 H+1|Ven 13    |Dim 13    |
Mer 14    |Sam 14    |Sam 14    |Mar 14 H+1|Jeu 14 H+1|Dim 14 H+1|Mar 14 H+1|Ven 14 H+1|Lun 14 H+1|Mer 14 H+1|Sam 14    |Lun 14    |
Jeu 15    |Dim 15    |Dim 15    |Mer 15 H+1|Ven 15 H+1|Lun 15 H+1|Mer 15 H+1|Sam 15 H+1|Mar 15 H+1|Jeu 15 H+1|Dim 15    |Mar 15    |
Ven 16    |Lun 16    |Lun 16    |Jeu 16 H+1|Sam 16 H+1|Mar 16 H+1|Jeu 16 H+1|Dim 16 H+1|Mer 16 H+1|Ven 16 H+1|Lun 16    |Mer 16    |
Sam 17    |Mar 17    |Mar 17    |Ven 17 H+1|Dim 17 H+1|Mer 17 H+1|Ven 17 H+1|Lun 17 H+1|Jeu 17 H+1|Sam 17 H+1|Mar 17    |Jeu 17    |
Dim 18    |Mer 18    |Mer 18    |Sam 18 H+1|Lun 18 H+1|Jeu 18 H+1|Sam 18 H+1|Mar 18 H+1|Ven 18 H+1|Dim 18 H+1|Mer 18    |Ven 18    |
Lun 19    |Jeu 19    |Jeu 19    |Dim 19 H+1|Mar 19 H+1|Ven 19 H+1|Dim 19 H+1|Mer 19 H+1|Sam 19 H+1|Lun 19 H+1|Jeu 19    |Sam 19    |
Mar 20    |Ven 20    |Ven 20    |Lun 20 H+1|Mer 20 H+1|Sam 20 H+1|Lun 20 H+1|Jeu 20 H+1|Dim 20 H+1|Mar 20 H+1|Ven 20    |Dim 20    |
Mer 21    |Sam 21    |Sam 21    |Mar 21 H+1|Jeu 21 H+1|Dim 21 H+1|Mar 21 H+1|Ven 21 H+1|Lun 21 H+1|Mer 21 H+1|Sam 21    |Lun 21    |
Jeu 22    |Dim 22    |Dim 22    |Mer 22 H+1|Ven 22 H+1|Lun 22 H+1|Mer 22 H+1|Sam 22 H+1|Mar 22 H+1|Jeu 22 H+1|Dim 22    |Mar 22    |
Ven 23    |Lun 23    |Lun 23    |Jeu 23 H+1|Sam 23 H+1|Mar 23 H+1|Jeu 23 H+1|Dim 23 H+1|Mer 23 H+1|Ven 23 H+1|Lun 23    |Mer 23    |
Sam 24    |Mar 24    |Mar 24    |Ven 24 H+1|Dim 24 H+1|Mer 24 H+1|Ven 24 H+1|Lun 24 H+1|Jeu 24 H+1|Sam 24 H+1|Mar 24    |Jeu 24    |
Dim 25    |Mer 25    |Mer 25    |Sam 25 H+1|Lun 25 H+1|Jeu 25 H+1|Sam 25 H+1|Mar 25 H+1|Ven 25 H+1|Dim 25    |Mer 25    |Ven 25    |
Lun 26    |Jeu 26    |Jeu 26    |Dim 26 H+1|Mar 26 H+1|Ven 26 H+1|Dim 26 H+1|Mer 26 H+1|Sam 26 H+1|Lun 26    |Jeu 26    |Sam 26    |
Mar 27    |Ven 27    |Ven 27    |Lun 27 H+1|Mer 27 H+1|Sam 27 H+1|Lun 27 H+1|Jeu 27 H+1|Dim 27 H+1|Mar 27    |Ven 27    |Dim 27    |
Mer 28    |Sam 28    |Sam 28    |Mar 28 H+1|Jeu 28 H+1|Dim 28 H+1|Mar 28 H+1|Ven 28 H+1|Lun 28 H+1|Mer 28    |Sam 28    |Lun 28    |
Jeu 29    |          |Dim 29 H+1|Mer 29 H+1|Ven 29 H+1|Lun 29 H+1|Mer 29 H+1|Sam 29 H+1|Mar 29 H+1|Jeu 29    |Dim 29    |Mar 29    |
Ven 30    |          |Lun 30 H+1|Jeu 30 H+1|Sam 30 H+1|Mar 30 H+1|Jeu 30 H+1|Dim 30 H+1|Mer 30 H+1|Ven 30    |Lun 30    |Mer 30    |
Sam 31    |          |Mar 31 H+1|          |Dim 31 H+1|          |Ven 31 H+1|Lun 31 H+1|          |Sam 31    |          |Jeu 31    |

On sait que le changement intervient le dernier dimanche de Mars et d'Octobre , mais au lieu de mémoriser un bit de changement , je défini l'heure en fonction de la date .
L'astuce réside sur le fait qu'en mettant en opposition le jour et le jour de la semaine , on obtient une date fixe .

Jour - Jsem = DD (Dimanche dernier)
Jour - Jsem + 7 = DP (Dimanche prochain)

Avec Dim=0 , Lun=1 , etc... pour l'indexation .

Code : Tout sélectionner

sem=("Dim","Lun","Mar","Mer","Jeu","Ven","Sam","Dim")
Ainsi on sait si il reste encore un dimanche ou pas .

La fonction de test est la suivante :

Code : Tout sélectionner

Ete = 3<mois<10 or\
      mois==3 and (jour-jsem+7)>31 or\
      mois==10 and (jour-jsem)<25
Reste qu'il faut être sûr du jour de la semaine , que j'ai aussi calculé à partir de la date , mais c'est un autre problème , avec les année bissextiles et la date initiale , qu'il est difficile de calculer depuis 01/01/1970 (heure par défaut de certains systèmes quand ils perdent l'heure) . Je préfère calculer depuis 01/01/0001 ou juste après une année bissextile proche (tous les 400 ans) au 01/01/2001 qui tombe un Lundi .

C'est surtout utile pour les systèmes qui n'ont qu'une horloge RTC et pas de connexion internet ou autre moyen de synchronisation de l'heure , durant ces changements 2 fois dans l'année .

Répondre

Retourner vers « Autres langages »