<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.linuxmce.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jspeckman</id>
	<title>LinuxMCE - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.linuxmce.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jspeckman"/>
	<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php/Special:Contributions/Jspeckman"/>
	<updated>2026-05-11T03:45:23Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=15089</id>
		<title>NOAA Weather</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=15089"/>
		<updated>2008-07-27T16:06:02Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This device retrieves weather data from weather.gov.  Using an ICAO identifier for a nearby airport, the weather data should be fairly accurate for your area.  Not quite as good or up to date as a weather station in your back yard, it does a decent job.  Keep in mind the data is only updated once per hour at 15 past.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to setup the NOAA Weather GSD&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Template=&lt;br /&gt;
* Description - NOAA Weather&lt;br /&gt;
* Implements DCE&lt;br /&gt;
* Device Category - Environment Climate Device #83&lt;br /&gt;
* Comm Method - Ethernet&lt;br /&gt;
* Commands - Ruby internal commands&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=GSD Code=&lt;br /&gt;
* New Climate Commands (These are added under Advanced-&amp;gt;DCE-&amp;gt;Commands)&lt;br /&gt;
* #923 Get Humidity&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
get_weather_data_request(&amp;quot;Humidity&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* #921 Get Temperature&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
get_weather_data_request(&amp;quot;Temperature&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* #922 Get Weather&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
get_weather_data_request(&amp;quot;Weather&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* #395 Check for updates&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #396 Check for updates done&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather_done()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #373 Private Method Listing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Logging function&lt;br /&gt;
def log(word)&lt;br /&gt;
  $logFile.print( Time.now.to_s + &amp;quot; &amp;quot; + word + &amp;quot;\n&amp;quot; )&lt;br /&gt;
  $logFile.flush()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Weather check function&lt;br /&gt;
def check_weather()&lt;br /&gt;
  log(&amp;quot;Backing up previous data&amp;quot;)&lt;br /&gt;
  oldweather = $weather&lt;br /&gt;
  oldtemp = $temp&lt;br /&gt;
  oldpressure = $pressure&lt;br /&gt;
  olddew_point = $dew_point&lt;br /&gt;
  oldheat_index = $heat_index&lt;br /&gt;
  oldwindchill = $windchill&lt;br /&gt;
  oldhumidity = $humidity&lt;br /&gt;
  oldwind = $wind&lt;br /&gt;
  oldvisibility = $visibility&lt;br /&gt;
&lt;br /&gt;
  log(&amp;quot;Checking for weather updates&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Get xml file from NOAA&lt;br /&gt;
# xmlPath = &amp;quot;www.weather.gov/xml/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
# h = &amp;quot;GET &amp;quot;+xmlPath+&amp;quot; HTTP/1.0\r\n&amp;quot;&lt;br /&gt;
# log(&amp;quot;HTTP Request: #{h}&amp;quot;)&lt;br /&gt;
# conn_.Send(h)&lt;br /&gt;
# resv = &amp;quot;&amp;quot;&lt;br /&gt;
# while(true)&lt;br /&gt;
# buff = conn_.Recv(16384, 5000)&lt;br /&gt;
# if buff.length() == 0&lt;br /&gt;
# break&lt;br /&gt;
# end&lt;br /&gt;
# recv = recv + buff&lt;br /&gt;
# end&lt;br /&gt;
  h = Net::HTTP.new(&#039;www.weather.gov&#039;, 80)&lt;br /&gt;
  data_loc = &amp;quot;/xml/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
  resp, data = h.get(data_loc, nil)&lt;br /&gt;
&lt;br /&gt;
  if resp.message == &amp;quot;OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# if recv =~ /^HTTP[^\r\n]+200\sOK.+?\r\n\r\n(.+)$/m&lt;br /&gt;
# data = $1&lt;br /&gt;
# log(&amp;quot;Recieved:\n#{data}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    data.each_line {|line|&lt;br /&gt;
      if line =~/location&amp;gt;(.*)&amp;lt;\/location&amp;gt;/&lt;br /&gt;
        $location = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/observation_time_rfc822&amp;gt;(.*)&amp;lt;\/observation_time_rfc822&amp;gt;/&lt;br /&gt;
        $obs_time = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/weather&amp;gt;(.*)&amp;lt;\/weather&amp;gt;/&lt;br /&gt;
        $weather = $1&lt;br /&gt;
      end&lt;br /&gt;
      if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
        if line =~/temp_f&amp;gt;(.*)&amp;lt;\/temp_f&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_in&amp;gt;(.*)&amp;lt;\/pressure_in&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_f&amp;gt;(.*)&amp;lt;\/dewpoint_f&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_f&amp;gt;(.*)&amp;lt;\/heat_index_f&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_f&amp;gt;(.*)&amp;lt;\/windchill_f&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      else&lt;br /&gt;
        if line =~/temp_c&amp;gt;(.*)&amp;lt;\/temp_c&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_mb&amp;gt;(.*)&amp;lt;\/pressure_mb&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_c&amp;gt;(.*)&amp;lt;\/dewpoint_c&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_c&amp;gt;(.*)&amp;lt;\/heat_index_c&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_c&amp;gt;(.*)&amp;lt;\/windchill_c&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/relative_humidity&amp;gt;(.*)&amp;lt;\/relative_humidity&amp;gt;/&lt;br /&gt;
        $humidity = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/wind_string&amp;gt;(.*)&amp;lt;\/wind_string&amp;gt;/&lt;br /&gt;
        $wind = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/visibility_mi&amp;gt;(.*)&amp;lt;\/visibility_mi&amp;gt;/&lt;br /&gt;
        $visibility = $1&lt;br /&gt;
      end&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
### Send out events for weather changes&lt;br /&gt;
  if $weather != oldweather&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 75 13 \&amp;quot;&amp;quot;+$weather+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if $temp != oldtemp&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 25 13 \&amp;quot;&amp;quot;+$temp+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if $humidity != oldhumidity&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 26 13 \&amp;quot;&amp;quot;+$humidity+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  check_weather_done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Post weather check&lt;br /&gt;
def check_weather_done()&lt;br /&gt;
  log(&amp;quot;Weather data from: &amp;quot;+$obs_time)&lt;br /&gt;
  log(&amp;quot;Weather check complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Requests for weather data&lt;br /&gt;
def get_weather_data_request(request)&lt;br /&gt;
  case request&lt;br /&gt;
    when &amp;quot;Temperature&amp;quot;&lt;br /&gt;
      log(&#039;Recieved: Get Temperature request&#039;)&lt;br /&gt;
      ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 76 13 \&amp;quot;&amp;quot;+$temp+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
      system(ms)&lt;br /&gt;
      log(&amp;quot;Sent: #{ms}&amp;quot;)&lt;br /&gt;
    when &amp;quot;Weather&amp;quot;&lt;br /&gt;
      log(&#039;Recieved: Get Weather request&#039;)&lt;br /&gt;
      ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 77 13 \&amp;quot;&amp;quot;+$weather+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
      system(ms)&lt;br /&gt;
      log(&amp;quot;Sent: #{ms}&amp;quot;)&lt;br /&gt;
    when &amp;quot;Humidity&amp;quot;&lt;br /&gt;
      log(&#039;Recieved: Get Humidity request&#039;)&lt;br /&gt;
      ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 78 13 \&amp;quot;&amp;quot;+$humidity+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
      system(ms)&lt;br /&gt;
      log(&amp;quot;Sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
* #351 Process IDLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Auto check weather every quarter past the hour per NOAA&lt;br /&gt;
t = Time.now&lt;br /&gt;
&lt;br /&gt;
if t.min == 15&lt;br /&gt;
  t -= (60 * 60)&lt;br /&gt;
&lt;br /&gt;
  if $obs_time =~/(\d\d):\d\d:\d\d/&lt;br /&gt;
    obs_hour = $1&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if t.hour != obs_hour.to_i&lt;br /&gt;
    log(&amp;quot;Quarter past the hour and weather update needed&amp;quot;)&lt;br /&gt;
    check_weather()&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #355 Process Initialize&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# NOAA Weather check&lt;br /&gt;
# 2008 Jason Speckman&lt;br /&gt;
###&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
# Init Vars&lt;br /&gt;
&lt;br /&gt;
$logFile = File.new(&amp;quot;/var/log/pluto/NOAA_Weather.log&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Change these values to match device data values&lt;br /&gt;
$DEVICEDATA_ICAO_CONST = 249&lt;br /&gt;
$DEVICEDATA_UNITS_CONST = 250&lt;br /&gt;
&lt;br /&gt;
$units = &amp;quot;&amp;quot;&lt;br /&gt;
$identifier = &amp;quot;&amp;quot;&lt;br /&gt;
$location = &amp;quot;&amp;quot;&lt;br /&gt;
$obs_time = &amp;quot;&amp;quot;&lt;br /&gt;
$weather = &amp;quot;&amp;quot;&lt;br /&gt;
$temp = &amp;quot;&amp;quot;&lt;br /&gt;
$pressure = &amp;quot;&amp;quot;&lt;br /&gt;
$dew_point = &amp;quot;&amp;quot;&lt;br /&gt;
$heat_index = &amp;quot;&amp;quot;&lt;br /&gt;
$windchill = &amp;quot;&amp;quot;&lt;br /&gt;
$humidity = &amp;quot;&amp;quot;&lt;br /&gt;
$wind = &amp;quot;&amp;quot;&lt;br /&gt;
$visibility = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
### Check for identifier and units&lt;br /&gt;
if device_.devdata_ != nil&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_ICAO_CONST] != nil&lt;br /&gt;
    $identifier = device_.devdata_[$DEVICEDATA_ICAO_CONST]&lt;br /&gt;
    log(&amp;quot;ICAO identifier: &amp;quot;+$identifier)&lt;br /&gt;
  else&lt;br /&gt;
    log(&amp;quot;No ICAO identifier specified&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_UNITS_CONST] != nil&lt;br /&gt;
    $units = device_.devdata_[$DEVICEDATA_UNITS_CONST]&lt;br /&gt;
  else&lt;br /&gt;
    $units = &amp;quot;F&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Units in degrees &amp;quot;+$units)&lt;br /&gt;
&lt;br /&gt;
if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
  $press_units = &amp;quot;in. Hg&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  $press_units = &amp;quot;hPa&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### Tell DCE we are a climate device&lt;br /&gt;
log(&amp;quot;Starting NOAA Weather Check&amp;quot;)&lt;br /&gt;
log(&amp;quot;Setup message intercept for DCERouter&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
###&lt;br /&gt;
# devIDfrom: device_.devid_ = my device id&lt;br /&gt;
# devIDto: -1000 = dcerouter&lt;br /&gt;
# priority: &lt;br /&gt;
# type: 1 = command, 2 = event&lt;br /&gt;
# id: &lt;br /&gt;
&lt;br /&gt;
$devIDfrom = device_.devid_&lt;br /&gt;
devIDto = -1000&lt;br /&gt;
priority = &amp;quot;&amp;quot;&lt;br /&gt;
type = 2&lt;br /&gt;
id = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cmd = Command.new(devIDfrom, devIDto, priority, type, id)&lt;br /&gt;
#cmd.params_[x] = y&lt;br /&gt;
#SendCommand(cmd)&lt;br /&gt;
&lt;br /&gt;
#ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot; + device_.devid_.to_s + &amp;quot; -1000 8 0 5 2 4 10&amp;quot;&lt;br /&gt;
#system(ms)&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Init complete&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Initial weather check&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #356 Process Release&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logFile != nil) then&lt;br /&gt;
	$logFile.close&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Data=&lt;br /&gt;
(These variable numbers may be different, be sure to update them in the ruby code)&lt;br /&gt;
* #249 ICAO Location Indicator(string) - Comment: Local airport identifier for weather info - (Required and Allowed to modify checked)&lt;br /&gt;
* #250 Units(string) - Comment: Degree units.  Either (F) or (C) - (Required and Allowed to modify checked)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Commands device responds to=&lt;br /&gt;
* Get Humidity #923&lt;br /&gt;
* Get Temperature #921&lt;br /&gt;
* Get Weather #922&lt;br /&gt;
&lt;br /&gt;
=Events Sent by Device=&lt;br /&gt;
* Temperature Changed #25 - Temperature has changed since last update&lt;br /&gt;
* Weather Changed #75 - Weather has changed since last update&lt;br /&gt;
* Humidity Changed #26 - Humidity has changed since last update&lt;br /&gt;
&lt;br /&gt;
=New climate events=&lt;br /&gt;
(Need to be added, I had to put them directly into the db since the admin interface would not)&lt;br /&gt;
* Get Temperature Response #76 - Response for Get Temperature command&lt;br /&gt;
* Get Weather Response #77 - Response for Get Weather command&lt;br /&gt;
* Get Humidity Response #78 - Response for Get Humidity command&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Issues and TODO=&lt;br /&gt;
* 2008-07-06 Testing new features.&lt;br /&gt;
* 2008-07-26 Updated code with new features&lt;br /&gt;
* Fixed weather.gov xml url&lt;br /&gt;
* Does not respond to events (Added)&lt;br /&gt;
* Only send weather info when there is a change from the previous weather check (Done)&lt;br /&gt;
* Only sends weather conditions and temperature changes (Added humidity)&lt;br /&gt;
* No way to ask for weather data from the device (Done)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category: tutorials]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=15071</id>
		<title>Upgrading SlimServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=15071"/>
		<updated>2008-07-25T22:47:00Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE (0704) to a newer version of Squeezecenter.&lt;br /&gt;
&lt;br /&gt;
=Upgrade SlimServer=&lt;br /&gt;
* Download the version of [http://www.slimdevices.com/pi_features.html SqueezeCenter] you want to run to the core.&lt;br /&gt;
* cd to /usr/pluto/servers&lt;br /&gt;
* Backup the existing SlimServer directory.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv SlimServer SlimServer.lmce&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Move the downloaded file to /usr/pluto/servers and unarchive it.&lt;br /&gt;
* Make a soft link to the new directory.  This step just makes upgrades or downgrades go a little faster.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -s squeezecenter-some-version SlimServer  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add a user slimserver and a group slimserver  This is the default that Squeezecenter runs as&lt;br /&gt;
* Change the ownership of squeezecenter&#039;s directory to that of slimserver.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R slimserver:slimserver squeezecenter-some-version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you should be able to restart the dcerouter.  This should start the new version of squeezecenter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Configure SqueezeCenter=&lt;br /&gt;
Squeezecenter needs a little configuration before it will work with LMCE&lt;br /&gt;
* In a web browser, goto http://dcerouter:9000  This should bring up the SqueezeCenter Setup Assistant.&lt;br /&gt;
* Click on next in the lower right hand corner.&lt;br /&gt;
* If you have a squeezenetwork account, enter the login on the SqueezeNetwork Account setup screen.&lt;br /&gt;
* Click on next in the lower right hand corner.&lt;br /&gt;
* On the Music Source screen use local music should be checked.&lt;br /&gt;
* Click on next in the lower right hand corner.&lt;br /&gt;
* On the Local Music Folder screen, browse to &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/public/data/audio&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Click on next in the lower right hand corner.&lt;br /&gt;
* On the Playlist Folder page, I use&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/public/data/playlists&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is only for SqueezeCenter playlists, not LinuxMCE playlists&lt;br /&gt;
* Click on next in the lower right hand corner.&lt;br /&gt;
* If everything looks good, click Finish&lt;br /&gt;
* Next click on Settings in the lower right hand corner.&lt;br /&gt;
* Select Plugins from the menu at the top&lt;br /&gt;
* Select Command Line Interface (CLI)&lt;br /&gt;
* Set the port to 7890&lt;br /&gt;
* Click Apply in the lower right corner&lt;br /&gt;
* At this point wait for SqueezeCenter to scan the music library&lt;br /&gt;
* Restart the dcerouter from either the admin web site or the console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category: tutorials]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14773</id>
		<title>NOAA Weather</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14773"/>
		<updated>2008-07-09T00:24:43Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This device retrieves weather data from weather.gov.  Using an ICAO identifier for a nearby airport, the weather data should be fairly accurate for your area.  Not quite as good or up to date as a weather station in your back yard, it does a decent job.  Keep in mind the data is only updated once per hour at 15 past.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;How to setup the NOAA Weather GSD&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Template=&lt;br /&gt;
* Description - NOAA Weather&lt;br /&gt;
* Implements DCE&lt;br /&gt;
* Device Category - Environment Climate Device #83&lt;br /&gt;
* Comm Method - Ethernet&lt;br /&gt;
* Commands - Ruby internal commands&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=GSD Code=&lt;br /&gt;
* #395 Check for updates&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #396 Check for updates done&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather_done()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #373 Private Method Listing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Logging function&lt;br /&gt;
def log(word)&lt;br /&gt;
  $logFile.print( word + &amp;quot;\n&amp;quot; )&lt;br /&gt;
  $logFile.flush()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Weather check function&lt;br /&gt;
def check_weather()&lt;br /&gt;
  log(&amp;quot;Backing up previous data&amp;quot;)&lt;br /&gt;
  oldweather = $weather&lt;br /&gt;
  oldtemp = $temp&lt;br /&gt;
  oldpressure = $pressure&lt;br /&gt;
  olddew_point = $dew_point&lt;br /&gt;
  oldheat_index = $heat_index&lt;br /&gt;
  oldwindchill = $windchill&lt;br /&gt;
  oldhumidity = $humidity&lt;br /&gt;
  oldwind = $wind&lt;br /&gt;
  oldvisibility = $visibility&lt;br /&gt;
&lt;br /&gt;
  log(&amp;quot;Checking for weather updates&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Get xml file from NOAA&lt;br /&gt;
#  xmlPath = &amp;quot;www.weather.gov/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
#  h = &amp;quot;GET &amp;quot;+xmlPath+&amp;quot; HTTP/1.0\r\n&amp;quot;&lt;br /&gt;
#  log(&amp;quot;HTTP Request: #{h}&amp;quot;)&lt;br /&gt;
#  conn_.Send(h)&lt;br /&gt;
#  resv = &amp;quot;&amp;quot;&lt;br /&gt;
#  while(true)&lt;br /&gt;
#    buff = conn_.Recv(16384, 5000)&lt;br /&gt;
#    if buff.length() == 0&lt;br /&gt;
#      break&lt;br /&gt;
#    end&lt;br /&gt;
#    recv = recv + buff&lt;br /&gt;
#  end&lt;br /&gt;
  h = Net::HTTP.new(&#039;www.weather.gov&#039;, 80)&lt;br /&gt;
  data_loc = &amp;quot;/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
  resp, data = h.get(data_loc, nil)&lt;br /&gt;
&lt;br /&gt;
  if resp.message == &amp;quot;OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#  if recv =~ /^HTTP[^\r\n]+200\sOK.+?\r\n\r\n(.+)$/m&lt;br /&gt;
#    data = $1&lt;br /&gt;
#    log(&amp;quot;Recieved:\n#{data}&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
    data.each_line {|line|&lt;br /&gt;
      if line =~/location&amp;gt;(.*)&amp;lt;\/location&amp;gt;/&lt;br /&gt;
        $location = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/observation_time_rfc822&amp;gt;(.*)&amp;lt;\/observation_time_rfc822&amp;gt;/&lt;br /&gt;
        $obs_time = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/weather&amp;gt;(.*)&amp;lt;\/weather&amp;gt;/&lt;br /&gt;
        $weather = $1&lt;br /&gt;
      end&lt;br /&gt;
      if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
        if line =~/temp_f&amp;gt;(.*)&amp;lt;\/temp_f&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_in&amp;gt;(.*)&amp;lt;\/pressure_in&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_f&amp;gt;(.*)&amp;lt;\/dewpoint_f&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_f&amp;gt;(.*)&amp;lt;\/heat_index_f&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_f&amp;gt;(.*)&amp;lt;\/windchill_f&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      else&lt;br /&gt;
        if line =~/temp_c&amp;gt;(.*)&amp;lt;\/temp_c&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_mb&amp;gt;(.*)&amp;lt;\/pressure_mb&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_c&amp;gt;(.*)&amp;lt;\/dewpoint_c&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_c&amp;gt;(.*)&amp;lt;\/heat_index_c&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_c&amp;gt;(.*)&amp;lt;\/windchill_c&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/relative_humidity&amp;gt;(.*)&amp;lt;\/relative_humidity&amp;gt;/&lt;br /&gt;
        $humidity = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/wind_string&amp;gt;(.*)&amp;lt;\/wind_string&amp;gt;/&lt;br /&gt;
        $wind = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/visibility_mi&amp;gt;(.*)&amp;lt;\/visibility_mi&amp;gt;/&lt;br /&gt;
        $visibility = $1&lt;br /&gt;
      end&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
### Send out events for weather changes&lt;br /&gt;
  if $weather != oldweather&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 75 13 \&amp;quot;&amp;quot;+$weather+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if $temp != oldtemp&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 25 13 \&amp;quot;&amp;quot;+$temp+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  check_weather_done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Post weather check&lt;br /&gt;
def check_weather_done()&lt;br /&gt;
  log(&amp;quot;Weather data from: &amp;quot;+$obs_time)&lt;br /&gt;
  log(&amp;quot;Weather check complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #351 Process IDLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Auto check weather every quarter past the hour per NOAA&lt;br /&gt;
t = Time.now&lt;br /&gt;
&lt;br /&gt;
if t.min == 15&lt;br /&gt;
  t -= (60 * 60)&lt;br /&gt;
&lt;br /&gt;
  if $obs_time =~/(\d\d):\d\d:\d\d/&lt;br /&gt;
    obs_hour = $1&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if t.hour != obs_hour.to_i&lt;br /&gt;
    log(&amp;quot;Quarter past the hour and weather update needed&amp;quot;)&lt;br /&gt;
    check_weather()&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #355 Process Initialize&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# NOAA Weather check&lt;br /&gt;
# 2008 Jason Speckman&lt;br /&gt;
###&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
# Init Vars&lt;br /&gt;
&lt;br /&gt;
$logFile = File.new(&amp;quot;/var/log/pluto/NOAA_Weather.log&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Change these values to match device data values&lt;br /&gt;
$DEVICEDATA_ICAO_CONST = 249&lt;br /&gt;
$DEVICEDATA_UNITS_CONST = 250&lt;br /&gt;
&lt;br /&gt;
$units = &amp;quot;&amp;quot;&lt;br /&gt;
$identifier = &amp;quot;&amp;quot;&lt;br /&gt;
$location = &amp;quot;&amp;quot;&lt;br /&gt;
$obs_time = &amp;quot;&amp;quot;&lt;br /&gt;
$weather = &amp;quot;&amp;quot;&lt;br /&gt;
$temp = &amp;quot;&amp;quot;&lt;br /&gt;
$pressure = &amp;quot;&amp;quot;&lt;br /&gt;
$dew_point = &amp;quot;&amp;quot;&lt;br /&gt;
$heat_index = &amp;quot;&amp;quot;&lt;br /&gt;
$windchill = &amp;quot;&amp;quot;&lt;br /&gt;
$humidity = &amp;quot;&amp;quot;&lt;br /&gt;
$wind = &amp;quot;&amp;quot;&lt;br /&gt;
$visibility = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
### Check for identifier and units&lt;br /&gt;
if device_.devdata_ != nil&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_ICAO_CONST] != nil&lt;br /&gt;
    $identifier = device_.devdata_[$DEVICEDATA_ICAO_CONST]&lt;br /&gt;
    log(&amp;quot;ICAO identifier: &amp;quot;+$identifier)&lt;br /&gt;
  else&lt;br /&gt;
    log(&amp;quot;No ICAO identifier specified&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_UNITS_CONST] != nil&lt;br /&gt;
    $units = device_.devdata_[$DEVICEDATA_UNITS_CONST]&lt;br /&gt;
  else&lt;br /&gt;
    $units = &amp;quot;F&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Units in degrees &amp;quot;+$units)&lt;br /&gt;
&lt;br /&gt;
if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
  $press_units = &amp;quot;in. Hg&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  $press_units = &amp;quot;hPa&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### Tell DCE we are a climate device&lt;br /&gt;
log(&amp;quot;Starting NOAA Weather Check&amp;quot;)&lt;br /&gt;
log(&amp;quot;Setup message intercept for DCERouter&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
###&lt;br /&gt;
# devIDfrom: device_.devid_ = my device id&lt;br /&gt;
# devIDto: -1000 = dcerouter&lt;br /&gt;
# priority: &lt;br /&gt;
# type: 1 = command, 2 = event&lt;br /&gt;
# id: &lt;br /&gt;
&lt;br /&gt;
$devIDfrom = device_.devid_&lt;br /&gt;
devIDto = -1000&lt;br /&gt;
priority = &amp;quot;&amp;quot;&lt;br /&gt;
type = 2&lt;br /&gt;
id = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cmd = Command.new(devIDfrom, devIDto, priority, type, id)&lt;br /&gt;
#cmd.params_[x] = y&lt;br /&gt;
#SendCommand(cmd)&lt;br /&gt;
&lt;br /&gt;
#ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot; + device_.devid_.to_s + &amp;quot; -1000 8 0 5 2 4 10&amp;quot;&lt;br /&gt;
#system(ms)&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Init complete&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Initial weather check&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #356 Process Release&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logFile != nil) then&lt;br /&gt;
	$logFile.close&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Data=&lt;br /&gt;
(These variable numbers may be different, be sure to update them in the ruby code)&lt;br /&gt;
* #249 ICAO Location Indicator(string) - Comment: Local airport identifier for weather info - (Required and Allowed to modify checked)&lt;br /&gt;
* #250 Units(string) - Comment: Degree units.  Either (F) or (C) - (Required and Allowed to modify checked)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Events Sent by Device=&lt;br /&gt;
* Temperature Changed #25 - Temperature has changed since last update&lt;br /&gt;
* Weather Changed #75 - Weather has changed since last update&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Issues and TODO=&lt;br /&gt;
* 2008-07-06 Testing new features.  Code will be updated soon.&lt;br /&gt;
* Does not respond to events (currently testing new feature)&lt;br /&gt;
* Only send weather info when there is a change from the previous weather check (currently testing new feature)&lt;br /&gt;
* Only sends weather conditions and temperature changes (testing humidity changes)&lt;br /&gt;
* No way to ask for weather data from the device (currently testing)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category: tutorials]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14772</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14772"/>
		<updated>2008-07-09T00:17:00Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=My Setup=&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
===Dedicated Core===&lt;br /&gt;
* Located in cabinet in basement near patch panel and speaker runs&lt;br /&gt;
* 4U Rackmount case&lt;br /&gt;
* 350 watt PSU&lt;br /&gt;
* Supermicro 370DLE Dual Pentium 3 (1ghz)&lt;br /&gt;
* 2 Gb ram&lt;br /&gt;
* Onboard 100Mbit ethernet (external net)&lt;br /&gt;
* PCI-X 1Gbit fiber card (internal net)&lt;br /&gt;
* 2 SB Live! cards&lt;br /&gt;
* 1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
* 1 80 Gb IDE drive (system and audio media)&lt;br /&gt;
* 1 250 GB IDE drive (video media)&lt;br /&gt;
* 1 CDROM drive&lt;br /&gt;
* 1 4 port usb hub&lt;br /&gt;
* 2 APC SmartUPS 900&#039;s modded to use 2 lawn tractor batteries each (these power core and network infrastructure)&lt;br /&gt;
&lt;br /&gt;
===Media Directors===&lt;br /&gt;
* None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
===Orbiters===&lt;br /&gt;
* Web orbiter&lt;br /&gt;
* Windows orbiter installed under wine on laptop&lt;br /&gt;
&lt;br /&gt;
===Automation===&lt;br /&gt;
* 1 CM11A&lt;br /&gt;
* A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* 2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
* All speaker wiring goes to a rack in the basement.&lt;br /&gt;
* Volume is controlled via mechanical volume knobs in each room.&lt;br /&gt;
* Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.&lt;br /&gt;
* Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
===Climate===&lt;br /&gt;
* DS9490R w/ no sensors currently attached&lt;br /&gt;
* GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
===Network===&lt;br /&gt;
* 44 Cat5e drops throughout the house and patio (minimum 4 ports per room)&lt;br /&gt;
* DSL internet connection&lt;br /&gt;
* Linksys WRT-54G running latest [http://www.dd-wrt.com dd-wrt] firmware&lt;br /&gt;
* Cisco Catalyst 3524xl  24 port 10/100 switch w/ 2 GBIC ports&lt;br /&gt;
* 4 port internet vlan&lt;br /&gt;
* Core and WRT-54G connect directly to internet&lt;br /&gt;
* WRT-54G is firewall, DNS/DHCP server for rest of network&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
* Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
* [[Squeezeslave on the core]] for distributed audio&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:User Setups]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14771</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14771"/>
		<updated>2008-07-09T00:04:50Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=My Setup=&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
===Dedicated Core===&lt;br /&gt;
* Located in basement near patch panel and speaker runs&lt;br /&gt;
* 4U Rackmount case&lt;br /&gt;
* 350 watt PSU&lt;br /&gt;
* Supermicro 370DLE Dual Pentium 3 (1ghz)&lt;br /&gt;
* 2 Gb ram&lt;br /&gt;
* Onboard 100Mbit ethernet (external net)&lt;br /&gt;
* PCI-X 1Gbit fiber card (internal net)&lt;br /&gt;
* 2 SB Live! cards&lt;br /&gt;
* 1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
* 1 80 Gb IDE drive (system and audio media)&lt;br /&gt;
* 1 250 GB IDE drive (video media)&lt;br /&gt;
* 1 CDROM drive&lt;br /&gt;
&lt;br /&gt;
===Media Directors===&lt;br /&gt;
* None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
===Orbiters===&lt;br /&gt;
* Web orbiter&lt;br /&gt;
* Windows orbiter installed under wine on laptop&lt;br /&gt;
&lt;br /&gt;
===Automation===&lt;br /&gt;
* 1 CM11A&lt;br /&gt;
* A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* 2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
* All speaker wiring goes to a rack in the basement.&lt;br /&gt;
* Volume is controlled via mechanical volume knobs in each room.&lt;br /&gt;
* Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.&lt;br /&gt;
* Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
===Climate===&lt;br /&gt;
* DS9490R w/ no sensors currently attached&lt;br /&gt;
* GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
===Network===&lt;br /&gt;
* DSL internet connection&lt;br /&gt;
* Linksys WRT-54G running latest [http://www.dd-wrt.com dd-wrt] firmware&lt;br /&gt;
* Cisco Catalyst 3524xl  24 port 10/100 switch w/ 2 GBIC ports&lt;br /&gt;
* 4 port internet vlan&lt;br /&gt;
* Core and WRT-54G connect directly to internet&lt;br /&gt;
* WRT-54G is firewall, DNS/DHCP server for rest of network&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
* Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
* [[Squeezeslave on the core]] for distributed audio&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14768</id>
		<title>Upgrading SlimServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14768"/>
		<updated>2008-07-08T03:05:57Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE (0704) to a newer version of Squeezecenter.&lt;br /&gt;
&lt;br /&gt;
=Upgrade SlimServer=&lt;br /&gt;
* Download the version of [http://www.slimdevices.com/pi_features.html squeezecenter] you want to run to the core.&lt;br /&gt;
* cd to /usr/pluto/servers&lt;br /&gt;
* Backup the existing SlimServer directory.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv SlimServer SlimServer.lmce&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Move the downloaded file to /usr/pluto/servers and unarchive it.&lt;br /&gt;
* Make a soft link to the new directory.  This step just makes upgrades or downgrades go a little faster.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -s squeezecenter-some-version SlimServer  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add a user slimserver and a group slimserver  This is the default that Squeezecenter runs as&lt;br /&gt;
* Change the ownership of squeezecenter&#039;s directory to that of slimserver.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R slimserver:slimserver squeezecenter-some-version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you should be able to restart the dcerouter.  This should start the new version of squeezecenter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Configure Squeezecenter=&lt;br /&gt;
Squeezecenter needs a little configuration before it will work with LMCE&lt;br /&gt;
&lt;br /&gt;
* In a web browser, goto http://dcerouter:9000  This should bring up the squeezecenter interface.&lt;br /&gt;
* Click on settings in the lower right hand corner.&lt;br /&gt;
* Under basic settings set the music folder to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/public/data/audio&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Click Apply in the lower right corner&lt;br /&gt;
* Select Plugins from the menu at the top&lt;br /&gt;
* Select Command Line Interface (CLI)&lt;br /&gt;
* Set the port to 7890&lt;br /&gt;
* Click Apply in the lower right corner&lt;br /&gt;
* Restart the dcerouter from either the admin web site or the console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[category: tutorials]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14690</id>
		<title>NOAA Weather</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14690"/>
		<updated>2008-07-06T14:56:53Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;How to setup the NOAA Weather GSD&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Template=&lt;br /&gt;
* Description - NOAA Weather&lt;br /&gt;
* Implements DCE&lt;br /&gt;
* Device Category - Environment Climate Device #83&lt;br /&gt;
* Comm Method - Ethernet&lt;br /&gt;
* Commands - Ruby internal commands&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=GSD Code=&lt;br /&gt;
* #395 Check for updates&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #396 Check for updates done&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather_done()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #373 Private Method Listing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Logging function&lt;br /&gt;
def log(word)&lt;br /&gt;
  $logFile.print( word + &amp;quot;\n&amp;quot; )&lt;br /&gt;
  $logFile.flush()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Weather check function&lt;br /&gt;
def check_weather()&lt;br /&gt;
  log(&amp;quot;Backing up previous data&amp;quot;)&lt;br /&gt;
  oldweather = $weather&lt;br /&gt;
  oldtemp = $temp&lt;br /&gt;
  oldpressure = $pressure&lt;br /&gt;
  olddew_point = $dew_point&lt;br /&gt;
  oldheat_index = $heat_index&lt;br /&gt;
  oldwindchill = $windchill&lt;br /&gt;
  oldhumidity = $humidity&lt;br /&gt;
  oldwind = $wind&lt;br /&gt;
  oldvisibility = $visibility&lt;br /&gt;
&lt;br /&gt;
  log(&amp;quot;Checking for weather updates&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Get xml file from NOAA&lt;br /&gt;
#  xmlPath = &amp;quot;www.weather.gov/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
#  h = &amp;quot;GET &amp;quot;+xmlPath+&amp;quot; HTTP/1.0\r\n&amp;quot;&lt;br /&gt;
#  log(&amp;quot;HTTP Request: #{h}&amp;quot;)&lt;br /&gt;
#  conn_.Send(h)&lt;br /&gt;
#  resv = &amp;quot;&amp;quot;&lt;br /&gt;
#  while(true)&lt;br /&gt;
#    buff = conn_.Recv(16384, 5000)&lt;br /&gt;
#    if buff.length() == 0&lt;br /&gt;
#      break&lt;br /&gt;
#    end&lt;br /&gt;
#    recv = recv + buff&lt;br /&gt;
#  end&lt;br /&gt;
  h = Net::HTTP.new(&#039;www.weather.gov&#039;, 80)&lt;br /&gt;
  data_loc = &amp;quot;/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
  resp, data = h.get(data_loc, nil)&lt;br /&gt;
&lt;br /&gt;
  if resp.message == &amp;quot;OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#  if recv =~ /^HTTP[^\r\n]+200\sOK.+?\r\n\r\n(.+)$/m&lt;br /&gt;
#    data = $1&lt;br /&gt;
#    log(&amp;quot;Recieved:\n#{data}&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
    data.each_line {|line|&lt;br /&gt;
      if line =~/location&amp;gt;(.*)&amp;lt;\/location&amp;gt;/&lt;br /&gt;
        $location = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/observation_time_rfc822&amp;gt;(.*)&amp;lt;\/observation_time_rfc822&amp;gt;/&lt;br /&gt;
        $obs_time = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/weather&amp;gt;(.*)&amp;lt;\/weather&amp;gt;/&lt;br /&gt;
        $weather = $1&lt;br /&gt;
      end&lt;br /&gt;
      if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
        if line =~/temp_f&amp;gt;(.*)&amp;lt;\/temp_f&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_in&amp;gt;(.*)&amp;lt;\/pressure_in&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_f&amp;gt;(.*)&amp;lt;\/dewpoint_f&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_f&amp;gt;(.*)&amp;lt;\/heat_index_f&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_f&amp;gt;(.*)&amp;lt;\/windchill_f&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      else&lt;br /&gt;
        if line =~/temp_c&amp;gt;(.*)&amp;lt;\/temp_c&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_mb&amp;gt;(.*)&amp;lt;\/pressure_mb&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_c&amp;gt;(.*)&amp;lt;\/dewpoint_c&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_c&amp;gt;(.*)&amp;lt;\/heat_index_c&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_c&amp;gt;(.*)&amp;lt;\/windchill_c&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/relative_humidity&amp;gt;(.*)&amp;lt;\/relative_humidity&amp;gt;/&lt;br /&gt;
        $humidity = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/wind_string&amp;gt;(.*)&amp;lt;\/wind_string&amp;gt;/&lt;br /&gt;
        $wind = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/visibility_mi&amp;gt;(.*)&amp;lt;\/visibility_mi&amp;gt;/&lt;br /&gt;
        $visibility = $1&lt;br /&gt;
      end&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
### Send out events for weather changes&lt;br /&gt;
  if $weather != oldweather&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 75 13 \&amp;quot;&amp;quot;+$weather+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if $temp != oldtemp&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 25 13 \&amp;quot;&amp;quot;+$temp+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  check_weather_done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Post weather check&lt;br /&gt;
def check_weather_done()&lt;br /&gt;
  log(&amp;quot;Weather data from: &amp;quot;+$obs_time)&lt;br /&gt;
  log(&amp;quot;Weather check complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #351 Process IDLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Auto check weather every quarter past the hour per NOAA&lt;br /&gt;
t = Time.now&lt;br /&gt;
&lt;br /&gt;
if t.min == 15&lt;br /&gt;
  t -= (60 * 60)&lt;br /&gt;
&lt;br /&gt;
  if $obs_time =~/(\d\d):\d\d:\d\d/&lt;br /&gt;
    obs_hour = $1&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if t.hour != obs_hour.to_i&lt;br /&gt;
    log(&amp;quot;Quarter past the hour and weather update needed&amp;quot;)&lt;br /&gt;
    check_weather()&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #355 Process Initialize&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# NOAA Weather check&lt;br /&gt;
# 2008 Jason Speckman&lt;br /&gt;
###&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
# Init Vars&lt;br /&gt;
&lt;br /&gt;
$logFile = File.new(&amp;quot;/var/log/pluto/NOAA_Weather.log&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Change these values to match device data values&lt;br /&gt;
$DEVICEDATA_ICAO_CONST = 249&lt;br /&gt;
$DEVICEDATA_UNITS_CONST = 250&lt;br /&gt;
&lt;br /&gt;
$units = &amp;quot;&amp;quot;&lt;br /&gt;
$identifier = &amp;quot;&amp;quot;&lt;br /&gt;
$location = &amp;quot;&amp;quot;&lt;br /&gt;
$obs_time = &amp;quot;&amp;quot;&lt;br /&gt;
$weather = &amp;quot;&amp;quot;&lt;br /&gt;
$temp = &amp;quot;&amp;quot;&lt;br /&gt;
$pressure = &amp;quot;&amp;quot;&lt;br /&gt;
$dew_point = &amp;quot;&amp;quot;&lt;br /&gt;
$heat_index = &amp;quot;&amp;quot;&lt;br /&gt;
$windchill = &amp;quot;&amp;quot;&lt;br /&gt;
$humidity = &amp;quot;&amp;quot;&lt;br /&gt;
$wind = &amp;quot;&amp;quot;&lt;br /&gt;
$visibility = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
### Check for identifier and units&lt;br /&gt;
if device_.devdata_ != nil&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_ICAO_CONST] != nil&lt;br /&gt;
    $identifier = device_.devdata_[$DEVICEDATA_ICAO_CONST]&lt;br /&gt;
    log(&amp;quot;ICAO identifier: &amp;quot;+$identifier)&lt;br /&gt;
  else&lt;br /&gt;
    log(&amp;quot;No ICAO identifier specified&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_UNITS_CONST] != nil&lt;br /&gt;
    $units = device_.devdata_[$DEVICEDATA_UNITS_CONST]&lt;br /&gt;
  else&lt;br /&gt;
    $units = &amp;quot;F&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Units in degrees &amp;quot;+$units)&lt;br /&gt;
&lt;br /&gt;
if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
  $press_units = &amp;quot;in. Hg&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  $press_units = &amp;quot;hPa&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### Tell DCE we are a climate device&lt;br /&gt;
log(&amp;quot;Starting NOAA Weather Check&amp;quot;)&lt;br /&gt;
log(&amp;quot;Setup message intercept for DCERouter&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
###&lt;br /&gt;
# devIDfrom: device_.devid_ = my device id&lt;br /&gt;
# devIDto: -1000 = dcerouter&lt;br /&gt;
# priority: &lt;br /&gt;
# type: 1 = command, 2 = event&lt;br /&gt;
# id: &lt;br /&gt;
&lt;br /&gt;
$devIDfrom = device_.devid_&lt;br /&gt;
devIDto = -1000&lt;br /&gt;
priority = &amp;quot;&amp;quot;&lt;br /&gt;
type = 2&lt;br /&gt;
id = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cmd = Command.new(devIDfrom, devIDto, priority, type, id)&lt;br /&gt;
#cmd.params_[x] = y&lt;br /&gt;
#SendCommand(cmd)&lt;br /&gt;
&lt;br /&gt;
#ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot; + device_.devid_.to_s + &amp;quot; -1000 8 0 5 2 4 10&amp;quot;&lt;br /&gt;
#system(ms)&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Init complete&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Initial weather check&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #356 Process Release&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logFile != nil) then&lt;br /&gt;
	$logFile.close&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Data=&lt;br /&gt;
(These variable numbers may be different, be sure to update them in the ruby code)&lt;br /&gt;
* #249 ICAO Location Indicator(string) - Comment: Local airport identifier for weather info - (Required and Allowed to modify checked)&lt;br /&gt;
* #250 Units(string) - Comment: Degree units.  Either (F) or (C) - (Required and Allowed to modify checked)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Events Sent by Device=&lt;br /&gt;
* Temperature Changed #25 - Temperature has changed since last update&lt;br /&gt;
* Weather Changed #75 - Weather has changed since last update&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Issues and TODO=&lt;br /&gt;
* 2008-07-06 Testing new features.  Code will be updated soon.&lt;br /&gt;
* Does not respond to events (currently testing new feature)&lt;br /&gt;
* Only send weather info when there is a change from the previous weather check (currently testing new feature)&lt;br /&gt;
* Only sends weather conditions and temperature changes (testing humidity changes)&lt;br /&gt;
* No way to ask for weather data from the device (currently testing)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category: tutorials]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14689</id>
		<title>NOAA Weather</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14689"/>
		<updated>2008-07-06T14:56:08Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;How to setup the NOAA Weather GSD&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Template=&lt;br /&gt;
* Description - NOAA Weather&lt;br /&gt;
* Implements DCE&lt;br /&gt;
* Device Category - Environment Climate Device #83&lt;br /&gt;
* Comm Method - Ethernet&lt;br /&gt;
* Commands - Ruby internal commands&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=GSD Code=&lt;br /&gt;
* #395 Check for updates&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #396 Check for updates done&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather_done()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #373 Private Method Listing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Logging function&lt;br /&gt;
def log(word)&lt;br /&gt;
  $logFile.print( word + &amp;quot;\n&amp;quot; )&lt;br /&gt;
  $logFile.flush()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Weather check function&lt;br /&gt;
def check_weather()&lt;br /&gt;
  log(&amp;quot;Backing up previous data&amp;quot;)&lt;br /&gt;
  oldweather = $weather&lt;br /&gt;
  oldtemp = $temp&lt;br /&gt;
  oldpressure = $pressure&lt;br /&gt;
  olddew_point = $dew_point&lt;br /&gt;
  oldheat_index = $heat_index&lt;br /&gt;
  oldwindchill = $windchill&lt;br /&gt;
  oldhumidity = $humidity&lt;br /&gt;
  oldwind = $wind&lt;br /&gt;
  oldvisibility = $visibility&lt;br /&gt;
&lt;br /&gt;
  log(&amp;quot;Checking for weather updates&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Get xml file from NOAA&lt;br /&gt;
#  xmlPath = &amp;quot;www.weather.gov/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
#  h = &amp;quot;GET &amp;quot;+xmlPath+&amp;quot; HTTP/1.0\r\n&amp;quot;&lt;br /&gt;
#  log(&amp;quot;HTTP Request: #{h}&amp;quot;)&lt;br /&gt;
#  conn_.Send(h)&lt;br /&gt;
#  resv = &amp;quot;&amp;quot;&lt;br /&gt;
#  while(true)&lt;br /&gt;
#    buff = conn_.Recv(16384, 5000)&lt;br /&gt;
#    if buff.length() == 0&lt;br /&gt;
#      break&lt;br /&gt;
#    end&lt;br /&gt;
#    recv = recv + buff&lt;br /&gt;
#  end&lt;br /&gt;
  h = Net::HTTP.new(&#039;www.weather.gov&#039;, 80)&lt;br /&gt;
  data_loc = &amp;quot;/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
  resp, data = h.get(data_loc, nil)&lt;br /&gt;
&lt;br /&gt;
  if resp.message == &amp;quot;OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#  if recv =~ /^HTTP[^\r\n]+200\sOK.+?\r\n\r\n(.+)$/m&lt;br /&gt;
#    data = $1&lt;br /&gt;
#    log(&amp;quot;Recieved:\n#{data}&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
    data.each_line {|line|&lt;br /&gt;
      if line =~/location&amp;gt;(.*)&amp;lt;\/location&amp;gt;/&lt;br /&gt;
        $location = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/observation_time_rfc822&amp;gt;(.*)&amp;lt;\/observation_time_rfc822&amp;gt;/&lt;br /&gt;
        $obs_time = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/weather&amp;gt;(.*)&amp;lt;\/weather&amp;gt;/&lt;br /&gt;
        $weather = $1&lt;br /&gt;
      end&lt;br /&gt;
      if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
        if line =~/temp_f&amp;gt;(.*)&amp;lt;\/temp_f&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_in&amp;gt;(.*)&amp;lt;\/pressure_in&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_f&amp;gt;(.*)&amp;lt;\/dewpoint_f&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_f&amp;gt;(.*)&amp;lt;\/heat_index_f&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_f&amp;gt;(.*)&amp;lt;\/windchill_f&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      else&lt;br /&gt;
        if line =~/temp_c&amp;gt;(.*)&amp;lt;\/temp_c&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_mb&amp;gt;(.*)&amp;lt;\/pressure_mb&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_c&amp;gt;(.*)&amp;lt;\/dewpoint_c&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_c&amp;gt;(.*)&amp;lt;\/heat_index_c&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_c&amp;gt;(.*)&amp;lt;\/windchill_c&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/relative_humidity&amp;gt;(.*)&amp;lt;\/relative_humidity&amp;gt;/&lt;br /&gt;
        $humidity = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/wind_string&amp;gt;(.*)&amp;lt;\/wind_string&amp;gt;/&lt;br /&gt;
        $wind = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/visibility_mi&amp;gt;(.*)&amp;lt;\/visibility_mi&amp;gt;/&lt;br /&gt;
        $visibility = $1&lt;br /&gt;
      end&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
### Send out events for weather changes&lt;br /&gt;
  if $weather != oldweather&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 75 13 \&amp;quot;&amp;quot;+$weather+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if $temp != oldtemp&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 25 13 \&amp;quot;&amp;quot;+$temp+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  check_weather_done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Post weather check&lt;br /&gt;
def check_weather_done()&lt;br /&gt;
  log(&amp;quot;Weather data from: &amp;quot;+$obs_time)&lt;br /&gt;
  log(&amp;quot;Weather check complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #351 Process IDLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Auto check weather every quarter past the hour per NOAA&lt;br /&gt;
t = Time.now&lt;br /&gt;
&lt;br /&gt;
if t.min == 15&lt;br /&gt;
  t -= (60 * 60)&lt;br /&gt;
&lt;br /&gt;
  if $obs_time =~/(\d\d):\d\d:\d\d/&lt;br /&gt;
    obs_hour = $1&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if t.hour != obs_hour.to_i&lt;br /&gt;
    log(&amp;quot;Quarter past the hour and weather update needed&amp;quot;)&lt;br /&gt;
    check_weather()&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #355 Process Initialize&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# NOAA Weather check&lt;br /&gt;
# 2008 Jason Speckman&lt;br /&gt;
###&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
# Init Vars&lt;br /&gt;
&lt;br /&gt;
$logFile = File.new(&amp;quot;/var/log/pluto/NOAA_Weather.log&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Change these values to match device data values&lt;br /&gt;
$DEVICEDATA_ICAO_CONST = 249&lt;br /&gt;
$DEVICEDATA_UNITS_CONST = 250&lt;br /&gt;
&lt;br /&gt;
$units = &amp;quot;&amp;quot;&lt;br /&gt;
$identifier = &amp;quot;&amp;quot;&lt;br /&gt;
$location = &amp;quot;&amp;quot;&lt;br /&gt;
$obs_time = &amp;quot;&amp;quot;&lt;br /&gt;
$weather = &amp;quot;&amp;quot;&lt;br /&gt;
$temp = &amp;quot;&amp;quot;&lt;br /&gt;
$pressure = &amp;quot;&amp;quot;&lt;br /&gt;
$dew_point = &amp;quot;&amp;quot;&lt;br /&gt;
$heat_index = &amp;quot;&amp;quot;&lt;br /&gt;
$windchill = &amp;quot;&amp;quot;&lt;br /&gt;
$humidity = &amp;quot;&amp;quot;&lt;br /&gt;
$wind = &amp;quot;&amp;quot;&lt;br /&gt;
$visibility = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
### Check for identifier and units&lt;br /&gt;
if device_.devdata_ != nil&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_ICAO_CONST] != nil&lt;br /&gt;
    $identifier = device_.devdata_[$DEVICEDATA_ICAO_CONST]&lt;br /&gt;
    log(&amp;quot;ICAO identifier: &amp;quot;+$identifier)&lt;br /&gt;
  else&lt;br /&gt;
    log(&amp;quot;No ICAO identifier specified&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_UNITS_CONST] != nil&lt;br /&gt;
    $units = device_.devdata_[$DEVICEDATA_UNITS_CONST]&lt;br /&gt;
  else&lt;br /&gt;
    $units = &amp;quot;F&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Units in degrees &amp;quot;+$units)&lt;br /&gt;
&lt;br /&gt;
if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
  $press_units = &amp;quot;in. Hg&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  $press_units = &amp;quot;hPa&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### Tell DCE we are a climate device&lt;br /&gt;
log(&amp;quot;Starting NOAA Weather Check&amp;quot;)&lt;br /&gt;
log(&amp;quot;Setup message intercept for DCERouter&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
###&lt;br /&gt;
# devIDfrom: device_.devid_ = my device id&lt;br /&gt;
# devIDto: -1000 = dcerouter&lt;br /&gt;
# priority: &lt;br /&gt;
# type: 1 = command, 2 = event&lt;br /&gt;
# id: &lt;br /&gt;
&lt;br /&gt;
$devIDfrom = device_.devid_&lt;br /&gt;
devIDto = -1000&lt;br /&gt;
priority = &amp;quot;&amp;quot;&lt;br /&gt;
type = 2&lt;br /&gt;
id = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cmd = Command.new(devIDfrom, devIDto, priority, type, id)&lt;br /&gt;
#cmd.params_[x] = y&lt;br /&gt;
#SendCommand(cmd)&lt;br /&gt;
&lt;br /&gt;
#ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot; + device_.devid_.to_s + &amp;quot; -1000 8 0 5 2 4 10&amp;quot;&lt;br /&gt;
#system(ms)&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Init complete&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Initial weather check&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #356 Process Release&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logFile != nil) then&lt;br /&gt;
	$logFile.close&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Data=&lt;br /&gt;
(These variable numbers may be different, be sure to update them in the ruby code)&lt;br /&gt;
* #249 ICAO Location Indicator(string) - Comment: Local airport identifier for weather info - (Required and Allowed to modify checked)&lt;br /&gt;
* #250 Units(string) - Comment: Degree units.  Either (F) or (C) - (Required and Allowed to modify checked)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Events Sent by Device=&lt;br /&gt;
* Temperature Changed #25 - Comment: Temperature has changed since last update&lt;br /&gt;
* Weather Changed #75 - Comment: Weather has changed since last update&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Issues and TODO=&lt;br /&gt;
* 2008-07-06 Testing new features.  Code will be updated soon.&lt;br /&gt;
* Does not respond to events (currently testing new feature)&lt;br /&gt;
* Only send weather info when there is a change from the previous weather check (currently testing new feature)&lt;br /&gt;
* Only sends weather conditions and temperature changes (testing humidity changes)&lt;br /&gt;
* No way to ask for weather data from the device (currently testing)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category: tutorials]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14648</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14648"/>
		<updated>2008-07-04T15:36:53Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=My Setup=&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
===Dedicated Core===&lt;br /&gt;
* 4U Rackmount case&lt;br /&gt;
* 350 watt PSU&lt;br /&gt;
* Supermicro 370DLE Dual Pentium 3 (1ghz)&lt;br /&gt;
* 2 Gb ram&lt;br /&gt;
* Onboard 100mb ethernet (external net)&lt;br /&gt;
* 64bit pci 1gb fiber card (internal net)&lt;br /&gt;
* 2 SB Live! cards&lt;br /&gt;
* 1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
* 1 80 Gb IDE drive (system and audio media)&lt;br /&gt;
* 1 250 GB IDE drive (video media)&lt;br /&gt;
* 1 CDROM drive&lt;br /&gt;
&lt;br /&gt;
===Media Directors===&lt;br /&gt;
* None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
===Orbiters===&lt;br /&gt;
* Web orbiter&lt;br /&gt;
* Windows orbiter installed under wine on laptop&lt;br /&gt;
&lt;br /&gt;
===Automation===&lt;br /&gt;
* 1 CM11A&lt;br /&gt;
* A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* 2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
* All speaker wiring goes to a central location in the basement.&lt;br /&gt;
* Volume is controlled via mechanical volume knobs in each room.&lt;br /&gt;
* Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.&lt;br /&gt;
* Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
===Climate===&lt;br /&gt;
* DS9490R w/ no sensors currently attached&lt;br /&gt;
* GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
===Network===&lt;br /&gt;
* Linksys WRT-54G running latest [http://www.dd-wrt.com dd-wrt] firmware&lt;br /&gt;
* Cisco Catalyst 3524xl  24 port 10/100 switch w/ 2 GBIC ports&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
* Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
* [[Squeezeslave on the core]] for distributed audio&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14647</id>
		<title>NOAA Weather</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14647"/>
		<updated>2008-07-04T15:04:40Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;How to setup the NOAA Weather GSD&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Template=&lt;br /&gt;
* Description - NOAA Weather&lt;br /&gt;
* Implements DCE&lt;br /&gt;
* Device Category - Environment Climate Device #83&lt;br /&gt;
* Comm Method - Ethernet&lt;br /&gt;
* Commands - Ruby internal commands&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=GSD Code=&lt;br /&gt;
* #395 Check for updates&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #396 Check for updates done&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather_done()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #373 Private Method Listing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Logging function&lt;br /&gt;
def log(word)&lt;br /&gt;
  $logFile.print( word + &amp;quot;\n&amp;quot; )&lt;br /&gt;
  $logFile.flush()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Weather check function&lt;br /&gt;
def check_weather()&lt;br /&gt;
  log(&amp;quot;Backing up previous data&amp;quot;)&lt;br /&gt;
  oldweather = $weather&lt;br /&gt;
  oldtemp = $temp&lt;br /&gt;
  oldpressure = $pressure&lt;br /&gt;
  olddew_point = $dew_point&lt;br /&gt;
  oldheat_index = $heat_index&lt;br /&gt;
  oldwindchill = $windchill&lt;br /&gt;
  oldhumidity = $humidity&lt;br /&gt;
  oldwind = $wind&lt;br /&gt;
  oldvisibility = $visibility&lt;br /&gt;
&lt;br /&gt;
  log(&amp;quot;Checking for weather updates&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Get xml file from NOAA&lt;br /&gt;
#  xmlPath = &amp;quot;www.weather.gov/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
#  h = &amp;quot;GET &amp;quot;+xmlPath+&amp;quot; HTTP/1.0\r\n&amp;quot;&lt;br /&gt;
#  log(&amp;quot;HTTP Request: #{h}&amp;quot;)&lt;br /&gt;
#  conn_.Send(h)&lt;br /&gt;
#  resv = &amp;quot;&amp;quot;&lt;br /&gt;
#  while(true)&lt;br /&gt;
#    buff = conn_.Recv(16384, 5000)&lt;br /&gt;
#    if buff.length() == 0&lt;br /&gt;
#      break&lt;br /&gt;
#    end&lt;br /&gt;
#    recv = recv + buff&lt;br /&gt;
#  end&lt;br /&gt;
  h = Net::HTTP.new(&#039;www.weather.gov&#039;, 80)&lt;br /&gt;
  data_loc = &amp;quot;/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
  resp, data = h.get(data_loc, nil)&lt;br /&gt;
&lt;br /&gt;
  if resp.message == &amp;quot;OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#  if recv =~ /^HTTP[^\r\n]+200\sOK.+?\r\n\r\n(.+)$/m&lt;br /&gt;
#    data = $1&lt;br /&gt;
#    log(&amp;quot;Recieved:\n#{data}&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
    data.each_line {|line|&lt;br /&gt;
      if line =~/location&amp;gt;(.*)&amp;lt;\/location&amp;gt;/&lt;br /&gt;
        $location = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/observation_time_rfc822&amp;gt;(.*)&amp;lt;\/observation_time_rfc822&amp;gt;/&lt;br /&gt;
        $obs_time = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/weather&amp;gt;(.*)&amp;lt;\/weather&amp;gt;/&lt;br /&gt;
        $weather = $1&lt;br /&gt;
      end&lt;br /&gt;
      if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
        if line =~/temp_f&amp;gt;(.*)&amp;lt;\/temp_f&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_in&amp;gt;(.*)&amp;lt;\/pressure_in&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_f&amp;gt;(.*)&amp;lt;\/dewpoint_f&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_f&amp;gt;(.*)&amp;lt;\/heat_index_f&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_f&amp;gt;(.*)&amp;lt;\/windchill_f&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      else&lt;br /&gt;
        if line =~/temp_c&amp;gt;(.*)&amp;lt;\/temp_c&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_mb&amp;gt;(.*)&amp;lt;\/pressure_mb&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_c&amp;gt;(.*)&amp;lt;\/dewpoint_c&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_c&amp;gt;(.*)&amp;lt;\/heat_index_c&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_c&amp;gt;(.*)&amp;lt;\/windchill_c&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/relative_humidity&amp;gt;(.*)&amp;lt;\/relative_humidity&amp;gt;/&lt;br /&gt;
        $humidity = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/wind_string&amp;gt;(.*)&amp;lt;\/wind_string&amp;gt;/&lt;br /&gt;
        $wind = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/visibility_mi&amp;gt;(.*)&amp;lt;\/visibility_mi&amp;gt;/&lt;br /&gt;
        $visibility = $1&lt;br /&gt;
      end&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
### Send out events for weather changes&lt;br /&gt;
  if $weather != oldweather&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 75 13 \&amp;quot;&amp;quot;+$weather+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if $temp != oldtemp&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 25 13 \&amp;quot;&amp;quot;+$temp+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  check_weather_done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Post weather check&lt;br /&gt;
def check_weather_done()&lt;br /&gt;
  log(&amp;quot;Weather data from: &amp;quot;+$obs_time)&lt;br /&gt;
  log(&amp;quot;Weather check complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #351 Process IDLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Auto check weather every quarter past the hour per NOAA&lt;br /&gt;
t = Time.now&lt;br /&gt;
&lt;br /&gt;
if t.min == 15&lt;br /&gt;
  t -= (60 * 60)&lt;br /&gt;
&lt;br /&gt;
  if $obs_time =~/(\d\d):\d\d:\d\d/&lt;br /&gt;
    obs_hour = $1&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if t.hour != obs_hour.to_i&lt;br /&gt;
    log(&amp;quot;Quarter past the hour and weather update needed&amp;quot;)&lt;br /&gt;
    check_weather()&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #355 Process Initialize&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# NOAA Weather check&lt;br /&gt;
# 2008 Jason Speckman&lt;br /&gt;
###&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
# Init Vars&lt;br /&gt;
&lt;br /&gt;
$logFile = File.new(&amp;quot;/var/log/pluto/NOAA_Weather.log&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Change these values to match device data values&lt;br /&gt;
$DEVICEDATA_ICAO_CONST = 249&lt;br /&gt;
$DEVICEDATA_UNITS_CONST = 250&lt;br /&gt;
&lt;br /&gt;
$units = &amp;quot;&amp;quot;&lt;br /&gt;
$identifier = &amp;quot;&amp;quot;&lt;br /&gt;
$location = &amp;quot;&amp;quot;&lt;br /&gt;
$obs_time = &amp;quot;&amp;quot;&lt;br /&gt;
$weather = &amp;quot;&amp;quot;&lt;br /&gt;
$temp = &amp;quot;&amp;quot;&lt;br /&gt;
$pressure = &amp;quot;&amp;quot;&lt;br /&gt;
$dew_point = &amp;quot;&amp;quot;&lt;br /&gt;
$heat_index = &amp;quot;&amp;quot;&lt;br /&gt;
$windchill = &amp;quot;&amp;quot;&lt;br /&gt;
$humidity = &amp;quot;&amp;quot;&lt;br /&gt;
$wind = &amp;quot;&amp;quot;&lt;br /&gt;
$visibility = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
### Check for identifier and units&lt;br /&gt;
if device_.devdata_ != nil&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_ICAO_CONST] != nil&lt;br /&gt;
    $identifier = device_.devdata_[$DEVICEDATA_ICAO_CONST]&lt;br /&gt;
    log(&amp;quot;ICAO identifier: &amp;quot;+$identifier)&lt;br /&gt;
  else&lt;br /&gt;
    log(&amp;quot;No ICAO identifier specified&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_UNITS_CONST] != nil&lt;br /&gt;
    $units = device_.devdata_[$DEVICEDATA_UNITS_CONST]&lt;br /&gt;
  else&lt;br /&gt;
    $units = &amp;quot;F&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Units in degrees &amp;quot;+$units)&lt;br /&gt;
&lt;br /&gt;
if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
  $press_units = &amp;quot;in. Hg&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  $press_units = &amp;quot;hPa&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### Tell DCE we are a climate device&lt;br /&gt;
log(&amp;quot;Starting NOAA Weather Check&amp;quot;)&lt;br /&gt;
log(&amp;quot;Setup message intercept for DCERouter&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
###&lt;br /&gt;
# devIDfrom: device_.devid_ = my device id&lt;br /&gt;
# devIDto: -1000 = dcerouter&lt;br /&gt;
# priority: &lt;br /&gt;
# type: 1 = command, 2 = event&lt;br /&gt;
# id: &lt;br /&gt;
&lt;br /&gt;
$devIDfrom = device_.devid_&lt;br /&gt;
devIDto = -1000&lt;br /&gt;
priority = &amp;quot;&amp;quot;&lt;br /&gt;
type = 2&lt;br /&gt;
id = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cmd = Command.new(devIDfrom, devIDto, priority, type, id)&lt;br /&gt;
#cmd.params_[x] = y&lt;br /&gt;
#SendCommand(cmd)&lt;br /&gt;
&lt;br /&gt;
#ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot; + device_.devid_.to_s + &amp;quot; -1000 8 0 5 2 4 10&amp;quot;&lt;br /&gt;
#system(ms)&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Init complete&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Initial weather check&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #356 Process Release&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logFile != nil) then&lt;br /&gt;
	$logFile.close&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Data=&lt;br /&gt;
(These variable numbers may be different, be sure to update them in the ruby code)&lt;br /&gt;
* #249 ICAO Location Indicator(string) - Comment: Local airport identifier for weather info - (Required and Allowed to modify checked)&lt;br /&gt;
* #250 Units(string) - Comment: Degree units.  Either (F) or (C) - (Required and Allowed to modify checked)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Events=&lt;br /&gt;
* Temperature Changed #25 - Comment: Temperature has changed since last update&lt;br /&gt;
* Weather Changed #75 - Comment: Weather has changed since last update&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Issues and TODO=&lt;br /&gt;
* Does not respond to events&lt;br /&gt;
* Only send weather info when there is a change from the previous weather check&lt;br /&gt;
* Only sends weather conditions and temperature changes&lt;br /&gt;
* No way to ask for weather data from the device&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category: tutorials]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14646</id>
		<title>Upgrading SlimServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14646"/>
		<updated>2008-07-04T15:04:07Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE (0704) to a newer version of Squeezecenter.&lt;br /&gt;
&lt;br /&gt;
=Upgrade SlimServer=&lt;br /&gt;
* Download the version of [http://www.slimdevices.com/pi_features.html squeezecenter] you want to run to the core.&lt;br /&gt;
* cd to /usr/pluto/servers&lt;br /&gt;
* Backup the existing SlimServer directory.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv SlimServer SlimServer.lmce&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Move the downloaded file to /usr/pluto/servers and unarchive it.&lt;br /&gt;
* Make a soft link to the new directory.  This step just makes upgrades or downgrades go a little faster.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -s squeezecenter-some-version SlimServer  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add a user slimserver and a group slimserver  This is the default that Squeezecenter runs as&lt;br /&gt;
* Change the ownership of squeezecenter&#039;s directory to that of slimserver.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R slimserver:slimserver squeezecenter-some-version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you should be able to restart the dcerouter.  This should start the new version of squeezecenter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Configure Squeezecenter=&lt;br /&gt;
Squeezecenter needs a little configuration before it will work with LMCE&lt;br /&gt;
&lt;br /&gt;
* In a web browser, goto http://dcerouter:9000  This should bring up the squeezecenter interface.&lt;br /&gt;
* Click on settings in the lower right hand corner.&lt;br /&gt;
* Select Plugins from the menu at the top&lt;br /&gt;
* Select Command Line Interface (CLI)&lt;br /&gt;
* Set the port to 7890&lt;br /&gt;
* Click on Apply in the lower right hand corner&lt;br /&gt;
* Restart the dcerouter from either the admin web site or the console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
Is this article still a stub?&lt;br /&gt;
[[category: tutorials]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14643</id>
		<title>NOAA Weather</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14643"/>
		<updated>2008-07-04T14:50:21Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;How to setup the NOAA Weather GSD&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Template=&lt;br /&gt;
* Description - NOAA Weather&lt;br /&gt;
* Implements DCE&lt;br /&gt;
* Device Category - Environment Climate Device #83&lt;br /&gt;
* Comm Method - Ethernet&lt;br /&gt;
* Commands - Ruby internal commands&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=GSD Code=&lt;br /&gt;
* #395 Check for updates&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #396 Check for updates done&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather_done()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #373 Private Method Listing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Logging function&lt;br /&gt;
def log(word)&lt;br /&gt;
  $logFile.print( word + &amp;quot;\n&amp;quot; )&lt;br /&gt;
  $logFile.flush()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Weather check function&lt;br /&gt;
def check_weather()&lt;br /&gt;
  log(&amp;quot;Backing up previous data&amp;quot;)&lt;br /&gt;
  oldweather = $weather&lt;br /&gt;
  oldtemp = $temp&lt;br /&gt;
  oldpressure = $pressure&lt;br /&gt;
  olddew_point = $dew_point&lt;br /&gt;
  oldheat_index = $heat_index&lt;br /&gt;
  oldwindchill = $windchill&lt;br /&gt;
  oldhumidity = $humidity&lt;br /&gt;
  oldwind = $wind&lt;br /&gt;
  oldvisibility = $visibility&lt;br /&gt;
&lt;br /&gt;
  log(&amp;quot;Checking for weather updates&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Get xml file from NOAA&lt;br /&gt;
#  xmlPath = &amp;quot;www.weather.gov/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
#  h = &amp;quot;GET &amp;quot;+xmlPath+&amp;quot; HTTP/1.0\r\n&amp;quot;&lt;br /&gt;
#  log(&amp;quot;HTTP Request: #{h}&amp;quot;)&lt;br /&gt;
#  conn_.Send(h)&lt;br /&gt;
#  resv = &amp;quot;&amp;quot;&lt;br /&gt;
#  while(true)&lt;br /&gt;
#    buff = conn_.Recv(16384, 5000)&lt;br /&gt;
#    if buff.length() == 0&lt;br /&gt;
#      break&lt;br /&gt;
#    end&lt;br /&gt;
#    recv = recv + buff&lt;br /&gt;
#  end&lt;br /&gt;
  h = Net::HTTP.new(&#039;www.weather.gov&#039;, 80)&lt;br /&gt;
  data_loc = &amp;quot;/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
  resp, data = h.get(data_loc, nil)&lt;br /&gt;
&lt;br /&gt;
  if resp.message == &amp;quot;OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#  if recv =~ /^HTTP[^\r\n]+200\sOK.+?\r\n\r\n(.+)$/m&lt;br /&gt;
#    data = $1&lt;br /&gt;
#    log(&amp;quot;Recieved:\n#{data}&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
    data.each_line {|line|&lt;br /&gt;
      if line =~/location&amp;gt;(.*)&amp;lt;\/location&amp;gt;/&lt;br /&gt;
        $location = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/observation_time_rfc822&amp;gt;(.*)&amp;lt;\/observation_time_rfc822&amp;gt;/&lt;br /&gt;
        $obs_time = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/weather&amp;gt;(.*)&amp;lt;\/weather&amp;gt;/&lt;br /&gt;
        $weather = $1&lt;br /&gt;
      end&lt;br /&gt;
      if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
        if line =~/temp_f&amp;gt;(.*)&amp;lt;\/temp_f&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_in&amp;gt;(.*)&amp;lt;\/pressure_in&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_f&amp;gt;(.*)&amp;lt;\/dewpoint_f&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_f&amp;gt;(.*)&amp;lt;\/heat_index_f&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_f&amp;gt;(.*)&amp;lt;\/windchill_f&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      else&lt;br /&gt;
        if line =~/temp_c&amp;gt;(.*)&amp;lt;\/temp_c&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_mb&amp;gt;(.*)&amp;lt;\/pressure_mb&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_c&amp;gt;(.*)&amp;lt;\/dewpoint_c&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_c&amp;gt;(.*)&amp;lt;\/heat_index_c&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_c&amp;gt;(.*)&amp;lt;\/windchill_c&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/relative_humidity&amp;gt;(.*)&amp;lt;\/relative_humidity&amp;gt;/&lt;br /&gt;
        $humidity = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/wind_string&amp;gt;(.*)&amp;lt;\/wind_string&amp;gt;/&lt;br /&gt;
        $wind = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/visibility_mi&amp;gt;(.*)&amp;lt;\/visibility_mi&amp;gt;/&lt;br /&gt;
        $visibility = $1&lt;br /&gt;
      end&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
### Send out events for weather changes&lt;br /&gt;
  if $weather != oldweather&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 75 13 \&amp;quot;&amp;quot;+$weather+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if $temp != oldtemp&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 25 13 \&amp;quot;&amp;quot;+$temp+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  check_weather_done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Post weather check&lt;br /&gt;
def check_weather_done()&lt;br /&gt;
  log(&amp;quot;Weather data from: &amp;quot;+$obs_time)&lt;br /&gt;
  log(&amp;quot;Weather check complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #351 Process IDLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Auto check weather every quarter past the hour per NOAA&lt;br /&gt;
t = Time.now&lt;br /&gt;
&lt;br /&gt;
if t.min == 15&lt;br /&gt;
  t -= (60 * 60)&lt;br /&gt;
&lt;br /&gt;
  if $obs_time =~/(\d\d):\d\d:\d\d/&lt;br /&gt;
    obs_hour = $1&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if t.hour != obs_hour.to_i&lt;br /&gt;
    log(&amp;quot;Quarter past the hour and weather update needed&amp;quot;)&lt;br /&gt;
    check_weather()&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #355 Process Initialize&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# NOAA Weather check&lt;br /&gt;
# 2008 Jason Speckman&lt;br /&gt;
###&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
# Init Vars&lt;br /&gt;
&lt;br /&gt;
$logFile = File.new(&amp;quot;/var/log/pluto/NOAA_Weather.log&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Change these values to match device data values&lt;br /&gt;
$DEVICEDATA_ICAO_CONST = 249&lt;br /&gt;
$DEVICEDATA_UNITS_CONST = 250&lt;br /&gt;
&lt;br /&gt;
$units = &amp;quot;&amp;quot;&lt;br /&gt;
$identifier = &amp;quot;&amp;quot;&lt;br /&gt;
$location = &amp;quot;&amp;quot;&lt;br /&gt;
$obs_time = &amp;quot;&amp;quot;&lt;br /&gt;
$weather = &amp;quot;&amp;quot;&lt;br /&gt;
$temp = &amp;quot;&amp;quot;&lt;br /&gt;
$pressure = &amp;quot;&amp;quot;&lt;br /&gt;
$dew_point = &amp;quot;&amp;quot;&lt;br /&gt;
$heat_index = &amp;quot;&amp;quot;&lt;br /&gt;
$windchill = &amp;quot;&amp;quot;&lt;br /&gt;
$humidity = &amp;quot;&amp;quot;&lt;br /&gt;
$wind = &amp;quot;&amp;quot;&lt;br /&gt;
$visibility = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
### Check for identifier and units&lt;br /&gt;
if device_.devdata_ != nil&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_ICAO_CONST] != nil&lt;br /&gt;
    $identifier = device_.devdata_[$DEVICEDATA_ICAO_CONST]&lt;br /&gt;
    log(&amp;quot;ICAO identifier: &amp;quot;+$identifier)&lt;br /&gt;
  else&lt;br /&gt;
    log(&amp;quot;No ICAO identifier specified&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_UNITS_CONST] != nil&lt;br /&gt;
    $units = device_.devdata_[$DEVICEDATA_UNITS_CONST]&lt;br /&gt;
  else&lt;br /&gt;
    $units = &amp;quot;F&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Units in degrees &amp;quot;+$units)&lt;br /&gt;
&lt;br /&gt;
if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
  $press_units = &amp;quot;in. Hg&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  $press_units = &amp;quot;hPa&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### Tell DCE we are a climate device&lt;br /&gt;
log(&amp;quot;Starting NOAA Weather Check&amp;quot;)&lt;br /&gt;
log(&amp;quot;Setup message intercept for DCERouter&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
###&lt;br /&gt;
# devIDfrom: device_.devid_ = my device id&lt;br /&gt;
# devIDto: -1000 = dcerouter&lt;br /&gt;
# priority: &lt;br /&gt;
# type: 1 = command, 2 = event&lt;br /&gt;
# id: &lt;br /&gt;
&lt;br /&gt;
$devIDfrom = device_.devid_&lt;br /&gt;
devIDto = -1000&lt;br /&gt;
priority = &amp;quot;&amp;quot;&lt;br /&gt;
type = 2&lt;br /&gt;
id = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cmd = Command.new(devIDfrom, devIDto, priority, type, id)&lt;br /&gt;
#cmd.params_[x] = y&lt;br /&gt;
#SendCommand(cmd)&lt;br /&gt;
&lt;br /&gt;
#ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot; + device_.devid_.to_s + &amp;quot; -1000 8 0 5 2 4 10&amp;quot;&lt;br /&gt;
#system(ms)&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Init complete&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Initial weather check&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #356 Process Release&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logFile != nil) then&lt;br /&gt;
	$logFile.close&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Data=&lt;br /&gt;
(These variable numbers may be different, be sure to update them in the ruby code)&lt;br /&gt;
* #249 ICAO Location Indicator(string) - Comment: Local airport identifier for weather info - (Required and Allowed to modify checked)&lt;br /&gt;
* #250 Units(string) - Comment: Degree units.  Either (F) or (C) - (Required and Allowed to modify checked)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Events=&lt;br /&gt;
* Temperature Changed #25 - Comment: Temperature has changed since last update&lt;br /&gt;
* Weather Changed #75 - Comment: Weather has changed since last update&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Issues and TODO=&lt;br /&gt;
* Does not respond to events&lt;br /&gt;
* Only send weather info when there is a change from the previous weather check&lt;br /&gt;
* Only sends weather conditions and temperature changes&lt;br /&gt;
* No way to ask for weather data from the device&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14622</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14622"/>
		<updated>2008-07-02T17:32:39Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=My Setup=&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
===Dedicated Core===&lt;br /&gt;
* 4U Rackmount case&lt;br /&gt;
* 350 watt PSU&lt;br /&gt;
* Dual Pentium 3 (1ghz)&lt;br /&gt;
* 2 Gb ram&lt;br /&gt;
* Onboard 100mb ethernet (external net)&lt;br /&gt;
* 64bit pci 1gb fiber card (internal net)&lt;br /&gt;
* 2 SB Live! cards&lt;br /&gt;
* 1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
* 1 80 Gb IDE drive (system and audio media)&lt;br /&gt;
* 1 250 GB IDE drive (video media)&lt;br /&gt;
* 1 CDROM drive&lt;br /&gt;
&lt;br /&gt;
===Media Directors===&lt;br /&gt;
* None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
===Orbiters===&lt;br /&gt;
* Web orbiter&lt;br /&gt;
* Windows orbiter installed under wine on laptop&lt;br /&gt;
&lt;br /&gt;
===Automation===&lt;br /&gt;
* 1 CM11A&lt;br /&gt;
* A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* 2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
* All speaker wiring goes to a central location in the basement.&lt;br /&gt;
* Volume is controlled via mechanical volume knobs in each room.&lt;br /&gt;
* Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.&lt;br /&gt;
* Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
===Climate===&lt;br /&gt;
* DS9490R w/ no sensors currently attached&lt;br /&gt;
* GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
===Network===&lt;br /&gt;
* Linksys WRT-54G running latest [http://www.dd-wrt.com dd-wrt] firmware&lt;br /&gt;
* Cisco Catalyst 3524xl  24 port 10/100 switch w/ 2 GBIC ports&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
* Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
* [[Squeezeslave on the core]] for distributed audio&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14621</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14621"/>
		<updated>2008-07-02T17:31:57Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=My Setup=&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
===Dedicated Core===&lt;br /&gt;
* 4U Rackmount case&lt;br /&gt;
* 350 watt PSU&lt;br /&gt;
* Dual Pentium 3 (1ghz)&lt;br /&gt;
* 2 Gb ram&lt;br /&gt;
* Onboard 100mb ethernet (external net)&lt;br /&gt;
* 64bit pci 1gb fiber card (internal net)&lt;br /&gt;
* 2 SB Live! cards&lt;br /&gt;
* 1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
* 1 80 Gb IDE drive (system and audio media)&lt;br /&gt;
* 1 250 GB IDE drive (video media)&lt;br /&gt;
* 1 CDROM drive&lt;br /&gt;
&lt;br /&gt;
===Media Directors===&lt;br /&gt;
* None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
===Orbiters===&lt;br /&gt;
* Web orbiter&lt;br /&gt;
* Windows orbiter installed under wine on laptop&lt;br /&gt;
&lt;br /&gt;
===Automation===&lt;br /&gt;
* 1 CM11A&lt;br /&gt;
* A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* 2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
* All speaker wiring goes to a central location in the basement.&lt;br /&gt;
* Volume is controlled via mechanical volume knobs in each room.&lt;br /&gt;
* Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.&lt;br /&gt;
* Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
===Climate===&lt;br /&gt;
* DS9490R w/ no sensors currently attached&lt;br /&gt;
* GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
===Network===&lt;br /&gt;
* Linksys WRT-54G running latest [www.dd-wrt.com dd-wrt] firmware&lt;br /&gt;
* Cisco Catalyst 3524xl  24 port 10/100 switch w/ 2 GBIC ports&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
* Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
* [[Squeezeslave on the core]] for distributed audio&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14620</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14620"/>
		<updated>2008-07-02T17:01:52Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=My Setup=&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
===Dedicated Core===&lt;br /&gt;
* 4U Rackmount case&lt;br /&gt;
* 350 watt PSU&lt;br /&gt;
* Dual Pentium 3 (1ghz)&lt;br /&gt;
* 2 Gb ram&lt;br /&gt;
* Onboard 100mb ethernet (external net)&lt;br /&gt;
* 64bit pci 1gb fiber card (internal net)&lt;br /&gt;
* 2 SB Live! cards&lt;br /&gt;
* 1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
* 1 80 Gb drive (system and audio media)&lt;br /&gt;
* 1 250 GB drive (video media)&lt;br /&gt;
* 1 CDROM drive&lt;br /&gt;
&lt;br /&gt;
===Media Directors===&lt;br /&gt;
* None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
===Orbiters===&lt;br /&gt;
* Web orbiter&lt;br /&gt;
* Windows orbiter installed under wine&lt;br /&gt;
&lt;br /&gt;
===Automation===&lt;br /&gt;
* 1 CM11A&lt;br /&gt;
* A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* 2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
* All speaker wiring goes to a central location in the basement.&lt;br /&gt;
* Volume is controlled via mechanical volume knobs in each room.&lt;br /&gt;
* Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.&lt;br /&gt;
* Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
===Climate===&lt;br /&gt;
* DS9490R w/ no sensors currently attached&lt;br /&gt;
* GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
===Network===&lt;br /&gt;
* Linksys WRT-54G running latest dd-wrt firmware&lt;br /&gt;
* Cisco Catalyst 3524xl&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
* Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
* [[Squeezeslave on the core]] for distributed audio&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14619</id>
		<title>Upgrading SlimServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14619"/>
		<updated>2008-07-02T16:56:55Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE (7.04) to a newer version of Squeezecenter.&lt;br /&gt;
&lt;br /&gt;
=Upgrade SlimServer=&lt;br /&gt;
* Download the version of [http://www.slimdevices.com/pi_features.html squeezecenter] you want to run to the core.&lt;br /&gt;
* cd to /usr/pluto/servers&lt;br /&gt;
* Backup the existing SlimServer directory.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv SlimServer SlimServer.lmce&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Move the downloaded file to /usr/pluto/servers and unarchive it.&lt;br /&gt;
* Make a soft link to the new directory.  This step just makes upgrades or downgrades go a little faster.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -s squeezecenter-some-version SlimServer  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add a user slimserver and a group slimserver  This is the default that Squeezecenter runs as&lt;br /&gt;
* Change the ownership of squeezecenter&#039;s directory to that of slimserver.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R slimserver:slimserver squeezecenter-some-version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you should be able to restart the dcerouter.  This should start the new version of squeezecenter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Configure Squeezecenter=&lt;br /&gt;
Squeezecenter needs a little configuration before it will work with LMCE&lt;br /&gt;
&lt;br /&gt;
* In a web browser, goto http://dcerouter:9000  This should bring up the squeezecenter interface.&lt;br /&gt;
* Click on settings in the lower right hand corner.&lt;br /&gt;
* Select Plugins from the menu at the top&lt;br /&gt;
* Select Command Line Interface (CLI)&lt;br /&gt;
* Set the port to 7890&lt;br /&gt;
* Click on Apply in the lower right hand corner&lt;br /&gt;
* Restart the dcerouter from either the admin web site or the console&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
Is this article still a stub?&lt;br /&gt;
[[category: tutorials]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14618</id>
		<title>Upgrading SlimServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14618"/>
		<updated>2008-07-02T15:20:55Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE (7.04) to a newer version of Squeezecenter.&lt;br /&gt;
&lt;br /&gt;
=Upgrade SlimServer=&lt;br /&gt;
* Download the version of [http://www.slimdevices.com/pi_features.html squeezecenter] you want to run to the core.&lt;br /&gt;
* cd to /usr/pluto/servers&lt;br /&gt;
* Backup the existing SlimServer directory.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv SlimServer SlimServer.lmce&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Move the downloaded file to /usr/pluto/servers and unarchive it.&lt;br /&gt;
* Make a soft link to the new directory.  This step just makes upgrades or downgrades go a little faster.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -s squeezecenter-some-version SlimServer  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add a user slimserver and a group slimserver  This is the default that Squeezecenter runs as&lt;br /&gt;
* Change the ownership of squeezecenter&#039;s directory to that of slimserver.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R slimserver:slimserver squeezecenter-some-version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you should be able to restart the dcerouter.  This should start the new version of squeezecenter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Configure Squeezecenter=&lt;br /&gt;
Squeezecenter needs a little configuration before it will work with LMCE&lt;br /&gt;
&lt;br /&gt;
* In a web browser, goto http://dcerouter:9000  This should bring up the squeezecenter interface.&lt;br /&gt;
* Click on settings in the lower right hand corner.&lt;br /&gt;
* Select Plugins from the menu at the top&lt;br /&gt;
* Select Command Line Interface (CLI)&lt;br /&gt;
* Set the port to 7890&lt;br /&gt;
* Click on Apply in the lower right hand corner&lt;br /&gt;
* restart the dcerouter from either the admin site or the console&lt;br /&gt;
&lt;br /&gt;
(more to come)&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[category: tutorials]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14535</id>
		<title>NOAA Weather</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14535"/>
		<updated>2008-06-28T02:45:41Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: Forgot a section of code&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;How to setup the NOAA Weather GSD&#039;&#039;&#039; (Rough Draft)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Template=&lt;br /&gt;
* Description - NOAA Weather&lt;br /&gt;
* Implements DCE&lt;br /&gt;
* Device Category - Environment Climate Device #83&lt;br /&gt;
* Comm Method - Ethernet&lt;br /&gt;
* Commands - Ruby internal commands&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=GSD Code=&lt;br /&gt;
* #395 Check for updates&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #396 Check for updates done&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather_done()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #373 Private Method Listing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Logging function&lt;br /&gt;
def log(word)&lt;br /&gt;
  $logFile.print( word + &amp;quot;\n&amp;quot; )&lt;br /&gt;
  $logFile.flush()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Weather check function&lt;br /&gt;
def check_weather()&lt;br /&gt;
  log(&amp;quot;Backing up previous data&amp;quot;)&lt;br /&gt;
  oldweather = $weather&lt;br /&gt;
  oldtemp = $temp&lt;br /&gt;
  oldpressure = $pressure&lt;br /&gt;
  olddew_point = $dew_point&lt;br /&gt;
  oldheat_index = $heat_index&lt;br /&gt;
  oldwindchill = $windchill&lt;br /&gt;
  oldhumidity = $humidity&lt;br /&gt;
  oldwind = $wind&lt;br /&gt;
  oldvisibility = $visibility&lt;br /&gt;
&lt;br /&gt;
  log(&amp;quot;Checking for weather updates&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Get xml file from NOAA&lt;br /&gt;
#  xmlPath = &amp;quot;www.weather.gov/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
#  h = &amp;quot;GET &amp;quot;+xmlPath+&amp;quot; HTTP/1.0\r\n&amp;quot;&lt;br /&gt;
#  log(&amp;quot;HTTP Request: #{h}&amp;quot;)&lt;br /&gt;
#  conn_.Send(h)&lt;br /&gt;
#  resv = &amp;quot;&amp;quot;&lt;br /&gt;
#  while(true)&lt;br /&gt;
#    buff = conn_.Recv(16384, 5000)&lt;br /&gt;
#    if buff.length() == 0&lt;br /&gt;
#      break&lt;br /&gt;
#    end&lt;br /&gt;
#    recv = recv + buff&lt;br /&gt;
#  end&lt;br /&gt;
  h = Net::HTTP.new(&#039;www.weather.gov&#039;, 80)&lt;br /&gt;
  data_loc = &amp;quot;/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
  resp, data = h.get(data_loc, nil)&lt;br /&gt;
&lt;br /&gt;
  if resp.message == &amp;quot;OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#  if recv =~ /^HTTP[^\r\n]+200\sOK.+?\r\n\r\n(.+)$/m&lt;br /&gt;
#    data = $1&lt;br /&gt;
#    log(&amp;quot;Recieved:\n#{data}&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
    data.each_line {|line|&lt;br /&gt;
      if line =~/location&amp;gt;(.*)&amp;lt;\/location&amp;gt;/&lt;br /&gt;
        $location = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/observation_time_rfc822&amp;gt;(.*)&amp;lt;\/observation_time_rfc822&amp;gt;/&lt;br /&gt;
        $obs_time = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/weather&amp;gt;(.*)&amp;lt;\/weather&amp;gt;/&lt;br /&gt;
        $weather = $1&lt;br /&gt;
      end&lt;br /&gt;
      if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
        if line =~/temp_f&amp;gt;(.*)&amp;lt;\/temp_f&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_in&amp;gt;(.*)&amp;lt;\/pressure_in&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_f&amp;gt;(.*)&amp;lt;\/dewpoint_f&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_f&amp;gt;(.*)&amp;lt;\/heat_index_f&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_f&amp;gt;(.*)&amp;lt;\/windchill_f&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      else&lt;br /&gt;
        if line =~/temp_c&amp;gt;(.*)&amp;lt;\/temp_c&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_mb&amp;gt;(.*)&amp;lt;\/pressure_mb&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_c&amp;gt;(.*)&amp;lt;\/dewpoint_c&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_c&amp;gt;(.*)&amp;lt;\/heat_index_c&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_c&amp;gt;(.*)&amp;lt;\/windchill_c&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/relative_humidity&amp;gt;(.*)&amp;lt;\/relative_humidity&amp;gt;/&lt;br /&gt;
        $humidity = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/wind_string&amp;gt;(.*)&amp;lt;\/wind_string&amp;gt;/&lt;br /&gt;
        $wind = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/visibility_mi&amp;gt;(.*)&amp;lt;\/visibility_mi&amp;gt;/&lt;br /&gt;
        $visibility = $1&lt;br /&gt;
      end&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
### Send out events for weather changes&lt;br /&gt;
  if $weather != oldweather&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 75 13 \&amp;quot;&amp;quot;+$weather+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if $temp != oldtemp&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 25 13 \&amp;quot;&amp;quot;+$temp+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  check_weather_done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Post weather check&lt;br /&gt;
def check_weather_done()&lt;br /&gt;
  log(&amp;quot;Weather data from: &amp;quot;+$obs_time)&lt;br /&gt;
  log(&amp;quot;Weather check complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #351 Process IDLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Auto check weather every quarter past the hour per NOAA&lt;br /&gt;
t = Time.now&lt;br /&gt;
&lt;br /&gt;
if t.min == 15&lt;br /&gt;
  t -= (60 * 60)&lt;br /&gt;
&lt;br /&gt;
  if $obs_time =~/(\d\d):\d\d:\d\d/&lt;br /&gt;
    obs_hour = $1&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if t.hour != obs_hour.to_i&lt;br /&gt;
    log(&amp;quot;Quarter past the hour and weather update needed&amp;quot;)&lt;br /&gt;
    check_weather()&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #355 Process Initialize&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# NOAA Weather check&lt;br /&gt;
# 2008 Jason Speckman&lt;br /&gt;
###&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
# Init Vars&lt;br /&gt;
&lt;br /&gt;
$logFile = File.new(&amp;quot;/var/log/pluto/NOAA_Weather.log&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Change these values to match device data values&lt;br /&gt;
$DEVICEDATA_ICAO_CONST = 249&lt;br /&gt;
$DEVICEDATA_UNITS_CONST = 250&lt;br /&gt;
&lt;br /&gt;
$units = &amp;quot;&amp;quot;&lt;br /&gt;
$identifier = &amp;quot;&amp;quot;&lt;br /&gt;
$location = &amp;quot;&amp;quot;&lt;br /&gt;
$obs_time = &amp;quot;&amp;quot;&lt;br /&gt;
$weather = &amp;quot;&amp;quot;&lt;br /&gt;
$temp = &amp;quot;&amp;quot;&lt;br /&gt;
$pressure = &amp;quot;&amp;quot;&lt;br /&gt;
$dew_point = &amp;quot;&amp;quot;&lt;br /&gt;
$heat_index = &amp;quot;&amp;quot;&lt;br /&gt;
$windchill = &amp;quot;&amp;quot;&lt;br /&gt;
$humidity = &amp;quot;&amp;quot;&lt;br /&gt;
$wind = &amp;quot;&amp;quot;&lt;br /&gt;
$visibility = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
### Check for identifier and units&lt;br /&gt;
if device_.devdata_ != nil&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_ICAO_CONST] != nil&lt;br /&gt;
    $identifier = device_.devdata_[$DEVICEDATA_ICAO_CONST]&lt;br /&gt;
    log(&amp;quot;ICAO identifier: &amp;quot;+$identifier)&lt;br /&gt;
  else&lt;br /&gt;
    log(&amp;quot;No ICAO identifier specified&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_UNITS_CONST] != nil&lt;br /&gt;
    $units = device_.devdata_[$DEVICEDATA_UNITS_CONST]&lt;br /&gt;
  else&lt;br /&gt;
    $units = &amp;quot;F&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Units in degrees &amp;quot;+$units)&lt;br /&gt;
&lt;br /&gt;
if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
  $press_units = &amp;quot;in. Hg&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  $press_units = &amp;quot;hPa&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### Tell DCE we are a climate device&lt;br /&gt;
log(&amp;quot;Starting NOAA Weather Check&amp;quot;)&lt;br /&gt;
log(&amp;quot;Setup message intercept for DCERouter&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
###&lt;br /&gt;
# devIDfrom: device_.devid_ = my device id&lt;br /&gt;
# devIDto: -1000 = dcerouter&lt;br /&gt;
# priority: &lt;br /&gt;
# type: 1 = command, 2 = event&lt;br /&gt;
# id: &lt;br /&gt;
&lt;br /&gt;
$devIDfrom = device_.devid_&lt;br /&gt;
devIDto = -1000&lt;br /&gt;
priority = &amp;quot;&amp;quot;&lt;br /&gt;
type = 2&lt;br /&gt;
id = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cmd = Command.new(devIDfrom, devIDto, priority, type, id)&lt;br /&gt;
#cmd.params_[x] = y&lt;br /&gt;
#SendCommand(cmd)&lt;br /&gt;
&lt;br /&gt;
#ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot; + device_.devid_.to_s + &amp;quot; -1000 8 0 5 2 4 10&amp;quot;&lt;br /&gt;
#system(ms)&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Init complete&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Initial weather check&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #356 Process Release&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logFile != nil) then&lt;br /&gt;
	$logFile.close&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Data=&lt;br /&gt;
(These variable numbers may be different, be sure to update them in the ruby code)&lt;br /&gt;
* #249 ICAO Location Indicator(string) - Comment: Local airport identifier for weather info - (Required and Allowed to modify checked)&lt;br /&gt;
* #250 Units(string) - Comment: Degree units.  Either (F) or (C) - (Required and Allowed to modify checked)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Events=&lt;br /&gt;
* Temperature Changed #25 - Comment: Temperature has changed since last update&lt;br /&gt;
* Weather Changed #75 - Comment: Weather has changed since last update&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Issues and TODO=&lt;br /&gt;
* Does not respond to events&lt;br /&gt;
* Only send weather info when there is a change from the previous weather check&lt;br /&gt;
* No way to ask for weather data from the device&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14534</id>
		<title>Upgrading SlimServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14534"/>
		<updated>2008-06-27T22:18:33Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE (7.04) to a newer version of Squeezecenter.&lt;br /&gt;
&lt;br /&gt;
=Upgrade SlimServer=&lt;br /&gt;
* Download the version of [http://www.slimdevices.com/pi_features.html squeezecenter] you want to run to the core.&lt;br /&gt;
* cd to /usr/pluto/servers&lt;br /&gt;
* Backup the existing SlimServer directory.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv SlimServer SlimServer.lmce&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Move the downloaded file to /usr/pluto/servers and unarchive it.&lt;br /&gt;
* Make a soft link to the new directory.  This step just makes upgrades or downgrades go a little faster.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -s squeezecenter-some-version SlimServer  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add a user slimserver and a group slimserver  This is the default that Squeezecenter runs as&lt;br /&gt;
* Change the ownership of squeezecenter&#039;s directory to that of slimserver.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R slimserver:slimserver squeezecenter-some-version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you should be able to restart the dcerouter.  This should start the new version of squeezecenter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Configure Squeezecenter=&lt;br /&gt;
Squeezecenter needs a little configuration before it will work with LMCE&lt;br /&gt;
&lt;br /&gt;
* In a web browser, goto http://dcerouter:9000  This should bring up the squeezecenter interface.&lt;br /&gt;
* Click on settings in the lower right hand corner.&lt;br /&gt;
* Select Plugins from the menu at the top&lt;br /&gt;
* Select Command Line Interface (CLI)&lt;br /&gt;
* Set the port to 7890&lt;br /&gt;
* Click on Apply in the lower right hand corner&lt;br /&gt;
&lt;br /&gt;
(more to come)&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[category: tutorials]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14507</id>
		<title>Upgrading SlimServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14507"/>
		<updated>2008-06-27T17:53:58Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE (7.04) to a newer version of Squeezecenter.&lt;br /&gt;
&lt;br /&gt;
=Upgrade SlimServer=&lt;br /&gt;
* Download the version of [http://www.slimdevices.com/pi_features.html squeezecenter] you want to run to the core.&lt;br /&gt;
* cd to /usr/pluto/servers&lt;br /&gt;
* Backup the existing SlimServer directory.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mv SlimServer SlimServer.lmce&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Move the downloaded file to /usr/pluto/servers and unarchive it.&lt;br /&gt;
* Make a soft link to the new directory.  This step just makes upgrades or downgrades go a little faster.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -s squeezecenter-some-version SlimServer  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Add a user slimserver and a group slimserver  This is the default that Squeezecenter runs as&lt;br /&gt;
* Change the ownership of squeezecenter&#039;s directory to that of slimserver.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chown -R slimserver:slimserver squeezecenter-some-version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you should be able to restart the dcerouter.  This should start the new version of squeezecenter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Configure Squeezecenter=&lt;br /&gt;
Squeezecenter needs a little configuration before it will work with LMCE&lt;br /&gt;
&lt;br /&gt;
* In a web browser, goto http://dcerouter:9000  This should bring up the squeezecenter interface.&lt;br /&gt;
* Click on setup in the lower right hand corner.&lt;br /&gt;
&lt;br /&gt;
(more to come)&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[category: tutorials]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Squeezeslave_on_the_core&amp;diff=14506</id>
		<title>Squeezeslave on the core</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Squeezeslave_on_the_core&amp;diff=14506"/>
		<updated>2008-06-27T17:41:03Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Tutorials]]&lt;br /&gt;
{| align=&amp;quot;right&amp;quot;&lt;br /&gt;
  | __TOC__&lt;br /&gt;
  |}&lt;br /&gt;
==Squeezeslave Setup==&lt;br /&gt;
Here&#039;s how to setup squeezeslave to run on the core.  It&#039;s fairly straight forward.  One small issue is that because squeezeslave uses the OSS interface, you will need a separate sound card for each instance of squeezeslave you want to run.&lt;br /&gt;
===Download Source===&lt;br /&gt;
First download a version of [http://sourceforge.net/project/showfiles.php?group_id=105169 Squeezeslave].  I&#039;m running the latest version as it fixed some playback bugs I was having, but any version that works with you&#039;re setup should be fine. &lt;br /&gt;
===Installing=== &lt;br /&gt;
*You&#039;ll want to put it somewhere in you&#039;re path.  &lt;br /&gt;
**Example: /usr/local/bin&lt;br /&gt;
====Modify /etc/rc.local====&lt;br /&gt;
Next add the following to /etc/rc.local (this is my setup for two)&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:01 -o 0 -s -r &amp;amp;&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:02 -o 1 -s -r &amp;amp;&lt;br /&gt;
&lt;br /&gt;
* the MAC address can be whatever you want&lt;br /&gt;
* the -o option specifies which OSS output device ie /dev/dsp1&lt;br /&gt;
* the -s option tells squeezeslave to wait for a signal to quit rather than control-C&lt;br /&gt;
* the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.&lt;br /&gt;
===Setting Up Alsamixer===&lt;br /&gt;
Next make sure all the volume levels in the mixer (alsamixer) are set correctly&lt;br /&gt;
  alsamixer&lt;br /&gt;
Make sure that the settings are as desired and save (Esc button)&lt;br /&gt;
===Setting Up LinuxMCE===&lt;br /&gt;
&lt;br /&gt;
Next step, manually add the squeezeslave to linuxmce as a squeezebox using the mac address you gave it.  &lt;br /&gt;
&lt;br /&gt;
====Select Device====&lt;br /&gt;
* Select &#039;&#039;&#039;Device-&amp;gt;A/V Equipment&#039;&#039;&#039;&lt;br /&gt;
* Select SqueezeBox Player from the dropdown options&lt;br /&gt;
* Assign it to a room and entertainment area.  &lt;br /&gt;
* Regen your orbiters and reload the router.&lt;br /&gt;
&lt;br /&gt;
== LMCE init script ==&lt;br /&gt;
Copy attached script text into a file named /etc/init.d/squeezeslave&lt;br /&gt;
&lt;br /&gt;
=== Startup Script ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#! /bin/sh&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          squeezeslave&lt;br /&gt;
# Required-Start:    $local_fs $remote_fs&lt;br /&gt;
# Required-Stop:     $local_fs $remote_fs&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      S 0 1 6&lt;br /&gt;
# Short-Description: Initscript for squeezeslave&lt;br /&gt;
# Description:       This init script make it possible to start squeezeslave as a daemon&lt;br /&gt;
#                    It is placed in /etc/init.d.&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
# Author: Magnus Nilsson &amp;lt;magnus@karabas.nu&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# PATH should only include /usr/* if it runs after the mountnfs.sh script&lt;br /&gt;
PATH=/usr/sbin:/usr/bin:/sbin:/bin&lt;br /&gt;
DESC=&amp;quot;Squeezeslave dameon&amp;quot;&lt;br /&gt;
NAME=squeezeslave&lt;br /&gt;
DAEMON=/root/squeezeslave-0.7.1/$NAME&lt;br /&gt;
DAEMON_ARGS=&amp;quot;-o 1 -m 00:04:20:00:00:01 -r -s 192.168.80.1&amp;quot;&lt;br /&gt;
PIDFILE=/var/run/$NAME.pid&lt;br /&gt;
SCRIPTNAME=/etc/init.d/$NAME&lt;br /&gt;
&lt;br /&gt;
# Exit if the package is not installed&lt;br /&gt;
[ -x &amp;quot;$DAEMON&amp;quot; ] || exit 0&lt;br /&gt;
&lt;br /&gt;
# Read configuration variable file if it is present&lt;br /&gt;
[ -r /etc/default/$NAME ] &amp;amp;&amp;amp; . /etc/default/$NAME&lt;br /&gt;
&lt;br /&gt;
# Load the VERBOSE setting and other rcS variables&lt;br /&gt;
[ -f /etc/default/rcS ] &amp;amp;&amp;amp; . /etc/default/rcS&lt;br /&gt;
&lt;br /&gt;
# Define LSB log_* functions.&lt;br /&gt;
# Depend on lsb-base (&amp;gt;= 3.0-6) to ensure that this file is present.&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Function that starts the daemon/service&lt;br /&gt;
#&lt;br /&gt;
do_start()&lt;br /&gt;
{&lt;br /&gt;
        # Return&lt;br /&gt;
        #   0 if daemon has been started&lt;br /&gt;
        #   1 if daemon was already running&lt;br /&gt;
        #   2 if daemon could not be started&lt;br /&gt;
        start-stop-daemon --start -b --quiet --pidfile $PIDFILE --exec $DAEMON --test &amp;gt; /dev/null \&lt;br /&gt;
                || return 1&lt;br /&gt;
        start-stop-daemon --start -b --quiet --pidfile $PIDFILE --exec $DAEMON -- \&lt;br /&gt;
                $DAEMON_ARGS \&lt;br /&gt;
                || return 2&lt;br /&gt;
        # Add code here, if necessary, that waits for the process to be ready&lt;br /&gt;
        # to handle requests from services started subsequently which depend&lt;br /&gt;
        # on this one.  As a last resort, sleep for some time.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Function that stops the daemon/service&lt;br /&gt;
#&lt;br /&gt;
do_stop()&lt;br /&gt;
{&lt;br /&gt;
        # Return&lt;br /&gt;
        #   0 if daemon has been stopped&lt;br /&gt;
        #   1 if daemon was already stopped&lt;br /&gt;
        #   2 if daemon could not be stopped&lt;br /&gt;
        #   other if a failure occurred&lt;br /&gt;
        start-stop-daemon --stop --quiet --retry=TERM/3/KILL/5 --pidfile $PIDFILE --name $NAME&lt;br /&gt;
        RETVAL=&amp;quot;$?&amp;quot;&lt;br /&gt;
        [ &amp;quot;$RETVAL&amp;quot; = 2 ] &amp;amp;&amp;amp; return 2&lt;br /&gt;
        # Wait for children to finish too if this is a daemon that forks&lt;br /&gt;
        # and if the daemon is only ever run from this initscript.&lt;br /&gt;
        # If the above conditions are not satisfied then add some other code&lt;br /&gt;
        # that waits for the process to drop all resources that could be&lt;br /&gt;
        # needed by services started subsequently.  A last resort is to&lt;br /&gt;
        # sleep for some time.&lt;br /&gt;
        start-stop-daemon --stop --quiet --oknodo --retry=0/3/KILL/5 --exec $DAEMON&lt;br /&gt;
        [ &amp;quot;$?&amp;quot; = 2 ] &amp;amp;&amp;amp; return 2&lt;br /&gt;
        # Many daemons don&#039;t delete their pidfiles when they exit.&lt;br /&gt;
        rm -f $PIDFILE&lt;br /&gt;
        return &amp;quot;$RETVAL&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Function that sends a SIGHUP to the daemon/service&lt;br /&gt;
#&lt;br /&gt;
do_reload() {&lt;br /&gt;
        #&lt;br /&gt;
        # If the daemon can reload its configuration without&lt;br /&gt;
        # restarting (for example, when it is sent a SIGHUP),&lt;br /&gt;
        # then implement that here.&lt;br /&gt;
        #&lt;br /&gt;
        start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME&lt;br /&gt;
        return 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
        [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_daemon_msg &amp;quot;Starting $DESC&amp;quot; &amp;quot;$NAME&amp;quot;&lt;br /&gt;
        do_start&lt;br /&gt;
        case &amp;quot;$?&amp;quot; in&lt;br /&gt;
                0|1) [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_end_msg 0 ;;&lt;br /&gt;
                2) [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_end_msg 1 ;;&lt;br /&gt;
        esac&lt;br /&gt;
        ;;&lt;br /&gt;
  stop)&lt;br /&gt;
        [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_daemon_msg &amp;quot;Stopping $DESC&amp;quot; &amp;quot;$NAME&amp;quot;&lt;br /&gt;
        do_stop&lt;br /&gt;
        case &amp;quot;$?&amp;quot; in&lt;br /&gt;
                0|1) [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_end_msg 0 ;;&lt;br /&gt;
                2) [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_end_msg 1 ;;&lt;br /&gt;
        esac&lt;br /&gt;
        ;;&lt;br /&gt;
  #reload|force-reload)&lt;br /&gt;
        #&lt;br /&gt;
        # If do_reload() is not implemented then leave this commented out&lt;br /&gt;
        # and leave &#039;force-reload&#039; as an alias for &#039;restart&#039;.&lt;br /&gt;
        #&lt;br /&gt;
        #log_daemon_msg &amp;quot;Reloading $DESC&amp;quot; &amp;quot;$NAME&amp;quot;&lt;br /&gt;
        #do_reload&lt;br /&gt;
        #log_end_msg $?&lt;br /&gt;
        #;;&lt;br /&gt;
  restart|force-reload)&lt;br /&gt;
        #&lt;br /&gt;
        # If the &amp;quot;reload&amp;quot; option is implemented then remove the&lt;br /&gt;
        # &#039;force-reload&#039; alias&lt;br /&gt;
        #&lt;br /&gt;
        log_daemon_msg &amp;quot;Restarting $DESC&amp;quot; &amp;quot;$NAME&amp;quot;&lt;br /&gt;
        do_stop&lt;br /&gt;
        case &amp;quot;$?&amp;quot; in&lt;br /&gt;
          0|1)&lt;br /&gt;
                do_start&lt;br /&gt;
                case &amp;quot;$?&amp;quot; in&lt;br /&gt;
                        0) log_end_msg 0 ;;&lt;br /&gt;
                        1) log_end_msg 1 ;; # Old process is still running&lt;br /&gt;
                        *) log_end_msg 1 ;; # Failed to start&lt;br /&gt;
                esac&lt;br /&gt;
                ;;&lt;br /&gt;
          *)&lt;br /&gt;
                # Failed to stop&lt;br /&gt;
                log_end_msg 1&lt;br /&gt;
                ;;&lt;br /&gt;
        esac&lt;br /&gt;
        ;;&lt;br /&gt;
  *)&lt;br /&gt;
        #echo &amp;quot;Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
        echo &amp;quot;Usage: $SCRIPTNAME {start|stop|restart|force-reload}&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
        exit 3&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Make script executable===&lt;br /&gt;
 sudo chmod +x /etc/init.d/squeezeslave&lt;br /&gt;
===Modify Parameters===&lt;br /&gt;
Modify parameters in the beginning of the file to suite your needs. &lt;br /&gt;
* MAC address&lt;br /&gt;
* slimserver host&lt;br /&gt;
* binary location&lt;br /&gt;
* soundcard device.&lt;br /&gt;
&lt;br /&gt;
Below is the parameters you should change:&lt;br /&gt;
&lt;br /&gt;
 NAME=squeezeslave&lt;br /&gt;
 DAEMON=/root/squeezeslave-0.7.1/$NAME&lt;br /&gt;
 DAEMON_ARGS=&amp;quot;-o 1 -m 00:04:20:00:00:01 -r -s 192.168.80.1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Setup to Run at Start Up===&lt;br /&gt;
* Run from shell:&lt;br /&gt;
&lt;br /&gt;
  sudo default-rd.d /etc/init.d/squeezeslave default 50&lt;br /&gt;
&lt;br /&gt;
* You should now be able to start/stop squeezeslave from shell.&lt;br /&gt;
 &lt;br /&gt;
 sudo /etc/init.d/squeezeslave start&lt;br /&gt;
&lt;br /&gt;
* Check with ps if it is running:&lt;br /&gt;
  ps aux | grep squeezeslave&lt;br /&gt;
**Example output:&lt;br /&gt;
 root      9007  0.0  0.3  64116  5436 ?        Sl   Jun18   0:03 /root/squeezeslave-0.7.1/squeezeslave -o 1 -m    00:04:20:00:00:01 -r -s 192.168.80.1&lt;br /&gt;
&lt;br /&gt;
*To stop:&lt;br /&gt;
&lt;br /&gt;
 sudo /etc/init.d/squeezeslave stop&lt;br /&gt;
&lt;br /&gt;
* Restart your core and check if everything start as it should, including squeezeslave.&lt;br /&gt;
&lt;br /&gt;
That should do it.&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14493</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14493"/>
		<updated>2008-06-27T15:45:00Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=My Setup=&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
===Dedicated Core===&lt;br /&gt;
* 4U Rackmount case&lt;br /&gt;
* 350 watt PSU&lt;br /&gt;
* Dual Pentium 3 (1ghz)&lt;br /&gt;
* 2 Gb ram&lt;br /&gt;
* Onboard 100mb ethernet (external net)&lt;br /&gt;
* 64bit pci 1gb fiber card (internal net)&lt;br /&gt;
* 2 SB Live! cards&lt;br /&gt;
* 1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
* 1 80 Gb drive (system and audio media)&lt;br /&gt;
* 1 250 GB drive (video media)&lt;br /&gt;
* 1 CDROM drive&lt;br /&gt;
&lt;br /&gt;
===Media Directors===&lt;br /&gt;
* None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
===Orbiters===&lt;br /&gt;
* Web orbiter&lt;br /&gt;
* Windows orbiter installed under wine&lt;br /&gt;
&lt;br /&gt;
===Automation===&lt;br /&gt;
* 1 CM11A&lt;br /&gt;
* A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* 2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
* All speaker wiring goes to a central location in the basement.&lt;br /&gt;
* Volume is controlled via mechanical volume knobs in each room.&lt;br /&gt;
* Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.&lt;br /&gt;
* Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
===Climate===&lt;br /&gt;
* DS9490R w/ no sensors currently attached&lt;br /&gt;
* GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
* Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
* [[Squeezeslave on the core]] for distributed audio&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14491</id>
		<title>Upgrading SlimServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14491"/>
		<updated>2008-06-27T14:27:25Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE (7.04) to a newer version of Squeezecenter.&lt;br /&gt;
&lt;br /&gt;
* Download the version of [http://www.slimdevices.com/pi_features.html squeezecenter] you want to run to the core.&lt;br /&gt;
* cd to /usr/pluto/servers&lt;br /&gt;
* Backup the existing SlimServer directory.  ie mv SlimServer SlimServer.lmce&lt;br /&gt;
* Move the downloaded file to /usr/pluto/servers and unarchive it.&lt;br /&gt;
* Make a soft link to the new directory.  ln -s squeezecenter-some-version SlimServer  This step just makes upgrades or downgrades go a little faster.&lt;br /&gt;
* Add a user slimserver and a group slimserver  This is the default that Squeezecenter runs as&lt;br /&gt;
* Change the ownership of squeezecenter&#039;s directory to that of slimserver.  chown -R slimserver:slimserver squeezecenter-some-version&lt;br /&gt;
&lt;br /&gt;
At this point you should be able to restart the dcerouter.  This should start the new version of squeezecenter&lt;br /&gt;
&lt;br /&gt;
(more to come)&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[category: tutorials]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14490</id>
		<title>NOAA Weather</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14490"/>
		<updated>2008-06-27T14:13:47Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;How to setup the NOAA Weather GSD&#039;&#039;&#039; (Rough Draft)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Template=&lt;br /&gt;
* Description - NOAA Weather&lt;br /&gt;
* Implements DCE&lt;br /&gt;
* Device Category - Environment Climate Device #83&lt;br /&gt;
* Comm Method - Ethernet&lt;br /&gt;
* Commands - Ruby internal commands&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=GSD Code=&lt;br /&gt;
* #395 Check for updates&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #396 Check for updates done&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather_done()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #373 Private Method Listing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Logging function&lt;br /&gt;
def log(word)&lt;br /&gt;
  $logFile.print( word + &amp;quot;\n&amp;quot; )&lt;br /&gt;
  $logFile.flush()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Weather check function&lt;br /&gt;
def check_weather()&lt;br /&gt;
  log(&amp;quot;Backing up previous data&amp;quot;)&lt;br /&gt;
  oldweather = $weather&lt;br /&gt;
  oldtemp = $temp&lt;br /&gt;
  oldpressure = $pressure&lt;br /&gt;
  olddew_point = $dew_point&lt;br /&gt;
  oldheat_index = $heat_index&lt;br /&gt;
  oldwindchill = $windchill&lt;br /&gt;
  oldhumidity = $humidity&lt;br /&gt;
  oldwind = $wind&lt;br /&gt;
  oldvisibility = $visibility&lt;br /&gt;
&lt;br /&gt;
  log(&amp;quot;Checking for weather updates&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Get xml file from NOAA&lt;br /&gt;
#  xmlPath = &amp;quot;www.weather.gov/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
#  h = &amp;quot;GET &amp;quot;+xmlPath+&amp;quot; HTTP/1.0\r\n&amp;quot;&lt;br /&gt;
#  log(&amp;quot;HTTP Request: #{h}&amp;quot;)&lt;br /&gt;
#  conn_.Send(h)&lt;br /&gt;
#  resv = &amp;quot;&amp;quot;&lt;br /&gt;
#  while(true)&lt;br /&gt;
#    buff = conn_.Recv(16384, 5000)&lt;br /&gt;
#    if buff.length() == 0&lt;br /&gt;
#      break&lt;br /&gt;
#    end&lt;br /&gt;
#    recv = recv + buff&lt;br /&gt;
#  end&lt;br /&gt;
  h = Net::HTTP.new(&#039;www.weather.gov&#039;, 80)&lt;br /&gt;
  data_loc = &amp;quot;/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
  resp, data = h.get(data_loc, nil)&lt;br /&gt;
&lt;br /&gt;
  if resp.message == &amp;quot;OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#  if recv =~ /^HTTP[^\r\n]+200\sOK.+?\r\n\r\n(.+)$/m&lt;br /&gt;
#    data = $1&lt;br /&gt;
#    log(&amp;quot;Recieved:\n#{data}&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
    data.each_line {|line|&lt;br /&gt;
      if line =~/location&amp;gt;(.*)&amp;lt;\/location&amp;gt;/&lt;br /&gt;
        $location = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/observation_time_rfc822&amp;gt;(.*)&amp;lt;\/observation_time_rfc822&amp;gt;/&lt;br /&gt;
        $obs_time = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/weather&amp;gt;(.*)&amp;lt;\/weather&amp;gt;/&lt;br /&gt;
        $weather = $1&lt;br /&gt;
      end&lt;br /&gt;
      if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
        if line =~/temp_f&amp;gt;(.*)&amp;lt;\/temp_f&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_in&amp;gt;(.*)&amp;lt;\/pressure_in&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_f&amp;gt;(.*)&amp;lt;\/dewpoint_f&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_f&amp;gt;(.*)&amp;lt;\/heat_index_f&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_f&amp;gt;(.*)&amp;lt;\/windchill_f&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      else&lt;br /&gt;
        if line =~/temp_c&amp;gt;(.*)&amp;lt;\/temp_c&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_mb&amp;gt;(.*)&amp;lt;\/pressure_mb&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_c&amp;gt;(.*)&amp;lt;\/dewpoint_c&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_c&amp;gt;(.*)&amp;lt;\/heat_index_c&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_c&amp;gt;(.*)&amp;lt;\/windchill_c&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/relative_humidity&amp;gt;(.*)&amp;lt;\/relative_humidity&amp;gt;/&lt;br /&gt;
        $humidity = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/wind_string&amp;gt;(.*)&amp;lt;\/wind_string&amp;gt;/&lt;br /&gt;
        $wind = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/visibility_mi&amp;gt;(.*)&amp;lt;\/visibility_mi&amp;gt;/&lt;br /&gt;
        $visibility = $1&lt;br /&gt;
      end&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
### Send out events for weather changes&lt;br /&gt;
  if $weather != oldweather&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 75 13 \&amp;quot;&amp;quot;+$weather+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if $temp != oldtemp&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 25 13 \&amp;quot;&amp;quot;+$temp+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  check_weather_done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Post weather check&lt;br /&gt;
def check_weather_done()&lt;br /&gt;
  log(&amp;quot;Weather data from: &amp;quot;+$obs_time)&lt;br /&gt;
  log(&amp;quot;Weather check complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #351 Process IDLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Auto check weather every quarter past the hour per NOAA&lt;br /&gt;
t = Time.now&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #355 Process Initialize&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# NOAA Weather check&lt;br /&gt;
# 2008 Jason Speckman&lt;br /&gt;
###&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
# Init Vars&lt;br /&gt;
&lt;br /&gt;
$logFile = File.new(&amp;quot;/var/log/pluto/NOAA_Weather.log&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Change these values to match device data values&lt;br /&gt;
$DEVICEDATA_ICAO_CONST = 249&lt;br /&gt;
$DEVICEDATA_UNITS_CONST = 250&lt;br /&gt;
&lt;br /&gt;
$units = &amp;quot;&amp;quot;&lt;br /&gt;
$identifier = &amp;quot;&amp;quot;&lt;br /&gt;
$location = &amp;quot;&amp;quot;&lt;br /&gt;
$obs_time = &amp;quot;&amp;quot;&lt;br /&gt;
$weather = &amp;quot;&amp;quot;&lt;br /&gt;
$temp = &amp;quot;&amp;quot;&lt;br /&gt;
$pressure = &amp;quot;&amp;quot;&lt;br /&gt;
$dew_point = &amp;quot;&amp;quot;&lt;br /&gt;
$heat_index = &amp;quot;&amp;quot;&lt;br /&gt;
$windchill = &amp;quot;&amp;quot;&lt;br /&gt;
$humidity = &amp;quot;&amp;quot;&lt;br /&gt;
$wind = &amp;quot;&amp;quot;&lt;br /&gt;
$visibility = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
### Check for identifier and units&lt;br /&gt;
if device_.devdata_ != nil&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_ICAO_CONST] != nil&lt;br /&gt;
    $identifier = device_.devdata_[$DEVICEDATA_ICAO_CONST]&lt;br /&gt;
    log(&amp;quot;ICAO identifier: &amp;quot;+$identifier)&lt;br /&gt;
  else&lt;br /&gt;
    log(&amp;quot;No ICAO identifier specified&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_UNITS_CONST] != nil&lt;br /&gt;
    $units = device_.devdata_[$DEVICEDATA_UNITS_CONST]&lt;br /&gt;
  else&lt;br /&gt;
    $units = &amp;quot;F&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Units in degrees &amp;quot;+$units)&lt;br /&gt;
&lt;br /&gt;
if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
  $press_units = &amp;quot;in. Hg&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  $press_units = &amp;quot;hPa&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### Tell DCE we are a climate device&lt;br /&gt;
log(&amp;quot;Starting NOAA Weather Check&amp;quot;)&lt;br /&gt;
log(&amp;quot;Setup message intercept for DCERouter&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
###&lt;br /&gt;
# devIDfrom: device_.devid_ = my device id&lt;br /&gt;
# devIDto: -1000 = dcerouter&lt;br /&gt;
# priority: &lt;br /&gt;
# type: 1 = command, 2 = event&lt;br /&gt;
# id: &lt;br /&gt;
&lt;br /&gt;
$devIDfrom = device_.devid_&lt;br /&gt;
devIDto = -1000&lt;br /&gt;
priority = &amp;quot;&amp;quot;&lt;br /&gt;
type = 2&lt;br /&gt;
id = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cmd = Command.new(devIDfrom, devIDto, priority, type, id)&lt;br /&gt;
#cmd.params_[x] = y&lt;br /&gt;
#SendCommand(cmd)&lt;br /&gt;
&lt;br /&gt;
#ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot; + device_.devid_.to_s + &amp;quot; -1000 8 0 5 2 4 10&amp;quot;&lt;br /&gt;
#system(ms)&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Init complete&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Initial weather check&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #356 Process Release&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logFile != nil) then&lt;br /&gt;
	$logFile.close&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Data=&lt;br /&gt;
(These variable numbers may be different, be sure to update them in the ruby code)&lt;br /&gt;
* #249 ICAO Location Indicator(string) - Comment: Local airport identifier for weather info - (Required and Allowed to modify checked)&lt;br /&gt;
* #250 Units(string) - Comment: Degree units.  Either (F) or (C) - (Required and Allowed to modify checked)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Events=&lt;br /&gt;
* Temperature Changed #25 - Comment: Temperature has changed since last update&lt;br /&gt;
* Weather Changed #75 - Comment: Weather has changed since last update&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Issues and TODO=&lt;br /&gt;
* Does not respond to events&lt;br /&gt;
* Only send weather info when there is a change from the previous weather check&lt;br /&gt;
* No way to ask for weather data from the device&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14489</id>
		<title>NOAA Weather</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14489"/>
		<updated>2008-06-27T14:11:50Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;How to setup the NOAA Weather GSD&#039;&#039;&#039; (Rough Draft)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Template=&lt;br /&gt;
* Description - NOAA Weather&lt;br /&gt;
* Implements DCE&lt;br /&gt;
* Device Category - Environment Climate Device #83&lt;br /&gt;
* Comm Method - Ethernet&lt;br /&gt;
* Commands - Ruby internal commands&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=GSD Code=&lt;br /&gt;
* #395 Check for updates&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #396 Check for updates done&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather_done()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #373 Private Method Listing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Logging function&lt;br /&gt;
def log(word)&lt;br /&gt;
  $logFile.print( word + &amp;quot;\n&amp;quot; )&lt;br /&gt;
  $logFile.flush()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Weather check function&lt;br /&gt;
def check_weather()&lt;br /&gt;
  log(&amp;quot;Backing up previous data&amp;quot;)&lt;br /&gt;
  oldweather = $weather&lt;br /&gt;
  oldtemp = $temp&lt;br /&gt;
  oldpressure = $pressure&lt;br /&gt;
  olddew_point = $dew_point&lt;br /&gt;
  oldheat_index = $heat_index&lt;br /&gt;
  oldwindchill = $windchill&lt;br /&gt;
  oldhumidity = $humidity&lt;br /&gt;
  oldwind = $wind&lt;br /&gt;
  oldvisibility = $visibility&lt;br /&gt;
&lt;br /&gt;
  log(&amp;quot;Checking for weather updates&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Get xml file from NOAA&lt;br /&gt;
#  xmlPath = &amp;quot;www.weather.gov/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
#  h = &amp;quot;GET &amp;quot;+xmlPath+&amp;quot; HTTP/1.0\r\n&amp;quot;&lt;br /&gt;
#  log(&amp;quot;HTTP Request: #{h}&amp;quot;)&lt;br /&gt;
#  conn_.Send(h)&lt;br /&gt;
#  resv = &amp;quot;&amp;quot;&lt;br /&gt;
#  while(true)&lt;br /&gt;
#    buff = conn_.Recv(16384, 5000)&lt;br /&gt;
#    if buff.length() == 0&lt;br /&gt;
#      break&lt;br /&gt;
#    end&lt;br /&gt;
#    recv = recv + buff&lt;br /&gt;
#  end&lt;br /&gt;
  h = Net::HTTP.new(&#039;www.weather.gov&#039;, 80)&lt;br /&gt;
  data_loc = &amp;quot;/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
  resp, data = h.get(data_loc, nil)&lt;br /&gt;
&lt;br /&gt;
  if resp.message == &amp;quot;OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#  if recv =~ /^HTTP[^\r\n]+200\sOK.+?\r\n\r\n(.+)$/m&lt;br /&gt;
#    data = $1&lt;br /&gt;
#    log(&amp;quot;Recieved:\n#{data}&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
    data.each_line {|line|&lt;br /&gt;
      if line =~/location&amp;gt;(.*)&amp;lt;\/location&amp;gt;/&lt;br /&gt;
        $location = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/observation_time_rfc822&amp;gt;(.*)&amp;lt;\/observation_time_rfc822&amp;gt;/&lt;br /&gt;
        $obs_time = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/weather&amp;gt;(.*)&amp;lt;\/weather&amp;gt;/&lt;br /&gt;
        $weather = $1&lt;br /&gt;
      end&lt;br /&gt;
      if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
        if line =~/temp_f&amp;gt;(.*)&amp;lt;\/temp_f&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_in&amp;gt;(.*)&amp;lt;\/pressure_in&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_f&amp;gt;(.*)&amp;lt;\/dewpoint_f&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_f&amp;gt;(.*)&amp;lt;\/heat_index_f&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_f&amp;gt;(.*)&amp;lt;\/windchill_f&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      else&lt;br /&gt;
        if line =~/temp_c&amp;gt;(.*)&amp;lt;\/temp_c&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_mb&amp;gt;(.*)&amp;lt;\/pressure_mb&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_c&amp;gt;(.*)&amp;lt;\/dewpoint_c&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_c&amp;gt;(.*)&amp;lt;\/heat_index_c&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_c&amp;gt;(.*)&amp;lt;\/windchill_c&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/relative_humidity&amp;gt;(.*)&amp;lt;\/relative_humidity&amp;gt;/&lt;br /&gt;
        $humidity = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/wind_string&amp;gt;(.*)&amp;lt;\/wind_string&amp;gt;/&lt;br /&gt;
        $wind = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/visibility_mi&amp;gt;(.*)&amp;lt;\/visibility_mi&amp;gt;/&lt;br /&gt;
        $visibility = $1&lt;br /&gt;
      end&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
### Send out events for weather changes&lt;br /&gt;
  if $weather != oldweather&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 75 13 \&amp;quot;&amp;quot;+$weather+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if $temp != oldtemp&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 25 13 \&amp;quot;&amp;quot;+$temp+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  check_weather_done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Post weather check&lt;br /&gt;
def check_weather_done()&lt;br /&gt;
  log(&amp;quot;Weather data from: &amp;quot;+$obs_time)&lt;br /&gt;
  log(&amp;quot;Weather check complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #351 Process IDLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Auto check weather every quarter past the hour per NOAA&lt;br /&gt;
t = Time.now&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #355 Process Initialize&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# NOAA Weather check&lt;br /&gt;
# 2008 Jason Speckman&lt;br /&gt;
###&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
# Init Vars&lt;br /&gt;
&lt;br /&gt;
$logFile = File.new(&amp;quot;/var/log/pluto/NOAA_Weather.log&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Change these values to match device data values&lt;br /&gt;
$DEVICEDATA_ICAO_CONST = 249&lt;br /&gt;
$DEVICEDATA_UNITS_CONST = 250&lt;br /&gt;
&lt;br /&gt;
$units = &amp;quot;&amp;quot;&lt;br /&gt;
$identifier = &amp;quot;&amp;quot;&lt;br /&gt;
$location = &amp;quot;&amp;quot;&lt;br /&gt;
$obs_time = &amp;quot;&amp;quot;&lt;br /&gt;
$weather = &amp;quot;&amp;quot;&lt;br /&gt;
$temp = &amp;quot;&amp;quot;&lt;br /&gt;
$pressure = &amp;quot;&amp;quot;&lt;br /&gt;
$dew_point = &amp;quot;&amp;quot;&lt;br /&gt;
$heat_index = &amp;quot;&amp;quot;&lt;br /&gt;
$windchill = &amp;quot;&amp;quot;&lt;br /&gt;
$humidity = &amp;quot;&amp;quot;&lt;br /&gt;
$wind = &amp;quot;&amp;quot;&lt;br /&gt;
$visibility = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
### Check for identifier and units&lt;br /&gt;
if device_.devdata_ != nil&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_ICAO_CONST] != nil&lt;br /&gt;
    $identifier = device_.devdata_[$DEVICEDATA_ICAO_CONST]&lt;br /&gt;
    log(&amp;quot;ICAO identifier: &amp;quot;+$identifier)&lt;br /&gt;
  else&lt;br /&gt;
    log(&amp;quot;No ICAO identifier specified&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_UNITS_CONST] != nil&lt;br /&gt;
    $units = device_.devdata_[$DEVICEDATA_UNITS_CONST]&lt;br /&gt;
  else&lt;br /&gt;
    $units = &amp;quot;F&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Units in degrees &amp;quot;+$units)&lt;br /&gt;
&lt;br /&gt;
if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
  $press_units = &amp;quot;in. Hg&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  $press_units = &amp;quot;hPa&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### Tell DCE we are a climate device&lt;br /&gt;
log(&amp;quot;Starting NOAA Weather Check&amp;quot;)&lt;br /&gt;
log(&amp;quot;Setup message intercept for DCERouter&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
###&lt;br /&gt;
# devIDfrom: device_.devid_ = my device id&lt;br /&gt;
# devIDto: -1000 = dcerouter&lt;br /&gt;
# priority: &lt;br /&gt;
# type: 1 = command, 2 = event&lt;br /&gt;
# id: &lt;br /&gt;
&lt;br /&gt;
$devIDfrom = device_.devid_&lt;br /&gt;
devIDto = -1000&lt;br /&gt;
priority = &amp;quot;&amp;quot;&lt;br /&gt;
type = 2&lt;br /&gt;
id = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cmd = Command.new(devIDfrom, devIDto, priority, type, id)&lt;br /&gt;
#cmd.params_[x] = y&lt;br /&gt;
#SendCommand(cmd)&lt;br /&gt;
&lt;br /&gt;
#ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot; + device_.devid_.to_s + &amp;quot; -1000 8 0 5 2 4 10&amp;quot;&lt;br /&gt;
#system(ms)&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Init complete&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Initial weather check&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #356 Process Release&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logFile != nil) then&lt;br /&gt;
	$logFile.close&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Data=&lt;br /&gt;
* #249 ICAO Location Indicator(string) - Comment: Local airport identifier for weather info - (Required and Allowed to modify checked)&lt;br /&gt;
* #250 Units(string) - Comment: Degree units.  Either (F) or (C) - (Required and Allowed to modify checked)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Events=&lt;br /&gt;
* Temperature Changed #25 - Comment: Temperature has changed since last update&lt;br /&gt;
* Weather Changed #75 - Comment: Weather has changed since last update&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Issues and TODO=&lt;br /&gt;
* Does not respond to events&lt;br /&gt;
* Only send weather info when there is a change from the previous weather check&lt;br /&gt;
* No way to ask for weather data from the device&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14488</id>
		<title>NOAA Weather</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14488"/>
		<updated>2008-06-27T14:10:04Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;How to setup the NOAA Weather GSD&#039;&#039;&#039; (Rough Draft)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Template=&lt;br /&gt;
* Description - NOAA Weather&lt;br /&gt;
* Implements DCE&lt;br /&gt;
* Device Category - Environment Climate Device #83&lt;br /&gt;
* Comm Method - Ethernet&lt;br /&gt;
* Commands - Ruby internal commands&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=GSD Code=&lt;br /&gt;
* #395 Check for updates&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #396 Check for updates done&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
check_weather_done()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #373 Private Method Listing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Logging function&lt;br /&gt;
def log(word)&lt;br /&gt;
  $logFile.print( word + &amp;quot;\n&amp;quot; )&lt;br /&gt;
  $logFile.flush()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Weather check function&lt;br /&gt;
def check_weather()&lt;br /&gt;
  log(&amp;quot;Backing up previous data&amp;quot;)&lt;br /&gt;
  oldweather = $weather&lt;br /&gt;
  oldtemp = $temp&lt;br /&gt;
  oldpressure = $pressure&lt;br /&gt;
  olddew_point = $dew_point&lt;br /&gt;
  oldheat_index = $heat_index&lt;br /&gt;
  oldwindchill = $windchill&lt;br /&gt;
  oldhumidity = $humidity&lt;br /&gt;
  oldwind = $wind&lt;br /&gt;
  oldvisibility = $visibility&lt;br /&gt;
&lt;br /&gt;
  log(&amp;quot;Checking for weather updates&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Get xml file from NOAA&lt;br /&gt;
#  xmlPath = &amp;quot;www.weather.gov/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
#  h = &amp;quot;GET &amp;quot;+xmlPath+&amp;quot; HTTP/1.0\r\n&amp;quot;&lt;br /&gt;
#  log(&amp;quot;HTTP Request: #{h}&amp;quot;)&lt;br /&gt;
#  conn_.Send(h)&lt;br /&gt;
#  resv = &amp;quot;&amp;quot;&lt;br /&gt;
#  while(true)&lt;br /&gt;
#    buff = conn_.Recv(16384, 5000)&lt;br /&gt;
#    if buff.length() == 0&lt;br /&gt;
#      break&lt;br /&gt;
#    end&lt;br /&gt;
#    recv = recv + buff&lt;br /&gt;
#  end&lt;br /&gt;
  h = Net::HTTP.new(&#039;www.weather.gov&#039;, 80)&lt;br /&gt;
  data_loc = &amp;quot;/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
  resp, data = h.get(data_loc, nil)&lt;br /&gt;
&lt;br /&gt;
  if resp.message == &amp;quot;OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#  if recv =~ /^HTTP[^\r\n]+200\sOK.+?\r\n\r\n(.+)$/m&lt;br /&gt;
#    data = $1&lt;br /&gt;
#    log(&amp;quot;Recieved:\n#{data}&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
    data.each_line {|line|&lt;br /&gt;
      if line =~/location&amp;gt;(.*)&amp;lt;\/location&amp;gt;/&lt;br /&gt;
        $location = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/observation_time_rfc822&amp;gt;(.*)&amp;lt;\/observation_time_rfc822&amp;gt;/&lt;br /&gt;
        $obs_time = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/weather&amp;gt;(.*)&amp;lt;\/weather&amp;gt;/&lt;br /&gt;
        $weather = $1&lt;br /&gt;
      end&lt;br /&gt;
      if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
        if line =~/temp_f&amp;gt;(.*)&amp;lt;\/temp_f&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_in&amp;gt;(.*)&amp;lt;\/pressure_in&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_f&amp;gt;(.*)&amp;lt;\/dewpoint_f&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_f&amp;gt;(.*)&amp;lt;\/heat_index_f&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_f&amp;gt;(.*)&amp;lt;\/windchill_f&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      else&lt;br /&gt;
        if line =~/temp_c&amp;gt;(.*)&amp;lt;\/temp_c&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_mb&amp;gt;(.*)&amp;lt;\/pressure_mb&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_c&amp;gt;(.*)&amp;lt;\/dewpoint_c&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_c&amp;gt;(.*)&amp;lt;\/heat_index_c&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_c&amp;gt;(.*)&amp;lt;\/windchill_c&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/relative_humidity&amp;gt;(.*)&amp;lt;\/relative_humidity&amp;gt;/&lt;br /&gt;
        $humidity = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/wind_string&amp;gt;(.*)&amp;lt;\/wind_string&amp;gt;/&lt;br /&gt;
        $wind = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/visibility_mi&amp;gt;(.*)&amp;lt;\/visibility_mi&amp;gt;/&lt;br /&gt;
        $visibility = $1&lt;br /&gt;
      end&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
### Send out events for weather changes&lt;br /&gt;
  if $weather != oldweather&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 75 13 \&amp;quot;&amp;quot;+$weather+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if $temp != oldtemp&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 25 13 \&amp;quot;&amp;quot;+$temp+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  check_weather_done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Post weather check&lt;br /&gt;
def check_weather_done()&lt;br /&gt;
  log(&amp;quot;Weather data from: &amp;quot;+$obs_time)&lt;br /&gt;
  log(&amp;quot;Weather check complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #351 Process IDLE&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Auto check weather every quarter past the hour per NOAA&lt;br /&gt;
t = Time.now&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #355 Process Initialize&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
###&lt;br /&gt;
# NOAA Weather check&lt;br /&gt;
# 2008 Jason Speckman&lt;br /&gt;
###&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
# Init Vars&lt;br /&gt;
&lt;br /&gt;
$logFile = File.new(&amp;quot;/var/log/pluto/NOAA_Weather.log&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
$DEVICEDATA_ICAO_CONST = 249&lt;br /&gt;
$DEVICEDATA_UNITS_CONST = 250&lt;br /&gt;
&lt;br /&gt;
$units = &amp;quot;&amp;quot;&lt;br /&gt;
$identifier = &amp;quot;&amp;quot;&lt;br /&gt;
$location = &amp;quot;&amp;quot;&lt;br /&gt;
$obs_time = &amp;quot;&amp;quot;&lt;br /&gt;
$weather = &amp;quot;&amp;quot;&lt;br /&gt;
$temp = &amp;quot;&amp;quot;&lt;br /&gt;
$pressure = &amp;quot;&amp;quot;&lt;br /&gt;
$dew_point = &amp;quot;&amp;quot;&lt;br /&gt;
$heat_index = &amp;quot;&amp;quot;&lt;br /&gt;
$windchill = &amp;quot;&amp;quot;&lt;br /&gt;
$humidity = &amp;quot;&amp;quot;&lt;br /&gt;
$wind = &amp;quot;&amp;quot;&lt;br /&gt;
$visibility = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
### Check for identifier and units&lt;br /&gt;
if device_.devdata_ != nil&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_ICAO_CONST] != nil&lt;br /&gt;
    $identifier = device_.devdata_[$DEVICEDATA_ICAO_CONST]&lt;br /&gt;
    log(&amp;quot;ICAO identifier: &amp;quot;+$identifier)&lt;br /&gt;
  else&lt;br /&gt;
    log(&amp;quot;No ICAO identifier specified&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_UNITS_CONST] != nil&lt;br /&gt;
    $units = device_.devdata_[$DEVICEDATA_UNITS_CONST]&lt;br /&gt;
  else&lt;br /&gt;
    $units = &amp;quot;F&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Units in degrees &amp;quot;+$units)&lt;br /&gt;
&lt;br /&gt;
if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
  $press_units = &amp;quot;in. Hg&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  $press_units = &amp;quot;hPa&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### Tell DCE we are a climate device&lt;br /&gt;
log(&amp;quot;Starting NOAA Weather Check&amp;quot;)&lt;br /&gt;
log(&amp;quot;Setup message intercept for DCERouter&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
###&lt;br /&gt;
# devIDfrom: device_.devid_ = my device id&lt;br /&gt;
# devIDto: -1000 = dcerouter&lt;br /&gt;
# priority: &lt;br /&gt;
# type: 1 = command, 2 = event&lt;br /&gt;
# id: &lt;br /&gt;
&lt;br /&gt;
$devIDfrom = device_.devid_&lt;br /&gt;
devIDto = -1000&lt;br /&gt;
priority = &amp;quot;&amp;quot;&lt;br /&gt;
type = 2&lt;br /&gt;
id = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cmd = Command.new(devIDfrom, devIDto, priority, type, id)&lt;br /&gt;
#cmd.params_[x] = y&lt;br /&gt;
#SendCommand(cmd)&lt;br /&gt;
&lt;br /&gt;
#ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot; + device_.devid_.to_s + &amp;quot; -1000 8 0 5 2 4 10&amp;quot;&lt;br /&gt;
#system(ms)&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Init complete&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Initial weather check&lt;br /&gt;
check_weather()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* #356 Process Release&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ($logFile != nil) then&lt;br /&gt;
	$logFile.close&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Device Data=&lt;br /&gt;
* #249 ICAO Location Indicator(string) - Comment: Local airport identifier for weather info - (Required and Allowed to modify checked)&lt;br /&gt;
* #250 Units(string) - Comment: Degree units.  Either (F) or (C) - (Required and Allowed to modify checked)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Events=&lt;br /&gt;
* Temperature Changed #25 - Comment: Temperature has changed since last update&lt;br /&gt;
* Weather Changed #75 - Comment: Weather has changed since last update&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Issues and TODO=&lt;br /&gt;
* Does not respond to events&lt;br /&gt;
* Only send weather info when there is a change from the previous weather check&lt;br /&gt;
* No way to ask for weather data from the device&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14486</id>
		<title>NOAA Weather</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14486"/>
		<updated>2008-06-27T11:26:02Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to setup the NOAA Weather GSD (Rough Draft)&lt;br /&gt;
&lt;br /&gt;
Description - NOAA Weather&lt;br /&gt;
Implements DCE&lt;br /&gt;
Device Category - Environment Climate Device #83&lt;br /&gt;
Comm Method - Ethernet&lt;br /&gt;
Commands - Ruby internal commands&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GSD Code&lt;br /&gt;
#395 Check for updates&lt;br /&gt;
check_weather()&lt;br /&gt;
&lt;br /&gt;
#396 Check for updates done&lt;br /&gt;
check_weather_done()&lt;br /&gt;
&lt;br /&gt;
#373 Private Method Listing&lt;br /&gt;
### Logging function&lt;br /&gt;
def log(word)&lt;br /&gt;
  $logFile.print( word + &amp;quot;\n&amp;quot; )&lt;br /&gt;
  $logFile.flush()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Weather check function&lt;br /&gt;
def check_weather()&lt;br /&gt;
  log(&amp;quot;Backing up previous data&amp;quot;)&lt;br /&gt;
  oldweather = $weather&lt;br /&gt;
  oldtemp = $temp&lt;br /&gt;
  oldpressure = $pressure&lt;br /&gt;
  olddew_point = $dew_point&lt;br /&gt;
  oldheat_index = $heat_index&lt;br /&gt;
  oldwindchill = $windchill&lt;br /&gt;
  oldhumidity = $humidity&lt;br /&gt;
  oldwind = $wind&lt;br /&gt;
  oldvisibility = $visibility&lt;br /&gt;
&lt;br /&gt;
  log(&amp;quot;Checking for weather updates&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Get xml file from NOAA&lt;br /&gt;
#  xmlPath = &amp;quot;www.weather.gov/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
#  h = &amp;quot;GET &amp;quot;+xmlPath+&amp;quot; HTTP/1.0\r\n&amp;quot;&lt;br /&gt;
#  log(&amp;quot;HTTP Request: #{h}&amp;quot;)&lt;br /&gt;
#  conn_.Send(h)&lt;br /&gt;
#  resv = &amp;quot;&amp;quot;&lt;br /&gt;
#  while(true)&lt;br /&gt;
#    buff = conn_.Recv(16384, 5000)&lt;br /&gt;
#    if buff.length() == 0&lt;br /&gt;
#      break&lt;br /&gt;
#    end&lt;br /&gt;
#    recv = recv + buff&lt;br /&gt;
#  end&lt;br /&gt;
  h = Net::HTTP.new(&#039;www.weather.gov&#039;, 80)&lt;br /&gt;
  data_loc = &amp;quot;/data/current_obs/&amp;quot;+$identifier+&amp;quot;.xml&amp;quot;&lt;br /&gt;
  resp, data = h.get(data_loc, nil)&lt;br /&gt;
&lt;br /&gt;
  if resp.message == &amp;quot;OK&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#  if recv =~ /^HTTP[^\r\n]+200\sOK.+?\r\n\r\n(.+)$/m&lt;br /&gt;
#    data = $1&lt;br /&gt;
#    log(&amp;quot;Recieved:\n#{data}&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
    data.each_line {|line|&lt;br /&gt;
      if line =~/location&amp;gt;(.*)&amp;lt;\/location&amp;gt;/&lt;br /&gt;
        $location = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/observation_time_rfc822&amp;gt;(.*)&amp;lt;\/observation_time_rfc822&amp;gt;/&lt;br /&gt;
        $obs_time = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/weather&amp;gt;(.*)&amp;lt;\/weather&amp;gt;/&lt;br /&gt;
        $weather = $1&lt;br /&gt;
      end&lt;br /&gt;
      if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
        if line =~/temp_f&amp;gt;(.*)&amp;lt;\/temp_f&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_in&amp;gt;(.*)&amp;lt;\/pressure_in&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_f&amp;gt;(.*)&amp;lt;\/dewpoint_f&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_f&amp;gt;(.*)&amp;lt;\/heat_index_f&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_f&amp;gt;(.*)&amp;lt;\/windchill_f&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      else&lt;br /&gt;
        if line =~/temp_c&amp;gt;(.*)&amp;lt;\/temp_c&amp;gt;/&lt;br /&gt;
          $temp = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/pressure_mb&amp;gt;(.*)&amp;lt;\/pressure_mb&amp;gt;/&lt;br /&gt;
          $pressure = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/dewpoint_c&amp;gt;(.*)&amp;lt;\/dewpoint_c&amp;gt;/&lt;br /&gt;
          $dew_point = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/heat_index_c&amp;gt;(.*)&amp;lt;\/heat_index_c&amp;gt;/&lt;br /&gt;
          $heat_index = $1&lt;br /&gt;
        end&lt;br /&gt;
        if line =~/windchill_c&amp;gt;(.*)&amp;lt;\/windchill_c&amp;gt;/&lt;br /&gt;
          $windchill = $1&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/relative_humidity&amp;gt;(.*)&amp;lt;\/relative_humidity&amp;gt;/&lt;br /&gt;
        $humidity = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/wind_string&amp;gt;(.*)&amp;lt;\/wind_string&amp;gt;/&lt;br /&gt;
        $wind = $1&lt;br /&gt;
      end&lt;br /&gt;
      if line =~/visibility_mi&amp;gt;(.*)&amp;lt;\/visibility_mi&amp;gt;/&lt;br /&gt;
        $visibility = $1&lt;br /&gt;
      end&lt;br /&gt;
    }&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
### Send out events for weather changes&lt;br /&gt;
  if $weather != oldweather&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 75 13 \&amp;quot;&amp;quot;+$weather+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if $temp != oldtemp&lt;br /&gt;
    ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot;+device_.devid_.to_s+&amp;quot; -1001 2 25 13 \&amp;quot;&amp;quot;+$temp+&amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
    system(ms)&lt;br /&gt;
    log(&amp;quot;Message sent: #{ms}&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  check_weather_done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
### Post weather check&lt;br /&gt;
def check_weather_done()&lt;br /&gt;
  log(&amp;quot;Weather data from: &amp;quot;+$obs_time)&lt;br /&gt;
  log(&amp;quot;Weather check complete&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
#351 Process IDLE&lt;br /&gt;
### Auto check weather every quarter past the hour per NOAA&lt;br /&gt;
t = Time.now&lt;br /&gt;
&lt;br /&gt;
#355 Process Initialize&lt;br /&gt;
###&lt;br /&gt;
# NOAA Weather check&lt;br /&gt;
# 2008 Jason Speckman&lt;br /&gt;
###&lt;br /&gt;
require &#039;net/http&#039;&lt;br /&gt;
&lt;br /&gt;
# Init Vars&lt;br /&gt;
&lt;br /&gt;
$logFile = File.new(&amp;quot;/var/log/pluto/NOAA_Weather.log&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
$DEVICEDATA_ICAO_CONST = 249&lt;br /&gt;
$DEVICEDATA_UNITS_CONST = 250&lt;br /&gt;
&lt;br /&gt;
$units = &amp;quot;&amp;quot;&lt;br /&gt;
$identifier = &amp;quot;&amp;quot;&lt;br /&gt;
$location = &amp;quot;&amp;quot;&lt;br /&gt;
$obs_time = &amp;quot;&amp;quot;&lt;br /&gt;
$weather = &amp;quot;&amp;quot;&lt;br /&gt;
$temp = &amp;quot;&amp;quot;&lt;br /&gt;
$pressure = &amp;quot;&amp;quot;&lt;br /&gt;
$dew_point = &amp;quot;&amp;quot;&lt;br /&gt;
$heat_index = &amp;quot;&amp;quot;&lt;br /&gt;
$windchill = &amp;quot;&amp;quot;&lt;br /&gt;
$humidity = &amp;quot;&amp;quot;&lt;br /&gt;
$wind = &amp;quot;&amp;quot;&lt;br /&gt;
$visibility = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
### Check for identifier and units&lt;br /&gt;
if device_.devdata_ != nil&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_ICAO_CONST] != nil&lt;br /&gt;
    $identifier = device_.devdata_[$DEVICEDATA_ICAO_CONST]&lt;br /&gt;
    log(&amp;quot;ICAO identifier: &amp;quot;+$identifier)&lt;br /&gt;
  else&lt;br /&gt;
    log(&amp;quot;No ICAO identifier specified&amp;quot;)&lt;br /&gt;
  end&lt;br /&gt;
  if device_.devdata_[$DEVICEDATA_UNITS_CONST] != nil&lt;br /&gt;
    $units = device_.devdata_[$DEVICEDATA_UNITS_CONST]&lt;br /&gt;
  else&lt;br /&gt;
    $units = &amp;quot;F&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Units in degrees &amp;quot;+$units)&lt;br /&gt;
&lt;br /&gt;
if $units == &amp;quot;F&amp;quot;&lt;br /&gt;
  $press_units = &amp;quot;in. Hg&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
  $press_units = &amp;quot;hPa&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
### Tell DCE we are a climate device&lt;br /&gt;
log(&amp;quot;Starting NOAA Weather Check&amp;quot;)&lt;br /&gt;
log(&amp;quot;Setup message intercept for DCERouter&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
###&lt;br /&gt;
# devIDfrom: device_.devid_ = my device id&lt;br /&gt;
# devIDto: -1000 = dcerouter&lt;br /&gt;
# priority: &lt;br /&gt;
# type: 1 = command, 2 = event&lt;br /&gt;
# id: &lt;br /&gt;
&lt;br /&gt;
$devIDfrom = device_.devid_&lt;br /&gt;
devIDto = -1000&lt;br /&gt;
priority = &amp;quot;&amp;quot;&lt;br /&gt;
type = 2&lt;br /&gt;
id = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#cmd = Command.new(devIDfrom, devIDto, priority, type, id)&lt;br /&gt;
#cmd.params_[x] = y&lt;br /&gt;
#SendCommand(cmd)&lt;br /&gt;
&lt;br /&gt;
#ms = &amp;quot;/usr/pluto/bin/MessageSend dcerouter &amp;quot; + device_.devid_.to_s + &amp;quot; -1000 8 0 5 2 4 10&amp;quot;&lt;br /&gt;
#system(ms)&lt;br /&gt;
&lt;br /&gt;
log(&amp;quot;Init complete&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### Initial weather check&lt;br /&gt;
check_weather()&lt;br /&gt;
&lt;br /&gt;
#356 Process Release&lt;br /&gt;
if ($logFile != nil) then&lt;br /&gt;
	$logFile.close&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Device Data&lt;br /&gt;
#249 ICAO Location Indicator(string)&lt;br /&gt;
Comment - Local airport identifier for weather info&lt;br /&gt;
Required and Allowed to modify&lt;br /&gt;
&lt;br /&gt;
#250 Units(string)&lt;br /&gt;
Comment - Degree units.  Either (F) or (C)&lt;br /&gt;
Required and Allowed to modify&lt;br /&gt;
&lt;br /&gt;
Events&lt;br /&gt;
Temperature Changed #25&lt;br /&gt;
Comment - Temperature has changed since last update&lt;br /&gt;
&lt;br /&gt;
Weather Changed #75&lt;br /&gt;
Comment - Weather has changed since last update&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Issues and TODO&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14030</id>
		<title>Upgrading SlimServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14030"/>
		<updated>2008-06-18T22:34:54Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE to a newer version of Squeezecenter.&lt;br /&gt;
&lt;br /&gt;
* Download the version of [http://www.slimdevices.com/pi_features.html squeezecenter] you want to run to the core.&lt;br /&gt;
* cd to /usr/pluto/servers&lt;br /&gt;
* Backup the existing SlimServer directory.  ie mv SlimServer SlimServer.lmce&lt;br /&gt;
* Move the downloaded file to /usr/pluto/servers and unarchive it.&lt;br /&gt;
* Make a soft link to the new directory.  ln -s squeezecenter-some-version SlimServer  This step just makes upgrades or downgrades go a little faster.&lt;br /&gt;
* Add a user slimserver and a group slimserver  This is the default that Squeezecenter runs as&lt;br /&gt;
* Change the ownership of squeezecenter&#039;s directory to that of slimserver.  chown -R slimserver:slimserver squeezecenter-some-version&lt;br /&gt;
&lt;br /&gt;
At this point you should be able to restart the dcerouter.  This should start the new version of squeezecenter&lt;br /&gt;
&lt;br /&gt;
(more to come)&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Squeezeslave_on_the_core&amp;diff=14029</id>
		<title>Squeezeslave on the core</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Squeezeslave_on_the_core&amp;diff=14029"/>
		<updated>2008-06-18T22:23:17Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: New page: Here&amp;#039;s how to setup squeezeslave to run on the core.  It&amp;#039;s fairly straight forward.  One small issue is that because squeezeslave uses the OSS interface you will need a separate sound card...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here&#039;s how to setup squeezeslave to run on the core.  It&#039;s fairly straight forward.  One small issue is that because squeezeslave uses the OSS interface&lt;br /&gt;
you will need a separate sound card for each instance of squeezeslave you want to run.&lt;br /&gt;
&lt;br /&gt;
First download a version of [http://sourceforge.net/project/showfiles.php?group_id=105169 Squeezeslave].  I&#039;m running the latest version as it fixed some playback bugs I was having, but any version that works with you&#039;re setup should be fine.  You&#039;ll want to put it somewhere in you&#039;re path.  I have mine installed in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
Next add the following to /etc/rc.local (this is my setup for two)&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:01 -o 0 -s -r &amp;amp;&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:02 -o 1 -s -r &amp;amp;&lt;br /&gt;
&lt;br /&gt;
* the MAC address can be whatever you want&lt;br /&gt;
* the -o option specifies which OSS output device ie /dev/dsp1&lt;br /&gt;
* the -s option tells squeezeslave to wait for a signal to quit rather than control-C&lt;br /&gt;
* the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.&lt;br /&gt;
&lt;br /&gt;
Next make sure all the volume levels in the mixer (alsamixer) are set correctly&lt;br /&gt;
&lt;br /&gt;
Next step, manually add the squeezeslave to linuxmce as a squeezebox using the mac address you gave it.  Assign it to a room and entertainment&lt;br /&gt;
area.  Regen your orbiters and reset the dcerouter.&lt;br /&gt;
&lt;br /&gt;
That should do it.&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14028</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14028"/>
		<updated>2008-06-18T22:22:26Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=My Setup=&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
===Dedicated Core===&lt;br /&gt;
* Dual Pentium 3 (1ghz)&lt;br /&gt;
* 2 Gb ram&lt;br /&gt;
* Onboard 100mb ethernet (external net)&lt;br /&gt;
* 64bit pci 1gb fiber card (internal net)&lt;br /&gt;
* 2 SB Live! cards&lt;br /&gt;
* 1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
* 1 80 Gb drive (system and audio media)&lt;br /&gt;
* 1 250 GB drive (video media)&lt;br /&gt;
&lt;br /&gt;
===Media Directors===&lt;br /&gt;
* None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
===Orbiters===&lt;br /&gt;
* Web orbiter&lt;br /&gt;
* Windows orbiter installed under wine&lt;br /&gt;
&lt;br /&gt;
===Automation===&lt;br /&gt;
* 1 CM11A&lt;br /&gt;
* A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* 2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
* All speaker wiring goes to a central location in the basement.&lt;br /&gt;
* Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.  Manual volume control in each room&lt;br /&gt;
* Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
===Climate===&lt;br /&gt;
* DS9490R w/ no sensors currently attached&lt;br /&gt;
* GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
* Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
* [[Squeezeslave on the core]] for distributed audio&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14016</id>
		<title>NOAA Weather</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=NOAA_Weather&amp;diff=14016"/>
		<updated>2008-06-18T18:34:49Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: New page: How to setup the NOAA Weather GSD&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;How to setup the NOAA Weather GSD&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14015</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14015"/>
		<updated>2008-06-18T18:28:21Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=My Setup=&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
===Dedicated Core===&lt;br /&gt;
* Dual Pentium 3 (1ghz)&lt;br /&gt;
* 2 Gb ram&lt;br /&gt;
* Onboard 100mb ethernet (external net)&lt;br /&gt;
* 64bit pci 1gb fiber card (internal net)&lt;br /&gt;
* 2 SB Live! cards&lt;br /&gt;
* 1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
* 1 80 Gb drive (system and audio media)&lt;br /&gt;
* 1 250 GB drive (video media)&lt;br /&gt;
&lt;br /&gt;
===Media Directors===&lt;br /&gt;
* None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
===Orbiters===&lt;br /&gt;
* Web orbiter&lt;br /&gt;
* Windows orbiter installed under wine&lt;br /&gt;
&lt;br /&gt;
===Automation===&lt;br /&gt;
* 1 CM11A&lt;br /&gt;
* A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* 2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
* All speaker wiring goes to a central location in the basement.&lt;br /&gt;
* Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.  Manual volume control in each room&lt;br /&gt;
* Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
===Climate===&lt;br /&gt;
* DS9490R w/ no sensors currently attached&lt;br /&gt;
* GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
* Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
* squeezeslave running on the core for distributed audio (see below for setup)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Squeezeslave Setup=&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how to setup squeezeslave to run on the core.  It&#039;s fairly straight forward.  One small issue is that because squeezeslave uses the OSS interface&lt;br /&gt;
you will need a separate sound card for each instance of squeezeslave you want to run.&lt;br /&gt;
&lt;br /&gt;
First download a version of [http://sourceforge.net/project/showfiles.php?group_id=105169 Squeezeslave].  I&#039;m running the latest version as it fixed some playback bugs I was having, but any version that works with you&#039;re setup should be fine.  You&#039;ll want to put it somewhere in you&#039;re path.  I have mine installed in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
Next add the following to /etc/rc.local (this is my setup for two)&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:01 -o 0 -s -r &amp;amp;&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:02 -o 1 -s -r &amp;amp;&lt;br /&gt;
&lt;br /&gt;
* the MAC address can be whatever you want&lt;br /&gt;
* the -o option specifies which OSS output device ie /dev/dsp1&lt;br /&gt;
* the -s option tells squeezeslave to wait for a signal to quit rather than control-C&lt;br /&gt;
* the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.&lt;br /&gt;
&lt;br /&gt;
Next make sure all the volume levels in the mixer (alsamixer) are set correctly&lt;br /&gt;
&lt;br /&gt;
Next step, manually add the squeezeslave to linuxmce as a squeezebox using the mac address you gave it.  Assign it to a room and entertainment&lt;br /&gt;
area.  Regen your orbiters and reset the dcerouter.&lt;br /&gt;
&lt;br /&gt;
That should do it.&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14014</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14014"/>
		<updated>2008-06-18T18:27:30Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: /* Squeezeslave Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=My Setup=&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
===Dedicated Core===&lt;br /&gt;
* Dual Pentium 3 (1ghz)&lt;br /&gt;
* 2 Gb ram&lt;br /&gt;
* Onboard 100mb ethernet (external net)&lt;br /&gt;
* 64bit pci 1gb fiber card (internal net)&lt;br /&gt;
* 2 SB Live! cards&lt;br /&gt;
* 1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
* 1 80 Gb drive (system and audio media)&lt;br /&gt;
* 1 250 GB drive (video media)&lt;br /&gt;
&lt;br /&gt;
===Media Directors===&lt;br /&gt;
* None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
===Orbiters===&lt;br /&gt;
* Web orbiter&lt;br /&gt;
* Windows orbiter installed under wine&lt;br /&gt;
&lt;br /&gt;
===Automation===&lt;br /&gt;
* 1 CM11A&lt;br /&gt;
* A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* 2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
* All speaker wiring goes to a central location in the basement.&lt;br /&gt;
* Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.  Manual volume control in each room&lt;br /&gt;
* Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
===Climate===&lt;br /&gt;
* DS9490R w/ no sensors currently attached&lt;br /&gt;
* GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
* Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
* squeezeslave running on the core for distributed audio (see below for setup)&lt;br /&gt;
&lt;br /&gt;
=Squeezeslave Setup=&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how to setup squeezeslave to run on the core.  It&#039;s fairly straight forward.  One small issue is that because squeezeslave uses the OSS interface&lt;br /&gt;
you will need a separate sound card for each instance of squeezeslave you want to run.&lt;br /&gt;
&lt;br /&gt;
First download a version of [http://sourceforge.net/project/showfiles.php?group_id=105169 Squeezeslave].  I&#039;m running the latest version as it fixed some playback bugs I was having, but any version that works with you&#039;re setup should be fine.  You&#039;ll want to put it somewhere in you&#039;re path.  I have mine installed in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
Next add the following to /etc/rc.local (this is my setup for two)&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:01 -o 0 -s -r &amp;amp;&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:02 -o 1 -s -r &amp;amp;&lt;br /&gt;
&lt;br /&gt;
* the MAC address can be whatever you want&lt;br /&gt;
* the -o option specifies which OSS output device ie /dev/dsp1&lt;br /&gt;
* the -s option tells squeezeslave to wait for a signal to quit rather than control-C&lt;br /&gt;
* the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.&lt;br /&gt;
&lt;br /&gt;
Next make sure all the volume levels in the mixer (alsamixer) are set correctly&lt;br /&gt;
&lt;br /&gt;
Next step, manually add the squeezeslave to linuxmce as a squeezebox using the mac address you gave it.  Assign it to a room and entertainment&lt;br /&gt;
area.  Regen your orbiters and reset the dcerouter.&lt;br /&gt;
&lt;br /&gt;
That should do it.&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14013</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=14013"/>
		<updated>2008-06-18T18:26:09Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: /* Software Setup */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=My Setup=&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
===Dedicated Core===&lt;br /&gt;
* Dual Pentium 3 (1ghz)&lt;br /&gt;
* 2 Gb ram&lt;br /&gt;
* Onboard 100mb ethernet (external net)&lt;br /&gt;
* 64bit pci 1gb fiber card (internal net)&lt;br /&gt;
* 2 SB Live! cards&lt;br /&gt;
* 1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
* 1 80 Gb drive (system and audio media)&lt;br /&gt;
* 1 250 GB drive (video media)&lt;br /&gt;
&lt;br /&gt;
===Media Directors===&lt;br /&gt;
* None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
===Orbiters===&lt;br /&gt;
* Web orbiter&lt;br /&gt;
* Windows orbiter installed under wine&lt;br /&gt;
&lt;br /&gt;
===Automation===&lt;br /&gt;
* 1 CM11A&lt;br /&gt;
* A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* 2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
* All speaker wiring goes to a central location in the basement.&lt;br /&gt;
* Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.  Manual volume control in each room&lt;br /&gt;
* Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
===Climate===&lt;br /&gt;
* DS9490R w/ no sensors currently attached&lt;br /&gt;
* GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
* LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
* Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
* squeezeslave running on the core for distributed audio (see below for setup)&lt;br /&gt;
&lt;br /&gt;
=Squeezeslave Setup=&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how to setup squeezeslave to run on the core.  It&#039;s fairly easy.  One small issue is that because squeezeslave uses the OSS interface&lt;br /&gt;
you will need a separate sound card for each instance of squeezeslave you want to run.&lt;br /&gt;
&lt;br /&gt;
First download a version of [http://sourceforge.net/project/showfiles.php?group_id=105169 Squeezeslave].  This is the version I use as it fixed some playback bugs I was having, but any version that works with you&#039;re setup should be fine.  You&#039;ll want to put it somewhere in you&#039;re path.  I have mine installed in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
Next add the following to /etc/rc.local (this is my setup for two)&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:01 -o 0 -s -r &amp;amp;&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:02 -o 1 -s -r &amp;amp;&lt;br /&gt;
&lt;br /&gt;
* the MAC address can be whatever you want&lt;br /&gt;
* the -o option specifies which OSS output device ie /dev/dsp1&lt;br /&gt;
* the -s option tells squeezeslave to wait for a signal to quit rather than control-C&lt;br /&gt;
* the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.&lt;br /&gt;
&lt;br /&gt;
Next make sure all the volume levels in the mixer (alsamixer) are set correctly&lt;br /&gt;
&lt;br /&gt;
Next step, manually add the squeezeslave to linuxmce as a squeezebox using the mac address you gave it.  Assign it to a room and entertainment&lt;br /&gt;
area.  Regen your orbiters and reset the dcerouter.&lt;br /&gt;
&lt;br /&gt;
That should do it.&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14012</id>
		<title>Upgrading SlimServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=14012"/>
		<updated>2008-06-18T18:20:19Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE to a newer version of Squeezecenter.&lt;br /&gt;
&lt;br /&gt;
* Download the version of [http://www.slimdevices.com/pi_features.html squeezecenter] you want to run to the core.&lt;br /&gt;
* cd to /usr/pluto/servers&lt;br /&gt;
* Backup the existing SlimServer directory.  ie mv SlimServer SlimServer.lmce&lt;br /&gt;
* Move the downloaded file to /usr/pluto/servers and unarchive it.&lt;br /&gt;
* Make a soft link to the new directory.  ln -s squeezecenter-some-version SlimServer  This step just makes upgrades or downgrades go a little faster.&lt;br /&gt;
* &lt;br /&gt;
* Next, some permissions need to be set and a user created.  I&#039;ll add these when I get home from work.&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13909</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13909"/>
		<updated>2008-06-17T13:59:41Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=My Setup=&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
===Dedicated Core===&lt;br /&gt;
* Dual Pentium 3 (1ghz)&lt;br /&gt;
* 2 Gb ram&lt;br /&gt;
* Onboard 100mb ethernet (external net)&lt;br /&gt;
* 64bit pci 1gb fiber card (internal net)&lt;br /&gt;
* 2 SB Live! cards&lt;br /&gt;
* 1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
* 1 80 Gb drive (system and audio media)&lt;br /&gt;
* 1 250 GB drive (video media)&lt;br /&gt;
&lt;br /&gt;
===Media Directors===&lt;br /&gt;
* None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
===Orbiters===&lt;br /&gt;
* Web orbiter&lt;br /&gt;
* Windows orbiter installed under wine&lt;br /&gt;
&lt;br /&gt;
===Automation===&lt;br /&gt;
* 1 CM11A&lt;br /&gt;
* A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
* 2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
* All speaker wiring goes to a central location in the basement.&lt;br /&gt;
* Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.  Manual volume control in each room&lt;br /&gt;
* Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
===Climate===&lt;br /&gt;
* DS9490R w/ no sensors currently attached&lt;br /&gt;
* GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Software Setup==&lt;br /&gt;
* LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
* Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
* squeezeslave running on the core for distributed audio (see below for setup)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Squeezeslave Setup=&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how to setup squeezeslave to run on the core.  It&#039;s fairly easy.  One small issue is that because squeezeslave uses the OSS interface&lt;br /&gt;
you will need a separate sound card for each instance of squeezeslave you want to run.&lt;br /&gt;
&lt;br /&gt;
First download a version of [http://sourceforge.net/project/showfiles.php?group_id=105169 Squeezeslave].  This is the version I use as it fixed some playback bugs I was having, but any version that works with you&#039;re setup should be fine.  You&#039;ll want to put it somewhere in you&#039;re path.  I have mine installed in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
Next add the following to /etc/rc.local (this is my setup for two)&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:01 -o 0 -s -r &amp;amp;&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:02 -o 1 -s -r &amp;amp;&lt;br /&gt;
&lt;br /&gt;
* the MAC address can be whatever you want&lt;br /&gt;
* the -o option specifies which OSS output device ie /dev/dsp1&lt;br /&gt;
* the -s option tells squeezeslave to wait for a signal to quit rather than control-C&lt;br /&gt;
* the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.&lt;br /&gt;
&lt;br /&gt;
Next make sure all the volume levels in the mixer (alsamixer) are set correctly&lt;br /&gt;
&lt;br /&gt;
Next step, manually add the squeezeslave to linuxmce as a squeezebox using the mac address you gave it.  Assign it to a room and entertainment&lt;br /&gt;
area.  Regen your orbiters and reset the dcerouter.&lt;br /&gt;
&lt;br /&gt;
That should do it.&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13908</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13908"/>
		<updated>2008-06-17T13:45:53Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;My Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Hardware&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Dedicated Core&#039;&#039;&#039;&lt;br /&gt;
  Dual Pentium 3 (1ghz)&lt;br /&gt;
  2 Gb ram&lt;br /&gt;
  Onboard 100mb ethernet (external net)&lt;br /&gt;
  64bit pci 1gb fiber card (internal net)&lt;br /&gt;
  2 SB Live! cards&lt;br /&gt;
  1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
  1 80 Gb drive (system and audio media)&lt;br /&gt;
  1 250 GB drive (video media)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Media Directors&#039;&#039;&#039;&lt;br /&gt;
  None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Orbiters&#039;&#039;&#039;&lt;br /&gt;
  Web orbiter on an iPhone&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Automation&#039;&#039;&#039;&lt;br /&gt;
  1 CM11A&lt;br /&gt;
  A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Audio&#039;&#039;&#039;&lt;br /&gt;
  2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
  All speaker wiring goes to a central location in the basement.&lt;br /&gt;
  Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.  Manual volume control in each room&lt;br /&gt;
  Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Software Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
squeezeslave running on the core for distributed audio (see below for setup)&lt;br /&gt;
GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Squeezeslave Setup&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how to setup squeezeslave to run on the core.  It&#039;s fairly easy.  One small issue is that because squeezeslave uses the OSS interface&lt;br /&gt;
you will need a separate sound card for each instance of squeezeslave you want to run.&lt;br /&gt;
&lt;br /&gt;
First download the newest version of [http://sourceforge.net/project/showfiles.php?group_id=105169 Squeezeslave].  This is the version I use as it fixed some playback bugs I was having, but any version that works with you&#039;re setup should be fine.  You&#039;ll want to put it somewhere in you&#039;re path.  I have mine installed in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
Next add the following to /etc/rc.local (this is my setup for two)&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:01 -o 0 -s -r &amp;amp;&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:02 -o 1 -s -r &amp;amp;&lt;br /&gt;
&lt;br /&gt;
  (the MAC address can be whatever you want)&lt;br /&gt;
  the -o option specifies which OSS output device ie /dev/dsp1&lt;br /&gt;
  the -s option tells squeezeslave to wait for a signal to quit rather than control-C&lt;br /&gt;
  the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.&lt;br /&gt;
&lt;br /&gt;
Next make sure all the volume levels in the mixer (alsamixer) are set correctly&lt;br /&gt;
&lt;br /&gt;
Next step, manually add the squeezeslave to linuxmce as a squeezebox using the mac address you gave it.  Assign it to a room and entertainment&lt;br /&gt;
area.  Regen your orbiters and reset the dcerouter.&lt;br /&gt;
&lt;br /&gt;
That should do it.&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=13907</id>
		<title>Upgrading SlimServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=13907"/>
		<updated>2008-06-17T13:41:17Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE to a newer version of Squeezecenter.&lt;br /&gt;
&lt;br /&gt;
First download the version of [http://www.slimdevices.com/pi_features.html squeezecenter] you want to run.&lt;br /&gt;
Next cd to /usr/pluto/servers&lt;br /&gt;
Backup the existing SlimServer directory.  ie mv SlimServer SlimServer.lmce&lt;br /&gt;
Move the downloaded file to /usr/pluto/servers and unarchive it.&lt;br /&gt;
Make a link to the new directory.  ln -s squeezecenter-some-version SlimServer  This step just makes upgrades or downgrades go a little faster.&lt;br /&gt;
Next, some permissions need to be set and a user created.  I&#039;ll add these when I get home from work.&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=13906</id>
		<title>Upgrading SlimServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=13906"/>
		<updated>2008-06-17T13:40:09Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE to the latest version of Squeezecenter.&lt;br /&gt;
&lt;br /&gt;
First download the version of [http://www.slimdevices.com/pi_features.html squeezecenter] you want to run.&lt;br /&gt;
Next cd to /usr/pluto/servers&lt;br /&gt;
Backup the existing SlimServer directory.  ie mv SlimServer SlimServer.lmce&lt;br /&gt;
Move the downloaded file to /usr/pluto/servers and unarchive it.&lt;br /&gt;
Make a link to the new directory.  ln -s squeezecenter-some-version SlimServer  This step just makes upgrades or downgrades go a little faster.&lt;br /&gt;
Next, some permissions need to be set and a user created.  I&#039;ll add these when I get home from work.&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13904</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13904"/>
		<updated>2008-06-17T13:16:36Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My Setup&lt;br /&gt;
&lt;br /&gt;
Hardware&lt;br /&gt;
  Dedicated Core&lt;br /&gt;
    Dual Pentium 3 (1ghz)&lt;br /&gt;
    2 Gb ram&lt;br /&gt;
    Onboard 100mb ethernet (external net)&lt;br /&gt;
    64bit pci 1gb fiber card (internal net)&lt;br /&gt;
    2 SB Live! cards&lt;br /&gt;
    1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
    1 80 Gb drive (system and audio media)&lt;br /&gt;
    1 250 GB drive (video media)&lt;br /&gt;
&lt;br /&gt;
  Media Directors&lt;br /&gt;
    None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
  Orbiters&lt;br /&gt;
    Web orbiter on an iPhone&lt;br /&gt;
&lt;br /&gt;
  Automation&lt;br /&gt;
    1 CM11A&lt;br /&gt;
    A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
  Audio&lt;br /&gt;
    2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
    All speaker wiring goes to a central location in the basement.&lt;br /&gt;
    Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.  Manual volume control in each room&lt;br /&gt;
    Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
Software Setup&lt;br /&gt;
  LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
  Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
  squeezeslave running on the core for distributed audio (see below for setup)&lt;br /&gt;
  GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Squeezeslave Setup&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how to setup squeezeslave to run on the core.  It&#039;s fairly easy.  One small issue is that because squeezeslave uses the OSS interface&lt;br /&gt;
you will need a separate sound card for each instance of squeezeslave you want to run.&lt;br /&gt;
&lt;br /&gt;
First download the newest version of [http://sourceforge.net/project/showfiles.php?group_id=105169 Squeezeslave].  This is the version I use as it fixed some playback bugs I was having, but any version that works with you&#039;re setup should be fine.  You&#039;ll want to put it somewhere in you&#039;re path.  I have mine installed in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
Next add the following to /etc/rc.local (this is my setup for two)&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:01 -o 0 -s -r &amp;amp;&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:02 -o 1 -s -r &amp;amp;&lt;br /&gt;
&lt;br /&gt;
  (the MAC address can be whatever you want)&lt;br /&gt;
  the -o option specifies which OSS output device ie /dev/dsp1&lt;br /&gt;
  the -s option tells squeezeslave to wait for a signal to quit rather than control-C&lt;br /&gt;
  the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.&lt;br /&gt;
&lt;br /&gt;
Next make sure all the volume levels in the mixer (alsamixer) are set correctly&lt;br /&gt;
&lt;br /&gt;
Next step, manually add the squeezeslave to linuxmce as a squeezebox using the mac address you gave it.  Assign it to a room and entertainment&lt;br /&gt;
area.  Regen your orbiters and reset the dcerouter.&lt;br /&gt;
&lt;br /&gt;
That should do it.&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13902</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13902"/>
		<updated>2008-06-17T13:11:36Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My Setup&lt;br /&gt;
&lt;br /&gt;
Hardware&lt;br /&gt;
  Dedicated Core&lt;br /&gt;
    Dual Pentium 3 (1ghz)&lt;br /&gt;
    2 Gb ram&lt;br /&gt;
    Onboard 100mb ethernet (external net)&lt;br /&gt;
    64bit pci 1gb fiber card (internal net)&lt;br /&gt;
    2 SB Live! cards&lt;br /&gt;
    1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
    1 80 Gb drive (system and audio media)&lt;br /&gt;
    1 250 GB drive (video media)&lt;br /&gt;
&lt;br /&gt;
  Media Directors&lt;br /&gt;
    None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
  Orbiters&lt;br /&gt;
    Web orbiter on an iPhone&lt;br /&gt;
&lt;br /&gt;
  Automation&lt;br /&gt;
    1 CM11A&lt;br /&gt;
    A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
  Audio&lt;br /&gt;
    2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
    All speaker wiring goes to a central location in the basement.&lt;br /&gt;
    Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.  Manual volume control in each room&lt;br /&gt;
    Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
Software Setup&lt;br /&gt;
  LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
  Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
  squeezeslave running on the core for distributed audio (see below for setup)&lt;br /&gt;
  GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Squeezeslave Setup&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how to setup squeezeslave to run on the core.  It&#039;s fairly easy.  One small issue is that because squeezeslave uses the OSS interface&lt;br /&gt;
you will need a separate sound card for each instance of squeezeslave you want to run.&lt;br /&gt;
&lt;br /&gt;
First download the newest version of [http://sourceforge.net/project/showfiles.php?group_id=105169 Squeezeslave].  You&#039;ll want to&lt;br /&gt;
put it somewhere in you&#039;re path.  I have mine installed in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
Next add the following to /etc/rc.local (this is my setup for two)&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:01 -o 0 -s -r &amp;amp;&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:02 -o 1 -s -r &amp;amp;&lt;br /&gt;
&lt;br /&gt;
  (the MAC address can be whatever you want)&lt;br /&gt;
  the -o option specifies which OSS output device ie /dev/dsp1&lt;br /&gt;
  the -s option tells squeezeslave to wait for a signal to quit rather than control-C&lt;br /&gt;
  the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.&lt;br /&gt;
&lt;br /&gt;
Next make sure all the volume levels in the mixer (alsamixer) are set correctly&lt;br /&gt;
&lt;br /&gt;
Next step, manually add the squeezeslave to linuxmce as a squeezebox using the mac address you gave it.  Assign it to a room and entertainment&lt;br /&gt;
area.  Regen your orbiters and reset the dcerouter.&lt;br /&gt;
&lt;br /&gt;
That should do it.&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13884</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13884"/>
		<updated>2008-06-17T02:07:58Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My Setup&lt;br /&gt;
&lt;br /&gt;
Hardware&lt;br /&gt;
  Dedicated Core&lt;br /&gt;
    Dual Pentium 3 (1ghz)&lt;br /&gt;
    2 Gb ram&lt;br /&gt;
    Onboard 100mb ethernet (external net)&lt;br /&gt;
    64bit pci 1gb fiber card (internal net)&lt;br /&gt;
    2 SB Live! cards&lt;br /&gt;
    1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
    1 80 Gb drive (system and audio media)&lt;br /&gt;
    1 250 GB drive (video media)&lt;br /&gt;
&lt;br /&gt;
  Media Directors&lt;br /&gt;
    None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
  Orbiters&lt;br /&gt;
    Web orbiter on an iPhone&lt;br /&gt;
&lt;br /&gt;
  Automation&lt;br /&gt;
    1 CM11A&lt;br /&gt;
    A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
  Audio&lt;br /&gt;
    2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
    All speaker wiring goes to a central location in the basement.&lt;br /&gt;
    Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.  Manual volume control in each room&lt;br /&gt;
    Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
Software Setup&lt;br /&gt;
  LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
  Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
  squeezeslave running on the core for distributed audio (see below for setup)&lt;br /&gt;
  GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Squeezeslave Setup&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how to setup squeezeslave to run on the core.  It&#039;s fairly easy.  One small issue is that because squeezeslave uses the OSS interface&lt;br /&gt;
you will need a separate sound card for each instance of squeezeslave you want to run.&lt;br /&gt;
&lt;br /&gt;
First download the newest version of [http://sourceforge.net/project/showfiles.php?group_id=105169 Squeezeslave].  You&#039;ll want to&lt;br /&gt;
put it somewhere in you&#039;re path.  I have mine installed in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
Next add the following to /etc/rc.local (this is my setup for two)&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:01 -o 0 -s -r &amp;amp;&lt;br /&gt;
  /usr/local/bin/squeezeslave -m 00:00:00:00:00:02 -o 1 -s -r &amp;amp;&lt;br /&gt;
&lt;br /&gt;
  (the MAC address can be whatever you want)&lt;br /&gt;
  the -o option specifies which OSS output device ie /dev/dsp1&lt;br /&gt;
  the -s option tells squeezeslave to wait for a signal to quit rather than control-C&lt;br /&gt;
  the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.&lt;br /&gt;
&lt;br /&gt;
Next make sure all the volume levels in the mixer (alsamixer) are set correctly&lt;br /&gt;
&lt;br /&gt;
(more to come)&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13851</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13851"/>
		<updated>2008-06-16T13:27:15Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My Setup&lt;br /&gt;
&lt;br /&gt;
Hardware&lt;br /&gt;
  Dedicated Core&lt;br /&gt;
    Dual Pentium 3 (1ghz)&lt;br /&gt;
    2 Gb ram&lt;br /&gt;
    Onboard 100mb ethernet (external net)&lt;br /&gt;
    64bit pci 1gb fiber card (internal net)&lt;br /&gt;
    2 SB Live! cards&lt;br /&gt;
    1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
    1 80 Gb drive (system and audio media)&lt;br /&gt;
    1 250 GB drive (video media)&lt;br /&gt;
&lt;br /&gt;
  Media Directors&lt;br /&gt;
    None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
  Orbiters&lt;br /&gt;
    Web orbiter on an iPhone&lt;br /&gt;
&lt;br /&gt;
  Automation&lt;br /&gt;
    1 CM11A&lt;br /&gt;
    A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
  Audio&lt;br /&gt;
    2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
    All speaker wiring goes to a central location in the basement.&lt;br /&gt;
    Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.  Manual volume control in each room&lt;br /&gt;
    Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
Software Setup&lt;br /&gt;
  LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
  Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;br /&gt;
  squeezeslave running on the core for distributed audio (see below for setup)&lt;br /&gt;
  GSD weather retrieval plugin  [[NOAA Weather]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Squeezeslave Setup&lt;br /&gt;
&lt;br /&gt;
Here&#039;s how to setup squeezeslave to run on the core.  It&#039;s fairly easy.  One small issue is that because squeezeslave uses the OSS interface&lt;br /&gt;
you will need a separate sound card for each instance of squeezeslave you want to run.&lt;br /&gt;
&lt;br /&gt;
First download the newest version of [http://sourceforge.net/project/showfiles.php?group_id=105169 Squeezeslave].  You&#039;ll want to&lt;br /&gt;
put it somewhere in you&#039;re path.  I have mine installed in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
Next add the following to /etc/rc.local&lt;br /&gt;
(more to come)&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=13850</id>
		<title>Upgrading SlimServer</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=Upgrading_SlimServer&amp;diff=13850"/>
		<updated>2008-06-16T13:09:18Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: New page: Upgrading SlimServer  Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE to the latest version of Squeezecenter.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Upgrading SlimServer&lt;br /&gt;
&lt;br /&gt;
Here are the steps needed to upgrade the SlimServer that comes with LinuxMCE to the latest version of Squeezecenter.&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13849</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13849"/>
		<updated>2008-06-16T13:07:15Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My Setup&lt;br /&gt;
&lt;br /&gt;
Hardware&lt;br /&gt;
  Dedicated Core&lt;br /&gt;
    Dual Pentium 3 (1ghz)&lt;br /&gt;
    2 Gb ram&lt;br /&gt;
    Onboard 100mb ethernet (external net)&lt;br /&gt;
    64bit pci 1gb fiber card (internal net)&lt;br /&gt;
    2 SB Live! cards&lt;br /&gt;
    1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
    1 80 Gb drive (system and audio media)&lt;br /&gt;
    1 250 GB drive (video media)&lt;br /&gt;
&lt;br /&gt;
  Media Directors&lt;br /&gt;
    None (I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
  Orbiters&lt;br /&gt;
    Web orbiter on an iPhone&lt;br /&gt;
&lt;br /&gt;
  Automation&lt;br /&gt;
    1 CM11A&lt;br /&gt;
    A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
  Audio&lt;br /&gt;
    2 zones of whole house audio completed so far (this system is being designed for background music)  All speaker wiring goes to a central location in the basement.&lt;br /&gt;
    Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.  Manual volume control in each room&lt;br /&gt;
    Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
Software Setup&lt;br /&gt;
  LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
  Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) [[Upgrading SlimServer]]&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
	<entry>
		<id>http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13828</id>
		<title>User:Jspeckman</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxmce.org/index.php?title=User:Jspeckman&amp;diff=13828"/>
		<updated>2008-06-16T03:24:00Z</updated>

		<summary type="html">&lt;p&gt;Jspeckman: New page: My Setup  Hardware   Dedicated Core     Dual Pentium 3 (1ghz)     2 Gb ram     Onboard 100mb ethernet (external)     64bit pci 1gb fiber card     2 SB Live! cards     1 ati rage 128 (just ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My Setup&lt;br /&gt;
&lt;br /&gt;
Hardware&lt;br /&gt;
  Dedicated Core&lt;br /&gt;
    Dual Pentium 3 (1ghz)&lt;br /&gt;
    2 Gb ram&lt;br /&gt;
    Onboard 100mb ethernet (external)&lt;br /&gt;
    64bit pci 1gb fiber card&lt;br /&gt;
    2 SB Live! cards&lt;br /&gt;
    1 ati rage 128 (just enough video for a dedicated server)&lt;br /&gt;
    1 80 Gb drive (system and audio media)&lt;br /&gt;
    1 250 GB drive (video media)&lt;br /&gt;
&lt;br /&gt;
  Media Directors&lt;br /&gt;
    None ( I use XBMC on an Xbox to watch videos)&lt;br /&gt;
&lt;br /&gt;
  Orbiters&lt;br /&gt;
    Web orbiter on an iPhone&lt;br /&gt;
&lt;br /&gt;
  Automation&lt;br /&gt;
    1 CM11A&lt;br /&gt;
    A couple of X10 switches and outlets&lt;br /&gt;
&lt;br /&gt;
  Audio&lt;br /&gt;
    2 zones of whole house audio completed so far (this system is being designed for background music)&lt;br /&gt;
    Zone 1 - first soundcard -&amp;gt; amp -&amp;gt;ceiling speakers on first floor.  Manual volume control in each room&lt;br /&gt;
    Zone 2 - second soundcard -&amp;gt; car amp -&amp;gt;pair of car speakers in outdoor housings on patio&lt;br /&gt;
&lt;br /&gt;
Software Setup&lt;br /&gt;
  LinuxMCE 704 (haven&#039;t had time to upgrade to 710)&lt;br /&gt;
  Latest Squeezecenter (replaced SlimServer shipped with LinuxMCE) (more on installation later)&lt;/div&gt;</summary>
		<author><name>Jspeckman</name></author>
	</entry>
</feed>