# HG changeset patch # User Bill Welliver # Date 1324764270 18000 # Node ID 2835e6e993753a4da2f1efb4f320ce6f5b39a9a5 # Parent 3de251c4f316245ff244c7b7c05261aefed986bc fix parsing of the remote struct, handle parsing of signed ints diff -r 3de251c4f316245ff244c7b7c05261aefed986bc -r 2835e6e993753a4da2f1efb4f320ce6f5b39a9a5 wxd/WXR1.pike --- a/wxd/WXR1.pike Tue Dec 13 20:31:51 2011 -0500 +++ b/wxd/WXR1.pike Sat Dec 24 17:04:30 2011 -0500 @@ -5,14 +5,15 @@ Item cookie = Chars(4); Item station_id = Byte(); Item uptime = lWord(); - Item temp = lWord(); + Item temp = lSWord(); Item pres = lLWord(); Item relhx = Float(); Item tempb = Float(); Item rainfall = Float(); Item windspeed = Float(); Item maxwindspeed = Float(); - Item winddir = Chars(2); + Item winddegrees = lWord(); +// Item winddir = Chars(2); Item luxa = lWord(); Item luxb = lWord(); Item luxc = lWord(); @@ -47,6 +48,7 @@ { mixed val; if(i=="cookie") continue; + if(i=="winddir") continue; else if(i=="temp") val = (this[i])/10.0; else if(this[i] == "\0\0") val = "--"; else val = this[i]; @@ -57,7 +59,7 @@ "temperature, pressure, humidity, temperature_b, rainfall, windspeed, " "direction, wind_gusts, luminosity_a, luminosity_b, luminosity_c) " "VALUES(DATETIME('now'), :station_id, :uptime, :temp, :pres, :relhx, " - ":tempb, :rainfall, :windspeed, :winddir, :maxwindspeed, :luxa, " + ":tempb, :rainfall, :windspeed, :winddegrees, :maxwindspeed, :luxa, " ":luxb, :luxc)", v); } // little endian word @@ -90,7 +92,11 @@ in, -~(1<read(size), "%-"+size+"c", v); sscanf(sprintf(size + "c", v), "%+" +size+"c", value); } + void decode(object f) { int v; sscanf((f->read(size)), "%-"+size+"c", v); + if(v>>15) + value = -((v-1)^0xffff); + else value = v; +} string encode() { return sprintf("%-"+size+"c", value); } protected string _sprintf(int t) { @@ -115,7 +121,7 @@ in, ~((-1)<read(size), "%-"+size+"c", value); } + void decode(object f) { sscanf(f->read(size), "%-"+size+"c", value);} string encode() { return sprintf("%-"+size+"c", value); } protected string _sprintf(int t) { diff -r 3de251c4f316245ff244c7b7c05261aefed986bc -r 2835e6e993753a4da2f1efb4f320ce6f5b39a9a5 wxd/recv.pike --- a/wxd/recv.pike Tue Dec 13 20:31:51 2011 -0500 +++ b/wxd/recv.pike Sat Dec 24 17:04:30 2011 -0500 @@ -20,7 +20,7 @@ { write("got packet: %O\n", packet->data); object wxr = .WXR1(packet->data); - // write("struct: %O\n", wxr); + write("struct: %O\n", wxr); wxr->insert(db, "observations"); object reader = client->get_topic_writer("observations"); diff -r 3de251c4f316245ff244c7b7c05261aefed986bc -r 2835e6e993753a4da2f1efb4f320ce6f5b39a9a5 wxd/schema.sqlite3 --- a/wxd/schema.sqlite3 Tue Dec 13 20:31:51 2011 -0500 +++ b/wxd/schema.sqlite3 Sat Dec 24 17:04:30 2011 -0500 @@ -19,7 +19,7 @@ temperature_b number, rainfall number, windspeed number, -direction char(2), +direction number, wind_gusts number, luminosity_a number, luminosity_b number,