I have an Ambient Weather WS-1080, which was the predecessor to this and substantially similar. It's pretty unsophisticated and not that accurate but it's (mostly) sufficient for my purposes and is absolutely an excellent value. I use Tee-Boy's WeatherSnoop to pull data off the weather station console (there's a USB port) and upload it to wunderground.com.
WeatherSnoop has an option to write the data out to a sqlite database, and being curious, of course, I turned it on. You can look at the contents of a database from the sqlite command line, and this is what I saw:
sqlite> .tables barometricPressure extraHumidity8 extraTemperature9 rainRate barometricTrend extraHumidity9 forecast solarRadiation dayRain extraTemperature1 indoorDewPoint uvIndex extraHumidity1 extraTemperature10 indoorHeatIndex windChill extraHumidity10 extraTemperature2 indoorHumidity windDirection extraHumidity2 extraTemperature3 indoorTemperature windGust extraHumidity3 extraTemperature4 monthRain windSpeed extraHumidity4 extraTemperature5 outdoorDewPoint yearRain extraHumidity5 extraTemperature6 outdoorHeatIndex extraHumidity6 extraTemperature7 outdoorHumidity extraHumidity7 extraTemperature8 outdoorTemperature sqlite>
The table "indoorTemperature" popped right out as something I could use to monitor the house when I was away from home, so I took a look at the schema and found that there are two values: time and value:
sqlite> .schema indoorTemperature CREATE TABLE indoorTemperature ( 'time' INTEGER, 'value' FLOAT ); sqlite>
So, I just wrote a script to dump the indoor Temperature table
#!/bin/ksh WEATHERFILE=/Users/melinda/Documents/weather.db sqlite3 $WEATHERFILE <<EOF .separator " " select strftime('%Y:%m:%d:%H:%M', time, 'unixepoch', 'localtime'),value from indoorTemperature; EOF
What this does is use a Unix "here document" to provide scripted commands to the sqlite command line. .separator " " changes the character used to separate fields on output to a space (by default it's a vertical bar, or pipe character).
The select statement is actually pretty straightforward and kind of inefficient and brainless, to be honest. Basically I'm selecting every record and formatting the time for printing.
This little routine is invoked by the real script, which looks like this:
#!/bin/ksh CURTMP=`/Users/melinda/lib/curindoortemp | tail -1 | cut -d" " -f2` ADDR=0000000000@msg.acsalaska.com,xxxxxxx@gmail.com THRESHHOLD=60 if [ $CURTMP -lt $THRESHHOLD ] then Mail $ADDR <<EOF Temperature is $CURTMP EOF fi
The curindoortemp script is the one described above. I grab the last record and print the second field, which is the temperature. If it's less than the thresshold value (in this case, 60 degrees Fahrenheit) I send off email to the addresses listed in the ADDR field. Obviously it would be far better programming practice to have the curindoortemp script just return the temperature from the last record.
No comments:
Post a Comment