Bonjour,
Voulant connecter ma station LaCrosseTechnology WS3500 en temps réel sur mon site web, je me suis mis à tracer les données avec GraphWeather sur les 24 dernières heures.
Suite à cela, j'ai vu que le temps associé à mes données sur GraphWeather est décalé par rapport à mon fichier .dat de HeavyWeather. Je m'explique avec des photos :
photo n°1
Sur cette première photo, vous voyez en fond l'édition de mon fichier mars.dat avec HeavyWeather. La première donnée est à minuit soit 0:00heure.
Par contre, l'éditeur de GraphWeather indique que cette première donnée est à 1:00 heure. GraphWeather a rajouté une heure pour une raison que j'ignore. J'ai pensé que c'était un problème de fuseau horaire géré avec le paramètre TimeZone (voir code ci-dessous), mais le fichier de config ainsi que ma station indiquent aucun décalage (0)
Code :
ULONG CPlugin::ConvertTimestamp(double& Timestamp)
{
time_t TimeRes=(time_t)(Round((Timestamp - DELPHI1970) * 86400))+ m_Timezone;
Photo n°2
Sur cette deuxième photo, le problème vient de la gestion de l'heure d'été. Vous voyez en fond l'édition de mon fichier mars.dat avec HeavyWeather. A 2h00 du matin, la donnée n'apparaît plus car on passe à 3heures. La donnée est donc enregistrée à 3h02 puis la suivante à 3h30, etc...
Par contre, l'éditeur de GraphWeather gère également le décalage horaire de son côté en plus de ce qui est fait par HeavyWeather. Entre la ligne 1298 et 1299, on voit le décalage horaire de GraphWeather puisque on passe automatiquement de 2 à 3h00. Juste après entre la ligne 1300 et 1301, on voit apparaître le décalage horaire fait par HeavyWeather.
Je me retrouve alors avec un décalage de deux heures puisque la ligne 1303 (6h00 du matin) de l'editeur de Graphweather correspond à la ligne 1302 (4h00 du matin) de l'editeur de Heavyweather (les lignes sont numérotées à partir de 0 sur HW et 1 sur GW)
J'ai regardé un peu le code de GraphWeather et j'ai trouvé cela dans le plugin.cpp de la WS3600:
Code :
ULONG CPlugin::ConvertTimestamp(double& Timestamp)
{
time_t TimeRes=(time_t)(Round((Timestamp - DELPHI1970) * 86400))+ m_Timezone;
struct tm TmStruct;
localtime_s(&TmStruct, &TimeRes);
if(TmStruct.tm_isdst == 1)
{
time_t TimeAfter = TimeRes + 3600;
localtime_s(&TmStruct, &TimeAfter);
if(TmStruct.tm_isdst == 0)
TimeRes = 0;
}
return (ULONG)TimeRes;
}
Le code teste le champ tm_isdst. Si celui-ci indique l'heure d'été alors on rajoute 1 heure.
Je ne comprends pas pourquoi on gère ce décalage car ces stations WS3600,WS3500 sont radio-pilotées avec le signal DCF-77 qui fait une mise à jour automatique de l'heure d’été. L’heure est déjà corrigée dans le fichier .dat. Est ce qu'il y a un moyen de désactiver la gestion de l'heure d'été sur GraphWeather ? Si non, je pense qu'il faudrait désactiver ce test dans la fonction ConvertTimeStamp.
Bref si vous avez des idées (surtout TiToine) comment corriger mon premier décalage + le deuxième du à l'heure d'été, ce serait super sympa. Pour l'instant je suis bloquée et je ne vois pas comment mettre mes données en temps réel car celle-ci ne sont pas bonnes temporellement. A 11heures du matin, j’affiche les données de 9:00 ce qui n’est pas très cool.
Merci pour votre aide
Cordialement
fafou
PS: si vous avez besoin de mon fichier mars.dat, je peux l'envoyer par MP.
_________________
WS3500, HeavyWeatherProV1.1, GraphWeather Version 2.0.321, Windows 10
Mon site meteo :
http://meteoengins.free.fr/