This simple weather bash script was written with the intention of piping it to a text to speech program such as flite or festival. However, it can be used for any sort of text notification such as printing to the command line or emailing.
#!/bin/sh
# spkweather.sh
# Written by:
# Brandt Daniels
# December 2010
LAT=XX.XXXX
LON=-XXX.XXX
RAW=$(curl -s "http://forecast.weather.gov/MapClick.php?site=SGX&lat=$LAT&lon=$LON&TextType=1")
echo "$RAW" | sed 's/\(.*\)<\/b>\(.*\)
.*/\1\2/;s/.*<.*//g;/^$/d' | head -$1
Tuesday, December 21, 2010
Friday, October 15, 2010
x10 Rain8II sprinkler weather scripts for use with Heyu
I use Heyu-2.9.1 for X10 home automation running on a Sheevaplug. For irrigation, I purchased a Rain8II from WGL Designs some time ago. With the Rain8II you need an X10 ON, and OFF for each zone to control it, unlike the first Rain8 where you just needed to trigger the first zone and it would automatically go through it's watering cycle. The Rain8II is also 2-way X10. That means you can configure it to automatically send back a status message to confirm that is has received the command that an x10 device has sent it.
The Rain8II states in the manual that it can be controlled by an X10 Mini Timer schedule, which I've done. When you want to disable the schedule, due to rain for example, you simply slide the selector from 'Run' to 'Set Clock' and it disables the first 5 unit codes. In my case I am only using 5 sprinkler zones so this worked out perfect. If you want to disable all 8 zones on the Rain8II, you will need to change the house code on the Mini Timer to an unused house code.
I mostly use the CM11a and Heyu for my Rain8II timers. Only when my CM11a cable went bad, I used the Mini Timer until I replaced the cable. I simply created the proper macros and timers in the schedule file an uploaded them to the CM11a. Well since I have a LOT of x10 signals flying around my house, some of the x10 signals for the Rain8II were being missed. According to the Heyu man pages, the solution for this was to simply schedule it twice a minute apart. So I have two ON and two OFF timers for all five zones. This works great, but I still have to comment out the timers and re-upload the schedule file on unexpected rainy days I don't want to water, and remember to reverse that when I am ready to water according the regular schedule again. Also, since the Rain8II sends back confirmation messages to Heyu, I shouldn't need two entries per ON and OFF for each zone in the schedule file!
With Heyu-2.9.1, the module type RAIN8II was added, as well as the module option 'DEFER'. What DEFER does, is it makes Heyu wait until it receives back the Status message from the module before updating it's internal state tables. So now you can send the command 'heyu status backyard_grass' and it will give you a guaranteed result. I also recently learned that you can trigger heyu scripts in the x10.conf file with CM11a uploaded timers using the 'sndm' flag in your script. If you use Heyu, you should know what the transmission flags are.
All that being said, I wanted a way so that my sprinkler timers would work with only the CM11a in case my Sheevaplug is down for some reason. I also wanted to be able to supplement the CM11a timers with a little intelligence when the Sheevaplug and heyu were up and running, which they are most of the time.
The first goal here is to create a status checking script so that I can eliminate the two timer schedules per x10 signal per zone that I currently have uploaded to the CM11a. I only want one timer entry per signal!
The second goal is to create a rain checking script, so that sprinklers won't turn on if it is raining, or has rained in the last X number of days. It would be so cool if I could calculate evapo-transpiration in the script, but that is a pipe dream for now.
So far, I have a first draft of the weather script created and as of tonight it worked! (it is raining a bit at the moment).
I still need to create the status checking script. I will update this blog as I get to it.
I hope some of you shell scripting and heyu experts can offer corrections and advice!
It appears that pasting my code has messed it up a bit, need to figure that out...
The Rain8II states in the manual that it can be controlled by an X10 Mini Timer schedule, which I've done. When you want to disable the schedule, due to rain for example, you simply slide the selector from 'Run' to 'Set Clock' and it disables the first 5 unit codes. In my case I am only using 5 sprinkler zones so this worked out perfect. If you want to disable all 8 zones on the Rain8II, you will need to change the house code on the Mini Timer to an unused house code.
I mostly use the CM11a and Heyu for my Rain8II timers. Only when my CM11a cable went bad, I used the Mini Timer until I replaced the cable. I simply created the proper macros and timers in the schedule file an uploaded them to the CM11a. Well since I have a LOT of x10 signals flying around my house, some of the x10 signals for the Rain8II were being missed. According to the Heyu man pages, the solution for this was to simply schedule it twice a minute apart. So I have two ON and two OFF timers for all five zones. This works great, but I still have to comment out the timers and re-upload the schedule file on unexpected rainy days I don't want to water, and remember to reverse that when I am ready to water according the regular schedule again. Also, since the Rain8II sends back confirmation messages to Heyu, I shouldn't need two entries per ON and OFF for each zone in the schedule file!
With Heyu-2.9.1, the module type RAIN8II was added, as well as the module option 'DEFER'. What DEFER does, is it makes Heyu wait until it receives back the Status message from the module before updating it's internal state tables. So now you can send the command 'heyu status backyard_grass' and it will give you a guaranteed result. I also recently learned that you can trigger heyu scripts in the x10.conf file with CM11a uploaded timers using the 'sndm' flag in your script. If you use Heyu, you should know what the transmission flags are.
All that being said, I wanted a way so that my sprinkler timers would work with only the CM11a in case my Sheevaplug is down for some reason. I also wanted to be able to supplement the CM11a timers with a little intelligence when the Sheevaplug and heyu were up and running, which they are most of the time.
The first goal here is to create a status checking script so that I can eliminate the two timer schedules per x10 signal per zone that I currently have uploaded to the CM11a. I only want one timer entry per signal!
The second goal is to create a rain checking script, so that sprinklers won't turn on if it is raining, or has rained in the last X number of days. It would be so cool if I could calculate evapo-transpiration in the script, but that is a pipe dream for now.
So far, I have a first draft of the weather script created and as of tonight it worked! (it is raining a bit at the moment).
I still need to create the status checking script. I will update this blog as I get to it.
I hope some of you shell scripting and heyu experts can offer corrections and advice!
It appears that pasting my code has messed it up a bit, need to figure that out...
/etc/heyu/x10.conf:
alias driveway_grass I1 RAIN8II DEFER
alias walkway_grass I2 RAIN8II DEFER
alias front_planters I3 RAIN8II DEFER
alias backyard_grass I4 RAIN8II DEFER
alias sideyard_grass I5 RAIN8II DEFER
SCRIPT driveway_grass on sndm :: /usr/local/bin/chkrain.sh; if [ "$?" ]; then heyu off driveway_grass; fi
SCRIPT walkway_grass on sndm :: /usr/local/bin/chkrain.sh; if [ "$?" ]; then heyu off walkway_grass; fi
SCRIPT front_planters on sndm :: /usr/local/bin/chkrain.sh; if [ "$?" ]; then heyu off front_planters; fi
SCRIPT backyard_grass on sndm :: /usr/local/bin/chkrain.sh; if [ "$?" ]; then heyu off backyard_grass; fi
SCRIPT sideyard_grass on sndm :: /usr/local/bin/chkrain.sh; if [ "$?" ]; then heyu off sideyard_grass; fi
/etc/heyu/x10.sched:
macro driveway_grass_on 0 on driveway_grass
macro driveway_grass_off 0 off driveway_grass
macro walkway_grass_on 0 on walkway_grass
macro walkway_grass_off 0 off walkway_grass
macro front_planters_on 0 on front_planters
macro front_planters_off 0 off front_planters
macro backyard_grass_on 0 on backyard_grass
macro backyard_grass_off 0 off backyard_grass
macro sideyard_grass_on 0 on sideyard_grass
macro sideyard_grass_off 0 off sideyard_grass
timer s.t.tf. 01/01-12/31 21:30 21:40 driveway_grass_on driveway_grass_off
timer s.t.tf. 01/01-12/31 21:31 21:41 driveway_grass_on driveway_grass_off
timer s.t.tf. 01/01-12/31 21:42 21:52 walkway_grass_on walkway_grass_off
timer s.t.tf. 01/01-12/31 21:43 21:53 walkway_grass_on walkway_grass_off
timer s.t.tf. 01/01-12/31 21:54 22:04 front_planters_on front_planters_off
timer s.t.tf. 01/01-12/31 21:55 22:05 front_planters_on front_planters_off
timer s.t.tf. 01/01-12/31 22:06 22:16 backyard_grass_on backyard_grass_off
timer s.t.tf. 01/01-12/31 22:07 22:17 backyard_grass_on backyard_grass_off
timer s.t.tf. 01/01-12/31 22:18 22:23 sideyard_grass_on sideyard_grass_off
timer s.t.tf. 01/01-12/31 22:19 22:24 sideyard_grass_on sideyard_grass_off
/usr/local/bin/chkrain.sh:
#!/bin/bash
# This script will check for rain and
# return a 0 if no rain, and a 1 if
# it is raining.
STATIONID=KSNA
RAINPAD=2 # Day 0 is today.
RAINTHRESH="0.05"
# Get dates in various formats for use below.
DATE=`date +"%Y/%m/%d"`
CURPDT=`date +'%Y%m%d'`
# Available colums are:
# PDT,Max TemperatureF,Mean TemperatureF,Min TemperatureF,Max Dew PointF,MeanDew PointF,Min DewpointF,Max Humidity, Mean Humidity, Min Humidity, Max Sea Level PressureIn, Mean Sea Level PressureIn, Min Sea Level PressureIn, Max VisibilityMiles, Mean VisibilityMiles, Min VisibilityMiles, Max Wind SpeedMPH, Mean Wind SpeedMPH, Max Gust SpeedMPH,PrecipitationIn, CloudCover, Events
RESULT=`curl -s http://www.wunderground.com/history/airport/$STATIONID/$DATE/WeeklyHistory.html?format=1`
# Remove HTML
# Remove header line
# We only care about fields: PDT, Mean TemperatureF, PrecipitationIn, and Events
# Reverse output so today is first going back in time.
WEEKLY=`echo $RESULT | sed 's/
/\\n/g' | sed '/<.*>/d' | sed '/PDT/d' | cut -d, -f1,3,20,22 | sed -n '1!G;h;$p'`
# Remove decimal and convert RAINTHRESH to base10
RAINTHRESH=`echo $RAINTHRESH | sed 's/\.//g'`; RAINTHRESH=$((10#$RAINTHRESH))
echo "$WEEKLY" | while read RECORD
do
RECPDT=`echo $RECORD | cut -d, -f1 | sed 's/-//g'`
TEMP=`echo $RECORD | cut -d, -f2`
INCHES=`echo $RECORD | cut -d, -f3`
EVENT=`echo $RECORD | cut -d, -f4`
DATEDIFF=$(($CURPDT - $RECPDT))
if [ "$DATEDIFF" = "0" ] && [ "$EVENT" = "Rain" ]; then exit 1; fi
if [ "$INCHES" = "T" ] && [ "$EVENT" != "Rain" ]; then INCHES="0"; else INCHES=$((10#$INCHES)); fi
if [ "$DATEDIFF" -le "$RAINPAD" ] && [ "$EVENT" = "Rain" ] && [ "$INCHES" -ge "$RAINTHRESH" ]; then
exit 1
fi
done
Monday, September 27, 2010
Sheevaplug
Well I got a sheevaplug. I don't feel like writing now so I'll update this as I feel like it.
Reserved for sheevaplug
Reserved for sheevaplug
Monday, February 22, 2010
Linux Voice Recognition and Speech Home Automation
Here is a video I made for the Syno contest:
Please read more!!
I was able to successfully cross-compile and run Julius Voice Recognition Engine on my Synology DS209.
http://julius.sourceforge.jp/en_index.php
http://voxforge.org/home/downloads#QuickStart%20Anchor
I am working on trying to compile Festival w/ MBROLA engine in place of Flite for better TTS voices. I am also looking at Cepstral and AT&T Natural Voices.
http://www.cstr.ed.ac.uk/projects/festival/
http://tcts.fpms.ac.be/synthesis/mbrola.html
http://cepstral.com/
http://www.voiceforge.com/demo/
http://www2.research.att.com/~ttsweb/tts/demo.php
Another good program to look at would be DomotiGa + Gambas for linux HA.
http://www.domotiga.nl/
Please read more!!
I was able to successfully cross-compile and run Julius Voice Recognition Engine on my Synology DS209.
http://julius.sourceforge.jp/en_index.php
http://voxforge.org/home/downloads#QuickStart%20Anchor
I am working on trying to compile Festival w/ MBROLA engine in place of Flite for better TTS voices. I am also looking at Cepstral and AT&T Natural Voices.
http://www.cstr.ed.ac.uk/projects/festival/
http://tcts.fpms.ac.be/synthesis/mbrola.html
http://cepstral.com/
http://www.voiceforge.com/demo/
http://www2.research.att.com/~ttsweb/tts/demo.php
Another good program to look at would be DomotiGa + Gambas for linux HA.
http://www.domotiga.nl/
Flite TTS on a Synology NAS
I was able to successfully cross compile a text-to-speech engine called Flite which is very lightweight to run on my DS209j. This means you can use HEYU or Misterhouse to output speech upon an event.
http://www.speech.cs.cmu.edu/flite/
Here is my config file generated from running configure:
http://www.speech.cs.cmu.edu/flite/
Here is my config file generated from running configure:
root@xubuntu-vm:/usr/local/flite-1.3-release# cat config/config # -*- makefile -*- # # This file is automatically generated by configure. # Do not hand edit. TARGET_OS = linux-gnu TARGET_CPU = powerpc HOST_OS = linux-gnu HOST_CPU = powerpc CC = /usr/local/powerpc-linux/bin/powerpc-linux-gcc CFLAGS = -I/usr/local/powerpc-linux/include -Wall CPPFLAGS = DEFS = -DWORDS_BIGENDIAN=1 #DEFS = -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DWORDS_BIGENDIAN=1 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 # we don't use these anywhere SHFLAGS = AR = /usr/local/powerpc-linux/bin/powerpc-linux-ar RANLIB = /usr/local/powerpc-linux/bin/powerpc-linux-ranlib INSTALL = /usr/bin/install -c M68KCC = AUDIODRIVER = oss AUDIODEFS = -DCST_AUDIO_LINUX AUDIOLIBS = LEXDEFS = VOXDEFS = OTHERLIBS = MMAPTYPE = posix STDIOTYPE = stdio FL_LANG = usenglish FL_VOX = cmu_us_kal16 FL_LEX = cmulex prefix = /usr/local exec_prefix = ${prefix} EXEEXT = INSTALLBINDIR = ${exec_prefix}/bin INSTALLLIBDIR = ${exec_prefix}/lib INSTALLINCDIR = ${prefix}/include/flite
Misterhouse on Synology NAS
Misterhouse:
http://misterhouse.sourceforge.net/
I've confirmed that misterhouse does work with /dev/usb/ttyUSB0.
I recommend unzipping Misterhouse in /usr/local
http://misterhouse.sourceforge.net/
I've confirmed that misterhouse does work with /dev/usb/ttyUSB0.
I recommend unzipping Misterhouse in /usr/local
DiskStation> cd /usr/local DiskStation> gunzip < /volume1/Downloads/misterhouse-2.105.tar.gz | tar xvf -Make sure you run the configure which uses h2ph. h2ph is just a perl script, but you have to make sure you download the your systems GPL source from Synology and change one line in the Misterhouse configure script:
#cd /usr/include cd /usr/local/powerpc-linux/includeWhen you run the script it will remove all Windows files and will use the C header files to produce Perl header files ending in .ph Follow this: http://misterhouse.sourceforge.net/install.html#quick_install_instructions and this: http://misterhouse.sourceforge.net/install.html#unix_detailed_install_instructions In /usr/local/mh/bin create a file called mh.private.ini and add these basic entries:
sound_program= latitude=12.345678 longitude=-123.456789 time_zone=-8 city=YourCity zone=SomeMajorCityNearYou state=YourStateAbbreviation zip_code= 12345 dbi_user=mhuser dbi_password=SomePassword voice_text= cm11_port=/dev/ttyUSB0 tk=0Now when you start Misterhouse do something like this to run it in the background and have its output go to some logfile:
DiskStation> cd /usr/local/mh/bin DiskStation> ./mhl & > /var/log/mh.outNow you should be able to go to http://192.168.x.x:8080 and access Misterhouse. Please read the Misterhosue docs from here...
CM11a, Heyu, and domus.Link running on Synology NAS
I have an old HD11a which is just a re-branded CM11a, and I verified that it does work through the usb/serial converter I have.
Using optware ipkg (ipkg is a must!) I was able to install HEYU. They also have one called Ppower or Penguin Power, which I assume would also work:
domus.Link PHP frontend for HEYU
I wasn't too excited about cgi/perl scripts, but I found what I think is one of the only PHP front ends which runs perfectly on the Syno after slight tweaking of the php.ini file.
domus.Link
http://domus.link.co.pt/
I was even able to create a 3rd-Party applications node for it to run embedded in the web manager.
Using optware ipkg (ipkg is a must!) I was able to install HEYU. They also have one called Ppower or Penguin Power, which I assume would also work:
DiskStation> ipkg list | grep "home automation" heyu - 2.8.0-1 - X10 home automation control using the CM11A ppower - 0.1.5-1 - Ppower, short for 'Penguin Power', is a piece of software for controlling x10 home automation equipment connected to the comput
domus.Link PHP frontend for HEYU
I wasn't too excited about cgi/perl scripts, but I found what I think is one of the only PHP front ends which runs perfectly on the Syno after slight tweaking of the php.ini file.
domus.Link
http://domus.link.co.pt/
I was even able to create a 3rd-Party applications node for it to run embedded in the web manager.
DiskStation> pwd /usr/syno/synoman/webman/3rdparty DiskStation> ls -laR domusLink/ domusLink/: drwxr-xr-x 2 root root 4096 Dec 23 00:53 . drwxr-xr-x 3 root root 4096 Dec 23 00:33 .. -rw-r--r-- 1 root root 198 Dec 23 01:01 application.cfg lrwxrwxrwx 1 root root 44 Dec 23 00:53 images -> /volume1/web/domus.Link/theme/default/images DiskStation> cat application.cfg text_enu = domus.Link description_enu = domus.Link - Home Automation Interface type = embedded protocol = https port = 443 path = /domus.Link icon_16 = images/menu_home_on.png icon_32 = images/menu_home_on.png
Cross-Compiling Bottlerocket for CM17a Firecracker on Synology
Cross-Compiling Bottlerocket, which uses the Firecracker CM17a:
http://www.linuxha.com/bottlerocket/
Following the 3rd-party app integration guide; configure, make, make install. This puts it in your local machines /usr/local/bin. You then have to upload the program 'br' to your Synology in the same directory.
Set your cross-compiling environment variables to point to the toolchain you installed in /usr/local:
Run the configure that came with the code giving it a few extra parameters as specified in the guide:
Run make:
Run 'make install' which installs it in /usr/local/bin on your local machine:
Now copy the file /usr/local/bin/br to your synology in the same directory.
Once that is running, you issue commands as such:
http://www.linuxha.com/bottlerocket/
Following the 3rd-party app integration guide; configure, make, make install. This puts it in your local machines /usr/local/bin. You then have to upload the program 'br' to your Synology in the same directory.
Set your cross-compiling environment variables to point to the toolchain you installed in /usr/local:
root@xubuntu-vm:/usr/local/bottlerocket-0.04c# export CC=/usr/local/powerpc-linux/bin/powerpc-linux-gcc root@xubuntu-vm:/usr/local/bottlerocket-0.04c# export LD=/usr/local/powerpc-linux/bin/powerpc-linux-ld root@xubuntu-vm:/usr/local/bottlerocket-0.04c# export RANLIB=/usr/local/powerpc-linux/bin/powerpc-linux-ranlib root@xubuntu-vm:/usr/local/bottlerocket-0.04c# export CFLAGS="-I/usr/local/powerpc-linux/include" root@xubuntu-vm:/usr/local/bottlerocket-0.04c# export LDFLAGS="-L/usr/local/powerpc-linux/lib"
Run the configure that came with the code giving it a few extra parameters as specified in the guide:
root@xubuntu-vm:/usr/local/bottlerocket-0.04c# ./configure \ > --host=powerpc-unknown-linux \ > --target=powerpc-unknown-linux \ > --build=i686-pc-linux \ > --prefix=/usr/local creating cache ./config.cache checking for gcc... /usr/local/powerpc-linux/bin/powerpc-linux-gcc checking whether the C compiler (/usr/local/powerpc-linux/bin/powerpc-linux-gcc -I/usr/local/powerpc-linux/include -L/usr/local/powerpc-linux/lib) works... yes checking whether the C compiler (/usr/local/powerpc-linux/bin/powerpc-linux-gcc -I/usr/local/powerpc-linux/include -L/usr/local/powerpc-linux/lib) is a cross-compiler... yes checking whether we are using GNU C... yes checking whether /usr/local/powerpc-linux/bin/powerpc-linux-gcc accepts -g... yes checking how to run the C preprocessor... /usr/local/powerpc-linux/bin/powerpc-linux-gcc -E checking for a BSD compatible install... /usr/bin/install -c checking for features.h... yes checking for errno.h... yes checking for sys/termios.h... yes checking for termios.h... yes guessing x10 port using /dev/ttyS0 for x10 port updating cache ./config.cache creating ./config.status creating Makefile creating config.h
Run make:
root@xubuntu-vm:/usr/local/bottlerocket-0.04c# make /usr/local/powerpc-linux/bin/powerpc-linux-gcc -I/usr/local/powerpc-linux/include -I. -Wall -O2 -DX10_PORTNAME=\"/dev/ttyS0\" -DHAVE_CONFIG_H -c ./br_cmd.c /usr/local/powerpc-linux/bin/powerpc-linux-gcc -I/usr/local/powerpc-linux/include -I. -Wall -O2 -DX10_PORTNAME=\"/dev/ttyS0\" -DHAVE_CONFIG_H -c ./br.c /usr/local/powerpc-linux/bin/powerpc-linux-gcc -I/usr/local/powerpc-linux/include -I. -Wall -O2 -DX10_PORTNAME=\"/dev/ttyS0\" -DHAVE_CONFIG_H -o br br.o br_cmd.o
Run 'make install' which installs it in /usr/local/bin on your local machine:
root@xubuntu-vm:/usr/local/bottlerocket-0.04c# make install /usr/bin/install -c -d -m 755 /usr/local/bin /usr/bin/install -c -m 555 br /usr/local/bin
Now copy the file /usr/local/bin/br to your synology in the same directory.
Once that is running, you issue commands as such:
DiskStation> cd /usr/local/bin/ DiskStation> ./br BottleRocket version 0.04c Usage: ./br [][ ( )
...] Options: -v, --verbose add v's to increase verbosity -x, --port=PORT set port to use -c, --house=[A-P] use alternate house code (default "A") -n, --on=LIST turn on devices in LIST -f, --off=LIST turn off devices in LIST -N, --ON turn on all devices in housecode -F, --OFF turn off all devices in housecode -d, --dim=LEVEL[,LIST] dim devices in housecode to relative LEVEL -B, --lamps_on turn all lamps in housecode on -D, --lamps_off turn all lamps in housecode off -r, --repeat=NUM repeat commands NUM times (0 = ~ forever) -h, --help this help is a comma separated list of devices (no spaces), each ranging from 1 to 16
is an integer from -12 to 12 (0 means no change) is a letter between A and P is one of ON, OFF, DIM, BRIGHT, ALL_ON, ALL_OFF, LAMPS_ON or LAMPS_OFF For native commands, should only be specified for ON or OFF. DiskStation> ./br -x /dev/ttyUSB0 -v M3 OFF ./br: Turning off appliance M3 DiskStation> ./br -x /dev/ttyUSB0 -v M3 ON ./br: Turning on appliance M3 DiskStation> ./br -x /dev/ttyUSB0 -v M3 OFF ./br: Turning off appliance M3 DiskStation> ./br -x /dev/ttyUSB0 -v C1 ON ./br: Turning on appliance C1 DiskStation> ./br -x /dev/ttyUSB0 -v C1 OFF ./br: Turning off appliance C1 DiskStation> ./br -x /dev/ttyUSB0 -v C1 ON ./br: Turning on appliance C1 DiskStation> ./br -x /dev/ttyUSB0 -v C3 ON ./br: Turning on appliance C3 DiskStation> ./br -x /dev/ttyUSB0 -v C3 OFF ./br: Turning off appliance C3 DiskStation> ./br -x /dev/ttyUSB0 -v C3 ON ./br: Turning on appliance C3 DiskStation> ./br -x /dev/ttyUSB0 -v C1 OFF ./br: Turning off appliance C1 DiskStation> ./br -x /dev/ttyUSB0 -v C3 OFF ./br: Turning off appliance C3 DiskStation> ./br -x /dev/ttyUSB0 -v C LAMPS_ON DiskStation> ./br -x /dev/ttyUSB0 -v C LAMPS_OFF DiskStation> ./br -x /dev/ttyUSB0 -v C1 ON ./br: Turning on appliance C1 DiskStation> ./br -x /dev/ttyUSB0 -v -d25 C1 ./br: For dimming either specify just a dim level or a comma separated list containing the dim level and the devices to dim. ./br: Valid dimlevels are numbers between -12 and 12. DiskStation> ./br -x /dev/ttyUSB0 -v -d6 C1 BottleRocket version 0.04c Usage: ./br [
][ ( )
...] Options: -v, --verbose add v's to increase verbosity -x, --port=PORT set port to use -c, --house=[A-P] use alternate house code (default "A") -n, --on=LIST turn on devices in LIST -f, --off=LIST turn off devices in LIST -N, --ON turn on all devices in housecode -F, --OFF turn off all devices in housecode -d, --dim=LEVEL[,LIST] dim devices in housecode to relative LEVEL -B, --lamps_on turn all lamps in housecode on -D, --lamps_off turn all lamps in housecode off -r, --repeat=NUM repeat commands NUM times (0 = ~ forever) -h, --help this help is a comma separated list of devices (no spaces), each ranging from 1 to 16
is an integer from -12 to 12 (0 means no change) is a letter between A and P is one of ON, OFF, DIM, BRIGHT, ALL_ON, ALL_OFF, LAMPS_ON or LAMPS_OFF For native commands, should only be specified for ON or OFF. DiskStation> ./br -x /dev/ttyUSB0 -v -cC -d6,1 ./br: Brightening lamp C1 by 6. DiskStation> ./br -x /dev/ttyUSB0 -v -cC -d-6,1 ./br: Dimming lamp C1 by 6. DiskStation> ./br -x /dev/ttyUSB0 -v -cC -d6,3 ./br: Brightening lamp C3 by 6. DiskStation> ./br -x /dev/ttyUSB0 -v -cC -d-3,3 ./br: Dimming lamp C3 by 3. DiskStation> ./br -x /dev/ttyUSB0 -v -cC -d-3,3 ./br: Dimming lamp C3 by 3. DiskStation> ./br -x /dev/ttyUSB0 -v -cC -d-3,2 ./br: Dimming lamp C2 by 3. DiskStation> ./br -x /dev/ttyUSB0 -v -cC -d3,2 ./br: Brightening lamp C2 by 3. DiskStation> ./br -x /dev/ttyUSB0 -v C LAMPS_OFF
Home Automation on Synology NAS
I am the proud owner of a Synology DS209j NAS. This NAS has firmware that allows much more than just storage. While I only wanted one computer on 2/47 in the house. I also wanted a home automation server. Unfortunately, the Synology NAS devices weren't intended to be home automation servers. Therefore, a lot of modification has been required to get it to act as a home automation server. These next few posts have been up in the Synology forum for a while now, but I wanted to add my work to my own blog so please click 'read more' to expand this post...
http://forum.synology.com/enu/viewtopic.php?f=27&t=19788#p81040
I have a Synology DS209j, and I'll always run the latest firmware.
I've installed Xubuntu 9.04 in a virtual machine on my mac.
Following this page:
http://www.synology.com/us/support/3rd-party_application_integration.php
There is a document:
http://download.synology.com/download/ds/userguide/Synology%20NAS%20Server%203rd-Party%20Apps%20Integration%20Guide.pdf
Following the document I've downloaded the latest toolchain from Synology as well as the latest GPL source:
http://www.synology.com/us/gpl/index.php
As far as usb to serial hardware goes, I am using this product from Parallax as it give you proper RS232 levels and is very affordable:
http://www.parallax.com/tabid/768/ProductID/378/Default.aspx
From that page I followed the link to the external FTDI drivers for linux.
I renamed the ftdi_sio header and c file to.orig and placed these new files in their location in the synology source. From their I followed the document and made the modules.
Now i've got usbserial.ko and ftdi_sio.ko somewhere on my DS209j
Now you have to load the modules into the kernel and create the devices:
Also, add some lines like these to /etc/rc.local to make it persistent over reboot:
run the command 'dmesg' and you should see something like this:
The X-10 device I got working for now is known as the Firecracker CM17a, and the HD11A/CM11A 2-way computer interface
http://forum.synology.com/enu/viewtopic.php?f=27&t=19788#p81040
I have a Synology DS209j, and I'll always run the latest firmware.
I've installed Xubuntu 9.04 in a virtual machine on my mac.
Following this page:
http://www.synology.com/us/support/3rd-party_application_integration.php
There is a document:
http://download.synology.com/download/ds/userguide/Synology%20NAS%20Server%203rd-Party%20Apps%20Integration%20Guide.pdf
Following the document I've downloaded the latest toolchain from Synology as well as the latest GPL source:
http://www.synology.com/us/gpl/index.php
As far as usb to serial hardware goes, I am using this product from Parallax as it give you proper RS232 levels and is very affordable:
http://www.parallax.com/tabid/768/ProductID/378/Default.aspx
From that page I followed the link to the external FTDI drivers for linux.
I renamed the ftdi_sio header and c file to
Now i've got usbserial.ko and ftdi_sio.ko somewhere on my DS209j
Now you have to load the modules into the kernel and create the devices:
insmod usbserial.ko insmod ftdi.ko mknod /dev/usb/ttyUSB0 c 188 0 mknod /dev/usb/ttyUSB1 c 188 1
Also, add some lines like these to /etc/rc.local to make it persistent over reboot:
insmod /volume1/archive/usbserial.ko insmod /volume1/archive/ftdi_sio.ko mknod /dev/usb/ttyUSB0 c 188 0 mknod /dev/usb/ttyUSB1 c 188 1
run the command 'dmesg' and you should see something like this:
usb 1-2.1: new full speed USB device using ehci_hcd and address 15 usb 1-2.1: configuration #1 chosen from 1 choice ftdi_sio 1-2.1:1.0: FTDI USB Serial Device converter detected drivers/usb/serial/ftdi_sio.c: Detected FT232RL drivers/usb/serial/ftdi_sio.c: Number of endpoints 2 drivers/usb/serial/ftdi_sio.c: Endpoint 1 MaxPacketSize 16384 drivers/usb/serial/ftdi_sio.c: Endpoint 2 MaxPacketSize 16384 drivers/usb/serial/ftdi_sio.c: Setting MaxPacketSize 16384 usb 1-2.1: FTDI USB Serial Device converter now attached to ttyUSB0
The X-10 device I got working for now is known as the Firecracker CM17a, and the HD11A/CM11A 2-way computer interface
Subscribe to:
Posts (Atom)