<?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/index.php?action=history&amp;feed=atom&amp;title=Luup_Plugins</id>
		<title>Luup Plugins - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mios.com/index.php?action=history&amp;feed=atom&amp;title=Luup_Plugins"/>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php?title=Luup_Plugins&amp;action=history"/>
		<updated>2026-04-17T19:00:59Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.8</generator>

	<entry>
		<id>http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=6398&amp;oldid=prev</id>
		<title>A-lurker at 04:55, 13 June 2013</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=6398&amp;oldid=prev"/>
				<updated>2013-06-13T04:55:22Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 04:55, 13 June 2013&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:Development]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:Development]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If you didn't already come from the [[Luup_Intro]] page, start there to see what Luup Plugins are intended for. If you want to see what the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;device &lt;/del&gt;files do, then go to the [[Plugin_Creation_Tutorial|Plugin Creation Tutorial]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If you didn't already come from the [[Luup_Intro]] page, start there to see what Luup Plugins are intended for. If you want to see what the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Plugin &lt;/ins&gt;files do, then go to the [[Plugin_Creation_Tutorial|Plugin Creation Tutorial]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Introduction to UPnP==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Introduction to UPnP==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key micasaverde_wiki:diff:version:1.11a:oldid:6397:newid:6398 --&gt;
&lt;/table&gt;</summary>
		<author><name>A-lurker</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=6397&amp;oldid=prev</id>
		<title>A-lurker at 04:54, 13 June 2013</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=6397&amp;oldid=prev"/>
				<updated>2013-06-13T04:54:56Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 04:54, 13 June 2013&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:Development]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:Development]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If you didn't already come from the [[Luup_Intro]] page, start there to see what Luup Plugins are intended for.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If you didn't already come from the [[Luup_Intro]] page, start there to see what Luup Plugins are intended for. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;If you want to see what the device files do, then go to the [[Plugin_Creation_Tutorial|Plugin Creation Tutorial]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Introduction to UPnP==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Introduction to UPnP==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key micasaverde_wiki:diff:version:1.11a:oldid:3798:newid:6397 --&gt;
&lt;/table&gt;</summary>
		<author><name>A-lurker</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=3798&amp;oldid=prev</id>
		<title>DaveL17: Fixes typo.  Luup instead of Loop.</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=3798&amp;oldid=prev"/>
				<updated>2011-11-22T02:13:12Z</updated>
		
		<summary type="html">&lt;p&gt;Fixes typo.  Luup instead of Loop.&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 02:13, 22 November 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 16:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 16:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Introduction to Luup plugins ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Introduction to Luup plugins ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The UPnP specifications define what the XML files look like and how a UPnP Control Point talks to a UPnP Device to get the current Variables and to send the device Actions. But that's where UPnP ends; it does not define the implementation, which is to say, how the device will implement the action. Normally UPnP devices write programming code to handle the implementation. Luup instead lets you store the implementation in a 3rd type of XML file we call the implementation file. In the implementation file you tell Luup what to do when it receives an action from a UPnP Control Point. The implementation file can contain infrared codes which &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Loop &lt;/del&gt;will send when the action comes in, binary data which Luup will send out a serial port, or some Lua code that Luup will run. The Lua code can set the current value of the variables for the device. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The UPnP specifications define what the XML files look like and how a UPnP Control Point talks to a UPnP Device to get the current Variables and to send the device Actions. But that's where UPnP ends; it does not define the implementation, which is to say, how the device will implement the action. Normally UPnP devices write programming code to handle the implementation. Luup instead lets you store the implementation in a 3rd type of XML file we call the implementation file. In the implementation file you tell Luup what to do when it receives an action from a UPnP Control Point. The implementation file can contain infrared codes which &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Luup &lt;/ins&gt;will send when the action comes in, binary data which Luup will send out a serial port, or some Lua code that Luup will run. The Lua code can set the current value of the variables for the device. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Luup handles all the complexities of the UPnP protocol. And the web-based Luup plugin generator handles all the complexities of XML (coming soon). So all you do is fill in the form which has basic information about your device, like the manufacturer and model, and the generator creates the UPnP Device specification for you. You can then check off which services your device implements, such as &amp;quot;SwitchPower&amp;quot; if it's something that can be turned on and off. If your device has new capabilities that aren't already in an existing service, the generator let's you create a new service by describing the actions your device implements, like &amp;quot;Brightness Up&amp;quot;, or &amp;quot;Sensor Arm&amp;quot;, etc. Lastly, the web generator let's you specify what to do when the action comes in. This is saved in the implementation file. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Luup handles all the complexities of the UPnP protocol. And the web-based Luup plugin generator handles all the complexities of XML (coming soon). So all you do is fill in the form which has basic information about your device, like the manufacturer and model, and the generator creates the UPnP Device specification for you. You can then check off which services your device implements, such as &amp;quot;SwitchPower&amp;quot; if it's something that can be turned on and off. If your device has new capabilities that aren't already in an existing service, the generator let's you create a new service by describing the actions your device implements, like &amp;quot;Brightness Up&amp;quot;, or &amp;quot;Sensor Arm&amp;quot;, etc. Lastly, the web generator let's you specify what to do when the action comes in. This is saved in the implementation file. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key micasaverde_wiki:diff:version:1.11a:oldid:2248:newid:3798 --&gt;
&lt;/table&gt;</summary>
		<author><name>DaveL17</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=2248&amp;oldid=prev</id>
		<title>Javier: Category:Development</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=2248&amp;oldid=prev"/>
				<updated>2010-04-13T05:09:24Z</updated>
		
		<summary type="html">&lt;p&gt;Category:Development&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 05:09, 13 April 2010&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Development]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If you didn't already come from the [[Luup_Intro]] page, start there to see what Luup Plugins are intended for.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;If you didn't already come from the [[Luup_Intro]] page, start there to see what Luup Plugins are intended for.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key micasaverde_wiki:diff:version:1.11a:oldid:1386:newid:2248 --&gt;
&lt;/table&gt;</summary>
		<author><name>Javier</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=1386&amp;oldid=prev</id>
		<title>LibraSun at 16:36, 1 August 2009</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=1386&amp;oldid=prev"/>
				<updated>2009-08-01T16:36:44Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 16:36, 1 August 2009&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 13:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 13:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A list of UPnP ratified device and service files is available at [http://upnp.org/resources/default.asp] and the .zip file there includes the complete specs for UPnP in the document: UPnP-arch-DeviceArchitecture-v1 1-20081015.pdf&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A list of UPnP ratified device and service files is available at [http://upnp.org/resources/default.asp] and the .zip file there includes the complete specs for UPnP in the document: UPnP-arch-DeviceArchitecture-v1 1-20081015.pdf&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Introduction to Luup plugins==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Introduction to Luup plugins ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The UPnP specifications define what the XML files look like and how a UPnP Control Point talks to a UPnP Device to get the current Variables and to send the device Actions. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;But that's where UPnP ends; it does not define the implementation, which is to say, how the device will implement the action. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;Normally UPnP devices write programming code to handle the implementation. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;Luup instead lets you store the implementation in a 3rd type of XML file we call the implementation file. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;In the implementation file you tell Luup what to do when it receives an action from a UPnP Control Point. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;The implementation file can contain infrared codes which Loop will send when the action comes in, binary data which Luup will send out a serial port, or some Lua code that Luup will run. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;The Lua code can set the current value of the variables for the device.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The UPnP specifications define what the XML files look like and how a UPnP Control Point talks to a UPnP Device to get the current Variables and to send the device Actions. But that's where UPnP ends; it does not define the implementation, which is to say, how the device will implement the action. Normally UPnP devices write programming code to handle the implementation. Luup instead lets you store the implementation in a 3rd type of XML file we call the implementation file. In the implementation file you tell Luup what to do when it receives an action from a UPnP Control Point. The implementation file can contain infrared codes which Loop will send when the action comes in, binary data which Luup will send out a serial port, or some Lua code that Luup will run. The Lua code can set the current value of the variables for the device. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Luup handles all the complexities of the UPnP protocol. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;And the web-based Luup plugin generator handles all the complexities of XML (coming soon). &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;So all you do is fill in the form which has basic information about your device, like the manufacturer and model, and the generator creates the UPnP Device specification for you. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;You can then check off which services your device implements, such as &amp;quot;SwitchPower&amp;quot; if it's something that can be turned on and off. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;If your device has new capabilities that aren't already in an existing service, the generator let's you create a new service by describing the actions your device implements, like &amp;quot;Brightness Up&amp;quot;, or &amp;quot;Sensor Arm&amp;quot;, etc. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;Lastly, the web generator let's you specify what to do when the action comes in. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;This is saved in the implementation file.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Luup handles all the complexities of the UPnP protocol. And the web-based Luup plugin generator handles all the complexities of XML (coming soon). So all you do is fill in the form which has basic information about your device, like the manufacturer and model, and the generator creates the UPnP Device specification for you. You can then check off which services your device implements, such as &amp;quot;SwitchPower&amp;quot; if it's something that can be turned on and off. If your device has new capabilities that aren't already in an existing service, the generator let's you create a new service by describing the actions your device implements, like &amp;quot;Brightness Up&amp;quot;, or &amp;quot;Sensor Arm&amp;quot;, etc. Lastly, the web generator let's you specify what to do when the action comes in. This is saved in the implementation file. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;There is not necessarily a 1:1 relationship between an implementation file and either device or specification files. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;For example, you may create a device which has some of the Lua code in one implementation file, and some other Lua code in another implementation file. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;The same implementation file can contain both infrared codes, serial data, and Lua code.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;There is not necessarily a 1:1 relationship between an implementation file and either device or specification files. For example, you may create a device which has some of the Lua code in one implementation file, and some other Lua code in another implementation file. The same implementation file can contain both infrared codes, serial data, and Lua code. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Luup also supports the concept of parent-child, or embedded, devices. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;For example, the Global Cache gc-100 is an ethernet device that contains a couple serial ports, some relay switches, some infrared transmit ports, and some on/off input sensors. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;Each relay/sensor/ir/serial port is logically a separate device, since each one can do something distinct. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;One relay could be connected to a doorbell, the other to a siren. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;So, in Luup there is one parent device called the &amp;quot;gc100&amp;quot;, which actually doesn't have any UPnP services at all, but it has child devices for each of the sensors/relays/ports. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;The relays are logically like on/off switches, so rather than creating our own service, we use the standard UPnP device for a binary switch with the standard UPnP service &amp;quot;SwitchPower&amp;quot;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;This way any UPnP control point will see the relays and, without any custom work for the gc100, the control point can show them to the user as an on/off switch. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;There are other device+service files for the inputs and ports. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;In Luup you have the concept of a parent device being able to be responsible for the child devices. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;So, the way we implemented the gc100 is that the parent device has no UPnP services, but it does have a single implementation file &amp;quot;I_GC100.xml&amp;quot;, which tells Luup how to implement all the actions from all the services that &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;it's &lt;/del&gt;child devices may have. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;So in this case, there is one implementation file for many devices and services. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;We could have broken this into separate implemenation files&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;, &lt;/del&gt;for example one for each service. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;However since the implementation is specific to the gc100 and not likely to be re-usable with another device, we just put all the gc100 implementation in a single file. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;You may want to add support for some other type of on/off switch and you could do that by using the same standard UPnP device+specification files, but instead you would create your own implementation file. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;The UPnP Control Point will never know the difference; it just sees a standard a UPnP light switch device and sends the 'on/off' actions the same way.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Luup also supports the concept of parent-child, or embedded, devices. For example, the Global Cache gc-100 is an ethernet device that contains a couple serial ports, some relay switches, some infrared transmit ports, and some on/off input sensors. Each relay/sensor/ir/serial port is logically a separate device, since each one can do something distinct. One relay could be connected to a doorbell, the other to a siren. So, in Luup there is one parent device called the &amp;quot;gc100&amp;quot;, which actually doesn't have any UPnP services at all, but it has child devices for each of the sensors/relays/ports. The relays are logically like on/off switches, so rather than creating our own service, we use the standard UPnP device for a binary switch with the standard UPnP service &amp;quot;SwitchPower&amp;quot;. This way any UPnP control point will see the relays and, without any custom work for the gc100, the control point can show them to the user as an on/off switch. There are other device+service files for the inputs and ports. In Luup you have the concept of a parent device being able to be responsible for the child devices. So, the way we implemented the gc100 is that the parent device has no UPnP services, but it does have a single implementation file &amp;quot;I_GC100.xml&amp;quot;, which tells Luup how to implement all the actions from all the services that &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;its &lt;/ins&gt;child devices may have. So in this case, there is one implementation file for many devices and services. We could have broken this into separate implemenation files&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;; &lt;/ins&gt;for example&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;, &lt;/ins&gt;one for each service. However since the implementation is specific to the gc100 and not likely to be re-usable with another device, we just put all the gc100 implementation in a single file. You may want to add support for some other type of on/off switch and you could do that by using the same standard UPnP device+specification files, but instead you would create your own implementation file. The UPnP Control Point will never know the difference; it just sees a standard a UPnP light switch device and sends the 'on/off' actions the same way.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==IO Port==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==IO Port==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key micasaverde_wiki:diff:version:1.11a:oldid:1160:newid:1386 --&gt;
&lt;/table&gt;</summary>
		<author><name>LibraSun</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=1160&amp;oldid=prev</id>
		<title>Micasaverde: /* Introduction to UPnP */</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=1160&amp;oldid=prev"/>
				<updated>2009-06-12T18:45:29Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Introduction to UPnP&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 18:45, 12 June 2009&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The UPnP forum is an industry consortium that approves specifications for UPnP devices.&amp;#160; They have already approved standards for SwitchPower, Dimming, and so on.&amp;#160; We will not want to modify these device or service specifications.&amp;#160; We use them as they were ratified by the committee because that is what UPnP Control Points will be expecting.&amp;#160; However there are lots of devices which the UPnP forum has not yet come up with a standard for.&amp;#160; In this case each vendor can come up with his own solution.&amp;#160; However, if there is an existing device+service specification that is already in use, particularly by a large company in the industry, we should use their device+service specifications (ie XML files) whenever possible since there are probably already UPnP Control Points out there that know how to talk to them.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;The UPnP forum is an industry consortium that approves specifications for UPnP devices.&amp;#160; They have already approved standards for SwitchPower, Dimming, and so on.&amp;#160; We will not want to modify these device or service specifications.&amp;#160; We use them as they were ratified by the committee because that is what UPnP Control Points will be expecting.&amp;#160; However there are lots of devices which the UPnP forum has not yet come up with a standard for.&amp;#160; In this case each vendor can come up with his own solution.&amp;#160; However, if there is an existing device+service specification that is already in use, particularly by a large company in the industry, we should use their device+service specifications (ie XML files) whenever possible since there are probably already UPnP Control Points out there that know how to talk to them.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;A list of UPnP ratified device and service files is available at [http://upnp.org/resources/default.asp] and the .zip file there includes the complete specs for UPnP in the document: UPnP-arch-DeviceArchitecture-v1 1-20081015.pdf&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Introduction to Luup plugins==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Introduction to Luup plugins==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key micasaverde_wiki:diff:version:1.11a:oldid:1157:newid:1160 --&gt;
&lt;/table&gt;</summary>
		<author><name>Micasaverde</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=1157&amp;oldid=prev</id>
		<title>Micasaverde: /* IO Port */</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=1157&amp;oldid=prev"/>
				<updated>2009-06-12T16:52:44Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;IO Port&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 16:52, 12 June 2009&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==IO Port==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==IO Port==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Most Luup plugins are simply interfaces to talk to an external piece of hardware using infrared (a/v devices like TV's), RS232 (high-end a/v gear, alarm panels, etc.), Network (IP cameras and other IP devices), and a handful of other connections like RS485.&amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;In this case the Luup plugin will effectively act as a translator to go from UPnP to the device's native communication (i/r, RS232, etc.).&amp;#160; All these communication methods (i/r, rs232, network) can be thought of as 'input/output', or IO, because you get data in from the device and send data out to the device.&amp;#160; Infrared is often output-only since generally you can only send i/r codes to the device.&amp;#160; If you're writing a device that does not talk to some piece of external hardware this section doesn't apply &lt;/del&gt;to &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;you.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Most Luup plugins are simply interfaces to talk to an external piece of hardware using infrared (a/v devices like TV's), RS232 (high-end a/v gear, alarm panels, etc.), Network (IP cameras and other IP devices), and a handful of other connections like RS485.&amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;See [[Luup_IO_Device]] &lt;/ins&gt;to &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;learn how &lt;/ins&gt;Luup handles &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;automatically sending data &lt;/ins&gt;to and &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;receiving &lt;/ins&gt;data &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;from these &lt;/ins&gt;devices.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;The &lt;/del&gt;Luup &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;engine &lt;/del&gt;handles &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;all the low-level i/o.&amp;#160; Your plugin only needs &lt;/del&gt;to &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;specify what type of i/o to use.&amp;#160; Then, within your plugin, when you want to send something to the device you use one of the Luup send commands, like lu_iop_send.&amp;#160; If the device is using infrared, whatever you send needs to be in pronto format.&amp;#160; If the device is serial/rs232 or network based, you can send anything &lt;/del&gt;and &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Luup will send this &lt;/del&gt;data &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;to the device.&amp;#160; Generally serial and network &lt;/del&gt;devices &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;have a low-level protocol to organize the data you send/receive into 'chunks'.&amp;#160; The most basic low-level protocol is to send/receive text commands that end with a carriage return+line feed (ie ENTER), such as: PowerOn [ENTER] ChannelUp [ENTER].&amp;#160; Luup handles the low-level protocol for you, meaning that any incoming data is automatically divided into 'chunks' of discrete commands, and handles adding separating characters like carriage return+line feed to anything you send.&amp;#160; This makes it much faster for you to write a plugin&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==The Luup configuration file==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==The Luup configuration file==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key micasaverde_wiki:diff:version:1.11a:oldid:1154:newid:1157 --&gt;
&lt;/table&gt;</summary>
		<author><name>Micasaverde</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=1154&amp;oldid=prev</id>
		<title>Micasaverde: /* The Luup configuration file */</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=1154&amp;oldid=prev"/>
				<updated>2009-06-12T16:50:04Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;The Luup configuration file&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 16:50, 12 June 2009&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 29:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 29:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==The Luup configuration file==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==The Luup configuration file==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Often times plugins need configuration data that is unique &lt;/del&gt;to &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;each user.&amp;#160; Generally I/O devices will have configuration &lt;/del&gt;data&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;, such as the IP address if it's a network device, the baud rate and port number &lt;/del&gt;for &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;a serial device, and the i/r transmitter to use.&amp;#160; This configuration data is never written into &lt;/del&gt;your plugin &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;since that would mean the plugin needed to be modified for each user.&amp;#160; Rather&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;the plugin defines what type of configuration data it needs, and the Luup user interface let's the user specify this information, which gets saved in the Luup configuration file.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;See [[Luup_Configuration_File]] &lt;/ins&gt;to &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;learn how &lt;/ins&gt;data for your &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Luup &lt;/ins&gt;plugin, like the IP address, baud rate, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;values &lt;/ins&gt;of UPnP Variables, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;etc&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;, are stored&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;You can view your configuration file by opening your web browser and going to the page: http://myip:49451/data_request?id=user_data&amp;amp;output_format=xml where &amp;quot;myip&amp;quot; is the IP address of your Vera.&amp;#160; Use the Firefox web browser since it has a built-in XML viewer.&amp;#160; Alternatively you can change the 'xml' at the end to 'json' to view the configuration file in it's native JSON format, and the web site [http://jsonlint.com/ jsonlint.com] will format the JSON data nicely so it's easy to read.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Vera's web-based user interface is the normal way the user specifies configuration data.&amp;#160; When the user goes to the 'devices' tab and adds a device, specifies what room it's in along with other options &lt;/del&gt;like the IP address, baud rate, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;etc., this is all stored in the configuration file.&amp;#160; The configuration file also stores the current value &lt;/del&gt;of &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;the &lt;/del&gt;UPnP Variables, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;like the status of a light switch being on or off&lt;/del&gt;. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; Your Luup plugin has access to all the data in the configuration file&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==The web-based Luup plugin generator==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==The web-based Luup plugin generator==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is coming soon, and will allow you to create Luup plugins without knowledge of XML or UPnP using a fill-in-the-blanks web form and an infrared learning tool for control audio/video devices.&amp;#160; In the meantime, see [[Luup_Plugins_ByHand]] to see how to create the plugins by hand.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is coming soon, and will allow you to create Luup plugins without knowledge of XML or UPnP using a fill-in-the-blanks web form and an infrared learning tool for control audio/video devices.&amp;#160; In the meantime, see [[Luup_Plugins_ByHand]] to see how to create the plugins by hand.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key micasaverde_wiki:diff:version:1.11a:oldid:1153:newid:1154 --&gt;
&lt;/table&gt;</summary>
		<author><name>Micasaverde</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=1153&amp;oldid=prev</id>
		<title>Micasaverde at 16:48, 12 June 2009</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=1153&amp;oldid=prev"/>
				<updated>2009-06-12T16:48:19Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 16:48, 12 June 2009&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 20:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 20:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Luup also supports the concept of parent-child, or embedded, devices.&amp;#160; For example, the Global Cache gc-100 is an ethernet device that contains a couple serial ports, some relay switches, some infrared transmit ports, and some on/off input sensors.&amp;#160; Each relay/sensor/ir/serial port is logically a separate device, since each one can do something distinct.&amp;#160; One relay could be connected to a doorbell, the other to a siren.&amp;#160; So, in Luup there is one parent device called the &amp;quot;gc100&amp;quot;, which actually doesn't have any UPnP services at all, but it has child devices for each of the sensors/relays/ports.&amp;#160; The relays are logically like on/off switches, so rather than creating our own service, we use the standard UPnP device for a binary switch with the standard UPnP service &amp;quot;SwitchPower&amp;quot;.&amp;#160; This way any UPnP control point will see the relays and, without any custom work for the gc100, the control point can show them to the user as an on/off switch.&amp;#160; There are other device+service files for the inputs and ports.&amp;#160; In Luup you have the concept of a parent device being able to be responsible for the child devices.&amp;#160; So, the way we implemented the gc100 is that the parent device has no UPnP services, but it does have a single implementation file &amp;quot;I_GC100.xml&amp;quot;, which tells Luup how to implement all the actions from all the services that it's child devices may have.&amp;#160; So in this case, there is one implementation file for many devices and services.&amp;#160; We could have broken this into separate implemenation files, for example one for each service.&amp;#160; However since the implementation is specific to the gc100 and not likely to be re-usable with another device, we just put all the gc100 implementation in a single file.&amp;#160; You may want to add support for some other type of on/off switch and you could do that by using the same standard UPnP device+specification files, but instead you would create your own implementation file.&amp;#160; The UPnP Control Point will never know the difference; it just sees a standard a UPnP light switch device and sends the 'on/off' actions the same way.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Luup also supports the concept of parent-child, or embedded, devices.&amp;#160; For example, the Global Cache gc-100 is an ethernet device that contains a couple serial ports, some relay switches, some infrared transmit ports, and some on/off input sensors.&amp;#160; Each relay/sensor/ir/serial port is logically a separate device, since each one can do something distinct.&amp;#160; One relay could be connected to a doorbell, the other to a siren.&amp;#160; So, in Luup there is one parent device called the &amp;quot;gc100&amp;quot;, which actually doesn't have any UPnP services at all, but it has child devices for each of the sensors/relays/ports.&amp;#160; The relays are logically like on/off switches, so rather than creating our own service, we use the standard UPnP device for a binary switch with the standard UPnP service &amp;quot;SwitchPower&amp;quot;.&amp;#160; This way any UPnP control point will see the relays and, without any custom work for the gc100, the control point can show them to the user as an on/off switch.&amp;#160; There are other device+service files for the inputs and ports.&amp;#160; In Luup you have the concept of a parent device being able to be responsible for the child devices.&amp;#160; So, the way we implemented the gc100 is that the parent device has no UPnP services, but it does have a single implementation file &amp;quot;I_GC100.xml&amp;quot;, which tells Luup how to implement all the actions from all the services that it's child devices may have.&amp;#160; So in this case, there is one implementation file for many devices and services.&amp;#160; We could have broken this into separate implemenation files, for example one for each service.&amp;#160; However since the implementation is specific to the gc100 and not likely to be re-usable with another device, we just put all the gc100 implementation in a single file.&amp;#160; You may want to add support for some other type of on/off switch and you could do that by using the same standard UPnP device+specification files, but instead you would create your own implementation file.&amp;#160; The UPnP Control Point will never know the difference; it just sees a standard a UPnP light switch device and sends the 'on/off' actions the same way.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;==IO Port==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Most Luup plugins are simply interfaces to talk to an external piece of hardware using infrared (a/v devices like TV's), RS232 (high-end a/v gear, alarm panels, etc.), Network (IP cameras and other IP devices), and a handful of other connections like RS485.&amp;#160; In this case the Luup plugin will effectively act as a translator to go from UPnP to the device's native communication (i/r, RS232, etc.).&amp;#160; All these communication methods (i/r, rs232, network) can be thought of as 'input/output', or IO, because you get data in from the device and send data out to the device.&amp;#160; Infrared is often output-only since generally you can only send i/r codes to the device.&amp;#160; If you're writing a device that does not talk to some piece of external hardware this section doesn't apply to you.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;The Luup engine handles all the low-level i/o.&amp;#160; Your plugin only needs to specify what type of i/o to use.&amp;#160; Then, within your plugin, when you want to send something to the device you use one of the Luup send commands, like lu_iop_send.&amp;#160; If the device is using infrared, whatever you send needs to be in pronto format.&amp;#160; If the device is serial/rs232 or network based, you can send anything and Luup will send this data to the device.&amp;#160; Generally serial and network devices have a low-level protocol to organize the data you send/receive into 'chunks'.&amp;#160; The most basic low-level protocol is to send/receive text commands that end with a carriage return+line feed (ie ENTER), such as: PowerOn [ENTER] ChannelUp [ENTER].&amp;#160; Luup handles the low-level protocol for you, meaning that any incoming data is automatically divided into 'chunks' of discrete commands, and handles adding separating characters like carriage return+line feed to anything you send.&amp;#160; This makes it much faster for you to write a plugin.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;==The Luup configuration file==&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Often times plugins need configuration data that is unique to each user.&amp;#160; Generally I/O devices will have configuration data, such as the IP address if it's a network device, the baud rate and port number for a serial device, and the i/r transmitter to use.&amp;#160; This configuration data is never written into your plugin since that would mean the plugin needed to be modified for each user.&amp;#160; Rather, the plugin defines what type of configuration data it needs, and the Luup user interface let's the user specify this information, which gets saved in the Luup configuration file.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;You can view your configuration file by opening your web browser and going to the page: http://myip:49451/data_request?id=user_data&amp;amp;output_format=xml where &amp;quot;myip&amp;quot; is the IP address of your Vera.&amp;#160; Use the Firefox web browser since it has a built-in XML viewer.&amp;#160; Alternatively you can change the 'xml' at the end to 'json' to view the configuration file in it's native JSON format, and the web site [http://jsonlint.com/ jsonlint.com] will format the JSON data nicely so it's easy to read.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;Vera's web-based user interface is the normal way the user specifies configuration data.&amp;#160; When the user goes to the 'devices' tab and adds a device, specifies what room it's in along with other options like the IP address, baud rate, etc., this is all stored in the configuration file.&amp;#160; The configuration file also stores the current value of the UPnP Variables, like the status of a light switch being on or off.&amp;#160; Your Luup plugin has access to all the data in the configuration file.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==The web-based Luup plugin generator==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==The web-based Luup plugin generator==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is coming soon, and will allow you to create Luup plugins without knowledge of XML or UPnP using a fill-in-the-blanks web form and an infrared learning tool for control audio/video devices.&amp;#160; In the meantime, see [[Luup_Plugins_ByHand]] to see how to create the plugins by hand.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is coming soon, and will allow you to create Luup plugins without knowledge of XML or UPnP using a fill-in-the-blanks web form and an infrared learning tool for control audio/video devices.&amp;#160; In the meantime, see [[Luup_Plugins_ByHand]] to see how to create the plugins by hand.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key micasaverde_wiki:diff:version:1.11a:oldid:1150:newid:1153 --&gt;
&lt;/table&gt;</summary>
		<author><name>Micasaverde</name></author>	</entry>

	<entry>
		<id>http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=1150&amp;oldid=prev</id>
		<title>Micasaverde at 16:15, 12 June 2009</title>
		<link rel="alternate" type="text/html" href="http://wiki.mios.com/index.php?title=Luup_Plugins&amp;diff=1150&amp;oldid=prev"/>
				<updated>2009-06-12T16:15:55Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 16:15, 12 June 2009&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Introduction to UPnP==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==Introduction to UPnP==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;UPnP (Universal plug and play) is the industry-standard way to communicate with devices.&amp;#160; In UPnP the device that is doing the controlling (ie the remote control) is called a UPnP Control Point.&amp;#160; The device which can be controlled is the UPnP Device.&amp;#160; You describe the capabilities of a UPnP Device and tell the UPnP Control Points what the device can do by creating 2 types of &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;XML &lt;/del&gt;files: 1) a single device specification file which has basic information on your device such as the manufacturer and model, and 2) one or more service specification files which describe a service.&amp;#160; In UPnP a &amp;quot;service&amp;quot; is a list of variables and actions.&amp;#160; Variables describe the current state of the device and actions describe what you can do with the device.&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;UPnP (Universal plug and play) is the industry-standard way to communicate with devices&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;, see also [http://en.wikipedia.org/wiki/Upnp wikipedia] and [http://upnp.org upnp.org]&lt;/ins&gt;.&amp;#160; In UPnP the device that is doing the controlling (ie the remote control) is called a UPnP Control Point.&amp;#160; The device which can be controlled is the UPnP Device.&amp;#160; You describe the capabilities of a UPnP Device and tell the UPnP Control Points what the device can do by creating 2 types of &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;data &lt;/ins&gt;files &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;in [http://en.wikipedia.org/wiki/Xml XML] format&lt;/ins&gt;: 1) a single device specification file which has basic information on your device such as the manufacturer and model, and 2) one or more service specification files which describe a service.&amp;#160; In UPnP a &amp;quot;service&amp;quot; is a list of variables and actions.&amp;#160; Variables describe the current state of the device and actions describe what you can do with the device.&amp;#160; &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;For example, a common service is &amp;quot;SwitchPower&amp;quot;.&amp;#160; This service describes the ability to turn something on and off.&amp;#160; The main variable in the service is called &amp;quot;Status&amp;quot;, and it has a value of 0 if the device is currently off or 1 if it's currently on.&amp;#160; The main action in the service is called &amp;quot;SetTarget&amp;quot; which is how you turn the power on or off.&amp;#160; The &amp;quot;SetTarget&amp;quot; action has an argument called &amp;quot;newTargetValue&amp;quot; which can be either 0 or 1 to indicate if the device should be turned on or off.&amp;#160; Variables, then, are outgoing data from the UPnP Device to the UPnP Control Point, and actions are incoming data from the UPnP Control Point to the UPnP Device.&amp;#160; Let's say your UPnP device is a light switch.&amp;#160; The UPnP Control Point is perhaps a touch-screen web pad, and it will display an icon of a light switch to let the user control your UPnP light switch.&amp;#160; The Control Point will first ask the UPnP light switch for the current value of the &amp;quot;Status&amp;quot; variable.&amp;#160; If the variable is currently 1, the Control Point will display the light switch in the 'on' position.&amp;#160; Now, if the user hits the 'off' button on the UPnP control point it sends the UPnP light switch a &amp;quot;SetTarget&amp;quot; action with the argument &amp;quot;newTargetValue&amp;quot; equals 0.&amp;#160; After the light switch successfully turns off, the variable &amp;quot;Status&amp;quot; will change to 0 so anytime a UPnP control point that wants to know if the light is on or off can ask the light switch for the current value of the &amp;quot;Status&amp;quot; variable.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;For example, a common service is &amp;quot;SwitchPower&amp;quot;.&amp;#160; This service describes the ability to turn something on and off.&amp;#160; The main variable in the service is called &amp;quot;Status&amp;quot;, and it has a value of 0 if the device is currently off or 1 if it's currently on.&amp;#160; The main action in the service is called &amp;quot;SetTarget&amp;quot; which is how you turn the power on or off.&amp;#160; The &amp;quot;SetTarget&amp;quot; action has an argument called &amp;quot;newTargetValue&amp;quot; which can be either 0 or 1 to indicate if the device should be turned on or off.&amp;#160; Variables, then, are outgoing data from the UPnP Device to the UPnP Control Point, and actions are incoming data from the UPnP Control Point to the UPnP Device.&amp;#160; Let's say your UPnP device is a light switch.&amp;#160; The UPnP Control Point is perhaps a touch-screen web pad, and it will display an icon of a light switch to let the user control your UPnP light switch.&amp;#160; The Control Point will first ask the UPnP light switch for the current value of the &amp;quot;Status&amp;quot; variable.&amp;#160; If the variable is currently 1, the Control Point will display the light switch in the 'on' position.&amp;#160; Now, if the user hits the 'off' button on the UPnP control point it sends the UPnP light switch a &amp;quot;SetTarget&amp;quot; action with the argument &amp;quot;newTargetValue&amp;quot; equals 0.&amp;#160; After the light switch successfully turns off, the variable &amp;quot;Status&amp;quot; will change to 0 so anytime a UPnP control point that wants to know if the light is on or off can ask the light switch for the current value of the &amp;quot;Status&amp;quot; variable.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 23:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==The web-based Luup plugin generator==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;==The web-based Luup plugin generator==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is coming soon.&amp;#160; In the meantime, see [[Luup_Plugins_ByHand]] to see how to create the plugins by hand.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;This is coming soon&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;, and will allow you to create Luup plugins without knowledge of XML or UPnP using a fill-in-the-blanks web form and an infrared learning tool for control audio/video devices&lt;/ins&gt;.&amp;#160; In the meantime, see [[Luup_Plugins_ByHand]] to see how to create the plugins by hand.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key micasaverde_wiki:diff:version:1.11a:oldid:1143:newid:1150 --&gt;
&lt;/table&gt;</summary>
		<author><name>Micasaverde</name></author>	</entry>

	</feed>