Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Obsolescence programmée de l'historisation des données 2026-01-01 #3034

Open
jpty opened this issue Feb 17, 2025 · 2 comments
Open

Obsolescence programmée de l'historisation des données 2026-01-01 #3034

jpty opened this issue Feb 17, 2025 · 2 comments

Comments

@jpty
Copy link
Contributor

jpty commented Feb 17, 2025

Dans la version actuelle 4.4.19 et 4.5, l'historisation des données s'arrêtera le 1er janvier 2026.

$sql = 'DELETE FROM history WHERE `datetime` <= "2000-01-01 01:00:00" OR `datetime` >= "2026-01-01 01:00:00"';

  • A quoi sert cette limitation ?
  • Pourquoi ne pas passer cette date en dynamique ?:
    date('Y-m-d 00:00:00', strtotime('next year'));

Ca éviterait les posts que l'on a chaque début d'année sur Community.

@jpty jpty changed the title Obsolescence programmée de l'historisation des données Obsolescence programmée de l'historisation des données 2026-01-01 Feb 17, 2025
zoic21 added a commit that referenced this issue Feb 21, 2025
@zoic21
Copy link
Contributor

zoic21 commented Feb 21, 2025

Bonjour,
Cette limitation était la pour les 1er rpi qui quand il démarre avant la mise à jour ntp se retrouve dans le futur (2027 en général). Il n'est donc pas possible d'utiliser du dynamique (next year) car la date systeme étant 2027 cela donne 2028 et ne nettoie donc pas les historique dans le futur.

Ce problème concernant surtout les rpi1 je viens de supprimer toute cette partie

@kwizer15
Copy link
Contributor

kwizer15 commented Feb 21, 2025

On pourrait éventuellement faire appel a un serveur ntp juste avant pour connaitre la date réelle. Si c'est toujours nécessaire bien entendu.

Je met ici un bout code généré par une ia au besoin (testé et fonctionnel, nécessite juste de gérer la timezone correctement car le serveur renvoi de l’UTC)

function getNTPTime($ntpServer = 'pool.ntp.org') {
    try {
        // Création du socket UDP
        $socket = @fsockopen('udp://' . $ntpServer, 123, $errNo, $errStr, 5);
        
        if (!$socket) {
            throw new Exception("Impossible de se connecter au serveur NTP: $errStr ($errNo)");
        }

        // Construction du paquet NTP (48 octets)
        $packet = "\x1b" . str_repeat("\0", 47);
        
        // Envoi de la requête
        fwrite($socket, $packet);
        
        // Lecture de la réponse
        $response = fread($socket, 48);
        fclose($socket);
        
        if (strlen($response) < 48) {
            throw new Exception("Réponse NTP invalide");
        }
        
        // Extraction du timestamp (secondes depuis 1900-01-01)
        $ntpTimestamp = unpack('N12', $response);
        $timestamp = $ntpTimestamp[11]; // secondes depuis 1900
        
        // Conversion en timestamp Unix (secondes depuis 1970-01-01)
        $unixTimestamp = $timestamp - 2208988800; // Soustraction de l'offset NTP
        
        // Création de l'objet DateTime
        $dateTime = new DateTime();
        $dateTime->setTimestamp($unixTimestamp);
        
        return $dateTime;
        
    } catch (Exception $e) {
        // En cas d'erreur, retourner la date/heure système
        error_log("Erreur NTP: " . $e->getMessage());
        return new DateTime();
    }
}

// Exemple d'utilisation
try {
    $currentDateTime = getNTPTime();
    echo $currentDateTime->format('Y-m-d H:i:s');
} catch (Exception $e) {
    echo "Erreur: " . $e->getMessage();
}

@zoic21 zoic21 mentioned this issue Feb 25, 2025
11 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants