
Originariamente Scritto da
zoomx
Grazie alle richieste sul forum di @
Danisira85, mentre andavo cercando delle soluzioni per poter registrare in locale i dati raccolti dal GW1000 (WeeWX e Cumulus) ho trovato questo script in python
GitHub - pjpeartree/rainmachine-ecowitt: Ecowitt direct connection parser for RainMachine smart sprinkler controller.
dove si vede che è il programma a chiedere i dati al GW1000 invece di mettere su un server tipo Wunderground e aspettare che il GW1000
li inserisca.
Il programma invia un pacchetto di 5 byte e riceve un pacchetto con tutti i dati.
Cercando lo stesso pacchetto in rete mi sono imbattuto daccapo in Cumulus MX, esattamente in questo file in C#
CumulusMX/GW1000Station.cs at master . cumulusmx/CumulusMX . GitHub
dove si vede che il pacchetto di cui parlavo prima è in realtà composto da una testata di 3 byte e un comando fra quelli elencati nell'array di byte Commands.
Il file in pyton mostra un ulteriore pacchetto di 5 byte che permette di scoprire l'IP del GW1000 da parte di un programma.
Il pacchetto è composto da questi byte FF FF 12 03 15 (in esadecimale!) e va mandato in broadcast, ciioè a tutti i dispositivi che si trovano su una LAN (di solito IP 255.255.255.255) sulla porta 46000. Il GW1000 dovrebbe rispondere con un pacchetto con il suo IP.
A questo punto se si manda il pacchetto di byte FF FF 27 03 2A il GW1000 risponde con un pacchetto di dati.
In questo pacchetto i primi 3 byte saranno daccapo FF FF 27 cui seguiranno 2 byte che indicano la lunghezza del pacchetto che comprende i dati veri e propri.
Questi vanno decodificati a gruppetti partendo dal primo byte, il quale indica di quale sensore sensore si tratta, seguono la misura presa dal sensore che può essere di 2 byte (tipo la temperatura, la pressione e altri) o di un solo byte (come l'umidità, la radiazione UV e altri). Pioggia mensile e pochi altri hanno invece la dimensione di 4 byte.
Alla fine c'è un identificativo che precede un gruppo di 16 byte che codificano per lo stato delle batterie dei sensori e un byte di controllo dell'integrità dei dati (chechsum).
Io non ne sono capace ma credo che con queste informazioni è possibile realizzare una App per Android in grado di chiedere i dati al GW100o e registrarli su Android, come proposto da Danisira85
Segnalibri