Aller au contenu

Ce tchat, hébergé sur une plateforme indépendante d'Infoclimat, est géré et modéré par une équipe autonome, sans lien avec l'Association.
Un compte séparé du site et du forum d'Infoclimat est nécessaire pour s'y connecter.

Comment récupérer les archives sur weatherlink.com sans le programme w


jmyg
 Partager

Messages recommandés

Bonjour,

j'ai fait un petit tcpdump sur ma ligne éthernet pour voir ce qui se passe lorsqu'on rapatrie les archives d'une station sur le site web http://www.weatherlink.com

En fait c'est tout simple : cela fait appel à un script php sur le serveur de Davis.

Exemple : (remplacez les ******* par les valeurs correspondant à votre station avec weatherlinkIP)

[url=http://www.weatherlink.com/webdl.php?timestamp=323945700&user=********&pass=********&action=headers]http://www.weatherlink.com/webdl.php?timestamp=323945700&user=********&pass=********&action=headers[/url]

pour avoir l'en-tête (qui donne le nombre de nouvelles données dispo) ou

[url=http://www.weatherlink.com/webdl.php?timestamp=323945700&user=********&pass=*********&action=data]http://www.weatherlink.com/webdl.php?timestamp=323945700&user=********&pass=*********&action=data[/url]

pour recevoir les données.

Le codage pour le timestamp ainsi que le format des données doit correspondre à la norme définie pour tous les datalogger Davis.

Je vais vérifier ça dans les jours à venir et écrire un petit script qui décodera tout ça que je posterai ici.

Entre autres intérêts : pouvoir rapatrier les données pour StatIC facilement ;-)

Lien à poster
Partager sur d’autres sites

Bonjour,

j'ai fait un petit tcpdump sur ma ligne éthernet pour voir ce qui se passe lorsqu'on rapatrie les archives d'une station sur le site web http://www.weatherlink.com

En fait c'est tout simple : cela fait appel à un script php sur le serveur de Davis.

Exemple : (remplacez les ******* par les valeurs correspondant à votre station avec weatherlinkIP)

http://www.weatherlink.com//webdl.php?timestamp=323945700&user=********&pass=********&action=headers

pour avoir l'en-tête (qui donne le nombre de nouvelles données dispo) ou

http://www.weatherlink.com//webdl.php?timestamp=323945700&user=********&pass=*********&action=data

pour recevoir les données.

Le codage pour le timestamp ainsi que le format des données doit correspondre à la norme définie pour tous les datalogger Davis.

Je vais vérifier ça dans les jours à venir et écrire un petit script qui décodera tout ça que je posterai ici.

Entre autres intérêts : pouvoir rapatrier les données pour StatIC facilement ;-)

excellente initiative, merci par avance.
Lien à poster
Partager sur d’autres sites

excellente initiative, merci par avance.

Bonsoir Jean-Marc et bonsoir à tous,

Bravo pour cette excellente initiative.

J'avais initié un sujet sur la possibilité de récupérer les données de Weatherlink par un moyen ou un autre de façon à les remonter sur StatIc.

/index.php?showtopic=44570&st=0&p=976473'>http://forums.infocl...73entry976473

Cette discussion s'est terminée quand un adhérent vraisemblablement bien informé avait évoqué le fait que cette manip n'était pas possible pour un problème d'argent.

Ce que j'ai pu constater c'est qu'aucun membre de StatIc n'est venu donner une version des faits : pourquoi ? Ce serait quand même interessant de connaitre la position de StatIc sur cette affaire

Lien à poster
Partager sur d’autres sites

Bonsoir,

excellente initiative en effet "jmyg", je viens d'utiliser tes 2 scripts en y insérant les valeurs de ma station et ça marche. Reste à décrypter tout ça . Si tes essais aboutissaient ce serait super. Bon courage default_wink.png/emoticons/wink@2x.png 2x" width="20" height="20">.

Lien à poster
Partager sur d’autres sites

bonjour,

comme je m'y attendais le codage des données suit la norme définie pour les archives des loggers Davis (pour les curieux, elle est disponible ici, page 28 : VantageSerialProtocolDocs_v230.pdf)

En résumé, le timestamp se calcule de la façon suivante :

timestamp = jour + mois*32 + (annee - 2000)*512;timestamp = timestamp * 65536;timestamp = timestamp + (100 * heure) + minute;

Les données se présentent de la façon suivante (décrite page 28 du pdf ci dessus) :

00000000  4f 13 e5 04 07 02 07 02  06 02 00 00 00 00 0d 77  |O..............w|0000000   04943   01253   00519   00519   00518   00000   00000   3047700000010  18 02 11 00 7c 02 31 3f  04 06 05 05 ff 00 18 02  |....|.1?........|0000010   00536   00017   00636   16177   01540   01285   00255   0053600000020  ff 09 ff ff ff ff ff ff  ff ff 00 ff ff ff ff ff  |................|0000020   02559   65535   65535   65535   65535   65280   65535   6553500000030  ff ff ff ff 4f 13 e6 04  07 02 07 02 07 02 00 00  |....O...........|0000030   65535   65535   04943   01254   00519   00519   00519   0000000000040  00 00 0c 77 1d 02 17 00  7c 02 31 3e 04 06 05 05  |...w....|.1>....|0000040   00000   30476   00541   00023   00636   15921   01540   0128500000050  ff 00 1d 02 ff 09 ff ff  ff ff ff ff ff ff 00 ff  |................|0000050   00255   00541   02559   65535   65535   65535   65535   6528000000060  ff ff ff ff ff ff ff ff  4f 13 e7 04 06 02 07 02  |........O.......|0000060   65535   65535   65535   65535   04943   01255   00518   00519

On reconnait facilement la datestamp (04943), le timestamp (01253), l'outside temp (00519) , le high out temp (00519), le low out temp (00518), etc.

Je n'ai plus qu'à adapter mon script qui tape directement sur le logger IP pour décoder ces pages.

On note au passage que le logger IP envoie ces données d'archive une fois par heure au site weatherlink.com. Ca se confirme facilement sur la courbe de qualité du signal en voyant la chute régulière de signal associée à cet envoi.

P.S. pour ceux qui veulent faire l'expérience par eux même, voici la procédure sous Unix :

> wget "[url=http://www.weatherlink.com//webdl.php?timestamp=323945700&user=********&pass=*******&action=data]http://www.weatherlink.com//webdl.php?timestamp=323945700&user=********&pass=*******&action=data"[/url] -O webdl.data> hexdump -d webdl.data | more

Lien à poster
Partager sur d’autres sites

comme je m'y attendais le codage des données suit la norme définie pour les archives des loggers Davis (pour les curieux, elle est disponible ici, page 28 : VantageSerialProtocolDocs_v230.pdf)

c'est plûtot ça le lien : http://www.davisnet.com/support/weather/download/VantageSerialProtocolDocs_v230.pdf
Lien à poster
Partager sur d’autres sites

timestamp = jour + mois*32 + (annee - 2000)*512;timestamp = timestamp * 65536;timestamp = timestamp + (100 * heure) + minute;

Bonjour,

Je ne suis pas d'accord avec ta formule au niveau du timestamp = timestamp * 65536, ça ne fonctionnera pas ! par contre tu a besoin de calculer le CRC 16 (avec permutation des 2 octets au passage) et de le passer pour que la console valide ton calcul et te réponde par un #ACK ou #NAK s'il y a un problème. Cela fonctionne ainsi dans mes programmes.

pour le décodage du timestamp, voici un exemple en basic

ProcedureDLL.w DecodeStamp(*DatetimeStamp, *Year1.w, *Month1.w, *Day1.w, *HeurePleine1.w, *minutes1.w)              Variable.w = PeekW(*DateTimeStamp) & $FFFF               *Year=(Variable >> 9)+2000              PokeW(*Year1,*Year)              *Month=(Variable >> 5) & $F              PokeW(*Month1, *Month)              *Day=Variable & $1F              PokeW(*Day1,*Day)              *HeurePleine.w=(PeekW(*DateTimeStamp+2)) / 100               PokeW(*HeurePleine1,*HeurePleine)              *minutes= (PeekW(*DateTimeStamp+2)) % 100               PokeW(*minutes1,*minutes)              ProcedureReturn *YearEndProcedure  

Lien à poster
Partager sur d’autres sites

Bonjour,

Je ne suis pas d'accord avec ta formule au niveau du timestamp = timestamp * 65536, ça ne fonctionnera pas !

Essaye tu seras surpris :-) C'est le simple décalage de 16 bits.

Le timestamp que j'ai donné en exemple (323945700 ) correspond au 15 octobre 2009 à 12h52

timestamp = 15 + (10 * 32) + (2009 - 2000) * 512 = 4943

timestamp = timestamp * 65536 = 323944448

timestamp = timestamp + (100 * 12) + 52 = 323945700

Il y a confusion entre ce timestamp que l'on passe en paramètre du script php de Davis et les timestamps que tu trouves dans les paquets de données.

par contre tu a besoin de calculer le CRC 16 (avec permutation des 2 octets au passage) et de le passer pour que la console valide ton calcul et te réponde par un #ACK ou #NAK s'il y a un problème. Cela fonctionne ainsi dans mes programmes.

Il y a confusion entre ce qui est nécessaire lorsqu'on récupère directement les données sur le logger, où effectivement il y a un contrôle par CRC, et ce qu'on envoie et reçoit du site web weatherlink.com qui lui s'en passe (ce qui se comprend très bien, le contrôle se fait au niveau des trames IP). Par exemple, le site envoie les paquets de 52 octets les uns derrière les autres, tout simplement.
Lien à poster
Partager sur d’autres sites

Voici le script en perl : ftp://www.meteo-avranchin.org/decodeWL.pl

Quelques remarques :

  • il est brut de décoffrage et se contente de convertir et d'afficher les données, mais il donne une idée de ce qu'il est possible de faire;
  • il est sans commentaire mais se comprend de lui-même facilement, je pense, pour qui connait le langage;
  • pour le tester, ne pas oubliez de mettre à jour les variables $user et $password correspondant à votre station, puis dans un terminal, et par exemple, tapez
    decodeWL.pl 2009 10 24 12 34


    l'usage étant

    decodeWL.pl année mois jour heure minute


    (ATTENTION: il faut avoir Perl installé sur sa machine ainsi que quelques librairies CPAN, et wget: on trouve tout cela en général sur les distributions standard de linux)

Lien à poster
Partager sur d’autres sites

Voici le script en perl : ftp://www.meteo-avranchin.org/decodeWL.pl

Quelques remarques :

  • il est brut de décoffrage et se contente de convertir et d'afficher les données, mais il donne une idée de ce qu'il est possible de faire;
  • il est sans commentaire mais se comprend de lui-même facilement, je pense, pour qui connait le langage;
  • pour le tester, ne pas oubliez de mettre à jour les variables $user et $password correspondant à votre station, puis dans un terminal, et par exemple, tapez
    decodeWL.pl 2009 10 24 12 34


    l'usage étant

    decodeWL.pl année mois jour heure minute


    (ATTENTION: il faut avoir Perl installé sur sa machine ainsi que quelques librairies CPAN, et wget: on trouve tout cela en général sur les distributions standard de linux)

Bizarre ça ne fonctionne pas chez moi. J'ai pourtant vérifié CPAN et wget !

test@debian:~$ decodeWL.pl 2009 10 24 12 34

bash: decodeWL.pl: command not found

Au préalable je rendu exécutable le script chmod +x decodeWL.pl

Si tu as une idée ?

Cordialement

Lien à poster
Partager sur d’autres sites

Bizarre ça ne fonctionne pas chez moi. J'ai pourtant vérifié CPAN et wget !

test@debian:~$ decodeWL.pl 2009 10 24 12 34

bash: decodeWL.pl: command not found

Au préalable je rendu exécutable le script chmod +x decodeWL.pl

Si tu as une idée ?

Cordialement

tu n'as pas le répertoire courant dans ton PATH; essaye

./decodeWL.pl 2009 10 24 12 34

Lien à poster
Partager sur d’autres sites

tu n'as pas le répertoire courant dans ton PATH; essaye

./decodeWL.pl 2009 10 24 12 34

oupss !effectivement j'avais déjà retesté avec "./" devant.

C'est un bon début !

Je vais devoir me mettre à Perl pour comprendre ;-)

Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
 Partager

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...