<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.mios.com/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.mios.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ap15e</id>
		<title>MiOS - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mios.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ap15e"/>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Special:Contributions/Ap15e"/>
		<updated>2026-04-13T09:05:59Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.8</generator>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2015-01-26T20:46:56Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Calculations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
[[Add]] rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'                    ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'                      ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1'         ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'            ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'              ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'               ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'                ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                           ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'                  ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'                ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'               ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'           ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'                ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'               ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'                      ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                               ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'            ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviR:1'               ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePhase:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:holidayvirtualswitch:1'           ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
local device_categories = {&lt;br /&gt;
[1] = { 'Interface' },&lt;br /&gt;
[2] = { 'Dimmable Light' },&lt;br /&gt;
[3] = { 'Switch', { [1] = 'Interior',&lt;br /&gt;
                    [2] = 'Exterior',&lt;br /&gt;
					[3] = 'In Wall' ,&lt;br /&gt;
                    [4] = 'Refrigerator',&lt;br /&gt;
                    [5] = 'Garage Door' } },&lt;br /&gt;
[4] = {	'Security Sensor', { [1] = 'Door Sensor',&lt;br /&gt;
                             [2] = 'Leak Sensor',&lt;br /&gt;
                             [3] = 'Motion Sensor',&lt;br /&gt;
                             [4] = 'Smoke Sensor',&lt;br /&gt;
                             [5] = 'CO Sensor',&lt;br /&gt;
                             [6] = 'Glass Break Sensor' } },&lt;br /&gt;
[5] = { 'HVAC', { [1] =	'HVAC',&lt;br /&gt;
                  [2] = 'Heater' } },&lt;br /&gt;
[6] = { 'Camera' },&lt;br /&gt;
[7] = { 'Door Lock' },&lt;br /&gt;
[8] = { 'Window Covering', { [1] = 'Window Covering',&lt;br /&gt;
                            [2] = 'ZRTSI' } },&lt;br /&gt;
[9] = { 'Remote Control' },&lt;br /&gt;
[10] = { 'IR Transmitter', { [1] = 'IR Transmitter',&lt;br /&gt;
                             [2] = 'USB UIRT' } },&lt;br /&gt;
[11] = { 'Generic I/O' },&lt;br /&gt;
[12] = { 'Generic Sensor' },&lt;br /&gt;
[13] = { 'Serial Port' },&lt;br /&gt;
[14] = { 'Scene Controller' },&lt;br /&gt;
[15] = { 'A/V' },&lt;br /&gt;
[16] = { 'Humidity Sensor' },&lt;br /&gt;
[17] = { 'Temperature Sensor' },&lt;br /&gt;
[18] = { 'Light Sensor' },&lt;br /&gt;
[19] = { 'Z-Wave Interface' },&lt;br /&gt;
[20] = { 'Insteon Interface' },&lt;br /&gt;
[21] = { 'Power Meter' },&lt;br /&gt;
[22] = { 'Alarm Panel' },&lt;br /&gt;
[23] = { 'Alarm Partition' },&lt;br /&gt;
[24] = { 'Siren' } }&lt;br /&gt;
&lt;br /&gt;
group_written = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:()]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
 &lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     c  = device_categories[ v.category_num ]&lt;br /&gt;
&lt;br /&gt;
     if c == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   t = 'DEVICE CATEGORY ' .. tostring( v.category_num ) .. '/' .. tostring( v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	  else&lt;br /&gt;
&lt;br /&gt;
        t  = c[ 1 ]&lt;br /&gt;
&lt;br /&gt;
        st = c[ 2 ]&lt;br /&gt;
&lt;br /&gt;
	    if ( st ~= nil ) and ( v.subcategory_num ~= 0 )&lt;br /&gt;
	     then&lt;br /&gt;
&lt;br /&gt;
	      t =  t .. ' / ' .. tostring( st[ v.subcategory_num ] or v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	     end&lt;br /&gt;
&lt;br /&gt;
	  end&lt;br /&gt;
&lt;br /&gt;
     tn = normalize_name( t )&lt;br /&gt;
&lt;br /&gt;
	 if group_written[ t ] == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   outf:write( 'Group ' .. tostring( tn ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
       outf:write( 'Number ' .. tostring( tn ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
	   group_written[ t ] = tn&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',' .. tostring( tn ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   p = tostring( v ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=6000 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=30000 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=30000 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB rules ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[WORK IN PROGRESS (non-functional demo)]]&lt;br /&gt;
&lt;br /&gt;
Use a real computer to run the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local json = require( 'dkjson' ) -- use a json parser that doesn't complain about empty arrays ...&lt;br /&gt;
local http = require( 'socket.http' )&lt;br /&gt;
&lt;br /&gt;
local url = 'http://192.168.178.116:3480/data_request?id=user_data'&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
body, c, l, h = http.request( url )&lt;br /&gt;
&lt;br /&gt;
print( '// status line', l )&lt;br /&gt;
print( '// h', h )&lt;br /&gt;
print( '// c', c )&lt;br /&gt;
&lt;br /&gt;
print( '' )&lt;br /&gt;
&lt;br /&gt;
if c == 200&lt;br /&gt;
 then&lt;br /&gt;
&lt;br /&gt;
  local data = json.decode( body )&lt;br /&gt;
&lt;br /&gt;
  for k, v in pairs( data.scenes )&lt;br /&gt;
   do&lt;br /&gt;
&lt;br /&gt;
    print( 'rule ' .. normalize_name( v.name ) )&lt;br /&gt;
    print( '// MiOS id: ' .. v.id )&lt;br /&gt;
    print( 'when' )&lt;br /&gt;
&lt;br /&gt;
	if v.timers ~= nil&lt;br /&gt;
	 then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.timers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
	    t = tonumber( j.type )&lt;br /&gt;
&lt;br /&gt;
	    if t == 1&lt;br /&gt;
                then&lt;br /&gt;
&lt;br /&gt;
                  print( '  ', j.interval, '  // MiOS type 1' )&lt;br /&gt;
&lt;br /&gt;
		else if t == 2&lt;br /&gt;
		 then&lt;br /&gt;
&lt;br /&gt;
		  print( '  ', j.days_of_week, j.time, '  // MiOS type 2' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 3&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', '// ERROR: Not implemented - MiOS type 3' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 4&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', j.abstime, '  // MiOS type 4' )&lt;br /&gt;
&lt;br /&gt;
                 else&lt;br /&gt;
&lt;br /&gt;
		  print( '// ERROR: unknown timer, MiOS type: ', tostring( t ) )&lt;br /&gt;
&lt;br /&gt;
		  for x, y in pairs( j )&lt;br /&gt;
		   do&lt;br /&gt;
&lt;br /&gt;
		    print( '//  ', x, y )&lt;br /&gt;
&lt;br /&gt;
		   end&lt;br /&gt;
&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
	if v.triggers ~= nil&lt;br /&gt;
         then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.triggers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
		print( '// ' .. j.name )&lt;br /&gt;
&lt;br /&gt;
		for x, y in pairs( j )&lt;br /&gt;
		 do&lt;br /&gt;
		  print( '    //', x, y )&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
    print( 'then' )&lt;br /&gt;
    print( 'end' )&lt;br /&gt;
    print( '' )&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
 else&lt;br /&gt;
&lt;br /&gt;
  print( '//http error code:', c )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;br /&gt;
&lt;br /&gt;
=== Building a quarter wave ground plane antenna for Z-Wave ===&lt;br /&gt;
&lt;br /&gt;
==== Parts needed ====&lt;br /&gt;
&lt;br /&gt;
4x Amphenol B6351B1-ND3G-50&lt;br /&gt;
&lt;br /&gt;
Copper wire&lt;br /&gt;
&lt;br /&gt;
50 Ohm cable BNC male - BNC male&lt;br /&gt;
&lt;br /&gt;
SMA male - BNC female adapter (for Vera3 with antenna mod)&lt;br /&gt;
&lt;br /&gt;
U.FL female - BNC female pigtail cable and U.FL male coaxial connector SMD (for Aeon Z-Stick S2)&lt;br /&gt;
&lt;br /&gt;
[[File:parts.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
==== Calculations ====&lt;br /&gt;
&lt;br /&gt;
length of radials/radiator = speed of light / frequency * velocity factor / 4&lt;br /&gt;
&lt;br /&gt;
For EU frequency: length = 299792458 m/s / 868420000 Hz * 0.95 / 4 = 8.2 cm&lt;br /&gt;
&lt;br /&gt;
==== Antenna ====&lt;br /&gt;
&lt;br /&gt;
[[File:antenna.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Modifying the Aeon Z-Stick S2 ====&lt;br /&gt;
&lt;br /&gt;
[[File:z_stick_s2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
[[File:openHAB1.jpg|300px]] [[File:openHAB2.jpg|300px]] [[File:openHAB3.jpg|300px]]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2015-01-18T17:34:49Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Antenna */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
[[Add]] rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'                    ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'                      ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1'         ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'            ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'              ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'               ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'                ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                           ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'                  ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'                ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'               ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'           ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'                ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'               ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'                      ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                               ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'            ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviR:1'               ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePhase:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:holidayvirtualswitch:1'           ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
local device_categories = {&lt;br /&gt;
[1] = { 'Interface' },&lt;br /&gt;
[2] = { 'Dimmable Light' },&lt;br /&gt;
[3] = { 'Switch', { [1] = 'Interior',&lt;br /&gt;
                    [2] = 'Exterior',&lt;br /&gt;
					[3] = 'In Wall' ,&lt;br /&gt;
                    [4] = 'Refrigerator',&lt;br /&gt;
                    [5] = 'Garage Door' } },&lt;br /&gt;
[4] = {	'Security Sensor', { [1] = 'Door Sensor',&lt;br /&gt;
                             [2] = 'Leak Sensor',&lt;br /&gt;
                             [3] = 'Motion Sensor',&lt;br /&gt;
                             [4] = 'Smoke Sensor',&lt;br /&gt;
                             [5] = 'CO Sensor',&lt;br /&gt;
                             [6] = 'Glass Break Sensor' } },&lt;br /&gt;
[5] = { 'HVAC', { [1] =	'HVAC',&lt;br /&gt;
                  [2] = 'Heater' } },&lt;br /&gt;
[6] = { 'Camera' },&lt;br /&gt;
[7] = { 'Door Lock' },&lt;br /&gt;
[8] = { 'Window Covering', { [1] = 'Window Covering',&lt;br /&gt;
                            [2] = 'ZRTSI' } },&lt;br /&gt;
[9] = { 'Remote Control' },&lt;br /&gt;
[10] = { 'IR Transmitter', { [1] = 'IR Transmitter',&lt;br /&gt;
                             [2] = 'USB UIRT' } },&lt;br /&gt;
[11] = { 'Generic I/O' },&lt;br /&gt;
[12] = { 'Generic Sensor' },&lt;br /&gt;
[13] = { 'Serial Port' },&lt;br /&gt;
[14] = { 'Scene Controller' },&lt;br /&gt;
[15] = { 'A/V' },&lt;br /&gt;
[16] = { 'Humidity Sensor' },&lt;br /&gt;
[17] = { 'Temperature Sensor' },&lt;br /&gt;
[18] = { 'Light Sensor' },&lt;br /&gt;
[19] = { 'Z-Wave Interface' },&lt;br /&gt;
[20] = { 'Insteon Interface' },&lt;br /&gt;
[21] = { 'Power Meter' },&lt;br /&gt;
[22] = { 'Alarm Panel' },&lt;br /&gt;
[23] = { 'Alarm Partition' },&lt;br /&gt;
[24] = { 'Siren' } }&lt;br /&gt;
&lt;br /&gt;
group_written = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:()]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
 &lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     c  = device_categories[ v.category_num ]&lt;br /&gt;
&lt;br /&gt;
     if c == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   t = 'DEVICE CATEGORY ' .. tostring( v.category_num ) .. '/' .. tostring( v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	  else&lt;br /&gt;
&lt;br /&gt;
        t  = c[ 1 ]&lt;br /&gt;
&lt;br /&gt;
        st = c[ 2 ]&lt;br /&gt;
&lt;br /&gt;
	    if ( st ~= nil ) and ( v.subcategory_num ~= 0 )&lt;br /&gt;
	     then&lt;br /&gt;
&lt;br /&gt;
	      t =  t .. ' / ' .. tostring( st[ v.subcategory_num ] or v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	     end&lt;br /&gt;
&lt;br /&gt;
	  end&lt;br /&gt;
&lt;br /&gt;
     tn = normalize_name( t )&lt;br /&gt;
&lt;br /&gt;
	 if group_written[ t ] == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   outf:write( 'Group ' .. tostring( tn ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
       outf:write( 'Number ' .. tostring( tn ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
	   group_written[ t ] = tn&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',' .. tostring( tn ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   p = tostring( v ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=6000 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=30000 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=30000 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB rules ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[WORK IN PROGRESS (non-functional demo)]]&lt;br /&gt;
&lt;br /&gt;
Use a real computer to run the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local json = require( 'dkjson' ) -- use a json parser that doesn't complain about empty arrays ...&lt;br /&gt;
local http = require( 'socket.http' )&lt;br /&gt;
&lt;br /&gt;
local url = 'http://192.168.178.116:3480/data_request?id=user_data'&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
body, c, l, h = http.request( url )&lt;br /&gt;
&lt;br /&gt;
print( '// status line', l )&lt;br /&gt;
print( '// h', h )&lt;br /&gt;
print( '// c', c )&lt;br /&gt;
&lt;br /&gt;
print( '' )&lt;br /&gt;
&lt;br /&gt;
if c == 200&lt;br /&gt;
 then&lt;br /&gt;
&lt;br /&gt;
  local data = json.decode( body )&lt;br /&gt;
&lt;br /&gt;
  for k, v in pairs( data.scenes )&lt;br /&gt;
   do&lt;br /&gt;
&lt;br /&gt;
    print( 'rule ' .. normalize_name( v.name ) )&lt;br /&gt;
    print( '// MiOS id: ' .. v.id )&lt;br /&gt;
    print( 'when' )&lt;br /&gt;
&lt;br /&gt;
	if v.timers ~= nil&lt;br /&gt;
	 then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.timers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
	    t = tonumber( j.type )&lt;br /&gt;
&lt;br /&gt;
	    if t == 1&lt;br /&gt;
                then&lt;br /&gt;
&lt;br /&gt;
                  print( '  ', j.interval, '  // MiOS type 1' )&lt;br /&gt;
&lt;br /&gt;
		else if t == 2&lt;br /&gt;
		 then&lt;br /&gt;
&lt;br /&gt;
		  print( '  ', j.days_of_week, j.time, '  // MiOS type 2' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 3&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', '// ERROR: Not implemented - MiOS type 3' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 4&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', j.abstime, '  // MiOS type 4' )&lt;br /&gt;
&lt;br /&gt;
                 else&lt;br /&gt;
&lt;br /&gt;
		  print( '// ERROR: unknown timer, MiOS type: ', tostring( t ) )&lt;br /&gt;
&lt;br /&gt;
		  for x, y in pairs( j )&lt;br /&gt;
		   do&lt;br /&gt;
&lt;br /&gt;
		    print( '//  ', x, y )&lt;br /&gt;
&lt;br /&gt;
		   end&lt;br /&gt;
&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
	if v.triggers ~= nil&lt;br /&gt;
         then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.triggers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
		print( '// ' .. j.name )&lt;br /&gt;
&lt;br /&gt;
		for x, y in pairs( j )&lt;br /&gt;
		 do&lt;br /&gt;
		  print( '    //', x, y )&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
    print( 'then' )&lt;br /&gt;
    print( 'end' )&lt;br /&gt;
    print( '' )&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
 else&lt;br /&gt;
&lt;br /&gt;
  print( '//http error code:', c )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;br /&gt;
&lt;br /&gt;
=== Building a quarter wave ground plane antenna for Z-Wave ===&lt;br /&gt;
&lt;br /&gt;
==== Parts needed ====&lt;br /&gt;
&lt;br /&gt;
4x Amphenol B6351B1-ND3G-50&lt;br /&gt;
&lt;br /&gt;
Copper wire&lt;br /&gt;
&lt;br /&gt;
50 Ohm cable BNC male - BNC male&lt;br /&gt;
&lt;br /&gt;
SMA male - BNC female adapter (for Vera3 with antenna mod)&lt;br /&gt;
&lt;br /&gt;
U.FL female - BNC female pigtail cable and U.FL male coaxial connector SMD (for Aeon Z-Stick S2)&lt;br /&gt;
&lt;br /&gt;
[[File:parts.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
==== Calculations ====&lt;br /&gt;
&lt;br /&gt;
length of radials/radiator = speed of light / frequency * velocity factor / 4&lt;br /&gt;
&lt;br /&gt;
For EU frequency: length = 299792458 m/s / 868420000 Hz / * 0.95 / 4 = 8.2 cm&lt;br /&gt;
&lt;br /&gt;
==== Antenna ====&lt;br /&gt;
&lt;br /&gt;
[[File:antenna.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
==== Modifying the Aeon Z-Stick S2 ====&lt;br /&gt;
&lt;br /&gt;
[[File:z_stick_s2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
[[File:openHAB1.jpg|300px]] [[File:openHAB2.jpg|300px]] [[File:openHAB3.jpg|300px]]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2015-01-18T17:33:57Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Building a ground plane antenna for Z-Wave */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
[[Add]] rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'                    ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'                      ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1'         ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'            ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'              ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'               ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'                ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                           ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'                  ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'                ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'               ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'           ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'                ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'               ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'                      ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                               ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'            ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviR:1'               ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePhase:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:holidayvirtualswitch:1'           ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
local device_categories = {&lt;br /&gt;
[1] = { 'Interface' },&lt;br /&gt;
[2] = { 'Dimmable Light' },&lt;br /&gt;
[3] = { 'Switch', { [1] = 'Interior',&lt;br /&gt;
                    [2] = 'Exterior',&lt;br /&gt;
					[3] = 'In Wall' ,&lt;br /&gt;
                    [4] = 'Refrigerator',&lt;br /&gt;
                    [5] = 'Garage Door' } },&lt;br /&gt;
[4] = {	'Security Sensor', { [1] = 'Door Sensor',&lt;br /&gt;
                             [2] = 'Leak Sensor',&lt;br /&gt;
                             [3] = 'Motion Sensor',&lt;br /&gt;
                             [4] = 'Smoke Sensor',&lt;br /&gt;
                             [5] = 'CO Sensor',&lt;br /&gt;
                             [6] = 'Glass Break Sensor' } },&lt;br /&gt;
[5] = { 'HVAC', { [1] =	'HVAC',&lt;br /&gt;
                  [2] = 'Heater' } },&lt;br /&gt;
[6] = { 'Camera' },&lt;br /&gt;
[7] = { 'Door Lock' },&lt;br /&gt;
[8] = { 'Window Covering', { [1] = 'Window Covering',&lt;br /&gt;
                            [2] = 'ZRTSI' } },&lt;br /&gt;
[9] = { 'Remote Control' },&lt;br /&gt;
[10] = { 'IR Transmitter', { [1] = 'IR Transmitter',&lt;br /&gt;
                             [2] = 'USB UIRT' } },&lt;br /&gt;
[11] = { 'Generic I/O' },&lt;br /&gt;
[12] = { 'Generic Sensor' },&lt;br /&gt;
[13] = { 'Serial Port' },&lt;br /&gt;
[14] = { 'Scene Controller' },&lt;br /&gt;
[15] = { 'A/V' },&lt;br /&gt;
[16] = { 'Humidity Sensor' },&lt;br /&gt;
[17] = { 'Temperature Sensor' },&lt;br /&gt;
[18] = { 'Light Sensor' },&lt;br /&gt;
[19] = { 'Z-Wave Interface' },&lt;br /&gt;
[20] = { 'Insteon Interface' },&lt;br /&gt;
[21] = { 'Power Meter' },&lt;br /&gt;
[22] = { 'Alarm Panel' },&lt;br /&gt;
[23] = { 'Alarm Partition' },&lt;br /&gt;
[24] = { 'Siren' } }&lt;br /&gt;
&lt;br /&gt;
group_written = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:()]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
 &lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     c  = device_categories[ v.category_num ]&lt;br /&gt;
&lt;br /&gt;
     if c == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   t = 'DEVICE CATEGORY ' .. tostring( v.category_num ) .. '/' .. tostring( v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	  else&lt;br /&gt;
&lt;br /&gt;
        t  = c[ 1 ]&lt;br /&gt;
&lt;br /&gt;
        st = c[ 2 ]&lt;br /&gt;
&lt;br /&gt;
	    if ( st ~= nil ) and ( v.subcategory_num ~= 0 )&lt;br /&gt;
	     then&lt;br /&gt;
&lt;br /&gt;
	      t =  t .. ' / ' .. tostring( st[ v.subcategory_num ] or v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	     end&lt;br /&gt;
&lt;br /&gt;
	  end&lt;br /&gt;
&lt;br /&gt;
     tn = normalize_name( t )&lt;br /&gt;
&lt;br /&gt;
	 if group_written[ t ] == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   outf:write( 'Group ' .. tostring( tn ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
       outf:write( 'Number ' .. tostring( tn ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
	   group_written[ t ] = tn&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',' .. tostring( tn ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   p = tostring( v ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=6000 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=30000 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=30000 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB rules ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[WORK IN PROGRESS (non-functional demo)]]&lt;br /&gt;
&lt;br /&gt;
Use a real computer to run the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local json = require( 'dkjson' ) -- use a json parser that doesn't complain about empty arrays ...&lt;br /&gt;
local http = require( 'socket.http' )&lt;br /&gt;
&lt;br /&gt;
local url = 'http://192.168.178.116:3480/data_request?id=user_data'&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
body, c, l, h = http.request( url )&lt;br /&gt;
&lt;br /&gt;
print( '// status line', l )&lt;br /&gt;
print( '// h', h )&lt;br /&gt;
print( '// c', c )&lt;br /&gt;
&lt;br /&gt;
print( '' )&lt;br /&gt;
&lt;br /&gt;
if c == 200&lt;br /&gt;
 then&lt;br /&gt;
&lt;br /&gt;
  local data = json.decode( body )&lt;br /&gt;
&lt;br /&gt;
  for k, v in pairs( data.scenes )&lt;br /&gt;
   do&lt;br /&gt;
&lt;br /&gt;
    print( 'rule ' .. normalize_name( v.name ) )&lt;br /&gt;
    print( '// MiOS id: ' .. v.id )&lt;br /&gt;
    print( 'when' )&lt;br /&gt;
&lt;br /&gt;
	if v.timers ~= nil&lt;br /&gt;
	 then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.timers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
	    t = tonumber( j.type )&lt;br /&gt;
&lt;br /&gt;
	    if t == 1&lt;br /&gt;
                then&lt;br /&gt;
&lt;br /&gt;
                  print( '  ', j.interval, '  // MiOS type 1' )&lt;br /&gt;
&lt;br /&gt;
		else if t == 2&lt;br /&gt;
		 then&lt;br /&gt;
&lt;br /&gt;
		  print( '  ', j.days_of_week, j.time, '  // MiOS type 2' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 3&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', '// ERROR: Not implemented - MiOS type 3' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 4&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', j.abstime, '  // MiOS type 4' )&lt;br /&gt;
&lt;br /&gt;
                 else&lt;br /&gt;
&lt;br /&gt;
		  print( '// ERROR: unknown timer, MiOS type: ', tostring( t ) )&lt;br /&gt;
&lt;br /&gt;
		  for x, y in pairs( j )&lt;br /&gt;
		   do&lt;br /&gt;
&lt;br /&gt;
		    print( '//  ', x, y )&lt;br /&gt;
&lt;br /&gt;
		   end&lt;br /&gt;
&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
	if v.triggers ~= nil&lt;br /&gt;
         then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.triggers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
		print( '// ' .. j.name )&lt;br /&gt;
&lt;br /&gt;
		for x, y in pairs( j )&lt;br /&gt;
		 do&lt;br /&gt;
		  print( '    //', x, y )&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
    print( 'then' )&lt;br /&gt;
    print( 'end' )&lt;br /&gt;
    print( '' )&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
 else&lt;br /&gt;
&lt;br /&gt;
  print( '//http error code:', c )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;br /&gt;
&lt;br /&gt;
=== Building a quarter wave ground plane antenna for Z-Wave ===&lt;br /&gt;
&lt;br /&gt;
==== Parts needed ====&lt;br /&gt;
&lt;br /&gt;
4x Amphenol B6351B1-ND3G-50&lt;br /&gt;
&lt;br /&gt;
Copper wire&lt;br /&gt;
&lt;br /&gt;
50 Ohm cable BNC male - BNC male&lt;br /&gt;
&lt;br /&gt;
SMA male - BNC female adapter (for Vera3 with antenna mod)&lt;br /&gt;
&lt;br /&gt;
U.FL female - BNC female pigtail cable and U.FL male coaxial connector SMD (for Aeon Z-Stick S2)&lt;br /&gt;
&lt;br /&gt;
[[File:parts.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
==== Calculations ====&lt;br /&gt;
&lt;br /&gt;
length of radials/radiator = speed of light / frequency * velocity factor / 4&lt;br /&gt;
&lt;br /&gt;
For EU frequency: length = 299792458 m/s / 868420000 Hz / * 0.95 / 4 = 8.2 cm&lt;br /&gt;
&lt;br /&gt;
==== Antenna ====&lt;br /&gt;
&lt;br /&gt;
[[File:antenna.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
==== Modifying the Aeon Z-Stick S2 ====&lt;br /&gt;
&lt;br /&gt;
[[File:z_stick_s2.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
[[File:openHAB1.jpg|300px]] [[File:openHAB2.jpg|300px]] [[File:openHAB3.jpg|300px]]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:Parts.jpg</id>
		<title>File:Parts.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:Parts.jpg"/>
				<updated>2015-01-18T17:32:22Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:Z_stick_s2.jpg</id>
		<title>File:Z stick s2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:Z_stick_s2.jpg"/>
				<updated>2015-01-18T17:31:47Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:Antenna.jpg</id>
		<title>File:Antenna.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:Antenna.jpg"/>
				<updated>2015-01-18T17:31:05Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2015-01-17T23:01:44Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Synchronizing Vera's devices with openHAB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
[[Add]] rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'                    ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'                      ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1'         ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'            ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'              ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'               ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'                ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                           ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'                  ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'                ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'               ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'           ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'                ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'               ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'                      ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                               ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'            ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviR:1'               ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePhase:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:holidayvirtualswitch:1'           ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
local device_categories = {&lt;br /&gt;
[1] = { 'Interface' },&lt;br /&gt;
[2] = { 'Dimmable Light' },&lt;br /&gt;
[3] = { 'Switch', { [1] = 'Interior',&lt;br /&gt;
                    [2] = 'Exterior',&lt;br /&gt;
					[3] = 'In Wall' ,&lt;br /&gt;
                    [4] = 'Refrigerator',&lt;br /&gt;
                    [5] = 'Garage Door' } },&lt;br /&gt;
[4] = {	'Security Sensor', { [1] = 'Door Sensor',&lt;br /&gt;
                             [2] = 'Leak Sensor',&lt;br /&gt;
                             [3] = 'Motion Sensor',&lt;br /&gt;
                             [4] = 'Smoke Sensor',&lt;br /&gt;
                             [5] = 'CO Sensor',&lt;br /&gt;
                             [6] = 'Glass Break Sensor' } },&lt;br /&gt;
[5] = { 'HVAC', { [1] =	'HVAC',&lt;br /&gt;
                  [2] = 'Heater' } },&lt;br /&gt;
[6] = { 'Camera' },&lt;br /&gt;
[7] = { 'Door Lock' },&lt;br /&gt;
[8] = { 'Window Covering', { [1] = 'Window Covering',&lt;br /&gt;
                            [2] = 'ZRTSI' } },&lt;br /&gt;
[9] = { 'Remote Control' },&lt;br /&gt;
[10] = { 'IR Transmitter', { [1] = 'IR Transmitter',&lt;br /&gt;
                             [2] = 'USB UIRT' } },&lt;br /&gt;
[11] = { 'Generic I/O' },&lt;br /&gt;
[12] = { 'Generic Sensor' },&lt;br /&gt;
[13] = { 'Serial Port' },&lt;br /&gt;
[14] = { 'Scene Controller' },&lt;br /&gt;
[15] = { 'A/V' },&lt;br /&gt;
[16] = { 'Humidity Sensor' },&lt;br /&gt;
[17] = { 'Temperature Sensor' },&lt;br /&gt;
[18] = { 'Light Sensor' },&lt;br /&gt;
[19] = { 'Z-Wave Interface' },&lt;br /&gt;
[20] = { 'Insteon Interface' },&lt;br /&gt;
[21] = { 'Power Meter' },&lt;br /&gt;
[22] = { 'Alarm Panel' },&lt;br /&gt;
[23] = { 'Alarm Partition' },&lt;br /&gt;
[24] = { 'Siren' } }&lt;br /&gt;
&lt;br /&gt;
group_written = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:()]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
 &lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     c  = device_categories[ v.category_num ]&lt;br /&gt;
&lt;br /&gt;
     if c == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   t = 'DEVICE CATEGORY ' .. tostring( v.category_num ) .. '/' .. tostring( v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	  else&lt;br /&gt;
&lt;br /&gt;
        t  = c[ 1 ]&lt;br /&gt;
&lt;br /&gt;
        st = c[ 2 ]&lt;br /&gt;
&lt;br /&gt;
	    if ( st ~= nil ) and ( v.subcategory_num ~= 0 )&lt;br /&gt;
	     then&lt;br /&gt;
&lt;br /&gt;
	      t =  t .. ' / ' .. tostring( st[ v.subcategory_num ] or v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	     end&lt;br /&gt;
&lt;br /&gt;
	  end&lt;br /&gt;
&lt;br /&gt;
     tn = normalize_name( t )&lt;br /&gt;
&lt;br /&gt;
	 if group_written[ t ] == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   outf:write( 'Group ' .. tostring( tn ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
       outf:write( 'Number ' .. tostring( tn ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
	   group_written[ t ] = tn&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',' .. tostring( tn ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   p = tostring( v ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=6000 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=30000 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=30000 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB rules ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[WORK IN PROGRESS (non-functional demo)]]&lt;br /&gt;
&lt;br /&gt;
Use a real computer to run the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local json = require( 'dkjson' ) -- use a json parser that doesn't complain about empty arrays ...&lt;br /&gt;
local http = require( 'socket.http' )&lt;br /&gt;
&lt;br /&gt;
local url = 'http://192.168.178.116:3480/data_request?id=user_data'&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
body, c, l, h = http.request( url )&lt;br /&gt;
&lt;br /&gt;
print( '// status line', l )&lt;br /&gt;
print( '// h', h )&lt;br /&gt;
print( '// c', c )&lt;br /&gt;
&lt;br /&gt;
print( '' )&lt;br /&gt;
&lt;br /&gt;
if c == 200&lt;br /&gt;
 then&lt;br /&gt;
&lt;br /&gt;
  local data = json.decode( body )&lt;br /&gt;
&lt;br /&gt;
  for k, v in pairs( data.scenes )&lt;br /&gt;
   do&lt;br /&gt;
&lt;br /&gt;
    print( 'rule ' .. normalize_name( v.name ) )&lt;br /&gt;
    print( '// MiOS id: ' .. v.id )&lt;br /&gt;
    print( 'when' )&lt;br /&gt;
&lt;br /&gt;
	if v.timers ~= nil&lt;br /&gt;
	 then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.timers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
	    t = tonumber( j.type )&lt;br /&gt;
&lt;br /&gt;
	    if t == 1&lt;br /&gt;
                then&lt;br /&gt;
&lt;br /&gt;
                  print( '  ', j.interval, '  // MiOS type 1' )&lt;br /&gt;
&lt;br /&gt;
		else if t == 2&lt;br /&gt;
		 then&lt;br /&gt;
&lt;br /&gt;
		  print( '  ', j.days_of_week, j.time, '  // MiOS type 2' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 3&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', '// ERROR: Not implemented - MiOS type 3' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 4&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', j.abstime, '  // MiOS type 4' )&lt;br /&gt;
&lt;br /&gt;
                 else&lt;br /&gt;
&lt;br /&gt;
		  print( '// ERROR: unknown timer, MiOS type: ', tostring( t ) )&lt;br /&gt;
&lt;br /&gt;
		  for x, y in pairs( j )&lt;br /&gt;
		   do&lt;br /&gt;
&lt;br /&gt;
		    print( '//  ', x, y )&lt;br /&gt;
&lt;br /&gt;
		   end&lt;br /&gt;
&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
	if v.triggers ~= nil&lt;br /&gt;
         then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.triggers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
		print( '// ' .. j.name )&lt;br /&gt;
&lt;br /&gt;
		for x, y in pairs( j )&lt;br /&gt;
		 do&lt;br /&gt;
		  print( '    //', x, y )&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
    print( 'then' )&lt;br /&gt;
    print( 'end' )&lt;br /&gt;
    print( '' )&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
 else&lt;br /&gt;
&lt;br /&gt;
  print( '//http error code:', c )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;br /&gt;
&lt;br /&gt;
=== Building a ground plane antenna for Z-Wave ===&lt;br /&gt;
&lt;br /&gt;
==== Parts needed ====&lt;br /&gt;
&lt;br /&gt;
4x Amphenol B6351B1-ND3G-50&lt;br /&gt;
&lt;br /&gt;
Copper wire&lt;br /&gt;
&lt;br /&gt;
50 Ohm cable male - male&lt;br /&gt;
&lt;br /&gt;
SMA male - BNC female adapter (for Vera3 with antenna mod)&lt;br /&gt;
&lt;br /&gt;
U.FL female - BNC female pigtail cable and U.FL male coaxial connector SMD (for Aeon Z-Stick S2)&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
[[File:openHAB1.jpg|300px]] [[File:openHAB2.jpg|300px]] [[File:openHAB3.jpg|300px]]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2015-01-17T11:22:55Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Creating openHAB rules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
[[Add]] rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'                    ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'                      ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1'         ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'            ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'              ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'               ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'                ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                           ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'                  ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'                ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'               ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'           ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'                ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'               ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'                      ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                               ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'            ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviR:1'               ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePhase:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:holidayvirtualswitch:1'           ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
local device_categories = {&lt;br /&gt;
[1] = { 'Interface' },&lt;br /&gt;
[2] = { 'Dimmable Light' },&lt;br /&gt;
[3] = { 'Switch', { [1] = 'Interior',&lt;br /&gt;
                    [2] = 'Exterior',&lt;br /&gt;
					[3] = 'In Wall' ,&lt;br /&gt;
                    [4] = 'Refrigerator',&lt;br /&gt;
                    [5] = 'Garage Door' } },&lt;br /&gt;
[4] = {	'Security Sensor', { [1] = 'Door Sensor',&lt;br /&gt;
                             [2] = 'Leak Sensor',&lt;br /&gt;
                             [3] = 'Motion Sensor',&lt;br /&gt;
                             [4] = 'Smoke Sensor',&lt;br /&gt;
                             [5] = 'CO Sensor',&lt;br /&gt;
                             [6] = 'Glass Break Sensor' } },&lt;br /&gt;
[5] = { 'HVAC', { [1] =	'HVAC',&lt;br /&gt;
                  [2] = 'Heater' } },&lt;br /&gt;
[6] = { 'Camera' },&lt;br /&gt;
[7] = { 'Door Lock' },&lt;br /&gt;
[8] = { 'Window Covering', { [1] = 'Window Covering',&lt;br /&gt;
                            [2] = 'ZRTSI' } },&lt;br /&gt;
[9] = { 'Remote Control' },&lt;br /&gt;
[10] = { 'IR Transmitter', { [1] = 'IR Transmitter',&lt;br /&gt;
                             [2] = 'USB UIRT' } },&lt;br /&gt;
[11] = { 'Generic I/O' },&lt;br /&gt;
[12] = { 'Generic Sensor' },&lt;br /&gt;
[13] = { 'Serial Port' },&lt;br /&gt;
[14] = { 'Scene Controller' },&lt;br /&gt;
[15] = { 'A/V' },&lt;br /&gt;
[16] = { 'Humidity Sensor' },&lt;br /&gt;
[17] = { 'Temperature Sensor' },&lt;br /&gt;
[18] = { 'Light Sensor' },&lt;br /&gt;
[19] = { 'Z-Wave Interface' },&lt;br /&gt;
[20] = { 'Insteon Interface' },&lt;br /&gt;
[21] = { 'Power Meter' },&lt;br /&gt;
[22] = { 'Alarm Panel' },&lt;br /&gt;
[23] = { 'Alarm Partition' },&lt;br /&gt;
[24] = { 'Siren' } }&lt;br /&gt;
&lt;br /&gt;
group_written = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:()]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
 &lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     c  = device_categories[ v.category_num ]&lt;br /&gt;
&lt;br /&gt;
     if c == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   t = 'DEVICE CATEGORY ' .. tostring( v.category_num ) .. '/' .. tostring( v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	  else&lt;br /&gt;
&lt;br /&gt;
        t  = c[ 1 ]&lt;br /&gt;
&lt;br /&gt;
        st = c[ 2 ]&lt;br /&gt;
&lt;br /&gt;
	    if ( st ~= nil ) and ( v.subcategory_num ~= 0 )&lt;br /&gt;
	     then&lt;br /&gt;
&lt;br /&gt;
	      t =  t .. ' / ' .. tostring( st[ v.subcategory_num ] or v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	     end&lt;br /&gt;
&lt;br /&gt;
	  end&lt;br /&gt;
&lt;br /&gt;
     tn = normalize_name( t )&lt;br /&gt;
&lt;br /&gt;
	 if group_written[ t ] == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   outf:write( 'Group ' .. tostring( tn ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
       outf:write( 'Number ' .. tostring( tn ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
	   group_written[ t ] = tn&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',' .. tostring( tn ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   p = tostring( v ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=6000 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=30000 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=30000 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB rules ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[WORK IN PROGRESS (non-functional demo)]]&lt;br /&gt;
&lt;br /&gt;
Use a real computer to run the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local json = require( 'dkjson' ) -- use a json parser that doesn't complain about empty arrays ...&lt;br /&gt;
local http = require( 'socket.http' )&lt;br /&gt;
&lt;br /&gt;
local url = 'http://192.168.178.116:3480/data_request?id=user_data'&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
body, c, l, h = http.request( url )&lt;br /&gt;
&lt;br /&gt;
print( '// status line', l )&lt;br /&gt;
print( '// h', h )&lt;br /&gt;
print( '// c', c )&lt;br /&gt;
&lt;br /&gt;
print( '' )&lt;br /&gt;
&lt;br /&gt;
if c == 200&lt;br /&gt;
 then&lt;br /&gt;
&lt;br /&gt;
  local data = json.decode( body )&lt;br /&gt;
&lt;br /&gt;
  for k, v in pairs( data.scenes )&lt;br /&gt;
   do&lt;br /&gt;
&lt;br /&gt;
    print( 'rule ' .. normalize_name( v.name ) )&lt;br /&gt;
    print( '// MiOS id: ' .. v.id )&lt;br /&gt;
    print( 'when' )&lt;br /&gt;
&lt;br /&gt;
	if v.timers ~= nil&lt;br /&gt;
	 then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.timers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
	    t = tonumber( j.type )&lt;br /&gt;
&lt;br /&gt;
	    if t == 1&lt;br /&gt;
                then&lt;br /&gt;
&lt;br /&gt;
                  print( '  ', j.interval, '  // MiOS type 1' )&lt;br /&gt;
&lt;br /&gt;
		else if t == 2&lt;br /&gt;
		 then&lt;br /&gt;
&lt;br /&gt;
		  print( '  ', j.days_of_week, j.time, '  // MiOS type 2' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 3&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', '// ERROR: Not implemented - MiOS type 3' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 4&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', j.abstime, '  // MiOS type 4' )&lt;br /&gt;
&lt;br /&gt;
                 else&lt;br /&gt;
&lt;br /&gt;
		  print( '// ERROR: unknown timer, MiOS type: ', tostring( t ) )&lt;br /&gt;
&lt;br /&gt;
		  for x, y in pairs( j )&lt;br /&gt;
		   do&lt;br /&gt;
&lt;br /&gt;
		    print( '//  ', x, y )&lt;br /&gt;
&lt;br /&gt;
		   end&lt;br /&gt;
&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
	if v.triggers ~= nil&lt;br /&gt;
         then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.triggers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
		print( '// ' .. j.name )&lt;br /&gt;
&lt;br /&gt;
		for x, y in pairs( j )&lt;br /&gt;
		 do&lt;br /&gt;
		  print( '    //', x, y )&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
    print( 'then' )&lt;br /&gt;
    print( 'end' )&lt;br /&gt;
    print( '' )&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
 else&lt;br /&gt;
&lt;br /&gt;
  print( '//http error code:', c )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
[[File:openHAB1.jpg|300px]] [[File:openHAB2.jpg|300px]] [[File:openHAB3.jpg|300px]]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2015-01-17T11:22:04Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Luup code for MiOS devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
[[Add]] rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'                    ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'                      ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1'         ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'            ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'              ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'               ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'                ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                           ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'                  ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'                ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'               ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'           ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'                ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'               ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'                      ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                               ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'            ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviR:1'               ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePhase:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:holidayvirtualswitch:1'           ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
local device_categories = {&lt;br /&gt;
[1] = { 'Interface' },&lt;br /&gt;
[2] = { 'Dimmable Light' },&lt;br /&gt;
[3] = { 'Switch', { [1] = 'Interior',&lt;br /&gt;
                    [2] = 'Exterior',&lt;br /&gt;
					[3] = 'In Wall' ,&lt;br /&gt;
                    [4] = 'Refrigerator',&lt;br /&gt;
                    [5] = 'Garage Door' } },&lt;br /&gt;
[4] = {	'Security Sensor', { [1] = 'Door Sensor',&lt;br /&gt;
                             [2] = 'Leak Sensor',&lt;br /&gt;
                             [3] = 'Motion Sensor',&lt;br /&gt;
                             [4] = 'Smoke Sensor',&lt;br /&gt;
                             [5] = 'CO Sensor',&lt;br /&gt;
                             [6] = 'Glass Break Sensor' } },&lt;br /&gt;
[5] = { 'HVAC', { [1] =	'HVAC',&lt;br /&gt;
                  [2] = 'Heater' } },&lt;br /&gt;
[6] = { 'Camera' },&lt;br /&gt;
[7] = { 'Door Lock' },&lt;br /&gt;
[8] = { 'Window Covering', { [1] = 'Window Covering',&lt;br /&gt;
                            [2] = 'ZRTSI' } },&lt;br /&gt;
[9] = { 'Remote Control' },&lt;br /&gt;
[10] = { 'IR Transmitter', { [1] = 'IR Transmitter',&lt;br /&gt;
                             [2] = 'USB UIRT' } },&lt;br /&gt;
[11] = { 'Generic I/O' },&lt;br /&gt;
[12] = { 'Generic Sensor' },&lt;br /&gt;
[13] = { 'Serial Port' },&lt;br /&gt;
[14] = { 'Scene Controller' },&lt;br /&gt;
[15] = { 'A/V' },&lt;br /&gt;
[16] = { 'Humidity Sensor' },&lt;br /&gt;
[17] = { 'Temperature Sensor' },&lt;br /&gt;
[18] = { 'Light Sensor' },&lt;br /&gt;
[19] = { 'Z-Wave Interface' },&lt;br /&gt;
[20] = { 'Insteon Interface' },&lt;br /&gt;
[21] = { 'Power Meter' },&lt;br /&gt;
[22] = { 'Alarm Panel' },&lt;br /&gt;
[23] = { 'Alarm Partition' },&lt;br /&gt;
[24] = { 'Siren' } }&lt;br /&gt;
&lt;br /&gt;
group_written = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:()]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
 &lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     c  = device_categories[ v.category_num ]&lt;br /&gt;
&lt;br /&gt;
     if c == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   t = 'DEVICE CATEGORY ' .. tostring( v.category_num ) .. '/' .. tostring( v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	  else&lt;br /&gt;
&lt;br /&gt;
        t  = c[ 1 ]&lt;br /&gt;
&lt;br /&gt;
        st = c[ 2 ]&lt;br /&gt;
&lt;br /&gt;
	    if ( st ~= nil ) and ( v.subcategory_num ~= 0 )&lt;br /&gt;
	     then&lt;br /&gt;
&lt;br /&gt;
	      t =  t .. ' / ' .. tostring( st[ v.subcategory_num ] or v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	     end&lt;br /&gt;
&lt;br /&gt;
	  end&lt;br /&gt;
&lt;br /&gt;
     tn = normalize_name( t )&lt;br /&gt;
&lt;br /&gt;
	 if group_written[ t ] == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   outf:write( 'Group ' .. tostring( tn ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
       outf:write( 'Number ' .. tostring( tn ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
	   group_written[ t ] = tn&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',' .. tostring( tn ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   p = tostring( v ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=6000 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=30000 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=30000 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB rules ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[WORK IN PROGRESS (non-functional demo)]]&lt;br /&gt;
&lt;br /&gt;
Use a real computer to run the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local json = require( 'dkjson' ) -- use a json parser that doesn't complain about emtpy arrays ...&lt;br /&gt;
local http = require( 'socket.http' )&lt;br /&gt;
&lt;br /&gt;
local url = 'http://192.168.178.116:3480/data_request?id=user_data'&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
body, c, l, h = http.request( url )&lt;br /&gt;
&lt;br /&gt;
print( '// status line', l )&lt;br /&gt;
print( '// h', h )&lt;br /&gt;
print( '// c', c )&lt;br /&gt;
&lt;br /&gt;
print( '' )&lt;br /&gt;
&lt;br /&gt;
if c == 200&lt;br /&gt;
 then&lt;br /&gt;
&lt;br /&gt;
  local data = json.decode( body )&lt;br /&gt;
&lt;br /&gt;
  for k, v in pairs( data.scenes )&lt;br /&gt;
   do&lt;br /&gt;
&lt;br /&gt;
    print( 'rule ' .. normalize_name( v.name ) )&lt;br /&gt;
    print( '// MiOS id: ' .. v.id )&lt;br /&gt;
    print( 'when' )&lt;br /&gt;
&lt;br /&gt;
	if v.timers ~= nil&lt;br /&gt;
	 then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.timers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
	    t = tonumber( j.type )&lt;br /&gt;
&lt;br /&gt;
	    if t == 1&lt;br /&gt;
                then&lt;br /&gt;
&lt;br /&gt;
                  print( '  ', j.interval, '  // MiOS type 1' )&lt;br /&gt;
&lt;br /&gt;
		else if t == 2&lt;br /&gt;
		 then&lt;br /&gt;
&lt;br /&gt;
		  print( '  ', j.days_of_week, j.time, '  // MiOS type 2' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 3&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', '// ERROR: Not implemented - MiOS type 3' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 4&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', j.abstime, '  // MiOS type 4' )&lt;br /&gt;
&lt;br /&gt;
                 else&lt;br /&gt;
&lt;br /&gt;
		  print( '// ERROR: unknown timer, MiOS type: ', tostring( t ) )&lt;br /&gt;
&lt;br /&gt;
		  for x, y in pairs( j )&lt;br /&gt;
		   do&lt;br /&gt;
&lt;br /&gt;
		    print( '//  ', x, y )&lt;br /&gt;
&lt;br /&gt;
		   end&lt;br /&gt;
&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
	if v.triggers ~= nil&lt;br /&gt;
         then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.triggers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
		print( '// ' .. j.name )&lt;br /&gt;
&lt;br /&gt;
		for x, y in pairs( j )&lt;br /&gt;
		 do&lt;br /&gt;
		  print( '    //', x, y )&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
    print( 'then' )&lt;br /&gt;
    print( 'end' )&lt;br /&gt;
    print( '' )&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
 else&lt;br /&gt;
&lt;br /&gt;
  print( '//http error code:', c )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
[[File:openHAB1.jpg|300px]] [[File:openHAB2.jpg|300px]] [[File:openHAB3.jpg|300px]]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2014-12-15T20:37:11Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Luup code for MiOS devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
[[Add]] rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'                    ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'                      ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1'         ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'            ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'              ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'               ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'                ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                           ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'                  ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'                ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'               ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'           ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'                ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'               ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'                      ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                               ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'            ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviR:1'               ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePhase:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:holidayvirtualswitch:1'           ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
local device_categories = {&lt;br /&gt;
[1] = { 'Interface' },&lt;br /&gt;
[2] = { 'Dimmable Light' },&lt;br /&gt;
[3] = { 'Switch', { [1] = 'Interior',&lt;br /&gt;
                    [2] = 'Exterior',&lt;br /&gt;
					[3] = 'In Wall' ,&lt;br /&gt;
                    [4] = 'Refrigerator',&lt;br /&gt;
                    [5] = 'Garage Door' } },&lt;br /&gt;
[4] = {	'Security Sensor', { [1] = 'Door Sensor',&lt;br /&gt;
                             [2] = 'Leak Sensor',&lt;br /&gt;
                             [3] = 'Motion Sensor',&lt;br /&gt;
                             [4] = 'Smoke Sensor',&lt;br /&gt;
                             [5] = 'CO Sensor',&lt;br /&gt;
                             [6] = 'Glass Break Sensor' } },&lt;br /&gt;
[5] = { 'HVAC', { [1] =	'HVAC',&lt;br /&gt;
                  [2] = 'Heater' } },&lt;br /&gt;
[6] = { 'Camera' },&lt;br /&gt;
[7] = { 'Door Lock' },&lt;br /&gt;
[8] = { 'Window Covering', { [1] = 'Window Covering',&lt;br /&gt;
                            [2] = 'ZRTSI' } },&lt;br /&gt;
[9] = { 'Remote Control' },&lt;br /&gt;
[10] = { 'IR Transmitter', { [1] = 'IR Transmitter',&lt;br /&gt;
                             [2] = 'USB UIRT' } },&lt;br /&gt;
[11] = { 'Generic I/O' },&lt;br /&gt;
[12] = { 'Generic Sensor' },&lt;br /&gt;
[13] = { 'Serial Port' },&lt;br /&gt;
[14] = { 'Scene Controller' },&lt;br /&gt;
[15] = { 'A/V' },&lt;br /&gt;
[16] = { 'Humidity Sensor' },&lt;br /&gt;
[17] = { 'Temperature Sensor' },&lt;br /&gt;
[18] = { 'Light Sensor' },&lt;br /&gt;
[19] = { 'Z-Wave Interface' },&lt;br /&gt;
[20] = { 'Insteon Interface' },&lt;br /&gt;
[21] = { 'Power Meter' },&lt;br /&gt;
[22] = { 'Alarm Panel' },&lt;br /&gt;
[23] = { 'Alarm Partition' },&lt;br /&gt;
[24] = { 'Siren' } }&lt;br /&gt;
&lt;br /&gt;
group_written = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:()]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
 &lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     c  = device_categories[ v.category_num ]&lt;br /&gt;
&lt;br /&gt;
     if c == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   t = 'DEVICE CATEGORY ' .. tostring( v.category_num ) .. '/' .. tostring( v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	  else&lt;br /&gt;
&lt;br /&gt;
        t  = c[ 1 ]&lt;br /&gt;
&lt;br /&gt;
        st = c[ 2 ]&lt;br /&gt;
&lt;br /&gt;
	    if ( st ~= nil ) and ( v.subcategory_num ~= 0 )&lt;br /&gt;
	     then&lt;br /&gt;
&lt;br /&gt;
	      t =  t .. ' / ' .. tostring( st[ v.subcategory_num ] or v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	     end&lt;br /&gt;
&lt;br /&gt;
	  end&lt;br /&gt;
&lt;br /&gt;
     tn = normalize_name( t )&lt;br /&gt;
&lt;br /&gt;
	 if group_written[ t ] == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   outf:write( 'Group ' .. tostring( tn ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
       outf:write( 'Number ' .. tostring( tn ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
	   group_written[ t ] = tn&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',' .. tostring( tn ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   p = tostring( v ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=6000 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=30000 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=30000 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB rules ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[WORK IN PROGRESS (non-functional demo)]]&lt;br /&gt;
&lt;br /&gt;
Use a real computer to run the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local json = require( 'dkjson' ) -- use a json parser that doesn't complain about emtpy arrays ...&lt;br /&gt;
local http = require( 'socket.http' )&lt;br /&gt;
&lt;br /&gt;
local url = 'http://192.168.178.116:3480/data_request?id=user_data'&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
body, c, l, h = http.request( url )&lt;br /&gt;
&lt;br /&gt;
print( '// status line', l )&lt;br /&gt;
print( '// h', h )&lt;br /&gt;
print( '// c', c )&lt;br /&gt;
&lt;br /&gt;
print( '' )&lt;br /&gt;
&lt;br /&gt;
if c == 200&lt;br /&gt;
 then&lt;br /&gt;
&lt;br /&gt;
  local data = json.decode( body )&lt;br /&gt;
&lt;br /&gt;
  for k, v in pairs( data.scenes )&lt;br /&gt;
   do&lt;br /&gt;
&lt;br /&gt;
    print( 'rule ' .. normalize_name( v.name ) )&lt;br /&gt;
    print( '// MiOS id: ' .. v.id )&lt;br /&gt;
    print( 'when' )&lt;br /&gt;
&lt;br /&gt;
	if v.timers ~= nil&lt;br /&gt;
	 then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.timers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
	    t = tonumber( j.type )&lt;br /&gt;
&lt;br /&gt;
	    if t == 1&lt;br /&gt;
                then&lt;br /&gt;
&lt;br /&gt;
                  print( '  ', j.interval, '  // MiOS type 1' )&lt;br /&gt;
&lt;br /&gt;
		else if t == 2&lt;br /&gt;
		 then&lt;br /&gt;
&lt;br /&gt;
		  print( '  ', j.days_of_week, j.time, '  // MiOS type 2' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 3&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', '// ERROR: Not implemented - MiOS type 3' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 4&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', j.abstime, '  // MiOS type 4' )&lt;br /&gt;
&lt;br /&gt;
                 else&lt;br /&gt;
&lt;br /&gt;
		  print( '// ERROR: unknown timer, MiOS type: ', tostring( t ) )&lt;br /&gt;
&lt;br /&gt;
		  for x, y in pairs( j )&lt;br /&gt;
		   do&lt;br /&gt;
&lt;br /&gt;
		    print( '//  ', x, y )&lt;br /&gt;
&lt;br /&gt;
		   end&lt;br /&gt;
&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
	if v.triggers ~= nil&lt;br /&gt;
         then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.triggers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
		print( '// ' .. j.name )&lt;br /&gt;
&lt;br /&gt;
		for x, y in pairs( j )&lt;br /&gt;
		 do&lt;br /&gt;
		  print( '    //', x, y )&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
    print( 'then' )&lt;br /&gt;
    print( 'end' )&lt;br /&gt;
    print( '' )&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
 else&lt;br /&gt;
&lt;br /&gt;
  print( '//http error code:', c )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
[[File:openHAB1.jpg|300px]] [[File:openHAB2.jpg|300px]] [[File:openHAB3.jpg|300px]]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2014-12-08T22:14:02Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Screenshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
[[Add]] rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'                    ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'                      ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1'         ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'            ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'              ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'               ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'                ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                           ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'                  ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'                ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'               ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'           ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'                ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'               ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'                      ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                               ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'            ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviR:1'               ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePhase:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:holidayvirtualswitch:1'           ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
local device_categories = {&lt;br /&gt;
[1] = { 'Interface' },&lt;br /&gt;
[2] = { 'Dimmable Light' },&lt;br /&gt;
[3] = { 'Switch', { [1] = 'Interior',&lt;br /&gt;
                    [2] = 'Exterior',&lt;br /&gt;
					[3] = 'In Wall' ,&lt;br /&gt;
                    [4] = 'Refrigerator',&lt;br /&gt;
                    [5] = 'Garage Door' } },&lt;br /&gt;
[4] = {	'Security Sensor', { [1] = 'Door Sensor',&lt;br /&gt;
                             [2] = 'Leak Sensor',&lt;br /&gt;
                             [3] = 'Motion Sensor',&lt;br /&gt;
                             [4] = 'Smoke Sensor',&lt;br /&gt;
                             [5] = 'CO Sensor',&lt;br /&gt;
                             [6] = 'Glass Break Sensor' } },&lt;br /&gt;
[5] = { 'HVAC', { [1] =	'HVAC',&lt;br /&gt;
                  [2] = 'Heater' } },&lt;br /&gt;
[6] = { 'Camera' },&lt;br /&gt;
[7] = { 'Door Lock' },&lt;br /&gt;
[8] = { 'Window Covering', { [1] = 'Window Covering',&lt;br /&gt;
                            [2] = 'ZRTSI' } },&lt;br /&gt;
[9] = { 'Remote Control' },&lt;br /&gt;
[10] = { 'IR Transmitter', { [1] = 'IR Transmitter',&lt;br /&gt;
                             [2] = 'USB UIRT' } },&lt;br /&gt;
[11] = { 'Generic I/O' },&lt;br /&gt;
[12] = { 'Generic Sensor' },&lt;br /&gt;
[13] = { 'Serial Port' },&lt;br /&gt;
[14] = { 'Scene Controller' },&lt;br /&gt;
[15] = { 'A/V' },&lt;br /&gt;
[16] = { 'Humidity Sensor' },&lt;br /&gt;
[17] = { 'Temperature Sensor' },&lt;br /&gt;
[18] = { 'Light Sensor' },&lt;br /&gt;
[19] = { 'Z-Wave Interface' },&lt;br /&gt;
[20] = { 'Insteon Interface' },&lt;br /&gt;
[21] = { 'Power Meter' },&lt;br /&gt;
[22] = { 'Alarm Panel' },&lt;br /&gt;
[23] = { 'Alarm Partition' },&lt;br /&gt;
[24] = { 'Siren' } }&lt;br /&gt;
&lt;br /&gt;
group_written = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:()]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
 &lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     c  = device_categories[ v.category_num ]&lt;br /&gt;
&lt;br /&gt;
     if c == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   t = 'DEVICE CATEGORY ' .. tostring( v.category_num ) .. '/' .. tostring( v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	  else&lt;br /&gt;
&lt;br /&gt;
        t  = c[ 1 ]&lt;br /&gt;
&lt;br /&gt;
        st = c[ 2 ]&lt;br /&gt;
&lt;br /&gt;
	    if ( st ~= nil ) and ( v.subcategory_num ~= 0 )&lt;br /&gt;
	     then&lt;br /&gt;
&lt;br /&gt;
	      t =  t .. ' / ' .. tostring( st[ v.subcategory_num ] or v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	     end&lt;br /&gt;
&lt;br /&gt;
	  end&lt;br /&gt;
&lt;br /&gt;
     tn = normalize_name( t )&lt;br /&gt;
&lt;br /&gt;
	 if group_written[ t ] == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   outf:write( 'Group ' .. tostring( tn ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
       outf:write( 'Number ' .. tostring( tn ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
	   group_written[ t ] = tn&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',' .. tostring( tn ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   p = tostring( v ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=600 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=600 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=600 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB rules ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[WORK IN PROGRESS (non-functional demo)]]&lt;br /&gt;
&lt;br /&gt;
Use a real computer to run the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local json = require( 'dkjson' ) -- use a json parser that doesn't complain about emtpy arrays ...&lt;br /&gt;
local http = require( 'socket.http' )&lt;br /&gt;
&lt;br /&gt;
local url = 'http://192.168.178.116:3480/data_request?id=user_data'&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
body, c, l, h = http.request( url )&lt;br /&gt;
&lt;br /&gt;
print( '// status line', l )&lt;br /&gt;
print( '// h', h )&lt;br /&gt;
print( '// c', c )&lt;br /&gt;
&lt;br /&gt;
print( '' )&lt;br /&gt;
&lt;br /&gt;
if c == 200&lt;br /&gt;
 then&lt;br /&gt;
&lt;br /&gt;
  local data = json.decode( body )&lt;br /&gt;
&lt;br /&gt;
  for k, v in pairs( data.scenes )&lt;br /&gt;
   do&lt;br /&gt;
&lt;br /&gt;
    print( 'rule ' .. normalize_name( v.name ) )&lt;br /&gt;
    print( '// MiOS id: ' .. v.id )&lt;br /&gt;
    print( 'when' )&lt;br /&gt;
&lt;br /&gt;
	if v.timers ~= nil&lt;br /&gt;
	 then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.timers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
	    t = tonumber( j.type )&lt;br /&gt;
&lt;br /&gt;
	    if t == 1&lt;br /&gt;
                then&lt;br /&gt;
&lt;br /&gt;
                  print( '  ', j.interval, '  // MiOS type 1' )&lt;br /&gt;
&lt;br /&gt;
		else if t == 2&lt;br /&gt;
		 then&lt;br /&gt;
&lt;br /&gt;
		  print( '  ', j.days_of_week, j.time, '  // MiOS type 2' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 3&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', '// ERROR: Not implemented - MiOS type 3' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 4&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', j.abstime, '  // MiOS type 4' )&lt;br /&gt;
&lt;br /&gt;
                 else&lt;br /&gt;
&lt;br /&gt;
		  print( '// ERROR: unknown timer, MiOS type: ', tostring( t ) )&lt;br /&gt;
&lt;br /&gt;
		  for x, y in pairs( j )&lt;br /&gt;
		   do&lt;br /&gt;
&lt;br /&gt;
		    print( '//  ', x, y )&lt;br /&gt;
&lt;br /&gt;
		   end&lt;br /&gt;
&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
	if v.triggers ~= nil&lt;br /&gt;
         then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.triggers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
		print( '// ' .. j.name )&lt;br /&gt;
&lt;br /&gt;
		for x, y in pairs( j )&lt;br /&gt;
		 do&lt;br /&gt;
		  print( '    //', x, y )&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
    print( 'then' )&lt;br /&gt;
    print( 'end' )&lt;br /&gt;
    print( '' )&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
 else&lt;br /&gt;
&lt;br /&gt;
  print( '//http error code:', c )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
[[File:openHAB1.jpg|300px]] [[File:openHAB2.jpg|300px]] [[File:openHAB3.jpg|300px]]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2014-12-08T22:13:18Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Synchronizing Vera's devices with openHAB */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
[[Add]] rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'                    ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'                      ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1'         ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'            ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'              ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'               ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'                ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                           ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'                  ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'                ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'               ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'           ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'                ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'               ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'                      ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                               ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'            ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviR:1'               ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePhase:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:holidayvirtualswitch:1'           ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
local device_categories = {&lt;br /&gt;
[1] = { 'Interface' },&lt;br /&gt;
[2] = { 'Dimmable Light' },&lt;br /&gt;
[3] = { 'Switch', { [1] = 'Interior',&lt;br /&gt;
                    [2] = 'Exterior',&lt;br /&gt;
					[3] = 'In Wall' ,&lt;br /&gt;
                    [4] = 'Refrigerator',&lt;br /&gt;
                    [5] = 'Garage Door' } },&lt;br /&gt;
[4] = {	'Security Sensor', { [1] = 'Door Sensor',&lt;br /&gt;
                             [2] = 'Leak Sensor',&lt;br /&gt;
                             [3] = 'Motion Sensor',&lt;br /&gt;
                             [4] = 'Smoke Sensor',&lt;br /&gt;
                             [5] = 'CO Sensor',&lt;br /&gt;
                             [6] = 'Glass Break Sensor' } },&lt;br /&gt;
[5] = { 'HVAC', { [1] =	'HVAC',&lt;br /&gt;
                  [2] = 'Heater' } },&lt;br /&gt;
[6] = { 'Camera' },&lt;br /&gt;
[7] = { 'Door Lock' },&lt;br /&gt;
[8] = { 'Window Covering', { [1] = 'Window Covering',&lt;br /&gt;
                            [2] = 'ZRTSI' } },&lt;br /&gt;
[9] = { 'Remote Control' },&lt;br /&gt;
[10] = { 'IR Transmitter', { [1] = 'IR Transmitter',&lt;br /&gt;
                             [2] = 'USB UIRT' } },&lt;br /&gt;
[11] = { 'Generic I/O' },&lt;br /&gt;
[12] = { 'Generic Sensor' },&lt;br /&gt;
[13] = { 'Serial Port' },&lt;br /&gt;
[14] = { 'Scene Controller' },&lt;br /&gt;
[15] = { 'A/V' },&lt;br /&gt;
[16] = { 'Humidity Sensor' },&lt;br /&gt;
[17] = { 'Temperature Sensor' },&lt;br /&gt;
[18] = { 'Light Sensor' },&lt;br /&gt;
[19] = { 'Z-Wave Interface' },&lt;br /&gt;
[20] = { 'Insteon Interface' },&lt;br /&gt;
[21] = { 'Power Meter' },&lt;br /&gt;
[22] = { 'Alarm Panel' },&lt;br /&gt;
[23] = { 'Alarm Partition' },&lt;br /&gt;
[24] = { 'Siren' } }&lt;br /&gt;
&lt;br /&gt;
group_written = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:()]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
 &lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     c  = device_categories[ v.category_num ]&lt;br /&gt;
&lt;br /&gt;
     if c == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   t = 'DEVICE CATEGORY ' .. tostring( v.category_num ) .. '/' .. tostring( v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	  else&lt;br /&gt;
&lt;br /&gt;
        t  = c[ 1 ]&lt;br /&gt;
&lt;br /&gt;
        st = c[ 2 ]&lt;br /&gt;
&lt;br /&gt;
	    if ( st ~= nil ) and ( v.subcategory_num ~= 0 )&lt;br /&gt;
	     then&lt;br /&gt;
&lt;br /&gt;
	      t =  t .. ' / ' .. tostring( st[ v.subcategory_num ] or v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	     end&lt;br /&gt;
&lt;br /&gt;
	  end&lt;br /&gt;
&lt;br /&gt;
     tn = normalize_name( t )&lt;br /&gt;
&lt;br /&gt;
	 if group_written[ t ] == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   outf:write( 'Group ' .. tostring( tn ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
       outf:write( 'Number ' .. tostring( tn ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
	   group_written[ t ] = tn&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',' .. tostring( tn ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   p = tostring( v ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=600 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=600 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=600 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB rules ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[WORK IN PROGRESS (non-functional demo)]]&lt;br /&gt;
&lt;br /&gt;
Use a real computer to run the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local json = require( 'dkjson' ) -- use a json parser that doesn't complain about emtpy arrays ...&lt;br /&gt;
local http = require( 'socket.http' )&lt;br /&gt;
&lt;br /&gt;
local url = 'http://192.168.178.116:3480/data_request?id=user_data'&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
body, c, l, h = http.request( url )&lt;br /&gt;
&lt;br /&gt;
print( '// status line', l )&lt;br /&gt;
print( '// h', h )&lt;br /&gt;
print( '// c', c )&lt;br /&gt;
&lt;br /&gt;
print( '' )&lt;br /&gt;
&lt;br /&gt;
if c == 200&lt;br /&gt;
 then&lt;br /&gt;
&lt;br /&gt;
  local data = json.decode( body )&lt;br /&gt;
&lt;br /&gt;
  for k, v in pairs( data.scenes )&lt;br /&gt;
   do&lt;br /&gt;
&lt;br /&gt;
    print( 'rule ' .. normalize_name( v.name ) )&lt;br /&gt;
    print( '// MiOS id: ' .. v.id )&lt;br /&gt;
    print( 'when' )&lt;br /&gt;
&lt;br /&gt;
	if v.timers ~= nil&lt;br /&gt;
	 then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.timers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
	    t = tonumber( j.type )&lt;br /&gt;
&lt;br /&gt;
	    if t == 1&lt;br /&gt;
                then&lt;br /&gt;
&lt;br /&gt;
                  print( '  ', j.interval, '  // MiOS type 1' )&lt;br /&gt;
&lt;br /&gt;
		else if t == 2&lt;br /&gt;
		 then&lt;br /&gt;
&lt;br /&gt;
		  print( '  ', j.days_of_week, j.time, '  // MiOS type 2' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 3&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', '// ERROR: Not implemented - MiOS type 3' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 4&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', j.abstime, '  // MiOS type 4' )&lt;br /&gt;
&lt;br /&gt;
                 else&lt;br /&gt;
&lt;br /&gt;
		  print( '// ERROR: unknown timer, MiOS type: ', tostring( t ) )&lt;br /&gt;
&lt;br /&gt;
		  for x, y in pairs( j )&lt;br /&gt;
		   do&lt;br /&gt;
&lt;br /&gt;
		    print( '//  ', x, y )&lt;br /&gt;
&lt;br /&gt;
		   end&lt;br /&gt;
&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
	if v.triggers ~= nil&lt;br /&gt;
         then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.triggers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
		print( '// ' .. j.name )&lt;br /&gt;
&lt;br /&gt;
		for x, y in pairs( j )&lt;br /&gt;
		 do&lt;br /&gt;
		  print( '    //', x, y )&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
    print( 'then' )&lt;br /&gt;
    print( 'end' )&lt;br /&gt;
    print( '' )&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
 else&lt;br /&gt;
&lt;br /&gt;
  print( '//http error code:', c )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;br /&gt;
&lt;br /&gt;
=== Screenshots ===&lt;br /&gt;
&lt;br /&gt;
[[File:openHAB1.jpg|300px]] [[File:openHAB2.jpg|300px]] [[File:openHAB3.jpg|300px]]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:OpenHAB3.jpg</id>
		<title>File:OpenHAB3.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:OpenHAB3.jpg"/>
				<updated>2014-12-08T22:08:26Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:OpenHAB2.jpg</id>
		<title>File:OpenHAB2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:OpenHAB2.jpg"/>
				<updated>2014-12-08T22:07:43Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:OpenHAB1.jpg</id>
		<title>File:OpenHAB1.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:OpenHAB1.jpg"/>
				<updated>2014-12-08T22:06:58Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2014-12-08T21:58:04Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Luup code for MiOS devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
[[Add]] rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'                    ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'                      ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1'         ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'            ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'              ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'               ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'                ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                           ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'                  ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'                ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'               ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'           ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'                ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'               ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'                      ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                               ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'            ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviR:1'               ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePhase:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Watts' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:CurrentCostEnviRAppliancePulse:1' ] = { 'Number' , ' [%d]'     , '&amp;lt;energy&amp;gt;'       , '/service/urn:micasaverde-com:serviceId:EnergyMetering1/Pulse' },&lt;br /&gt;
  [ 'urn:schemas-futzle-com:device:holidayvirtualswitch:1'           ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
local device_categories = {&lt;br /&gt;
[1] = { 'Interface' },&lt;br /&gt;
[2] = { 'Dimmable Light' },&lt;br /&gt;
[3] = { 'Switch', { [1] = 'Interior',&lt;br /&gt;
                    [2] = 'Exterior',&lt;br /&gt;
					[3] = 'In Wall' ,&lt;br /&gt;
                    [4] = 'Refrigerator',&lt;br /&gt;
                    [5] = 'Garage Door' } },&lt;br /&gt;
[4] = {	'Security Sensor', { [1] = 'Door Sensor',&lt;br /&gt;
                             [2] = 'Leak Sensor',&lt;br /&gt;
                             [3] = 'Motion Sensor',&lt;br /&gt;
                             [4] = 'Smoke Sensor',&lt;br /&gt;
                             [5] = 'CO Sensor',&lt;br /&gt;
                             [6] = 'Glass Break Sensor' } },&lt;br /&gt;
[5] = { 'HVAC', { [1] =	'HVAC',&lt;br /&gt;
                  [2] = 'Heater' } },&lt;br /&gt;
[6] = { 'Camera' },&lt;br /&gt;
[7] = { 'Door Lock' },&lt;br /&gt;
[8] = { 'Window Covering', { [1] = 'Window Covering',&lt;br /&gt;
                            [2] = 'ZRTSI' } },&lt;br /&gt;
[9] = { 'Remote Control' },&lt;br /&gt;
[10] = { 'IR Transmitter', { [1] = 'IR Transmitter',&lt;br /&gt;
                             [2] = 'USB UIRT' } },&lt;br /&gt;
[11] = { 'Generic I/O' },&lt;br /&gt;
[12] = { 'Generic Sensor' },&lt;br /&gt;
[13] = { 'Serial Port' },&lt;br /&gt;
[14] = { 'Scene Controller' },&lt;br /&gt;
[15] = { 'A/V' },&lt;br /&gt;
[16] = { 'Humidity Sensor' },&lt;br /&gt;
[17] = { 'Temperature Sensor' },&lt;br /&gt;
[18] = { 'Light Sensor' },&lt;br /&gt;
[19] = { 'Z-Wave Interface' },&lt;br /&gt;
[20] = { 'Insteon Interface' },&lt;br /&gt;
[21] = { 'Power Meter' },&lt;br /&gt;
[22] = { 'Alarm Panel' },&lt;br /&gt;
[23] = { 'Alarm Partition' },&lt;br /&gt;
[24] = { 'Siren' } }&lt;br /&gt;
&lt;br /&gt;
group_written = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:()]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
 &lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     c  = device_categories[ v.category_num ]&lt;br /&gt;
&lt;br /&gt;
     if c == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   t = 'DEVICE CATEGORY ' .. tostring( v.category_num ) .. '/' .. tostring( v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	  else&lt;br /&gt;
&lt;br /&gt;
        t  = c[ 1 ]&lt;br /&gt;
&lt;br /&gt;
        st = c[ 2 ]&lt;br /&gt;
&lt;br /&gt;
	    if ( st ~= nil ) and ( v.subcategory_num ~= 0 )&lt;br /&gt;
	     then&lt;br /&gt;
&lt;br /&gt;
	      t =  t .. ' / ' .. tostring( st[ v.subcategory_num ] or v.subcategory_num )&lt;br /&gt;
&lt;br /&gt;
	     end&lt;br /&gt;
&lt;br /&gt;
	  end&lt;br /&gt;
&lt;br /&gt;
     tn = normalize_name( t )&lt;br /&gt;
&lt;br /&gt;
	 if group_written[ t ] == nil&lt;br /&gt;
      then&lt;br /&gt;
&lt;br /&gt;
	   outf:write( 'Group ' .. tostring( tn ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
       outf:write( 'Number ' .. tostring( tn ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
	   group_written[ t ] = tn&lt;br /&gt;
&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',' .. tostring( tn ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   p = tostring( v ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=600 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=600 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=600 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( group_written )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   i = tostring( v ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB rules ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[WORK IN PROGRESS (non-functional demo)]]&lt;br /&gt;
&lt;br /&gt;
Use a real computer to run the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local json = require( 'dkjson' ) -- use a json parser that doesn't complain about emtpy arrays ...&lt;br /&gt;
local http = require( 'socket.http' )&lt;br /&gt;
&lt;br /&gt;
local url = 'http://192.168.178.116:3480/data_request?id=user_data'&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
body, c, l, h = http.request( url )&lt;br /&gt;
&lt;br /&gt;
print( '// status line', l )&lt;br /&gt;
print( '// h', h )&lt;br /&gt;
print( '// c', c )&lt;br /&gt;
&lt;br /&gt;
print( '' )&lt;br /&gt;
&lt;br /&gt;
if c == 200&lt;br /&gt;
 then&lt;br /&gt;
&lt;br /&gt;
  local data = json.decode( body )&lt;br /&gt;
&lt;br /&gt;
  for k, v in pairs( data.scenes )&lt;br /&gt;
   do&lt;br /&gt;
&lt;br /&gt;
    print( 'rule ' .. normalize_name( v.name ) )&lt;br /&gt;
    print( '// MiOS id: ' .. v.id )&lt;br /&gt;
    print( 'when' )&lt;br /&gt;
&lt;br /&gt;
	if v.timers ~= nil&lt;br /&gt;
	 then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.timers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
	    t = tonumber( j.type )&lt;br /&gt;
&lt;br /&gt;
	    if t == 1&lt;br /&gt;
                then&lt;br /&gt;
&lt;br /&gt;
                  print( '  ', j.interval, '  // MiOS type 1' )&lt;br /&gt;
&lt;br /&gt;
		else if t == 2&lt;br /&gt;
		 then&lt;br /&gt;
&lt;br /&gt;
		  print( '  ', j.days_of_week, j.time, '  // MiOS type 2' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 3&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', '// ERROR: Not implemented - MiOS type 3' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 4&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', j.abstime, '  // MiOS type 4' )&lt;br /&gt;
&lt;br /&gt;
                 else&lt;br /&gt;
&lt;br /&gt;
		  print( '// ERROR: unknown timer, MiOS type: ', tostring( t ) )&lt;br /&gt;
&lt;br /&gt;
		  for x, y in pairs( j )&lt;br /&gt;
		   do&lt;br /&gt;
&lt;br /&gt;
		    print( '//  ', x, y )&lt;br /&gt;
&lt;br /&gt;
		   end&lt;br /&gt;
&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
	if v.triggers ~= nil&lt;br /&gt;
         then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.triggers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
		print( '// ' .. j.name )&lt;br /&gt;
&lt;br /&gt;
		for x, y in pairs( j )&lt;br /&gt;
		 do&lt;br /&gt;
		  print( '    //', x, y )&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
    print( 'then' )&lt;br /&gt;
    print( 'end' )&lt;br /&gt;
    print( '' )&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
 else&lt;br /&gt;
&lt;br /&gt;
  print( '//http error code:', c )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2014-11-30T21:22:48Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Creating openHAB rules */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
[[Add]] rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'            ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'              ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1' ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'    ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'      ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'       ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'        ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                   ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'          ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'        ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'       ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'   ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'        ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'       ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'              ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                       ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'    ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( device_types )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
   outf:write( 'Group _' .. tostring( t ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
   outf:write( 'Number _' .. tostring( t ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     t = string.match( v.device_type or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',_' .. tostring( t ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( device_types )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
   p = '_' .. tostring( t ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = '_' .. tostring( t ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=600 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=600 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=600 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( device_types )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
   i = '_' .. tostring( t ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB rules ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Rules&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[WORK IN PROGRESS (non-functional demo)]]&lt;br /&gt;
&lt;br /&gt;
Use a real computer to run the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local json = require( 'dkjson' ) -- use a json parser that doesn't complain about emtpy arrays ...&lt;br /&gt;
local http = require( 'socket.http' )&lt;br /&gt;
&lt;br /&gt;
local url = 'http://192.168.178.116:3480/data_request?id=user_data'&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
body, c, l, h = http.request( url )&lt;br /&gt;
&lt;br /&gt;
print( '// status line', l )&lt;br /&gt;
print( '// h', h )&lt;br /&gt;
print( '// c', c )&lt;br /&gt;
&lt;br /&gt;
print( '' )&lt;br /&gt;
&lt;br /&gt;
if c == 200&lt;br /&gt;
 then&lt;br /&gt;
&lt;br /&gt;
  local data = json.decode( body )&lt;br /&gt;
&lt;br /&gt;
  for k, v in pairs( data.scenes )&lt;br /&gt;
   do&lt;br /&gt;
&lt;br /&gt;
    print( 'rule ' .. normalize_name( v.name ) )&lt;br /&gt;
    print( '// MiOS id: ' .. v.id )&lt;br /&gt;
    print( 'when' )&lt;br /&gt;
&lt;br /&gt;
	if v.timers ~= nil&lt;br /&gt;
	 then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.timers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
	    t = tonumber( j.type )&lt;br /&gt;
&lt;br /&gt;
	    if t == 1&lt;br /&gt;
                then&lt;br /&gt;
&lt;br /&gt;
                  print( '  ', j.interval, '  // MiOS type 1' )&lt;br /&gt;
&lt;br /&gt;
		else if t == 2&lt;br /&gt;
		 then&lt;br /&gt;
&lt;br /&gt;
		  print( '  ', j.days_of_week, j.time, '  // MiOS type 2' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 3&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', '// ERROR: Not implemented - MiOS type 3' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 4&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', j.abstime, '  // MiOS type 4' )&lt;br /&gt;
&lt;br /&gt;
                 else&lt;br /&gt;
&lt;br /&gt;
		  print( '// ERROR: unknown timer, MiOS type: ', tostring( t ) )&lt;br /&gt;
&lt;br /&gt;
		  for x, y in pairs( j )&lt;br /&gt;
		   do&lt;br /&gt;
&lt;br /&gt;
		    print( '//  ', x, y )&lt;br /&gt;
&lt;br /&gt;
		   end&lt;br /&gt;
&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
	if v.triggers ~= nil&lt;br /&gt;
         then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.triggers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
		print( '// ' .. j.name )&lt;br /&gt;
&lt;br /&gt;
		for x, y in pairs( j )&lt;br /&gt;
		 do&lt;br /&gt;
		  print( '    //', x, y )&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
    print( 'then' )&lt;br /&gt;
    print( 'end' )&lt;br /&gt;
    print( '' )&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
 else&lt;br /&gt;
&lt;br /&gt;
  print( '//http error code:', c )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2014-11-30T21:20:19Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Creating openHAB configuration files (items, sitemap, rrd4j persistence) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
[[Add]] rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'            ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'              ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1' ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'    ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'      ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'       ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'        ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                   ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'          ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'        ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'       ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'   ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'        ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'       ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'              ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                       ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'    ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( device_types )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
   outf:write( 'Group _' .. tostring( t ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
   outf:write( 'Number _' .. tostring( t ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     t = string.match( v.device_type or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',_' .. tostring( t ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( device_types )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
   p = '_' .. tostring( t ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = '_' .. tostring( t ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=600 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=600 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=600 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( device_types )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
   i = '_' .. tostring( t ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB rules ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[WORK IN PROGRESS (non-functional demo)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Use a real computer to run the following code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local json = require( 'dkjson' ) -- use a json parser that doesn't complain about emtpy arrays ...&lt;br /&gt;
local http = require( 'socket.http' )&lt;br /&gt;
&lt;br /&gt;
local url = 'http://192.168.178.116:3480/data_request?id=user_data'&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
body, c, l, h = http.request( url )&lt;br /&gt;
&lt;br /&gt;
print( '// status line', l )&lt;br /&gt;
print( '// h', h )&lt;br /&gt;
print( '// c', c )&lt;br /&gt;
&lt;br /&gt;
print( '' )&lt;br /&gt;
&lt;br /&gt;
if c == 200&lt;br /&gt;
 then&lt;br /&gt;
&lt;br /&gt;
  local data = json.decode( body )&lt;br /&gt;
&lt;br /&gt;
  for k, v in pairs( data.scenes )&lt;br /&gt;
   do&lt;br /&gt;
&lt;br /&gt;
    print( 'rule ' .. normalize_name( v.name ) )&lt;br /&gt;
    print( '// MiOS id: ' .. v.id )&lt;br /&gt;
    print( 'when' )&lt;br /&gt;
&lt;br /&gt;
	if v.timers ~= nil&lt;br /&gt;
	 then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.timers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
	    t = tonumber( j.type )&lt;br /&gt;
&lt;br /&gt;
	    if t == 1&lt;br /&gt;
                then&lt;br /&gt;
&lt;br /&gt;
                  print( '  ', j.interval, '  // MiOS type 1' )&lt;br /&gt;
&lt;br /&gt;
		else if t == 2&lt;br /&gt;
		 then&lt;br /&gt;
&lt;br /&gt;
		  print( '  ', j.days_of_week, j.time, '  // MiOS type 2' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 3&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', '// ERROR: Not implemented - MiOS type 3' )&lt;br /&gt;
&lt;br /&gt;
                else if t == 4&lt;br /&gt;
                 then&lt;br /&gt;
&lt;br /&gt;
 		  print( '  ', j.abstime, '  // MiOS type 4' )&lt;br /&gt;
&lt;br /&gt;
                 else&lt;br /&gt;
&lt;br /&gt;
		  print( '// ERROR: unknown timer, MiOS type: ', tostring( t ) )&lt;br /&gt;
&lt;br /&gt;
		  for x, y in pairs( j )&lt;br /&gt;
		   do&lt;br /&gt;
&lt;br /&gt;
		    print( '//  ', x, y )&lt;br /&gt;
&lt;br /&gt;
		   end&lt;br /&gt;
&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
	if v.triggers ~= nil&lt;br /&gt;
         then&lt;br /&gt;
&lt;br /&gt;
	  for i, j in pairs( v.triggers )&lt;br /&gt;
	   do&lt;br /&gt;
&lt;br /&gt;
		print( '// ' .. j.name )&lt;br /&gt;
&lt;br /&gt;
		for x, y in pairs( j )&lt;br /&gt;
		 do&lt;br /&gt;
		  print( '    //', x, y )&lt;br /&gt;
		 end&lt;br /&gt;
&lt;br /&gt;
	   end&lt;br /&gt;
&lt;br /&gt;
	 end&lt;br /&gt;
&lt;br /&gt;
    print( 'then' )&lt;br /&gt;
    print( 'end' )&lt;br /&gt;
    print( '' )&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
 else&lt;br /&gt;
&lt;br /&gt;
  print( '//http error code:', c )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2014-11-29T22:30:39Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* rrd4j persistence */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
[[Add]] rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'            ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'              ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1' ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'    ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'      ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'       ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'        ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                   ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'          ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'        ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'       ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'   ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'        ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'       ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'              ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                       ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'    ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( device_types )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
   outf:write( 'Group _' .. tostring( t ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
   outf:write( 'Number _' .. tostring( t ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     t = string.match( v.device_type or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',_' .. tostring( t ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( device_types )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
   p = '_' .. tostring( t ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = '_' .. tostring( t ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=600 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=600 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=600 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( device_types )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
   i = '_' .. tostring( t ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2014-11-29T22:28:14Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Creating an items file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating openHAB configuration files (items, sitemap, rrd4j persistence) ===&lt;br /&gt;
&lt;br /&gt;
Adjust unit_name and output_directory.&lt;br /&gt;
&lt;br /&gt;
==== items ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
Place *.items in: /openHAB/runtime/configurations/items&lt;br /&gt;
&lt;br /&gt;
==== sitemap ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-Sitemaps&lt;br /&gt;
&lt;br /&gt;
Place *.sitemap in: /openHAB/runtime/configurations/sitemaps&lt;br /&gt;
&lt;br /&gt;
==== rrd4j persistence ====&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Persistence&lt;br /&gt;
&lt;br /&gt;
Add rrd4j.persist_add to the Items section in /openHAB/runtime/configurations/persistence/rrd4j.persist and make sure that the strategies used are defined in the Strategies section.&lt;br /&gt;
&lt;br /&gt;
==== Luup code for MiOS devices ====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-- by Ap15e&lt;br /&gt;
&lt;br /&gt;
local unit_name        = 'house'&lt;br /&gt;
local output_directory = '/dataMine'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'            ] = { 'Dimmer' , ' [%d]%'    , '&amp;lt;slider&amp;gt;'       , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'              ] = { 'Switch' , ''          , ''               , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1' ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'    ] = { 'Number' , ' [%d]%'    , ''               , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'      ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'       ] = { 'Number' , ' [%.2f]%'  , ''               , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'        ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                   ] = { 'Number' , ' [%.1f °C]', '&amp;lt;temperature&amp;gt;'  , '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'          ] = { 'Number' , ' [%d]'     , ''               , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'        ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'       ] = { 'Number' , ' [%.1f]'   , ''               , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'   ] = { 'Number' , ' [%.2f]hPa', ''               , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'        ] = { 'Number' , ' [%.1f]'   , '&amp;lt;wind&amp;gt;'         , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'       ] = { 'Contact', ' [%s]'     , '&amp;lt;contact&amp;gt;'      , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'              ] = { 'String' , ' [%s]'     , ''               , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                       ] = { 'String' , ' [%s]'     , '&amp;lt;sun&amp;gt;'          , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'    ] = { 'Switch' , ''          , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_items()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.items', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group Rooms (All)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( device_types )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
   outf:write( 'Group _' .. tostring( t ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)\n' )&lt;br /&gt;
   outf:write( 'Number _' .. tostring( t ) .. 'sChartPeriod\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( luup.rooms )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   outf:write( 'Group ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'Group _no_room &amp;quot;no room&amp;quot; &amp;lt;_no_room&amp;gt; (Rooms)\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs(luup.devices)&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
   if dt ~= nil&lt;br /&gt;
    then&lt;br /&gt;
&lt;br /&gt;
     t = string.match( v.device_type or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
     outf:write( tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',_' .. tostring( t ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}\n' )&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- function write_items()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_sitemap()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/' .. unit_name .. '.sitemap', 'w\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:write( 'sitemap ' .. unit_name .. ' label=&amp;quot;Main Menu&amp;quot;\n' )&lt;br /&gt;
 outf:write( '{\n' )&lt;br /&gt;
 outf:write( ' Frame {\n' )&lt;br /&gt;
 outf:write( '        Group item=Rooms label=&amp;quot;Rooms&amp;quot;\n' )&lt;br /&gt;
 outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( device_types )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
   p = '_' .. tostring( t ) .. 'sChartPeriod'&lt;br /&gt;
&lt;br /&gt;
   i = '_' .. tostring( t ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( ' Frame {\n' )&lt;br /&gt;
   outf:write( '        Switch item=' .. p .. ' label=&amp;quot;Chart Period&amp;quot; mappings=[0=&amp;quot;Hour&amp;quot;, 1=&amp;quot;Day&amp;quot;, 2=&amp;quot;Week&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=h refresh=600 visibility=[' .. p .. '==0, ' .. p .. '==&amp;quot;Uninitialized&amp;quot;]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=D refresh=600 visibility=[' .. p .. '==1]\n' )&lt;br /&gt;
   outf:write( '        Chart item=' .. i .. ' period=W refresh=600 visibility=[' .. p .. '==2]\n' )&lt;br /&gt;
   outf:write( '       }\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:write( '}\n' )&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
 outf = io.open( output_directory .. '/rrd4j.persist_add', 'w' )&lt;br /&gt;
&lt;br /&gt;
 for k, v in pairs( device_types )&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
   i = '_' .. tostring( t ) .. 's'&lt;br /&gt;
&lt;br /&gt;
   outf:write( i .. '* : strategy = everyChange, everyMinute, restoreOnStartup\n' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 outf:close()&lt;br /&gt;
&lt;br /&gt;
end -- write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
write_items()&lt;br /&gt;
write_sitemap()&lt;br /&gt;
write_persistence_rrd4j()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2014-11-26T18:01:33Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Creating an items file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating an items file ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
local unit_name = 'house'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'            ] = { 'Dimmer' , ' [%d]%'     , '&amp;lt;slider&amp;gt;'     , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'              ] = { 'Switch' , ''           , ''             , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1' ] = { 'Number' , ' [%.1f °C]' , '&amp;lt;temperature&amp;gt;', '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'    ] = { 'Number' , ' [%d]%'     , ''             , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'      ] = { 'Contact', ' [%s]'      , '&amp;lt;contact&amp;gt;'    , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'       ] = { 'Number' , ' [%.2f]%'   , ''             , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'        ] = { 'Contact', ' [%s]'      , '&amp;lt;contact&amp;gt;'    , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                   ] = { 'Number' , ' [%.1f °C]' , '&amp;lt;temperature&amp;gt;', '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'          ] = { 'Number' , ' [%d]'      , ''             , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'        ] = { 'Number' , ' [%.1f]'    , ''             , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'       ] = { 'Number' , ' [%.1f]'    , ''             , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'   ] = { 'Number' , ' [%.2f]hPa' , ''             , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'        ] = { 'Number' , ' [%.1f]'    , '&amp;lt;wind&amp;gt;'       , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'       ] = { 'Contact', ' [%s]'      , '&amp;lt;contact&amp;gt;'    , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'              ] = { 'String' , ' [%s]'      , ''             , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                       ] = { 'String' , ' [%s]'      , '&amp;lt;sun&amp;gt;'        , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'    ] = { 'Switch' , ''         , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
luup.log( 'AAAGroup Rooms (All)' )&lt;br /&gt;
&lt;br /&gt;
for k, v in pairs( device_types )&lt;br /&gt;
 do&lt;br /&gt;
&lt;br /&gt;
  t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
  luup.log( 'AAAGroup _' .. tostring( t ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)' )&lt;br /&gt;
  luup.log( 'AAANumber _' .. tostring( t ) .. 'sChartPeriod' )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
for k, v in pairs( luup.rooms )&lt;br /&gt;
 do&lt;br /&gt;
&lt;br /&gt;
  luup.log( 'AAAGroup ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)' )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
luup.log( 'AAAGroup _nil &amp;quot;nil&amp;quot; &amp;lt;_nil&amp;gt; (Rooms)' )&lt;br /&gt;
&lt;br /&gt;
for k, v in pairs(luup.devices) do&lt;br /&gt;
&lt;br /&gt;
 dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
 if dt ~= nil&lt;br /&gt;
  then&lt;br /&gt;
&lt;br /&gt;
   t = string.match( v.device_type or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
   luup.log( 'AAA' .. tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',_' .. tostring( t ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing Vera's devices with openHAB ===&lt;br /&gt;
&lt;br /&gt;
Mount ~/openHAB/runtime/configurations/items on Vera (see http://forum.micasaverde.com/index.php/topic,16452.msg125963.html#msg125963) and write the items file via Apps -&amp;gt; Develop Apps -&amp;gt; Edit Startup Lua.&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2014-11-26T17:48:35Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Creating an items file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating an items file ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
local unit_name = 'house'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'            ] = { 'Dimmer' , ' [%d]%'     , '&amp;lt;slider&amp;gt;'     , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'              ] = { 'Switch' , ''           , ''             , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1' ] = { 'Number' , ' [%.1f °C]' , '&amp;lt;temperature&amp;gt;', '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'    ] = { 'Number' , ' [%d]%'     , ''             , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'      ] = { 'Contact', ' [%s]'      , '&amp;lt;contact&amp;gt;'    , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'       ] = { 'Number' , ' [%.2f]%'   , ''             , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'        ] = { 'Contact', ' [%s]'      , '&amp;lt;contact&amp;gt;'    , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                   ] = { 'Number' , ' [%.1f °C]' , '&amp;lt;temperature&amp;gt;', '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'          ] = { 'Number' , ' [%d]'      , ''             , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'        ] = { 'Number' , ' [%.1f]'    , ''             , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'       ] = { 'Number' , ' [%.1f]'    , ''             , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'   ] = { 'Number' , ' [%.2f]hPa' , ''             , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindSensor:1'        ] = { 'Number' , ' [%.1f]'    , '&amp;lt;wind&amp;gt;'       , '/service/urn:upnp-org:serviceId:WindSensor1/AvgSpeed' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:SmokeSensor:1'       ] = { 'Contact', ' [%s]'      , '&amp;lt;contact&amp;gt;'    , '/service/urn:upnp-org:serviceId:SmokeSensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:demo-micasaverde-com:device:weather:1'              ] = { 'String' , ' [%s]'      , ''             , '/service/urn:micasaverde-com:serviceId:Weather1/Condition' },&lt;br /&gt;
  [ 'urn:schemas-ap15e-com:device:DAD'                       ] = { 'String' , ' [%s]'      , '&amp;lt;sun&amp;gt;'        , '/service/urn:upnp-ap15e-com:serviceId:DAD1/Sunrise_HHMMSS' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:WindowCovering:1'    ] = { 'Switch' , ''         , '&amp;lt;rollershutter&amp;gt;', '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' } }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
luup.log( 'AAAGroup Rooms (All)' )&lt;br /&gt;
&lt;br /&gt;
for k, v in pairs( device_types )&lt;br /&gt;
 do&lt;br /&gt;
&lt;br /&gt;
  t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
  luup.log( 'AAAGroup _' .. tostring( t ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)' )&lt;br /&gt;
  luup.log( 'AAANumber _' .. tostring( t ) .. 'sChartPeriod' )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
for k, v in pairs( luup.rooms )&lt;br /&gt;
 do&lt;br /&gt;
&lt;br /&gt;
  luup.log( 'AAAGroup ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)' )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
luup.log( 'AAAGroup _nil &amp;quot;nil&amp;quot; &amp;lt;_nil&amp;gt; (Rooms)' )&lt;br /&gt;
&lt;br /&gt;
for k, v in pairs(luup.devices) do&lt;br /&gt;
&lt;br /&gt;
 dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
 if dt ~= nil&lt;br /&gt;
  then&lt;br /&gt;
&lt;br /&gt;
   t = string.match( v.device_type or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
   luup.log( 'AAA' .. tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',_' .. tostring( t ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/OpenHAB</id>
		<title>OpenHAB</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/OpenHAB"/>
				<updated>2014-11-24T20:28:57Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: Created page with &amp;quot;== openHAB Downloads ==  http://www.openhab.org/downloads.html  == openHAB MiOS binding ==  https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== openHAB Downloads ==&lt;br /&gt;
&lt;br /&gt;
http://www.openhab.org/downloads.html&lt;br /&gt;
&lt;br /&gt;
== openHAB MiOS binding ==&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/tree/master/bundles/binding/org.openhab.binding.mios&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
=== Creating an items file ===&lt;br /&gt;
&lt;br /&gt;
https://github.com/openhab/openhab/wiki/Explanation-of-items&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
local unit_name = 'house'&lt;br /&gt;
&lt;br /&gt;
local device_types =&lt;br /&gt;
{ [ 'urn:schemas-upnp-org:device:DimmableLight:1'            ] = { 'Dimmer' , ' [%d]%'     , '&amp;lt;slider&amp;gt;'     , '/service/Dimming1/LoadLevelStatus,command:MAP(miosDimmerCommand.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:BinaryLight:1'              ] = { 'Switch' , ''           , ''             , '/service/SwitchPower1/Status,command:ON=SwitchPower1/SetTarget(newTargetValue=1)|OFF=SwitchPower1/SetTarget(newTargetValue=0),in:MAP(miosSwitchIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:TemperatureSensor:1' ] = { 'Number' , ' [%.1f °C]' , '&amp;lt;temperature&amp;gt;', '/service/TemperatureSensor1/CurrentTemperature' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:HumiditySensor:1'    ] = { 'Number' , ' [%d]%'     , ''             , '/service/HumiditySensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:MotionSensor:1'      ] = { 'Contact', ' [%s]'      , '&amp;lt;contact&amp;gt;'    , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:LightSensor:1'       ] = { 'Number' , ' [%.2f]%'   , ''             , '/service/urn:micasaverde-com:serviceId:LightSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:DoorSensor:1'        ] = { 'Contact', ' [%s]'      , '&amp;lt;contact&amp;gt;'    , '/service/SecuritySensor1/Tripped,in:MAP(miosContactIn.map)' },&lt;br /&gt;
  [ 'urn:schemas-upnp-org:device:Heater:1'                   ] = { 'Number' , ' [%.1f °C]' , '&amp;lt;temperature&amp;gt;', '/service/urn:upnp-org:serviceId:TemperatureSetpoint1_Heat/CurrentSetpoint' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:UvSensor:1'          ] = { 'Number' , ' [%d]'      , ''             , '/service/urn:upnp-org:serviceId:UvSensor1/CurrentLevel' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:RainSensor:1'        ] = { 'Number' , ' [%.1f]'      , ''             , '/service/urn:upnp-org:serviceId:RainSensor1/CurrentTRain' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:ScaleSensor:1'       ] = { 'Number' , ' [%.1f]'    , ''             , '/service/urn:micasaverde-com:serviceId:ScaleSensor1/Weight' },&lt;br /&gt;
  [ 'urn:schemas-micasaverde-com:device:BarometerSensor:1'   ] = { 'Number' , ' [%.2f]hPa' , ''             , '/service/urn:upnp-org:serviceId:BarometerSensor1/CurrentPressure' } }&lt;br /&gt;
&lt;br /&gt;
function normalize_name( s )&lt;br /&gt;
&lt;br /&gt;
 s = string.gsub( s or '', '[%s-/%.:]', '_' )&lt;br /&gt;
 return '_' .. s&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
luup.log( 'AAAGroup Rooms (All)' )&lt;br /&gt;
&lt;br /&gt;
for k, v in pairs( device_types )&lt;br /&gt;
 do&lt;br /&gt;
&lt;br /&gt;
  t = string.match( k or '', '%:(%a*)%:1' )&lt;br /&gt;
  luup.log( 'AAAGroup _' .. tostring( t ) .. 's &amp;quot;' .. tostring( t ) .. 's&amp;quot; (Rooms)' )&lt;br /&gt;
  luup.log( 'AAANumber _' .. tostring( t ) .. 'sChartPeriod' )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
for k, v in pairs( luup.rooms )&lt;br /&gt;
 do&lt;br /&gt;
&lt;br /&gt;
  luup.log( 'AAAGroup ' .. normalize_name( tostring( v ) ) .. ' &amp;quot;' .. tostring( v ) .. '&amp;quot; &amp;lt;' .. normalize_name( tostring( v ) ) .. '&amp;gt; (Rooms)' )&lt;br /&gt;
&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
luup.log( 'AAAGroup _nil &amp;quot;nil&amp;quot; &amp;lt;_nil&amp;gt; (Rooms)' )&lt;br /&gt;
&lt;br /&gt;
for k, v in pairs(luup.devices) do&lt;br /&gt;
&lt;br /&gt;
 dt = device_types[ v.device_type ]&lt;br /&gt;
&lt;br /&gt;
 if dt ~= nil&lt;br /&gt;
  then&lt;br /&gt;
&lt;br /&gt;
   t = string.match( v.device_type or '', '%:(%a*)%:1' )&lt;br /&gt;
&lt;br /&gt;
   luup.log( 'AAA' .. tostring( dt[ 1 ] ) .. ' ' .. normalize_name( tostring( v.description ) ) .. ' &amp;quot;' .. tostring( v.description ) .. tostring( dt[ 2 ] ) .. '&amp;quot; ' .. tostring( dt[ 3 ] ) .. ' (' .. normalize_name( tostring( luup.rooms[ v.room_num ] ) ) .. ',_' .. tostring( t ) .. 's) {mios=&amp;quot;unit:' .. tostring( unit_name ) .. ',device:' .. k .. tostring( dt[ 4 ] ) .. '&amp;quot;}' )&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Danfoss_Thermostat_LC</id>
		<title>Danfoss Thermostat LC</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Danfoss_Thermostat_LC"/>
				<updated>2014-04-20T12:49:31Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Power consumption */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
'''Please note that LC firmware revision 3.02 is not compatible with Z-Wave.'''&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== HW revisions ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Part no. &lt;br /&gt;
! Firmware&lt;br /&gt;
! Z-Wave version &lt;br /&gt;
! Capabilities&lt;br /&gt;
! Z-Wave classes&lt;br /&gt;
! [http://forum.micasaverde.com/index.php/topic,12289.msg90659.html#msg90659 extra menu options]&lt;br /&gt;
! Vera&lt;br /&gt;
! MiOS&lt;br /&gt;
! Photo &lt;br /&gt;
! Issues&lt;br /&gt;
|-&lt;br /&gt;
| 014G0009 &lt;br /&gt;
| 1.06&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 delay issue][http://forum.micasaverde.com/index.php/topic,12289.msg95429.html#msg95429 unreliable]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002, 014G0009 &lt;br /&gt;
| 2.06&lt;br /&gt;
| 6,2,67,2,6 &lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,145,&lt;br /&gt;
| No&lt;br /&gt;
| V2&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [[File:206_image.jpg|100px]] [[File:Dlc1.jpg|100px]] [[File:Dlc2.jpg|100px]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.459&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.50&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.51&lt;br /&gt;
| 6,2,67,2,51&lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,&lt;br /&gt;
| &lt;br /&gt;
| 2 &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [http://forum.micasaverde.com/index.php?action=dlattach;topic=12289.0;attach=9066 photo]&lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg102315.html#msg102315 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.5.3&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002&lt;br /&gt;
| 3.02&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x72, 0x91 only(?)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| not compatible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014G0013&lt;br /&gt;
| 1.00&lt;br /&gt;
| 6,3,67,1,0&lt;br /&gt;
| 83,156,0,4,8,4,R,B,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143&lt;br /&gt;
| No&lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.622, Z-Wave version 3.20, Vera routing&lt;br /&gt;
| [[File:Danfoss_LC_SW1.00.jpg|100px]]&lt;br /&gt;
| excellent performance; power consumption still under test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Test results for Danfoss LC Z (014G0013, firmware version 1.00, wakeup interval 300 seconds; MiOS 1.5.622, Z-Wave version 3.20, Vera routing instead of Z-Wave)==&lt;br /&gt;
&lt;br /&gt;
===Wakeup interval===&lt;br /&gt;
&lt;br /&gt;
[[File:KiZ.jpg|150px]]&lt;br /&gt;
[[File:WZ_S.jpg|150px]]&lt;br /&gt;
[[File:WZ_N.jpg|150px]]&lt;br /&gt;
[[File:B.jpg|150px]]&lt;br /&gt;
[[File:SZ.jpg|150px]]&lt;br /&gt;
&lt;br /&gt;
Excellent Wakeup performance. Non-equidistant points (B_Danfoss) due to manual operation.&lt;br /&gt;
&lt;br /&gt;
===Reaction time===&lt;br /&gt;
&lt;br /&gt;
Left vertical scale: CurrentSetpoint, CurrentTemperature&lt;br /&gt;
&lt;br /&gt;
Right vertical scale: SetpointTarget&lt;br /&gt;
&lt;br /&gt;
Temperature sensor near thermostat.&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_SZ_Reaction_Time.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
Excellent reaction time (within one wakeup interval).&lt;br /&gt;
&lt;br /&gt;
===Power consumption===&lt;br /&gt;
&lt;br /&gt;
Using Sony batteries supplied with the thermostats.&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_bl_2_months.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
Some abnormalities (non-monotonically decreasing battery levels; high drop on February, 27th; 100% spike).&lt;br /&gt;
&lt;br /&gt;
== Checking the wakeup interval ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
local danfoss_devices = { { 221, 'KiZ' }, &lt;br /&gt;
                          { 218, 'B'   },&lt;br /&gt;
                          { 211, 'SZ'  },&lt;br /&gt;
                          { 107, 'WZS' },&lt;br /&gt;
                          {  94, 'WZN' }  }&lt;br /&gt;
&lt;br /&gt;
function log_wakeup( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 local s = ''&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#danfoss_devices&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   if danfoss_devices[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
     s = danfoss_devices[ i ][ 2 ]&lt;br /&gt;
    end   &lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 os.execute( 'logger -t Heizung Wakeup_' .. s )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#danfoss_devices&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'log_wakeup', 'urn:micasaverde-com:serviceId:ZWaveDevice1', 'LastWakeup', danfoss_devices[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Synchronizing the Danfoss GUI device with temperature sensors ==&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_CurrentTemperature.jpg]]&lt;br /&gt;
&lt;br /&gt;
... using a TFA 30.3133 temperature sensor (ironically, MiOS doesn't support decidegrees for Z-Wave temperature sensors).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- list of { temperature_sensor_device_id, { list of Danfoss_LC_device_id } }&lt;br /&gt;
&lt;br /&gt;
devices_to_synchronize = { { 167, { 218      } },    -- B&lt;br /&gt;
                           { 162, { 221      } },    -- KiZ&lt;br /&gt;
                           { 169, { 211      } },    -- SZ&lt;br /&gt;
                           { 170, {  94, 107 } }  }  -- WZS, WZN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function synchronize_temp( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#devices_to_synchronize&lt;br /&gt;
  do&lt;br /&gt;
 &lt;br /&gt;
   if devices_to_synchronize[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
 &lt;br /&gt;
     for j = 1,#devices_to_synchronize[ i ][ 2 ]&lt;br /&gt;
       do&lt;br /&gt;
        luup.variable_set( 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', lul_value_new, devices_to_synchronize[ i ][ 2 ][ j ] )&lt;br /&gt;
       end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end -- synchronize_temp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#devices_to_synchronize&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'synchronize_temp', 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', devices_to_synchronize[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:Danfoss_bl_2_months.jpg</id>
		<title>File:Danfoss bl 2 months.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:Danfoss_bl_2_months.jpg"/>
				<updated>2014-04-20T12:46:16Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Danfoss_Thermostat_LC</id>
		<title>Danfoss Thermostat LC</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Danfoss_Thermostat_LC"/>
				<updated>2014-03-04T22:15:53Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* HW revisions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
'''Please note that LC firmware revision 3.02 is not compatible with Z-Wave.'''&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== HW revisions ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Part no. &lt;br /&gt;
! Firmware&lt;br /&gt;
! Z-Wave version &lt;br /&gt;
! Capabilities&lt;br /&gt;
! Z-Wave classes&lt;br /&gt;
! [http://forum.micasaverde.com/index.php/topic,12289.msg90659.html#msg90659 extra menu options]&lt;br /&gt;
! Vera&lt;br /&gt;
! MiOS&lt;br /&gt;
! Photo &lt;br /&gt;
! Issues&lt;br /&gt;
|-&lt;br /&gt;
| 014G0009 &lt;br /&gt;
| 1.06&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 delay issue][http://forum.micasaverde.com/index.php/topic,12289.msg95429.html#msg95429 unreliable]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002, 014G0009 &lt;br /&gt;
| 2.06&lt;br /&gt;
| 6,2,67,2,6 &lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,145,&lt;br /&gt;
| No&lt;br /&gt;
| V2&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [[File:206_image.jpg|100px]] [[File:Dlc1.jpg|100px]] [[File:Dlc2.jpg|100px]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.459&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.50&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.51&lt;br /&gt;
| 6,2,67,2,51&lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,&lt;br /&gt;
| &lt;br /&gt;
| 2 &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [http://forum.micasaverde.com/index.php?action=dlattach;topic=12289.0;attach=9066 photo]&lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg102315.html#msg102315 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.5.3&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002&lt;br /&gt;
| 3.02&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x72, 0x91 only(?)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| not compatible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014G0013&lt;br /&gt;
| 1.00&lt;br /&gt;
| 6,3,67,1,0&lt;br /&gt;
| 83,156,0,4,8,4,R,B,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143&lt;br /&gt;
| No&lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.622, Z-Wave version 3.20, Vera routing&lt;br /&gt;
| [[File:Danfoss_LC_SW1.00.jpg|100px]]&lt;br /&gt;
| excellent performance; power consumption still under test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Test results for Danfoss LC Z (014G0013, firmware version 1.00, wakeup interval 300 seconds; MiOS 1.5.622, Z-Wave version 3.20, Vera routing instead of Z-Wave)==&lt;br /&gt;
&lt;br /&gt;
===Wakeup interval===&lt;br /&gt;
&lt;br /&gt;
[[File:KiZ.jpg|150px]]&lt;br /&gt;
[[File:WZ_S.jpg|150px]]&lt;br /&gt;
[[File:WZ_N.jpg|150px]]&lt;br /&gt;
[[File:B.jpg|150px]]&lt;br /&gt;
[[File:SZ.jpg|150px]]&lt;br /&gt;
&lt;br /&gt;
Excellent Wakeup performance. Non-equidistant points (B_Danfoss) due to manual operation.&lt;br /&gt;
&lt;br /&gt;
===Reaction time===&lt;br /&gt;
&lt;br /&gt;
Left vertical scale: CurrentSetpoint, CurrentTemperature&lt;br /&gt;
&lt;br /&gt;
Right vertical scale: SetpointTarget&lt;br /&gt;
&lt;br /&gt;
Temperature sensor near thermostat.&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_SZ_Reaction_Time.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
Excellent reaction time (within one wakeup interval).&lt;br /&gt;
&lt;br /&gt;
===Power consumption===&lt;br /&gt;
&lt;br /&gt;
Using Sony batteries supplied with the thermostats.&lt;br /&gt;
&lt;br /&gt;
[[File:DanfossBatteryLevel.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
Some abnormalities for KiZ_Danfoss (non-monotonically decreasing battery level, high drop on February, 27th).&lt;br /&gt;
&lt;br /&gt;
== Checking the wakeup interval ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
local danfoss_devices = { { 221, 'KiZ' }, &lt;br /&gt;
                          { 218, 'B'   },&lt;br /&gt;
                          { 211, 'SZ'  },&lt;br /&gt;
                          { 107, 'WZS' },&lt;br /&gt;
                          {  94, 'WZN' }  }&lt;br /&gt;
&lt;br /&gt;
function log_wakeup( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 local s = ''&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#danfoss_devices&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   if danfoss_devices[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
     s = danfoss_devices[ i ][ 2 ]&lt;br /&gt;
    end   &lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 os.execute( 'logger -t Heizung Wakeup_' .. s )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#danfoss_devices&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'log_wakeup', 'urn:micasaverde-com:serviceId:ZWaveDevice1', 'LastWakeup', danfoss_devices[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Synchronizing the Danfoss GUI device with temperature sensors ==&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_CurrentTemperature.jpg]]&lt;br /&gt;
&lt;br /&gt;
... using a TFA 30.3133 temperature sensor (ironically, MiOS doesn't support decidegrees for Z-Wave temperature sensors).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- list of { temperature_sensor_device_id, { list of Danfoss_LC_device_id } }&lt;br /&gt;
&lt;br /&gt;
devices_to_synchronize = { { 167, { 218      } },    -- B&lt;br /&gt;
                           { 162, { 221      } },    -- KiZ&lt;br /&gt;
                           { 169, { 211      } },    -- SZ&lt;br /&gt;
                           { 170, {  94, 107 } }  }  -- WZS, WZN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function synchronize_temp( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#devices_to_synchronize&lt;br /&gt;
  do&lt;br /&gt;
 &lt;br /&gt;
   if devices_to_synchronize[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
 &lt;br /&gt;
     for j = 1,#devices_to_synchronize[ i ][ 2 ]&lt;br /&gt;
       do&lt;br /&gt;
        luup.variable_set( 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', lul_value_new, devices_to_synchronize[ i ][ 2 ][ j ] )&lt;br /&gt;
       end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end -- synchronize_temp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#devices_to_synchronize&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'synchronize_temp', 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', devices_to_synchronize[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Danfoss_Thermostat_LC</id>
		<title>Danfoss Thermostat LC</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Danfoss_Thermostat_LC"/>
				<updated>2014-03-04T22:10:37Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Reaction time */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
'''Please note that LC firmware revision 3.02 is not compatible with Z-Wave.'''&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== HW revisions ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Part no. &lt;br /&gt;
! Firmware&lt;br /&gt;
! Z-Wave version &lt;br /&gt;
! Capabilities&lt;br /&gt;
! Z-Wave classes&lt;br /&gt;
! [http://forum.micasaverde.com/index.php/topic,12289.msg90659.html#msg90659 extra menu options]&lt;br /&gt;
! Vera&lt;br /&gt;
! MiOS&lt;br /&gt;
! Photo &lt;br /&gt;
! Issues&lt;br /&gt;
|-&lt;br /&gt;
| 014G0009 &lt;br /&gt;
| 1.06&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 delay issue][http://forum.micasaverde.com/index.php/topic,12289.msg95429.html#msg95429 unreliable]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002, 014G0009 &lt;br /&gt;
| 2.06&lt;br /&gt;
| 6,2,67,2,6 &lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,145,&lt;br /&gt;
| No&lt;br /&gt;
| V2&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [[File:206_image.jpg|100px]] [[File:Dlc1.jpg|100px]] [[File:Dlc2.jpg|100px]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.459&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.50&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.51&lt;br /&gt;
| 6,2,67,2,51&lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,&lt;br /&gt;
| &lt;br /&gt;
| 2 &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [http://forum.micasaverde.com/index.php?action=dlattach;topic=12289.0;attach=9066 photo]&lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg102315.html#msg102315 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.5.3&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002&lt;br /&gt;
| 3.02&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x72, 0x91 only(?)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| not compatible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014G0013&lt;br /&gt;
| 1.00&lt;br /&gt;
| 6,3,67,1,0&lt;br /&gt;
| 83,156,0,4,8,4,R,B,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143&lt;br /&gt;
| No&lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.622, Z-Wave version 3.20&lt;br /&gt;
| [[File:Danfoss_LC_SW1.00.jpg|100px]]&lt;br /&gt;
| under test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test results for Danfoss LC Z (014G0013, firmware version 1.00, wakeup interval 300 seconds; MiOS 1.5.622, Z-Wave version 3.20, Vera routing instead of Z-Wave)==&lt;br /&gt;
&lt;br /&gt;
===Wakeup interval===&lt;br /&gt;
&lt;br /&gt;
[[File:KiZ.jpg|150px]]&lt;br /&gt;
[[File:WZ_S.jpg|150px]]&lt;br /&gt;
[[File:WZ_N.jpg|150px]]&lt;br /&gt;
[[File:B.jpg|150px]]&lt;br /&gt;
[[File:SZ.jpg|150px]]&lt;br /&gt;
&lt;br /&gt;
Excellent Wakeup performance. Non-equidistant points (B_Danfoss) due to manual operation.&lt;br /&gt;
&lt;br /&gt;
===Reaction time===&lt;br /&gt;
&lt;br /&gt;
Left vertical scale: CurrentSetpoint, CurrentTemperature&lt;br /&gt;
&lt;br /&gt;
Right vertical scale: SetpointTarget&lt;br /&gt;
&lt;br /&gt;
Temperature sensor near thermostat.&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_SZ_Reaction_Time.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
Excellent reaction time (within one wakeup interval).&lt;br /&gt;
&lt;br /&gt;
===Power consumption===&lt;br /&gt;
&lt;br /&gt;
Using Sony batteries supplied with the thermostats.&lt;br /&gt;
&lt;br /&gt;
[[File:DanfossBatteryLevel.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
Some abnormalities for KiZ_Danfoss (non-monotonically decreasing battery level, high drop on February, 27th).&lt;br /&gt;
&lt;br /&gt;
== Checking the wakeup interval ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
local danfoss_devices = { { 221, 'KiZ' }, &lt;br /&gt;
                          { 218, 'B'   },&lt;br /&gt;
                          { 211, 'SZ'  },&lt;br /&gt;
                          { 107, 'WZS' },&lt;br /&gt;
                          {  94, 'WZN' }  }&lt;br /&gt;
&lt;br /&gt;
function log_wakeup( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 local s = ''&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#danfoss_devices&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   if danfoss_devices[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
     s = danfoss_devices[ i ][ 2 ]&lt;br /&gt;
    end   &lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 os.execute( 'logger -t Heizung Wakeup_' .. s )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#danfoss_devices&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'log_wakeup', 'urn:micasaverde-com:serviceId:ZWaveDevice1', 'LastWakeup', danfoss_devices[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Synchronizing the Danfoss GUI device with temperature sensors ==&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_CurrentTemperature.jpg]]&lt;br /&gt;
&lt;br /&gt;
... using a TFA 30.3133 temperature sensor (ironically, MiOS doesn't support decidegrees for Z-Wave temperature sensors).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- list of { temperature_sensor_device_id, { list of Danfoss_LC_device_id } }&lt;br /&gt;
&lt;br /&gt;
devices_to_synchronize = { { 167, { 218      } },    -- B&lt;br /&gt;
                           { 162, { 221      } },    -- KiZ&lt;br /&gt;
                           { 169, { 211      } },    -- SZ&lt;br /&gt;
                           { 170, {  94, 107 } }  }  -- WZS, WZN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function synchronize_temp( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#devices_to_synchronize&lt;br /&gt;
  do&lt;br /&gt;
 &lt;br /&gt;
   if devices_to_synchronize[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
 &lt;br /&gt;
     for j = 1,#devices_to_synchronize[ i ][ 2 ]&lt;br /&gt;
       do&lt;br /&gt;
        luup.variable_set( 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', lul_value_new, devices_to_synchronize[ i ][ 2 ][ j ] )&lt;br /&gt;
       end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end -- synchronize_temp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#devices_to_synchronize&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'synchronize_temp', 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', devices_to_synchronize[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:Danfoss_SZ_Reaction_Time.jpg</id>
		<title>File:Danfoss SZ Reaction Time.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:Danfoss_SZ_Reaction_Time.jpg"/>
				<updated>2014-03-04T22:02:16Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Danfoss_Thermostat_LC</id>
		<title>Danfoss Thermostat LC</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Danfoss_Thermostat_LC"/>
				<updated>2014-03-04T21:42:02Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Power consumption */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
'''Please note that LC firmware revision 3.02 is not compatible with Z-Wave.'''&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== HW revisions ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Part no. &lt;br /&gt;
! Firmware&lt;br /&gt;
! Z-Wave version &lt;br /&gt;
! Capabilities&lt;br /&gt;
! Z-Wave classes&lt;br /&gt;
! [http://forum.micasaverde.com/index.php/topic,12289.msg90659.html#msg90659 extra menu options]&lt;br /&gt;
! Vera&lt;br /&gt;
! MiOS&lt;br /&gt;
! Photo &lt;br /&gt;
! Issues&lt;br /&gt;
|-&lt;br /&gt;
| 014G0009 &lt;br /&gt;
| 1.06&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 delay issue][http://forum.micasaverde.com/index.php/topic,12289.msg95429.html#msg95429 unreliable]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002, 014G0009 &lt;br /&gt;
| 2.06&lt;br /&gt;
| 6,2,67,2,6 &lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,145,&lt;br /&gt;
| No&lt;br /&gt;
| V2&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [[File:206_image.jpg|100px]] [[File:Dlc1.jpg|100px]] [[File:Dlc2.jpg|100px]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.459&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.50&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.51&lt;br /&gt;
| 6,2,67,2,51&lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,&lt;br /&gt;
| &lt;br /&gt;
| 2 &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [http://forum.micasaverde.com/index.php?action=dlattach;topic=12289.0;attach=9066 photo]&lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg102315.html#msg102315 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.5.3&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002&lt;br /&gt;
| 3.02&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x72, 0x91 only(?)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| not compatible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014G0013&lt;br /&gt;
| 1.00&lt;br /&gt;
| 6,3,67,1,0&lt;br /&gt;
| 83,156,0,4,8,4,R,B,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143&lt;br /&gt;
| No&lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.622, Z-Wave version 3.20&lt;br /&gt;
| [[File:Danfoss_LC_SW1.00.jpg|100px]]&lt;br /&gt;
| under test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test results for Danfoss LC Z (014G0013, firmware version 1.00, wakeup interval 300 seconds; MiOS 1.5.622, Z-Wave version 3.20, Vera routing instead of Z-Wave)==&lt;br /&gt;
&lt;br /&gt;
===Wakeup interval===&lt;br /&gt;
&lt;br /&gt;
[[File:KiZ.jpg|150px]]&lt;br /&gt;
[[File:WZ_S.jpg|150px]]&lt;br /&gt;
[[File:WZ_N.jpg|150px]]&lt;br /&gt;
[[File:B.jpg|150px]]&lt;br /&gt;
[[File:SZ.jpg|150px]]&lt;br /&gt;
&lt;br /&gt;
Excellent Wakeup performance. Non-equidistant points (B_Danfoss) due to manual operation.&lt;br /&gt;
&lt;br /&gt;
===Reaction time===&lt;br /&gt;
&lt;br /&gt;
===Power consumption===&lt;br /&gt;
&lt;br /&gt;
Using Sony batteries supplied with the thermostats.&lt;br /&gt;
&lt;br /&gt;
[[File:DanfossBatteryLevel.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
Some abnormalities for KiZ_Danfoss (non-monotonically decreasing battery level, high drop on February, 27th).&lt;br /&gt;
&lt;br /&gt;
== Checking the wakeup interval ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
local danfoss_devices = { { 221, 'KiZ' }, &lt;br /&gt;
                          { 218, 'B'   },&lt;br /&gt;
                          { 211, 'SZ'  },&lt;br /&gt;
                          { 107, 'WZS' },&lt;br /&gt;
                          {  94, 'WZN' }  }&lt;br /&gt;
&lt;br /&gt;
function log_wakeup( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 local s = ''&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#danfoss_devices&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   if danfoss_devices[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
     s = danfoss_devices[ i ][ 2 ]&lt;br /&gt;
    end   &lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 os.execute( 'logger -t Heizung Wakeup_' .. s )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#danfoss_devices&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'log_wakeup', 'urn:micasaverde-com:serviceId:ZWaveDevice1', 'LastWakeup', danfoss_devices[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Synchronizing the Danfoss GUI device with temperature sensors ==&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_CurrentTemperature.jpg]]&lt;br /&gt;
&lt;br /&gt;
... using a TFA 30.3133 temperature sensor (ironically, MiOS doesn't support decidegrees for Z-Wave temperature sensors).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- list of { temperature_sensor_device_id, { list of Danfoss_LC_device_id } }&lt;br /&gt;
&lt;br /&gt;
devices_to_synchronize = { { 167, { 218      } },    -- B&lt;br /&gt;
                           { 162, { 221      } },    -- KiZ&lt;br /&gt;
                           { 169, { 211      } },    -- SZ&lt;br /&gt;
                           { 170, {  94, 107 } }  }  -- WZS, WZN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function synchronize_temp( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#devices_to_synchronize&lt;br /&gt;
  do&lt;br /&gt;
 &lt;br /&gt;
   if devices_to_synchronize[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
 &lt;br /&gt;
     for j = 1,#devices_to_synchronize[ i ][ 2 ]&lt;br /&gt;
       do&lt;br /&gt;
        luup.variable_set( 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', lul_value_new, devices_to_synchronize[ i ][ 2 ][ j ] )&lt;br /&gt;
       end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end -- synchronize_temp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#devices_to_synchronize&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'synchronize_temp', 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', devices_to_synchronize[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Danfoss_Thermostat_LC</id>
		<title>Danfoss Thermostat LC</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Danfoss_Thermostat_LC"/>
				<updated>2014-03-04T21:27:21Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Wakeup interval */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
'''Please note that LC firmware revision 3.02 is not compatible with Z-Wave.'''&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== HW revisions ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Part no. &lt;br /&gt;
! Firmware&lt;br /&gt;
! Z-Wave version &lt;br /&gt;
! Capabilities&lt;br /&gt;
! Z-Wave classes&lt;br /&gt;
! [http://forum.micasaverde.com/index.php/topic,12289.msg90659.html#msg90659 extra menu options]&lt;br /&gt;
! Vera&lt;br /&gt;
! MiOS&lt;br /&gt;
! Photo &lt;br /&gt;
! Issues&lt;br /&gt;
|-&lt;br /&gt;
| 014G0009 &lt;br /&gt;
| 1.06&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 delay issue][http://forum.micasaverde.com/index.php/topic,12289.msg95429.html#msg95429 unreliable]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002, 014G0009 &lt;br /&gt;
| 2.06&lt;br /&gt;
| 6,2,67,2,6 &lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,145,&lt;br /&gt;
| No&lt;br /&gt;
| V2&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [[File:206_image.jpg|100px]] [[File:Dlc1.jpg|100px]] [[File:Dlc2.jpg|100px]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.459&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.50&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.51&lt;br /&gt;
| 6,2,67,2,51&lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,&lt;br /&gt;
| &lt;br /&gt;
| 2 &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [http://forum.micasaverde.com/index.php?action=dlattach;topic=12289.0;attach=9066 photo]&lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg102315.html#msg102315 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.5.3&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002&lt;br /&gt;
| 3.02&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x72, 0x91 only(?)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| not compatible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014G0013&lt;br /&gt;
| 1.00&lt;br /&gt;
| 6,3,67,1,0&lt;br /&gt;
| 83,156,0,4,8,4,R,B,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143&lt;br /&gt;
| No&lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.622, Z-Wave version 3.20&lt;br /&gt;
| [[File:Danfoss_LC_SW1.00.jpg|100px]]&lt;br /&gt;
| under test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test results for Danfoss LC Z (014G0013, firmware version 1.00, wakeup interval 300 seconds; MiOS 1.5.622, Z-Wave version 3.20, Vera routing instead of Z-Wave)==&lt;br /&gt;
&lt;br /&gt;
===Wakeup interval===&lt;br /&gt;
&lt;br /&gt;
[[File:KiZ.jpg|150px]]&lt;br /&gt;
[[File:WZ_S.jpg|150px]]&lt;br /&gt;
[[File:WZ_N.jpg|150px]]&lt;br /&gt;
[[File:B.jpg|150px]]&lt;br /&gt;
[[File:SZ.jpg|150px]]&lt;br /&gt;
&lt;br /&gt;
Excellent Wakeup performance. Non-equidistant points (B_Danfoss) due to manual operation.&lt;br /&gt;
&lt;br /&gt;
===Reaction time===&lt;br /&gt;
&lt;br /&gt;
===Power consumption===&lt;br /&gt;
&lt;br /&gt;
== Checking the wakeup interval ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
local danfoss_devices = { { 221, 'KiZ' }, &lt;br /&gt;
                          { 218, 'B'   },&lt;br /&gt;
                          { 211, 'SZ'  },&lt;br /&gt;
                          { 107, 'WZS' },&lt;br /&gt;
                          {  94, 'WZN' }  }&lt;br /&gt;
&lt;br /&gt;
function log_wakeup( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 local s = ''&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#danfoss_devices&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   if danfoss_devices[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
     s = danfoss_devices[ i ][ 2 ]&lt;br /&gt;
    end   &lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 os.execute( 'logger -t Heizung Wakeup_' .. s )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#danfoss_devices&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'log_wakeup', 'urn:micasaverde-com:serviceId:ZWaveDevice1', 'LastWakeup', danfoss_devices[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Synchronizing the Danfoss GUI device with temperature sensors ==&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_CurrentTemperature.jpg]]&lt;br /&gt;
&lt;br /&gt;
... using a TFA 30.3133 temperature sensor (ironically, MiOS doesn't support decidegrees for Z-Wave temperature sensors).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- list of { temperature_sensor_device_id, { list of Danfoss_LC_device_id } }&lt;br /&gt;
&lt;br /&gt;
devices_to_synchronize = { { 167, { 218      } },    -- B&lt;br /&gt;
                           { 162, { 221      } },    -- KiZ&lt;br /&gt;
                           { 169, { 211      } },    -- SZ&lt;br /&gt;
                           { 170, {  94, 107 } }  }  -- WZS, WZN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function synchronize_temp( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#devices_to_synchronize&lt;br /&gt;
  do&lt;br /&gt;
 &lt;br /&gt;
   if devices_to_synchronize[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
 &lt;br /&gt;
     for j = 1,#devices_to_synchronize[ i ][ 2 ]&lt;br /&gt;
       do&lt;br /&gt;
        luup.variable_set( 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', lul_value_new, devices_to_synchronize[ i ][ 2 ][ j ] )&lt;br /&gt;
       end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end -- synchronize_temp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#devices_to_synchronize&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'synchronize_temp', 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', devices_to_synchronize[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:DanfossBatteryLevel.jpg</id>
		<title>File:DanfossBatteryLevel.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:DanfossBatteryLevel.jpg"/>
				<updated>2014-03-04T21:19:37Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:KiZ.jpg</id>
		<title>File:KiZ.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:KiZ.jpg"/>
				<updated>2014-03-04T21:19:02Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:WZ_S.jpg</id>
		<title>File:WZ S.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:WZ_S.jpg"/>
				<updated>2014-03-04T21:18:14Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:WZ_N.jpg</id>
		<title>File:WZ N.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:WZ_N.jpg"/>
				<updated>2014-03-04T21:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:SZ.jpg</id>
		<title>File:SZ.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:SZ.jpg"/>
				<updated>2014-03-04T21:17:04Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:B.jpg</id>
		<title>File:B.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:B.jpg"/>
				<updated>2014-03-04T21:16:18Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Danfoss_Thermostat_LC</id>
		<title>Danfoss Thermostat LC</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Danfoss_Thermostat_LC"/>
				<updated>2014-03-04T21:14:46Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Test results for Danfoss LC Z (014G0013, firmware version 1.00; MiOS 1.5.622, Z-Wave version 3.20) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
'''Please note that LC firmware revision 3.02 is not compatible with Z-Wave.'''&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== HW revisions ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Part no. &lt;br /&gt;
! Firmware&lt;br /&gt;
! Z-Wave version &lt;br /&gt;
! Capabilities&lt;br /&gt;
! Z-Wave classes&lt;br /&gt;
! [http://forum.micasaverde.com/index.php/topic,12289.msg90659.html#msg90659 extra menu options]&lt;br /&gt;
! Vera&lt;br /&gt;
! MiOS&lt;br /&gt;
! Photo &lt;br /&gt;
! Issues&lt;br /&gt;
|-&lt;br /&gt;
| 014G0009 &lt;br /&gt;
| 1.06&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 delay issue][http://forum.micasaverde.com/index.php/topic,12289.msg95429.html#msg95429 unreliable]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002, 014G0009 &lt;br /&gt;
| 2.06&lt;br /&gt;
| 6,2,67,2,6 &lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,145,&lt;br /&gt;
| No&lt;br /&gt;
| V2&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [[File:206_image.jpg|100px]] [[File:Dlc1.jpg|100px]] [[File:Dlc2.jpg|100px]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.459&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.50&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.51&lt;br /&gt;
| 6,2,67,2,51&lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,&lt;br /&gt;
| &lt;br /&gt;
| 2 &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [http://forum.micasaverde.com/index.php?action=dlattach;topic=12289.0;attach=9066 photo]&lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg102315.html#msg102315 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.5.3&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002&lt;br /&gt;
| 3.02&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x72, 0x91 only(?)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| not compatible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014G0013&lt;br /&gt;
| 1.00&lt;br /&gt;
| 6,3,67,1,0&lt;br /&gt;
| 83,156,0,4,8,4,R,B,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143&lt;br /&gt;
| No&lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.622, Z-Wave version 3.20&lt;br /&gt;
| [[File:Danfoss_LC_SW1.00.jpg|100px]]&lt;br /&gt;
| under test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test results for Danfoss LC Z (014G0013, firmware version 1.00, wakeup interval 300 seconds; MiOS 1.5.622, Z-Wave version 3.20, Vera routing instead of Z-Wave)==&lt;br /&gt;
&lt;br /&gt;
===Wakeup interval===&lt;br /&gt;
&lt;br /&gt;
===Reaction time===&lt;br /&gt;
&lt;br /&gt;
===Power consumption===&lt;br /&gt;
&lt;br /&gt;
== Checking the wakeup interval ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
local danfoss_devices = { { 221, 'KiZ' }, &lt;br /&gt;
                          { 218, 'B'   },&lt;br /&gt;
                          { 211, 'SZ'  },&lt;br /&gt;
                          { 107, 'WZS' },&lt;br /&gt;
                          {  94, 'WZN' }  }&lt;br /&gt;
&lt;br /&gt;
function log_wakeup( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 local s = ''&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#danfoss_devices&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   if danfoss_devices[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
     s = danfoss_devices[ i ][ 2 ]&lt;br /&gt;
    end   &lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 os.execute( 'logger -t Heizung Wakeup_' .. s )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#danfoss_devices&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'log_wakeup', 'urn:micasaverde-com:serviceId:ZWaveDevice1', 'LastWakeup', danfoss_devices[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Synchronizing the Danfoss GUI device with temperature sensors ==&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_CurrentTemperature.jpg]]&lt;br /&gt;
&lt;br /&gt;
... using a TFA 30.3133 temperature sensor (ironically, MiOS doesn't support decidegrees for Z-Wave temperature sensors).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- list of { temperature_sensor_device_id, { list of Danfoss_LC_device_id } }&lt;br /&gt;
&lt;br /&gt;
devices_to_synchronize = { { 167, { 218      } },    -- B&lt;br /&gt;
                           { 162, { 221      } },    -- KiZ&lt;br /&gt;
                           { 169, { 211      } },    -- SZ&lt;br /&gt;
                           { 170, {  94, 107 } }  }  -- WZS, WZN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function synchronize_temp( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#devices_to_synchronize&lt;br /&gt;
  do&lt;br /&gt;
 &lt;br /&gt;
   if devices_to_synchronize[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
 &lt;br /&gt;
     for j = 1,#devices_to_synchronize[ i ][ 2 ]&lt;br /&gt;
       do&lt;br /&gt;
        luup.variable_set( 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', lul_value_new, devices_to_synchronize[ i ][ 2 ][ j ] )&lt;br /&gt;
       end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end -- synchronize_temp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#devices_to_synchronize&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'synchronize_temp', 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', devices_to_synchronize[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Danfoss_Thermostat_LC</id>
		<title>Danfoss Thermostat LC</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Danfoss_Thermostat_LC"/>
				<updated>2014-02-21T18:33:37Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
'''Please note that LC firmware revision 3.02 is not compatible with Z-Wave.'''&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== HW revisions ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Part no. &lt;br /&gt;
! Firmware&lt;br /&gt;
! Z-Wave version &lt;br /&gt;
! Capabilities&lt;br /&gt;
! Z-Wave classes&lt;br /&gt;
! [http://forum.micasaverde.com/index.php/topic,12289.msg90659.html#msg90659 extra menu options]&lt;br /&gt;
! Vera&lt;br /&gt;
! MiOS&lt;br /&gt;
! Photo &lt;br /&gt;
! Issues&lt;br /&gt;
|-&lt;br /&gt;
| 014G0009 &lt;br /&gt;
| 1.06&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 delay issue][http://forum.micasaverde.com/index.php/topic,12289.msg95429.html#msg95429 unreliable]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002, 014G0009 &lt;br /&gt;
| 2.06&lt;br /&gt;
| 6,2,67,2,6 &lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,145,&lt;br /&gt;
| No&lt;br /&gt;
| V2&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [[File:206_image.jpg|100px]] [[File:Dlc1.jpg|100px]] [[File:Dlc2.jpg|100px]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.459&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.50&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.51&lt;br /&gt;
| 6,2,67,2,51&lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,&lt;br /&gt;
| &lt;br /&gt;
| 2 &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [http://forum.micasaverde.com/index.php?action=dlattach;topic=12289.0;attach=9066 photo]&lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg102315.html#msg102315 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.5.3&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002&lt;br /&gt;
| 3.02&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x72, 0x91 only(?)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| not compatible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014G0013&lt;br /&gt;
| 1.00&lt;br /&gt;
| 6,3,67,1,0&lt;br /&gt;
| 83,156,0,4,8,4,R,B,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143&lt;br /&gt;
| No&lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.622, Z-Wave version 3.20&lt;br /&gt;
| [[File:Danfoss_LC_SW1.00.jpg|100px]]&lt;br /&gt;
| under test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test results for Danfoss LC Z (014G0013, firmware version 1.00; MiOS 1.5.622, Z-Wave version 3.20)==&lt;br /&gt;
&lt;br /&gt;
===Wakeup interval===&lt;br /&gt;
&lt;br /&gt;
===Reaction time===&lt;br /&gt;
&lt;br /&gt;
===Power consumption===&lt;br /&gt;
&lt;br /&gt;
== Checking the wakeup interval ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
local danfoss_devices = { { 221, 'KiZ' }, &lt;br /&gt;
                          { 218, 'B'   },&lt;br /&gt;
                          { 211, 'SZ'  },&lt;br /&gt;
                          { 107, 'WZS' },&lt;br /&gt;
                          {  94, 'WZN' }  }&lt;br /&gt;
&lt;br /&gt;
function log_wakeup( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 local s = ''&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#danfoss_devices&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   if danfoss_devices[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
     s = danfoss_devices[ i ][ 2 ]&lt;br /&gt;
    end   &lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 os.execute( 'logger -t Heizung Wakeup_' .. s )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#danfoss_devices&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'log_wakeup', 'urn:micasaverde-com:serviceId:ZWaveDevice1', 'LastWakeup', danfoss_devices[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Synchronizing the Danfoss GUI device with temperature sensors ==&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_CurrentTemperature.jpg]]&lt;br /&gt;
&lt;br /&gt;
... using a TFA 30.3133 temperature sensor (ironically, MiOS doesn't support decidegrees for Z-Wave temperature sensors).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- list of { temperature_sensor_device_id, { list of Danfoss_LC_device_id } }&lt;br /&gt;
&lt;br /&gt;
devices_to_synchronize = { { 167, { 218      } },    -- B&lt;br /&gt;
                           { 162, { 221      } },    -- KiZ&lt;br /&gt;
                           { 169, { 211      } },    -- SZ&lt;br /&gt;
                           { 170, {  94, 107 } }  }  -- WZS, WZN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function synchronize_temp( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#devices_to_synchronize&lt;br /&gt;
  do&lt;br /&gt;
 &lt;br /&gt;
   if devices_to_synchronize[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
 &lt;br /&gt;
     for j = 1,#devices_to_synchronize[ i ][ 2 ]&lt;br /&gt;
       do&lt;br /&gt;
        luup.variable_set( 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', lul_value_new, devices_to_synchronize[ i ][ 2 ][ j ] )&lt;br /&gt;
       end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end -- synchronize_temp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#devices_to_synchronize&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'synchronize_temp', 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', devices_to_synchronize[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Danfoss_Thermostat_LC</id>
		<title>Danfoss Thermostat LC</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Danfoss_Thermostat_LC"/>
				<updated>2014-02-21T18:31:05Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* HW revisions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
'''Information applies to Danfoss Living Connect firmware revision 2.06 (and 2.50?) only. Firmware revision 3.02 is not compatible with Z-Wave.'''&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== HW revisions ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Part no. &lt;br /&gt;
! Firmware&lt;br /&gt;
! Z-Wave version &lt;br /&gt;
! Capabilities&lt;br /&gt;
! Z-Wave classes&lt;br /&gt;
! [http://forum.micasaverde.com/index.php/topic,12289.msg90659.html#msg90659 extra menu options]&lt;br /&gt;
! Vera&lt;br /&gt;
! MiOS&lt;br /&gt;
! Photo &lt;br /&gt;
! Issues&lt;br /&gt;
|-&lt;br /&gt;
| 014G0009 &lt;br /&gt;
| 1.06&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 delay issue][http://forum.micasaverde.com/index.php/topic,12289.msg95429.html#msg95429 unreliable]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002, 014G0009 &lt;br /&gt;
| 2.06&lt;br /&gt;
| 6,2,67,2,6 &lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,145,&lt;br /&gt;
| No&lt;br /&gt;
| V2&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [[File:206_image.jpg|100px]] [[File:Dlc1.jpg|100px]] [[File:Dlc2.jpg|100px]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.459&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.50&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.51&lt;br /&gt;
| 6,2,67,2,51&lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,&lt;br /&gt;
| &lt;br /&gt;
| 2 &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [http://forum.micasaverde.com/index.php?action=dlattach;topic=12289.0;attach=9066 photo]&lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg102315.html#msg102315 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.5.3&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002&lt;br /&gt;
| 3.02&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x72, 0x91 only(?)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| not compatible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014G0013&lt;br /&gt;
| 1.00&lt;br /&gt;
| 6,3,67,1,0&lt;br /&gt;
| 83,156,0,4,8,4,R,B,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143&lt;br /&gt;
| No&lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.622, Z-Wave version 3.20&lt;br /&gt;
| [[File:Danfoss_LC_SW1.00.jpg|100px]]&lt;br /&gt;
| under test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Test results for Danfoss LC Z (014G0013, firmware version 1.00; MiOS 1.5.622, Z-Wave version 3.20)==&lt;br /&gt;
&lt;br /&gt;
===Wakeup interval===&lt;br /&gt;
&lt;br /&gt;
===Reaction time===&lt;br /&gt;
&lt;br /&gt;
===Power consumption===&lt;br /&gt;
&lt;br /&gt;
== Checking the wakeup interval ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
local danfoss_devices = { { 221, 'KiZ' }, &lt;br /&gt;
                          { 218, 'B'   },&lt;br /&gt;
                          { 211, 'SZ'  },&lt;br /&gt;
                          { 107, 'WZS' },&lt;br /&gt;
                          {  94, 'WZN' }  }&lt;br /&gt;
&lt;br /&gt;
function log_wakeup( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 local s = ''&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#danfoss_devices&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   if danfoss_devices[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
     s = danfoss_devices[ i ][ 2 ]&lt;br /&gt;
    end   &lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 os.execute( 'logger -t Heizung Wakeup_' .. s )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#danfoss_devices&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'log_wakeup', 'urn:micasaverde-com:serviceId:ZWaveDevice1', 'LastWakeup', danfoss_devices[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Synchronizing the Danfoss GUI device with temperature sensors ==&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_CurrentTemperature.jpg]]&lt;br /&gt;
&lt;br /&gt;
... using a TFA 30.3133 temperature sensor (ironically, MiOS doesn't support decidegrees for Z-Wave temperature sensors).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- list of { temperature_sensor_device_id, { list of Danfoss_LC_device_id } }&lt;br /&gt;
&lt;br /&gt;
devices_to_synchronize = { { 167, { 218      } },    -- B&lt;br /&gt;
                           { 162, { 221      } },    -- KiZ&lt;br /&gt;
                           { 169, { 211      } },    -- SZ&lt;br /&gt;
                           { 170, {  94, 107 } }  }  -- WZS, WZN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function synchronize_temp( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#devices_to_synchronize&lt;br /&gt;
  do&lt;br /&gt;
 &lt;br /&gt;
   if devices_to_synchronize[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
 &lt;br /&gt;
     for j = 1,#devices_to_synchronize[ i ][ 2 ]&lt;br /&gt;
       do&lt;br /&gt;
        luup.variable_set( 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', lul_value_new, devices_to_synchronize[ i ][ 2 ][ j ] )&lt;br /&gt;
       end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end -- synchronize_temp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#devices_to_synchronize&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'synchronize_temp', 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', devices_to_synchronize[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Danfoss_Thermostat_LC</id>
		<title>Danfoss Thermostat LC</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Danfoss_Thermostat_LC"/>
				<updated>2014-02-21T18:27:12Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* HW revisions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
'''Information applies to Danfoss Living Connect firmware revision 2.06 (and 2.50?) only. Firmware revision 3.02 is not compatible with Z-Wave.'''&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== HW revisions ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Part no. &lt;br /&gt;
! Firmware&lt;br /&gt;
! Z-Wave version &lt;br /&gt;
! Capabilities&lt;br /&gt;
! Z-Wave classes&lt;br /&gt;
! [http://forum.micasaverde.com/index.php/topic,12289.msg90659.html#msg90659 extra menu options]&lt;br /&gt;
! Vera&lt;br /&gt;
! MiOS&lt;br /&gt;
! Photo &lt;br /&gt;
! Issues&lt;br /&gt;
|-&lt;br /&gt;
| 014G0009 &lt;br /&gt;
| 1.06&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 delay issue][http://forum.micasaverde.com/index.php/topic,12289.msg95429.html#msg95429 unreliable]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002, 014G0009 &lt;br /&gt;
| 2.06&lt;br /&gt;
| 6,2,67,2,6 &lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,145,&lt;br /&gt;
| No&lt;br /&gt;
| V2&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [[File:206_image.jpg|100px]] [[File:Dlc1.jpg|100px]] [[File:Dlc2.jpg|100px]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.459&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.50&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.51&lt;br /&gt;
| 6,2,67,2,51&lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,&lt;br /&gt;
| &lt;br /&gt;
| 2 &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [http://forum.micasaverde.com/index.php?action=dlattach;topic=12289.0;attach=9066 photo]&lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg102315.html#msg102315 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.5.3&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002&lt;br /&gt;
| 3.02&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x72, 0x91 only(?)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| not compatible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014G0013&lt;br /&gt;
| 1.00&lt;br /&gt;
| 6,3,67,1,0&lt;br /&gt;
| 83,156,0,4,8,4,R,B,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143&lt;br /&gt;
| No&lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.622, Z-Wave version 3.20&lt;br /&gt;
| [[File:Danfoss_LC_SW1.00.jpg|100px]]&lt;br /&gt;
| under test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Checking the wakeup interval ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
local danfoss_devices = { { 221, 'KiZ' }, &lt;br /&gt;
                          { 218, 'B'   },&lt;br /&gt;
                          { 211, 'SZ'  },&lt;br /&gt;
                          { 107, 'WZS' },&lt;br /&gt;
                          {  94, 'WZN' }  }&lt;br /&gt;
&lt;br /&gt;
function log_wakeup( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 local s = ''&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#danfoss_devices&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   if danfoss_devices[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
     s = danfoss_devices[ i ][ 2 ]&lt;br /&gt;
    end   &lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 os.execute( 'logger -t Heizung Wakeup_' .. s )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#danfoss_devices&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'log_wakeup', 'urn:micasaverde-com:serviceId:ZWaveDevice1', 'LastWakeup', danfoss_devices[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Synchronizing the Danfoss GUI device with temperature sensors ==&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_CurrentTemperature.jpg]]&lt;br /&gt;
&lt;br /&gt;
... using a TFA 30.3133 temperature sensor (ironically, MiOS doesn't support decidegrees for Z-Wave temperature sensors).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- list of { temperature_sensor_device_id, { list of Danfoss_LC_device_id } }&lt;br /&gt;
&lt;br /&gt;
devices_to_synchronize = { { 167, { 218      } },    -- B&lt;br /&gt;
                           { 162, { 221      } },    -- KiZ&lt;br /&gt;
                           { 169, { 211      } },    -- SZ&lt;br /&gt;
                           { 170, {  94, 107 } }  }  -- WZS, WZN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function synchronize_temp( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#devices_to_synchronize&lt;br /&gt;
  do&lt;br /&gt;
 &lt;br /&gt;
   if devices_to_synchronize[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
 &lt;br /&gt;
     for j = 1,#devices_to_synchronize[ i ][ 2 ]&lt;br /&gt;
       do&lt;br /&gt;
        luup.variable_set( 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', lul_value_new, devices_to_synchronize[ i ][ 2 ][ j ] )&lt;br /&gt;
       end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end -- synchronize_temp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#devices_to_synchronize&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'synchronize_temp', 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', devices_to_synchronize[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Danfoss_Thermostat_LC</id>
		<title>Danfoss Thermostat LC</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Danfoss_Thermostat_LC"/>
				<updated>2014-02-19T22:02:35Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* HW revisions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
'''Information applies to Danfoss Living Connect firmware revision 2.06 (and 2.50?) only. Firmware revision 3.02 is not compatible with Z-Wave.'''&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== HW revisions ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Part no. &lt;br /&gt;
! Firmware&lt;br /&gt;
! Z-Wave version &lt;br /&gt;
! Capabilities&lt;br /&gt;
! Z-Wave classes&lt;br /&gt;
! [http://forum.micasaverde.com/index.php/topic,12289.msg90659.html#msg90659 extra menu options]&lt;br /&gt;
! Vera&lt;br /&gt;
! MiOS&lt;br /&gt;
! Photo &lt;br /&gt;
! Issues&lt;br /&gt;
|-&lt;br /&gt;
| 014G0009 &lt;br /&gt;
| 1.06&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 delay issue][http://forum.micasaverde.com/index.php/topic,12289.msg95429.html#msg95429 unreliable]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002, 014G0009 &lt;br /&gt;
| 2.06&lt;br /&gt;
| 6,2,67,2,6 &lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,145,&lt;br /&gt;
| No&lt;br /&gt;
| V2&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [[File:206_image.jpg|100px]] [[File:Dlc1.jpg|100px]] [[File:Dlc2.jpg|100px]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.459&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.50&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.51&lt;br /&gt;
| 6,2,67,2,51&lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,&lt;br /&gt;
| &lt;br /&gt;
| 2 &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [http://forum.micasaverde.com/index.php?action=dlattach;topic=12289.0;attach=9066 photo]&lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg102315.html#msg102315 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.5.3&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002&lt;br /&gt;
| 3.02&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x72, 0x91 only(?)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| not compatible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014G0013&lt;br /&gt;
| 1.00&lt;br /&gt;
| 6,3,67,1,0&lt;br /&gt;
| 83,156,0,4,8,4,R,B,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143&lt;br /&gt;
| No&lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.622&lt;br /&gt;
| [[File:Danfoss_LC_SW1.00.jpg|100px]]&lt;br /&gt;
| under test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Checking the wakeup interval ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
local danfoss_devices = { { 221, 'KiZ' }, &lt;br /&gt;
                          { 218, 'B'   },&lt;br /&gt;
                          { 211, 'SZ'  },&lt;br /&gt;
                          { 107, 'WZS' },&lt;br /&gt;
                          {  94, 'WZN' }  }&lt;br /&gt;
&lt;br /&gt;
function log_wakeup( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 local s = ''&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#danfoss_devices&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   if danfoss_devices[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
     s = danfoss_devices[ i ][ 2 ]&lt;br /&gt;
    end   &lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 os.execute( 'logger -t Heizung Wakeup_' .. s )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#danfoss_devices&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'log_wakeup', 'urn:micasaverde-com:serviceId:ZWaveDevice1', 'LastWakeup', danfoss_devices[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Synchronizing the Danfoss GUI device with temperature sensors ==&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_CurrentTemperature.jpg]]&lt;br /&gt;
&lt;br /&gt;
... using a TFA 30.3133 temperature sensor (ironically, MiOS doesn't support decidegrees for Z-Wave temperature sensors).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- list of { temperature_sensor_device_id, { list of Danfoss_LC_device_id } }&lt;br /&gt;
&lt;br /&gt;
devices_to_synchronize = { { 167, { 218      } },    -- B&lt;br /&gt;
                           { 162, { 221      } },    -- KiZ&lt;br /&gt;
                           { 169, { 211      } },    -- SZ&lt;br /&gt;
                           { 170, {  94, 107 } }  }  -- WZS, WZN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function synchronize_temp( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#devices_to_synchronize&lt;br /&gt;
  do&lt;br /&gt;
 &lt;br /&gt;
   if devices_to_synchronize[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
 &lt;br /&gt;
     for j = 1,#devices_to_synchronize[ i ][ 2 ]&lt;br /&gt;
       do&lt;br /&gt;
        luup.variable_set( 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', lul_value_new, devices_to_synchronize[ i ][ 2 ][ j ] )&lt;br /&gt;
       end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end -- synchronize_temp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#devices_to_synchronize&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'synchronize_temp', 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', devices_to_synchronize[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:Danfoss_LC_SW1.00.jpg</id>
		<title>File:Danfoss LC SW1.00.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:Danfoss_LC_SW1.00.jpg"/>
				<updated>2014-02-19T22:01:29Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Danfoss_Thermostat_LC</id>
		<title>Danfoss Thermostat LC</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Danfoss_Thermostat_LC"/>
				<updated>2014-02-19T21:05:05Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* HW revisions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
'''Information applies to Danfoss Living Connect firmware revision 2.06 (and 2.50?) only. Firmware revision 3.02 is not compatible with Z-Wave.'''&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== HW revisions ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Part no. &lt;br /&gt;
! Firmware&lt;br /&gt;
! Z-Wave version &lt;br /&gt;
! Capabilities&lt;br /&gt;
! Z-Wave classes&lt;br /&gt;
! [http://forum.micasaverde.com/index.php/topic,12289.msg90659.html#msg90659 extra menu options]&lt;br /&gt;
! Vera&lt;br /&gt;
! MiOS&lt;br /&gt;
! Photo &lt;br /&gt;
! Issues&lt;br /&gt;
|-&lt;br /&gt;
| 014G0009 &lt;br /&gt;
| 1.06&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 delay issue][http://forum.micasaverde.com/index.php/topic,12289.msg95429.html#msg95429 unreliable]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002, 014G0009 &lt;br /&gt;
| 2.06&lt;br /&gt;
| 6,2,67,2,6 &lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,145,&lt;br /&gt;
| No&lt;br /&gt;
| V2&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [[File:206_image.jpg|100px]] [[File:Dlc1.jpg|100px]] [[File:Dlc2.jpg|100px]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.459&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.50&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.51&lt;br /&gt;
| 6,2,67,2,51&lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,&lt;br /&gt;
| &lt;br /&gt;
| 2 &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [http://forum.micasaverde.com/index.php?action=dlattach;topic=12289.0;attach=9066 photo]&lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg102315.html#msg102315 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.5.3&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002&lt;br /&gt;
| 3.02&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x72, 0x91 only(?)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| not compatible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014G0013&lt;br /&gt;
| 1.00&lt;br /&gt;
| 6,3,67,1,0&lt;br /&gt;
| 83,156,0,4,8,4,R,B,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143&lt;br /&gt;
| No&lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.622&lt;br /&gt;
| &lt;br /&gt;
| under test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Checking the wakeup interval ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
local danfoss_devices = { { 221, 'KiZ' }, &lt;br /&gt;
                          { 218, 'B'   },&lt;br /&gt;
                          { 211, 'SZ'  },&lt;br /&gt;
                          { 107, 'WZS' },&lt;br /&gt;
                          {  94, 'WZN' }  }&lt;br /&gt;
&lt;br /&gt;
function log_wakeup( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 local s = ''&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#danfoss_devices&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   if danfoss_devices[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
     s = danfoss_devices[ i ][ 2 ]&lt;br /&gt;
    end   &lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 os.execute( 'logger -t Heizung Wakeup_' .. s )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#danfoss_devices&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'log_wakeup', 'urn:micasaverde-com:serviceId:ZWaveDevice1', 'LastWakeup', danfoss_devices[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Synchronizing the Danfoss GUI device with temperature sensors ==&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_CurrentTemperature.jpg]]&lt;br /&gt;
&lt;br /&gt;
... using a TFA 30.3133 temperature sensor (ironically, MiOS doesn't support decidegrees for Z-Wave temperature sensors).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- list of { temperature_sensor_device_id, { list of Danfoss_LC_device_id } }&lt;br /&gt;
&lt;br /&gt;
devices_to_synchronize = { { 167, { 218      } },    -- B&lt;br /&gt;
                           { 162, { 221      } },    -- KiZ&lt;br /&gt;
                           { 169, { 211      } },    -- SZ&lt;br /&gt;
                           { 170, {  94, 107 } }  }  -- WZS, WZN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function synchronize_temp( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#devices_to_synchronize&lt;br /&gt;
  do&lt;br /&gt;
 &lt;br /&gt;
   if devices_to_synchronize[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
 &lt;br /&gt;
     for j = 1,#devices_to_synchronize[ i ][ 2 ]&lt;br /&gt;
       do&lt;br /&gt;
        luup.variable_set( 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', lul_value_new, devices_to_synchronize[ i ][ 2 ][ j ] )&lt;br /&gt;
       end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end -- synchronize_temp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#devices_to_synchronize&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'synchronize_temp', 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', devices_to_synchronize[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/Danfoss_Thermostat_LC</id>
		<title>Danfoss Thermostat LC</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/Danfoss_Thermostat_LC"/>
				<updated>2014-02-17T20:16:45Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* HW revisions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
'''Information applies to Danfoss Living Connect firmware revision 2.06 (and 2.50?) only. Firmware revision 3.02 is not compatible with Z-Wave.'''&lt;br /&gt;
&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
== HW revisions ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Part no. &lt;br /&gt;
! Firmware&lt;br /&gt;
! Z-Wave version &lt;br /&gt;
! Capabilities&lt;br /&gt;
! Z-Wave classes&lt;br /&gt;
! [http://forum.micasaverde.com/index.php/topic,12289.msg90659.html#msg90659 extra menu options]&lt;br /&gt;
! Vera&lt;br /&gt;
! MiOS&lt;br /&gt;
! Photo &lt;br /&gt;
! Issues&lt;br /&gt;
|-&lt;br /&gt;
| 014G0009 &lt;br /&gt;
| 1.06&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 delay issue][http://forum.micasaverde.com/index.php/topic,12289.msg95429.html#msg95429 unreliable]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002, 014G0009 &lt;br /&gt;
| 2.06&lt;br /&gt;
| 6,2,67,2,6 &lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,145,&lt;br /&gt;
| No&lt;br /&gt;
| V2&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [[File:206_image.jpg|100px]] [[File:Dlc1.jpg|100px]] [[File:Dlc2.jpg|100px]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| 2.06&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 3&lt;br /&gt;
| 1.5.459&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.50&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| Lite &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.51&lt;br /&gt;
| 6,2,67,2,51&lt;br /&gt;
| 81,140,0,4,8,4,R,RS&lt;br /&gt;
| 67,70,114,117,128,129,132:2,134,143,&lt;br /&gt;
| &lt;br /&gt;
| 2 &lt;br /&gt;
| 1.5.408&lt;br /&gt;
| [http://forum.micasaverde.com/index.php?action=dlattach;topic=12289.0;attach=9066 photo]&lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg102315.html#msg102315 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0012 &lt;br /&gt;
| 2.5.3&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Lite&lt;br /&gt;
| 1.5.408&lt;br /&gt;
| &lt;br /&gt;
| [http://forum.micasaverde.com/index.php/topic,12289.msg99321.html#msg99321 no issues]&lt;br /&gt;
|-&lt;br /&gt;
| 014G0002&lt;br /&gt;
| 3.02&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x72, 0x91 only(?)&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| not compatible&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 014G0013&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Checking the wakeup interval ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
local danfoss_devices = { { 221, 'KiZ' }, &lt;br /&gt;
                          { 218, 'B'   },&lt;br /&gt;
                          { 211, 'SZ'  },&lt;br /&gt;
                          { 107, 'WZS' },&lt;br /&gt;
                          {  94, 'WZN' }  }&lt;br /&gt;
&lt;br /&gt;
function log_wakeup( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 local s = ''&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#danfoss_devices&lt;br /&gt;
  do&lt;br /&gt;
&lt;br /&gt;
   if danfoss_devices[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
     s = danfoss_devices[ i ][ 2 ]&lt;br /&gt;
    end   &lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
 os.execute( 'logger -t Heizung Wakeup_' .. s )&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#danfoss_devices&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'log_wakeup', 'urn:micasaverde-com:serviceId:ZWaveDevice1', 'LastWakeup', danfoss_devices[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Synchronizing the Danfoss GUI device with temperature sensors ==&lt;br /&gt;
&lt;br /&gt;
[[File:Danfoss_CurrentTemperature.jpg]]&lt;br /&gt;
&lt;br /&gt;
... using a TFA 30.3133 temperature sensor (ironically, MiOS doesn't support decidegrees for Z-Wave temperature sensors).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
-- list of { temperature_sensor_device_id, { list of Danfoss_LC_device_id } }&lt;br /&gt;
&lt;br /&gt;
devices_to_synchronize = { { 167, { 218      } },    -- B&lt;br /&gt;
                           { 162, { 221      } },    -- KiZ&lt;br /&gt;
                           { 169, { 211      } },    -- SZ&lt;br /&gt;
                           { 170, {  94, 107 } }  }  -- WZS, WZN&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function synchronize_temp( lul_device, lul_service, lul_variable, lul_value_old, lul_value_new )&lt;br /&gt;
&lt;br /&gt;
 for i = 1,#devices_to_synchronize&lt;br /&gt;
  do&lt;br /&gt;
 &lt;br /&gt;
   if devices_to_synchronize[ i ][ 1 ] == tonumber( lul_device ) &lt;br /&gt;
    then&lt;br /&gt;
 &lt;br /&gt;
     for j = 1,#devices_to_synchronize[ i ][ 2 ]&lt;br /&gt;
       do&lt;br /&gt;
        luup.variable_set( 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', lul_value_new, devices_to_synchronize[ i ][ 2 ][ j ] )&lt;br /&gt;
       end&lt;br /&gt;
&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
end -- synchronize_temp&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for i = 1,#devices_to_synchronize&lt;br /&gt;
 do&lt;br /&gt;
  luup.variable_watch( 'synchronize_temp', 'urn:upnp-org:serviceId:TemperatureSensor1', 'CurrentTemperature', devices_to_synchronize[ i ][ 1 ] )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/AIS_for_Vera</id>
		<title>AIS for Vera</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/AIS_for_Vera"/>
				<updated>2014-02-09T17:56:18Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
[[File:SDR_AIS.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
===Hardware===&lt;br /&gt;
&lt;br /&gt;
AIS receiver (must support NMEA 0183 output compatible with [http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1371-4-201004-I!!PDF-E.pdf ITU-R 1371])&lt;br /&gt;
&lt;br /&gt;
Some vessels equipped with AIS transponder within reception range&lt;br /&gt;
&lt;br /&gt;
====DIY AIS receiver for less than $20====&lt;br /&gt;
&lt;br /&gt;
USB DVB-T stick supported by SDR software (e.g., chipset RTL2832U and tuner R820T)&lt;br /&gt;
&lt;br /&gt;
[http://nmearouter.com/docs/ais/aerial.html AIS antenna], optional: [http://www.qth.at/oe1xhc/data/coax_collinear_70cm.html waterproof enclosure]&lt;br /&gt;
&lt;br /&gt;
=====Windows PC=====&lt;br /&gt;
&lt;br /&gt;
[http://sdrsharp.com/ SDR#]&lt;br /&gt;
&lt;br /&gt;
[http://groups.yahoo.com/neo/groups/aismon/info AISMon]&lt;br /&gt;
&lt;br /&gt;
[http://nmearouter.com/docs/ais/nmearouter.html NMEARouter]&lt;br /&gt;
&lt;br /&gt;
optional: [http://nmearouter.com/docs/ais/ais_decoder.html AIS Decoder]&lt;br /&gt;
&lt;br /&gt;
'''or'''&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
&lt;br /&gt;
[[File:AIS_Raspberry_Pi.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
[http://sdr.osmocom.org/trac/wiki/rtl-sdr rtl_fm]&lt;br /&gt;
&lt;br /&gt;
[http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/ AIS Decoder]&lt;br /&gt;
&lt;br /&gt;
===Software===&lt;br /&gt;
&lt;br /&gt;
AIS4Vera plugin [to be published]&lt;br /&gt;
&lt;br /&gt;
==Installation on Raspberry Pi==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Set up Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download latest Raspian image from: http://www.raspberrypi.org/downloads&lt;br /&gt;
&lt;br /&gt;
Write Raspian image to SD card.&lt;br /&gt;
&lt;br /&gt;
Boot and login.&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
Expand rootfs (sudo raspi-config), then reboot (shutdown -r now).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install Software Defined Radio===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://tubbyaustin.blogspot.de/2013/03/compiling-rtlfm-on-raspberry-pi.html&lt;br /&gt;
&lt;br /&gt;
sudo su -&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install git&lt;br /&gt;
git clone git://git.osmocom.org/rtl-sdr.git&lt;br /&gt;
apt-get install libusb-dev libusb-1.0 libtool cmake&lt;br /&gt;
apt-get install build-essential&lt;br /&gt;
&lt;br /&gt;
cd rtl-sdr/&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ../&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ..&lt;br /&gt;
cp rtl-sdr.rules /etc/udev/rules.d/&lt;br /&gt;
&lt;br /&gt;
Blacklist the kernel module dvb_usb_rtl28xxu by adding the line&lt;br /&gt;
&lt;br /&gt;
blacklist dvb_usb_rtl28xxu&lt;br /&gt;
&lt;br /&gt;
to /etc/modprobe.d/raspi-blacklist.conf and reboot.&lt;br /&gt;
&lt;br /&gt;
Plug in DVB-T stick.&lt;br /&gt;
&lt;br /&gt;
Test the installation:&lt;br /&gt;
&lt;br /&gt;
rtl_test -t&lt;br /&gt;
&lt;br /&gt;
output:&lt;br /&gt;
Found 1 device(s):&lt;br /&gt;
  0:  Generic, RTL2832U, SN: 7777XXXXXXXX&lt;br /&gt;
&lt;br /&gt;
Using device 0: Generic RTL2832U&lt;br /&gt;
Found Rafael Micro R820T tuner&lt;br /&gt;
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6&lt;br /&gt;
Sampling at 2048000 S/s.&lt;br /&gt;
No E4000 tuner found, aborting.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install AIS decoder===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/msg12754/?PHPSESSID=4krr2m8bouu59k146004vov733#msg12754&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install libasound-dev libpulse-dev&lt;br /&gt;
&lt;br /&gt;
wget http://www.aishub.net/downloads/aisdecoder.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar zxvf aisdecoder.tar.gz&lt;br /&gt;
cd aisdecoder&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ../ -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
make&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install startup script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/msg12766/?PHPSESSID=4krr2m8bouu59k146004vov733#msg12766&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install socat&lt;br /&gt;
&lt;br /&gt;
Start AIS decoder and relay AIS messages from UDP port 10110 to TCP server at port 2702:&lt;br /&gt;
&lt;br /&gt;
mkfifo /tmp/aisdata&lt;br /&gt;
rtl_fm -f 161966899 -g 40  -s 48k -r 48k /tmp/aisdata &amp;amp;&lt;br /&gt;
./aisdecoder/build/aisdecoder -h 127.0.0.1 -p 10110 -a file -c mono -d -f /tmp/aisdata 2&amp;gt;&amp;gt; AIS_data.log &amp;amp;&lt;br /&gt;
socat TCP-LISTEN:2702,fork UDP-LISTEN:10110 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install A4V Luup plugin===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extract plugin files, upload plugin files to Vera, create device:&lt;br /&gt;
&lt;br /&gt;
Description         : A4V&lt;br /&gt;
Upnp Device Filename: D_A4V.xml&lt;br /&gt;
Ip Address          : &amp;lt;Raspberry Pi's IP address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload Luup engine.&lt;br /&gt;
&lt;br /&gt;
TCP port 2702 is hard-coded in D_A4V.xml and cannot be changed without changing D_A4V.xml&lt;br /&gt;
(and don't forget to adjust your startup script).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example use case==&lt;br /&gt;
&lt;br /&gt;
Create your own [http://translate.google.de/translate?sl=de&amp;amp;tl=en&amp;amp;js=n&amp;amp;prev=_t&amp;amp;hl=de&amp;amp;ie=UTF-8&amp;amp;u=http%3A%2F%2Fde.wikipedia.org%2Fwiki%2FSchiffsbegr%25C3%25BC%25C3%259Fungsanlage_Willkomm-H%25C3%25B6ft Schiffsbegr&amp;amp;uuml;&amp;amp;szlig;ungsanlage]:&lt;br /&gt;
&lt;br /&gt;
[tbc]&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
&lt;br /&gt;
[tbc]&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
&lt;br /&gt;
[http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1371-4-201004-I!!PDF-E.pdf Recommendation ITU-R M.1371-4 (04/2010)]&lt;br /&gt;
&lt;br /&gt;
[http://www.unece.org/fileadmin/DAM/trans/doc/finaldocs/sc3/ECE-TRANS-SC3-176e.pdf International Standard for Tracking and Tracing on Inland Waterways (VTT) - Resolution No. 63 (ECE/TRANS/SC.3/176)]&lt;br /&gt;
&lt;br /&gt;
[http://www.imo.org/blast/blastData.asp?doc_id=13413&amp;amp;filename=289.pdf Guidance on the use of AIS application-specific messages]&lt;br /&gt;
&lt;br /&gt;
[http://www.navcen.uscg.gov/pdf/AIS/IALA_AIS_Guidelines_Vol1_Pt1%20OPS%20%281.3%29.pdf IALA Guideline No. 1028 on the Automatic Identification (AIS) Volume 1, Part I, Operational Issues, Edition 1.3 December 2004]&lt;br /&gt;
&lt;br /&gt;
[http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.585-4-200703-S!!PDF-E.pdf Recommendation ITU-R M.585-4]&lt;br /&gt;
&lt;br /&gt;
[http://www.unece.org/trans/doc/2006/sc3/TRANS-SC3-2006-04a2e.doc European Vessel Identification Number, ECE/TRANS/SC.3/2006/4/Add.2, 19 July 2006]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/AIS_for_Vera</id>
		<title>AIS for Vera</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/AIS_for_Vera"/>
				<updated>2014-02-09T17:35:09Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
[[File:SDR_AIS.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
===Hardware===&lt;br /&gt;
&lt;br /&gt;
AIS receiver (must support NMEA 0183 output compatible with [http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1371-4-201004-I!!PDF-E.pdf ITU-R 1371])&lt;br /&gt;
&lt;br /&gt;
Some vessels equipped with AIS transponder within reception range&lt;br /&gt;
&lt;br /&gt;
====DIY AIS receiver for less than $20====&lt;br /&gt;
&lt;br /&gt;
USB DVB-T stick supported by SDR software (e.g., chipset RTL2832U and tuner R820T)&lt;br /&gt;
&lt;br /&gt;
[http://nmearouter.com/docs/ais/aerial.html AIS antenna], optional: [http://www.qth.at/oe1xhc/data/coax_collinear_70cm.html waterproof enclosure]&lt;br /&gt;
&lt;br /&gt;
=====Windows PC=====&lt;br /&gt;
&lt;br /&gt;
[http://sdrsharp.com/ SDR#]&lt;br /&gt;
&lt;br /&gt;
[http://groups.yahoo.com/neo/groups/aismon/info AISMon]&lt;br /&gt;
&lt;br /&gt;
[http://nmearouter.com/docs/ais/nmearouter.html NMEARouter]&lt;br /&gt;
&lt;br /&gt;
optional: [http://nmearouter.com/docs/ais/ais_decoder.html AIS Decoder]&lt;br /&gt;
&lt;br /&gt;
'''or'''&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
&lt;br /&gt;
[[File:AIS_Raspberry_Pi.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
[http://sdr.osmocom.org/trac/wiki/rtl-sdr rtl_fm]&lt;br /&gt;
&lt;br /&gt;
[http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/ AIS Decoder]&lt;br /&gt;
&lt;br /&gt;
===Software===&lt;br /&gt;
&lt;br /&gt;
AIS4Vera plugin [to be published]&lt;br /&gt;
&lt;br /&gt;
==Installation on Raspberry Pi==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Set up Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download latest Raspian image from: http://www.raspberrypi.org/downloads&lt;br /&gt;
&lt;br /&gt;
Write Raspian image to SD card.&lt;br /&gt;
&lt;br /&gt;
Boot and login.&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
Expand rootfs (sudo raspi-config), then reboot (shutdown -r now).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install Software Defined Radio===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://tubbyaustin.blogspot.de/2013/03/compiling-rtlfm-on-raspberry-pi.html&lt;br /&gt;
&lt;br /&gt;
sudo su -&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install git&lt;br /&gt;
git clone git://git.osmocom.org/rtl-sdr.git&lt;br /&gt;
apt-get install libusb-dev libusb-1.0 libtool cmake&lt;br /&gt;
apt-get install build-essential&lt;br /&gt;
&lt;br /&gt;
cd rtl-sdr/&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ../&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ..&lt;br /&gt;
cp rtl-sdr.rules /etc/udev/rules.d/&lt;br /&gt;
&lt;br /&gt;
Blacklist the kernel module dvb_usb_rtl28xxu by adding the line&lt;br /&gt;
&lt;br /&gt;
blacklist dvb_usb_rtl28xxu&lt;br /&gt;
&lt;br /&gt;
to /etc/modprobe.d/raspi-blacklist.conf and reboot.&lt;br /&gt;
&lt;br /&gt;
Plug in DVB-T stick.&lt;br /&gt;
&lt;br /&gt;
Test the installation:&lt;br /&gt;
&lt;br /&gt;
rtl_test -t&lt;br /&gt;
&lt;br /&gt;
output:&lt;br /&gt;
Found 1 device(s):&lt;br /&gt;
  0:  Generic, RTL2832U, SN: 7777XXXXXXXX&lt;br /&gt;
&lt;br /&gt;
Using device 0: Generic RTL2832U&lt;br /&gt;
Found Rafael Micro R820T tuner&lt;br /&gt;
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6&lt;br /&gt;
Sampling at 2048000 S/s.&lt;br /&gt;
No E4000 tuner found, aborting.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install AIS decoder===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/msg12754/?PHPSESSID=4krr2m8bouu59k146004vov733#msg12754&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install libasound-dev libpulse-dev&lt;br /&gt;
&lt;br /&gt;
wget http://www.aishub.net/downloads/aisdecoder.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar zxvf aisdecoder.tar.gz&lt;br /&gt;
cd aisdecoder&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ../ -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
make&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install startup script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/msg12766/?PHPSESSID=4krr2m8bouu59k146004vov733#msg12766&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install socat&lt;br /&gt;
&lt;br /&gt;
Start AIS decoder and relay AIS messages from UDP port 10110 to TCP server at port 2702:&lt;br /&gt;
&lt;br /&gt;
mkfifo /tmp/aisdata&lt;br /&gt;
rtl_fm -f 161966899 -g 40  -s 48k -r 48k /tmp/aisdata &amp;amp;&lt;br /&gt;
./aisdecoder/build/aisdecoder -h 127.0.0.1 -p 10110 -a file -c mono -d -f /tmp/aisdata 2&amp;gt;&amp;gt; AIS_data.log &amp;amp;&lt;br /&gt;
socat TCP-LISTEN:2702,fork UDP-LISTEN:10110 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install A4V Luup plugin===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extract plugin files, upload plugin files to Vera, create device:&lt;br /&gt;
&lt;br /&gt;
Description         : A4V&lt;br /&gt;
Upnp Device Filename: D_A4V.xml&lt;br /&gt;
Ip Address          : &amp;lt;Raspberry Pi's IP address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload Luup engine.&lt;br /&gt;
&lt;br /&gt;
TCP port 2702 is hard-coded in D_A4V.xml and cannot be changed without changing D_A4V.xml&lt;br /&gt;
(and don't forget to adjust your startup script).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
&lt;br /&gt;
[tbc]&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
&lt;br /&gt;
[http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1371-4-201004-I!!PDF-E.pdf Recommendation ITU-R M.1371-4 (04/2010)]&lt;br /&gt;
&lt;br /&gt;
[http://www.unece.org/fileadmin/DAM/trans/doc/finaldocs/sc3/ECE-TRANS-SC3-176e.pdf International Standard for Tracking and Tracing on Inland Waterways (VTT) - Resolution No. 63 (ECE/TRANS/SC.3/176)]&lt;br /&gt;
&lt;br /&gt;
[http://www.imo.org/blast/blastData.asp?doc_id=13413&amp;amp;filename=289.pdf Guidance on the use of AIS application-specific messages]&lt;br /&gt;
&lt;br /&gt;
[http://www.navcen.uscg.gov/pdf/AIS/IALA_AIS_Guidelines_Vol1_Pt1%20OPS%20%281.3%29.pdf IALA Guideline No. 1028 on the Automatic Identification (AIS) Volume 1, Part I, Operational Issues, Edition 1.3 December 2004]&lt;br /&gt;
&lt;br /&gt;
[http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.585-4-200703-S!!PDF-E.pdf Recommendation ITU-R M.585-4]&lt;br /&gt;
&lt;br /&gt;
[http://www.unece.org/trans/doc/2006/sc3/TRANS-SC3-2006-04a2e.doc European Vessel Identification Number, ECE/TRANS/SC.3/2006/4/Add.2, 19 July 2006]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/AIS_for_Vera</id>
		<title>AIS for Vera</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/AIS_for_Vera"/>
				<updated>2014-02-09T17:33:54Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Raspberry Pi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
[[File:SDR_AIS.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
===Hardware===&lt;br /&gt;
&lt;br /&gt;
AIS receiver (must support NMEA 0183 output compatible with [http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1371-4-201004-I!!PDF-E.pdf ITU-R 1371])&lt;br /&gt;
&lt;br /&gt;
Some vessels equipped with AIS transponder within reception range&lt;br /&gt;
&lt;br /&gt;
====DIY AIS receiver for less than $20====&lt;br /&gt;
&lt;br /&gt;
USB DVB-T stick supported by SDR software (e.g., chipset RTL2832U and tuner R820T)&lt;br /&gt;
&lt;br /&gt;
[http://nmearouter.com/docs/ais/aerial.html AIS antenna], optional: [http://www.qth.at/oe1xhc/data/coax_collinear_70cm.html waterproof enclosure]&lt;br /&gt;
&lt;br /&gt;
=====Windows PC=====&lt;br /&gt;
&lt;br /&gt;
[http://sdrsharp.com/ SDR#]&lt;br /&gt;
&lt;br /&gt;
[http://groups.yahoo.com/neo/groups/aismon/info AISMon]&lt;br /&gt;
&lt;br /&gt;
[http://nmearouter.com/docs/ais/nmearouter.html NMEARouter]&lt;br /&gt;
&lt;br /&gt;
optional: [http://nmearouter.com/docs/ais/ais_decoder.html AIS Decoder]&lt;br /&gt;
&lt;br /&gt;
'''or'''&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
&lt;br /&gt;
[[File:AIS_Raspberry_Pi.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
[http://sdr.osmocom.org/trac/wiki/rtl-sdr rtl_fm]&lt;br /&gt;
&lt;br /&gt;
[http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/ AIS Decoder]&lt;br /&gt;
&lt;br /&gt;
===Software===&lt;br /&gt;
&lt;br /&gt;
AIS4Vera plugin [to be published]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Set up Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download latest Raspian image from: http://www.raspberrypi.org/downloads&lt;br /&gt;
&lt;br /&gt;
Write Raspian image to SD card.&lt;br /&gt;
&lt;br /&gt;
Boot and login.&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
Expand rootfs (sudo raspi-config), then reboot (shutdown -r now).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install Software Defined Radio===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://tubbyaustin.blogspot.de/2013/03/compiling-rtlfm-on-raspberry-pi.html&lt;br /&gt;
&lt;br /&gt;
sudo su -&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install git&lt;br /&gt;
git clone git://git.osmocom.org/rtl-sdr.git&lt;br /&gt;
apt-get install libusb-dev libusb-1.0 libtool cmake&lt;br /&gt;
apt-get install build-essential&lt;br /&gt;
&lt;br /&gt;
cd rtl-sdr/&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ../&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ..&lt;br /&gt;
cp rtl-sdr.rules /etc/udev/rules.d/&lt;br /&gt;
&lt;br /&gt;
Blacklist the kernel module dvb_usb_rtl28xxu by adding the line&lt;br /&gt;
&lt;br /&gt;
blacklist dvb_usb_rtl28xxu&lt;br /&gt;
&lt;br /&gt;
to /etc/modprobe.d/raspi-blacklist.conf and reboot.&lt;br /&gt;
&lt;br /&gt;
Plug in DVB-T stick.&lt;br /&gt;
&lt;br /&gt;
Test the installation:&lt;br /&gt;
&lt;br /&gt;
rtl_test -t&lt;br /&gt;
&lt;br /&gt;
output:&lt;br /&gt;
Found 1 device(s):&lt;br /&gt;
  0:  Generic, RTL2832U, SN: 7777XXXXXXXX&lt;br /&gt;
&lt;br /&gt;
Using device 0: Generic RTL2832U&lt;br /&gt;
Found Rafael Micro R820T tuner&lt;br /&gt;
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6&lt;br /&gt;
Sampling at 2048000 S/s.&lt;br /&gt;
No E4000 tuner found, aborting.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install AIS decoder===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/msg12754/?PHPSESSID=4krr2m8bouu59k146004vov733#msg12754&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install libasound-dev libpulse-dev&lt;br /&gt;
&lt;br /&gt;
wget http://www.aishub.net/downloads/aisdecoder.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar zxvf aisdecoder.tar.gz&lt;br /&gt;
cd aisdecoder&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ../ -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
make&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install startup script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/msg12766/?PHPSESSID=4krr2m8bouu59k146004vov733#msg12766&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install socat&lt;br /&gt;
&lt;br /&gt;
Start AIS decoder and relay AIS messages from UDP port 10110 to TCP server at port 2702:&lt;br /&gt;
&lt;br /&gt;
mkfifo /tmp/aisdata&lt;br /&gt;
rtl_fm -f 161966899 -g 40  -s 48k -r 48k /tmp/aisdata &amp;amp;&lt;br /&gt;
./aisdecoder/build/aisdecoder -h 127.0.0.1 -p 10110 -a file -c mono -d -f /tmp/aisdata 2&amp;gt;&amp;gt; AIS_data.log &amp;amp;&lt;br /&gt;
socat TCP-LISTEN:2702,fork UDP-LISTEN:10110 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install A4V Luup plugin===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extract plugin files, upload plugin files to Vera, create device:&lt;br /&gt;
&lt;br /&gt;
Description         : A4V&lt;br /&gt;
Upnp Device Filename: D_A4V.xml&lt;br /&gt;
Ip Address          : &amp;lt;Raspberry Pi's IP address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload Luup engine.&lt;br /&gt;
&lt;br /&gt;
TCP port 2702 is hard-coded in D_A4V.xml and cannot be changed without changing D_A4V.xml&lt;br /&gt;
(and don't forget to adjust your startup script).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
&lt;br /&gt;
[tbc]&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
&lt;br /&gt;
[http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1371-4-201004-I!!PDF-E.pdf Recommendation ITU-R M.1371-4 (04/2010)]&lt;br /&gt;
&lt;br /&gt;
[http://www.unece.org/fileadmin/DAM/trans/doc/finaldocs/sc3/ECE-TRANS-SC3-176e.pdf International Standard for Tracking and Tracing on Inland Waterways (VTT) - Resolution No. 63 (ECE/TRANS/SC.3/176)]&lt;br /&gt;
&lt;br /&gt;
[http://www.imo.org/blast/blastData.asp?doc_id=13413&amp;amp;filename=289.pdf Guidance on the use of AIS application-specific messages]&lt;br /&gt;
&lt;br /&gt;
[http://www.navcen.uscg.gov/pdf/AIS/IALA_AIS_Guidelines_Vol1_Pt1%20OPS%20%281.3%29.pdf IALA Guideline No. 1028 on the Automatic Identification (AIS) Volume 1, Part I, Operational Issues, Edition 1.3 December 2004]&lt;br /&gt;
&lt;br /&gt;
[http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.585-4-200703-S!!PDF-E.pdf Recommendation ITU-R M.585-4]&lt;br /&gt;
&lt;br /&gt;
[http://www.unece.org/trans/doc/2006/sc3/TRANS-SC3-2006-04a2e.doc European Vessel Identification Number, ECE/TRANS/SC.3/2006/4/Add.2, 19 July 2006]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/AIS_for_Vera</id>
		<title>AIS for Vera</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/AIS_for_Vera"/>
				<updated>2014-02-09T17:31:16Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Install A4V Luup plugin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
[[File:SDR_AIS.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
===Hardware===&lt;br /&gt;
&lt;br /&gt;
AIS receiver (must support NMEA 0183 output compatible with [http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1371-4-201004-I!!PDF-E.pdf ITU-R 1371])&lt;br /&gt;
&lt;br /&gt;
Some vessels equipped with AIS transponder within reception range&lt;br /&gt;
&lt;br /&gt;
====DIY AIS receiver for less than $20====&lt;br /&gt;
&lt;br /&gt;
USB DVB-T stick supported by SDR software (e.g., chipset RTL2832U and tuner R820T)&lt;br /&gt;
&lt;br /&gt;
[http://nmearouter.com/docs/ais/aerial.html AIS antenna], optional: [http://www.qth.at/oe1xhc/data/coax_collinear_70cm.html waterproof enclosure]&lt;br /&gt;
&lt;br /&gt;
=====Windows PC=====&lt;br /&gt;
&lt;br /&gt;
[http://sdrsharp.com/ SDR#]&lt;br /&gt;
&lt;br /&gt;
[http://groups.yahoo.com/neo/groups/aismon/info AISMon]&lt;br /&gt;
&lt;br /&gt;
[http://nmearouter.com/docs/ais/nmearouter.html NMEARouter]&lt;br /&gt;
&lt;br /&gt;
optional: [http://nmearouter.com/docs/ais/ais_decoder.html AIS Decoder]&lt;br /&gt;
&lt;br /&gt;
'''or'''&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
&lt;br /&gt;
[[File:AIS_Raspberry_Pi.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
[http://sdr.osmocom.org/trac/wiki/rtl-sdr rtl_fm]&lt;br /&gt;
&lt;br /&gt;
[http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/ AIS Decoder]&lt;br /&gt;
&lt;br /&gt;
[http://www.satsignal.eu/raspberry-pi/AIS-receiver.html Installation 1]&lt;br /&gt;
&lt;br /&gt;
[http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/msg12766/#msg12766 Installation 2]&lt;br /&gt;
&lt;br /&gt;
===Software===&lt;br /&gt;
&lt;br /&gt;
AIS4Vera plugin [to be published]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Set up Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download latest Raspian image from: http://www.raspberrypi.org/downloads&lt;br /&gt;
&lt;br /&gt;
Write Raspian image to SD card.&lt;br /&gt;
&lt;br /&gt;
Boot and login.&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
Expand rootfs (sudo raspi-config), then reboot (shutdown -r now).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install Software Defined Radio===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://tubbyaustin.blogspot.de/2013/03/compiling-rtlfm-on-raspberry-pi.html&lt;br /&gt;
&lt;br /&gt;
sudo su -&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install git&lt;br /&gt;
git clone git://git.osmocom.org/rtl-sdr.git&lt;br /&gt;
apt-get install libusb-dev libusb-1.0 libtool cmake&lt;br /&gt;
apt-get install build-essential&lt;br /&gt;
&lt;br /&gt;
cd rtl-sdr/&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ../&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ..&lt;br /&gt;
cp rtl-sdr.rules /etc/udev/rules.d/&lt;br /&gt;
&lt;br /&gt;
Blacklist the kernel module dvb_usb_rtl28xxu by adding the line&lt;br /&gt;
&lt;br /&gt;
blacklist dvb_usb_rtl28xxu&lt;br /&gt;
&lt;br /&gt;
to /etc/modprobe.d/raspi-blacklist.conf and reboot.&lt;br /&gt;
&lt;br /&gt;
Plug in DVB-T stick.&lt;br /&gt;
&lt;br /&gt;
Test the installation:&lt;br /&gt;
&lt;br /&gt;
rtl_test -t&lt;br /&gt;
&lt;br /&gt;
output:&lt;br /&gt;
Found 1 device(s):&lt;br /&gt;
  0:  Generic, RTL2832U, SN: 7777XXXXXXXX&lt;br /&gt;
&lt;br /&gt;
Using device 0: Generic RTL2832U&lt;br /&gt;
Found Rafael Micro R820T tuner&lt;br /&gt;
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6&lt;br /&gt;
Sampling at 2048000 S/s.&lt;br /&gt;
No E4000 tuner found, aborting.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install AIS decoder===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/msg12754/?PHPSESSID=4krr2m8bouu59k146004vov733#msg12754&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install libasound-dev libpulse-dev&lt;br /&gt;
&lt;br /&gt;
wget http://www.aishub.net/downloads/aisdecoder.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar zxvf aisdecoder.tar.gz&lt;br /&gt;
cd aisdecoder&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ../ -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
make&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install startup script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/msg12766/?PHPSESSID=4krr2m8bouu59k146004vov733#msg12766&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install socat&lt;br /&gt;
&lt;br /&gt;
Start AIS decoder and relay AIS messages from UDP port 10110 to TCP server at port 2702:&lt;br /&gt;
&lt;br /&gt;
mkfifo /tmp/aisdata&lt;br /&gt;
rtl_fm -f 161966899 -g 40  -s 48k -r 48k /tmp/aisdata &amp;amp;&lt;br /&gt;
./aisdecoder/build/aisdecoder -h 127.0.0.1 -p 10110 -a file -c mono -d -f /tmp/aisdata 2&amp;gt;&amp;gt; AIS_data.log &amp;amp;&lt;br /&gt;
socat TCP-LISTEN:2702,fork UDP-LISTEN:10110 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install A4V Luup plugin===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extract plugin files, upload plugin files to Vera, create device:&lt;br /&gt;
&lt;br /&gt;
Description         : A4V&lt;br /&gt;
Upnp Device Filename: D_A4V.xml&lt;br /&gt;
Ip Address          : &amp;lt;Raspberry Pi's IP address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload Luup engine.&lt;br /&gt;
&lt;br /&gt;
TCP port 2702 is hard-coded in D_A4V.xml and cannot be changed without changing D_A4V.xml&lt;br /&gt;
(and don't forget to adjust your startup script).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
&lt;br /&gt;
[tbc]&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
&lt;br /&gt;
[http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1371-4-201004-I!!PDF-E.pdf Recommendation ITU-R M.1371-4 (04/2010)]&lt;br /&gt;
&lt;br /&gt;
[http://www.unece.org/fileadmin/DAM/trans/doc/finaldocs/sc3/ECE-TRANS-SC3-176e.pdf International Standard for Tracking and Tracing on Inland Waterways (VTT) - Resolution No. 63 (ECE/TRANS/SC.3/176)]&lt;br /&gt;
&lt;br /&gt;
[http://www.imo.org/blast/blastData.asp?doc_id=13413&amp;amp;filename=289.pdf Guidance on the use of AIS application-specific messages]&lt;br /&gt;
&lt;br /&gt;
[http://www.navcen.uscg.gov/pdf/AIS/IALA_AIS_Guidelines_Vol1_Pt1%20OPS%20%281.3%29.pdf IALA Guideline No. 1028 on the Automatic Identification (AIS) Volume 1, Part I, Operational Issues, Edition 1.3 December 2004]&lt;br /&gt;
&lt;br /&gt;
[http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.585-4-200703-S!!PDF-E.pdf Recommendation ITU-R M.585-4]&lt;br /&gt;
&lt;br /&gt;
[http://www.unece.org/trans/doc/2006/sc3/TRANS-SC3-2006-04a2e.doc European Vessel Identification Number, ECE/TRANS/SC.3/2006/4/Add.2, 19 July 2006]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/AIS_for_Vera</id>
		<title>AIS for Vera</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/AIS_for_Vera"/>
				<updated>2014-02-09T17:30:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
[[File:SDR_AIS.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
===Hardware===&lt;br /&gt;
&lt;br /&gt;
AIS receiver (must support NMEA 0183 output compatible with [http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1371-4-201004-I!!PDF-E.pdf ITU-R 1371])&lt;br /&gt;
&lt;br /&gt;
Some vessels equipped with AIS transponder within reception range&lt;br /&gt;
&lt;br /&gt;
====DIY AIS receiver for less than $20====&lt;br /&gt;
&lt;br /&gt;
USB DVB-T stick supported by SDR software (e.g., chipset RTL2832U and tuner R820T)&lt;br /&gt;
&lt;br /&gt;
[http://nmearouter.com/docs/ais/aerial.html AIS antenna], optional: [http://www.qth.at/oe1xhc/data/coax_collinear_70cm.html waterproof enclosure]&lt;br /&gt;
&lt;br /&gt;
=====Windows PC=====&lt;br /&gt;
&lt;br /&gt;
[http://sdrsharp.com/ SDR#]&lt;br /&gt;
&lt;br /&gt;
[http://groups.yahoo.com/neo/groups/aismon/info AISMon]&lt;br /&gt;
&lt;br /&gt;
[http://nmearouter.com/docs/ais/nmearouter.html NMEARouter]&lt;br /&gt;
&lt;br /&gt;
optional: [http://nmearouter.com/docs/ais/ais_decoder.html AIS Decoder]&lt;br /&gt;
&lt;br /&gt;
'''or'''&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
&lt;br /&gt;
[[File:AIS_Raspberry_Pi.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
[http://sdr.osmocom.org/trac/wiki/rtl-sdr rtl_fm]&lt;br /&gt;
&lt;br /&gt;
[http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/ AIS Decoder]&lt;br /&gt;
&lt;br /&gt;
[http://www.satsignal.eu/raspberry-pi/AIS-receiver.html Installation 1]&lt;br /&gt;
&lt;br /&gt;
[http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/msg12766/#msg12766 Installation 2]&lt;br /&gt;
&lt;br /&gt;
===Software===&lt;br /&gt;
&lt;br /&gt;
AIS4Vera plugin [to be published]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Set up Raspberry Pi===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download latest Raspian image from: http://www.raspberrypi.org/downloads&lt;br /&gt;
&lt;br /&gt;
Write Raspian image to SD card.&lt;br /&gt;
&lt;br /&gt;
Boot and login.&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get upgrade&lt;br /&gt;
&lt;br /&gt;
Expand rootfs (sudo raspi-config), then reboot (shutdown -r now).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install Software Defined Radio===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://tubbyaustin.blogspot.de/2013/03/compiling-rtlfm-on-raspberry-pi.html&lt;br /&gt;
&lt;br /&gt;
sudo su -&lt;br /&gt;
apt-get update&lt;br /&gt;
apt-get install git&lt;br /&gt;
git clone git://git.osmocom.org/rtl-sdr.git&lt;br /&gt;
apt-get install libusb-dev libusb-1.0 libtool cmake&lt;br /&gt;
apt-get install build-essential&lt;br /&gt;
&lt;br /&gt;
cd rtl-sdr/&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ../&lt;br /&gt;
make&lt;br /&gt;
make install&lt;br /&gt;
ldconfig&lt;br /&gt;
&lt;br /&gt;
cd ..&lt;br /&gt;
cp rtl-sdr.rules /etc/udev/rules.d/&lt;br /&gt;
&lt;br /&gt;
Blacklist the kernel module dvb_usb_rtl28xxu by adding the line&lt;br /&gt;
&lt;br /&gt;
blacklist dvb_usb_rtl28xxu&lt;br /&gt;
&lt;br /&gt;
to /etc/modprobe.d/raspi-blacklist.conf and reboot.&lt;br /&gt;
&lt;br /&gt;
Plug in DVB-T stick.&lt;br /&gt;
&lt;br /&gt;
Test the installation:&lt;br /&gt;
&lt;br /&gt;
rtl_test -t&lt;br /&gt;
&lt;br /&gt;
output:&lt;br /&gt;
Found 1 device(s):&lt;br /&gt;
  0:  Generic, RTL2832U, SN: 7777XXXXXXXX&lt;br /&gt;
&lt;br /&gt;
Using device 0: Generic RTL2832U&lt;br /&gt;
Found Rafael Micro R820T tuner&lt;br /&gt;
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7 22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6&lt;br /&gt;
Sampling at 2048000 S/s.&lt;br /&gt;
No E4000 tuner found, aborting.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install AIS decoder===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/msg12754/?PHPSESSID=4krr2m8bouu59k146004vov733#msg12754&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install libasound-dev libpulse-dev&lt;br /&gt;
&lt;br /&gt;
wget http://www.aishub.net/downloads/aisdecoder.tar.gz&lt;br /&gt;
&lt;br /&gt;
tar zxvf aisdecoder.tar.gz&lt;br /&gt;
cd aisdecoder&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build&lt;br /&gt;
cmake ../ -DCMAKE_BUILD_TYPE=Release&lt;br /&gt;
make&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install startup script===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on:&lt;br /&gt;
http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/msg12766/?PHPSESSID=4krr2m8bouu59k146004vov733#msg12766&lt;br /&gt;
&lt;br /&gt;
sudo apt-get install socat&lt;br /&gt;
&lt;br /&gt;
Start AIS decoder and relay AIS messages from UDP port 10110 to TCP server at port 2702:&lt;br /&gt;
&lt;br /&gt;
mkfifo /tmp/aisdata&lt;br /&gt;
rtl_fm -f 161966899 -g 40  -s 48k -r 48k /tmp/aisdata &amp;amp;&lt;br /&gt;
./aisdecoder/build/aisdecoder -h 127.0.0.1 -p 10110 -a file -c mono -d -f /tmp/aisdata 2&amp;gt;&amp;gt; AIS_data.log &amp;amp;&lt;br /&gt;
socat TCP-LISTEN:2702,fork UDP-LISTEN:10110 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Install A4V Luup plugin===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Extract plugin files, upload plugin files to Vera, create device:&lt;br /&gt;
&lt;br /&gt;
Description         : A4V&lt;br /&gt;
Upnp Device Filename: D_A4V.xml&lt;br /&gt;
Ip Address          : &amp;lt;Raspberry Pi's IP address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reload Luup engine.&lt;br /&gt;
&lt;br /&gt;
TCP port 2702 is hard-coded in D_A4V.xml and cannot be changed without changing D_A4V.xml&lt;br /&gt;
(and don't forget to adjust your startup script).&lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
&lt;br /&gt;
[tbc]&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
&lt;br /&gt;
[http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1371-4-201004-I!!PDF-E.pdf Recommendation ITU-R M.1371-4 (04/2010)]&lt;br /&gt;
&lt;br /&gt;
[http://www.unece.org/fileadmin/DAM/trans/doc/finaldocs/sc3/ECE-TRANS-SC3-176e.pdf International Standard for Tracking and Tracing on Inland Waterways (VTT) - Resolution No. 63 (ECE/TRANS/SC.3/176)]&lt;br /&gt;
&lt;br /&gt;
[http://www.imo.org/blast/blastData.asp?doc_id=13413&amp;amp;filename=289.pdf Guidance on the use of AIS application-specific messages]&lt;br /&gt;
&lt;br /&gt;
[http://www.navcen.uscg.gov/pdf/AIS/IALA_AIS_Guidelines_Vol1_Pt1%20OPS%20%281.3%29.pdf IALA Guideline No. 1028 on the Automatic Identification (AIS) Volume 1, Part I, Operational Issues, Edition 1.3 December 2004]&lt;br /&gt;
&lt;br /&gt;
[http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.585-4-200703-S!!PDF-E.pdf Recommendation ITU-R M.585-4]&lt;br /&gt;
&lt;br /&gt;
[http://www.unece.org/trans/doc/2006/sc3/TRANS-SC3-2006-04a2e.doc European Vessel Identification Number, ECE/TRANS/SC.3/2006/4/Add.2, 19 July 2006]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/AIS_for_Vera</id>
		<title>AIS for Vera</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/AIS_for_Vera"/>
				<updated>2014-01-23T23:18:17Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: /* Raspberry Pi (untested) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Hardware]]&lt;br /&gt;
&lt;br /&gt;
[[File:SDR_AIS.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
==Requirements==&lt;br /&gt;
&lt;br /&gt;
===Hardware===&lt;br /&gt;
&lt;br /&gt;
AIS receiver (must support NMEA 0183 output compatible with [http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1371-4-201004-I!!PDF-E.pdf ITU-R 1371])&lt;br /&gt;
&lt;br /&gt;
Some vessels equipped with AIS transponder within reception range&lt;br /&gt;
&lt;br /&gt;
====DIY AIS receiver for less than $20====&lt;br /&gt;
&lt;br /&gt;
USB DVB-T stick supported by SDR software (e.g., chipset RTL2832U and tuner R820T)&lt;br /&gt;
&lt;br /&gt;
[http://nmearouter.com/docs/ais/aerial.html AIS antenna], optional: [http://www.qth.at/oe1xhc/data/coax_collinear_70cm.html waterproof enclosure]&lt;br /&gt;
&lt;br /&gt;
=====Windows PC=====&lt;br /&gt;
&lt;br /&gt;
[http://sdrsharp.com/ SDR#]&lt;br /&gt;
&lt;br /&gt;
[http://groups.yahoo.com/neo/groups/aismon/info AISMon]&lt;br /&gt;
&lt;br /&gt;
[http://nmearouter.com/docs/ais/nmearouter.html NMEARouter]&lt;br /&gt;
&lt;br /&gt;
optional: [http://nmearouter.com/docs/ais/ais_decoder.html AIS Decoder]&lt;br /&gt;
&lt;br /&gt;
'''or'''&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi=====&lt;br /&gt;
&lt;br /&gt;
[[File:AIS_Raspberry_Pi.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
[http://sdr.osmocom.org/trac/wiki/rtl-sdr rtl_fm]&lt;br /&gt;
&lt;br /&gt;
[http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/ AIS Decoder]&lt;br /&gt;
&lt;br /&gt;
[http://www.satsignal.eu/raspberry-pi/AIS-receiver.html Installation 1]&lt;br /&gt;
&lt;br /&gt;
[http://forum.aishub.net/ais-decoder/ais-decoder-beta-release/msg12766/#msg12766 Installation 2]&lt;br /&gt;
&lt;br /&gt;
===Software===&lt;br /&gt;
&lt;br /&gt;
AIS4Vera plugin [to be published]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
[tbc]   &lt;br /&gt;
&lt;br /&gt;
==Limitations==&lt;br /&gt;
&lt;br /&gt;
[tbc]&lt;br /&gt;
&lt;br /&gt;
==Further reading==&lt;br /&gt;
&lt;br /&gt;
[http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.1371-4-201004-I!!PDF-E.pdf Recommendation ITU-R M.1371-4 (04/2010)]&lt;br /&gt;
&lt;br /&gt;
[http://www.unece.org/fileadmin/DAM/trans/doc/finaldocs/sc3/ECE-TRANS-SC3-176e.pdf International Standard for Tracking and Tracing on Inland Waterways (VTT) - Resolution No. 63 (ECE/TRANS/SC.3/176)]&lt;br /&gt;
&lt;br /&gt;
[http://www.imo.org/blast/blastData.asp?doc_id=13413&amp;amp;filename=289.pdf Guidance on the use of AIS application-specific messages]&lt;br /&gt;
&lt;br /&gt;
[http://www.navcen.uscg.gov/pdf/AIS/IALA_AIS_Guidelines_Vol1_Pt1%20OPS%20%281.3%29.pdf IALA Guideline No. 1028 on the Automatic Identification (AIS) Volume 1, Part I, Operational Issues, Edition 1.3 December 2004]&lt;br /&gt;
&lt;br /&gt;
[http://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.585-4-200703-S!!PDF-E.pdf Recommendation ITU-R M.585-4]&lt;br /&gt;
&lt;br /&gt;
[http://www.unece.org/trans/doc/2006/sc3/TRANS-SC3-2006-04a2e.doc European Vessel Identification Number, ECE/TRANS/SC.3/2006/4/Add.2, 19 July 2006]&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php/File:AIS_Raspberry_Pi.jpg</id>
		<title>File:AIS Raspberry Pi.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php/File:AIS_Raspberry_Pi.jpg"/>
				<updated>2014-01-23T23:07:34Z</updated>
		
		<summary type="html">&lt;p&gt;Ap15e: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ap15e</name></author>	</entry>

	</feed>