<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tieske</title>
	<atom:link href="http://www.thijsschreijer.nl/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.thijsschreijer.nl/blog</link>
	<description>Thijs Schreijer&#039;s techie stuff</description>
	<lastBuildDate>Fri, 23 Mar 2012 09:17:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Update to the 1-on-1 8 bit byte-2-string conversion tip on CodeProject</title>
		<link>http://www.thijsschreijer.nl/blog/?p=624</link>
		<comments>http://www.thijsschreijer.nl/blog/?p=624#comments</comments>
		<pubDate>Wed, 29 Feb 2012 16:13:19 +0000</pubDate>
		<dc:creator>Thijs Schreijer</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[byte array]]></category>
		<category><![CDATA[codeproject]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[string]]></category>

		<guid isPermaLink="false">http://www.thijsschreijer.nl/blog/?p=624</guid>
		<description><![CDATA[About a year ago I posted a tip/trick type article on CodeProject. Recently a comment proved a problem with my code, hence I updated it. Because I couldn&#8217;t add any downloads to the post, I&#8217;ll provide it here. Here&#8217;s the article Here&#8217;s the download (downloaded 24 times)]]></description>
			<content:encoded><![CDATA[<p>About a year ago I posted a <a href="http://www.codeproject.com/Tips/144792/String-to-byte-conversion-using-NET-encoders-8bit" target="_blank">tip/trick type article on CodeProject</a>. Recently a comment proved a problem with my code, hence I updated it. Because I couldn&#8217;t add any downloads to the post, I&#8217;ll provide it here.</p>
<p><a href="http://www.codeproject.com/Tips/144792/String-to-byte-conversion-using-NET-encoders-8bit" target="_blank">Here&#8217;s the article</a></p>
<p><a href="http://www.thijsschreijer.nl/blog/?download=bytestringconversions.zip">Here&#8217;s the download</a> (downloaded 24 times)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thijsschreijer.nl/blog/?feed=rss2&#038;p=624</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting up Lua Development Tools with Koneki, for local development</title>
		<link>http://www.thijsschreijer.nl/blog/?p=604</link>
		<comments>http://www.thijsschreijer.nl/blog/?p=604#comments</comments>
		<pubDate>Fri, 24 Feb 2012 22:12:38 +0000</pubDate>
		<dc:creator>Thijs Schreijer</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[Koneki]]></category>
		<category><![CDATA[LDT]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[Lua Development Tools]]></category>

		<guid isPermaLink="false">http://www.thijsschreijer.nl/blog/?p=604</guid>
		<description><![CDATA[Recently, while looking for a better Lua IDE I tried the Lua Development Tools by the Koneki project. The Koneki project focusses on machine-2-machine (M2M) development and hence does not yet support local run and debug configurations. With a support link to some helpful pages (which didn&#8217;t work straight away), I fiddled around a bit and got [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, while looking for a better <a href="http://www.lua.org" target="_blank">Lua</a> IDE I tried the <a href="http://www.eclipse.org/koneki/ldt/" target="_blank">Lua Development Tools</a> by the <a href="http://www.eclipse.org/koneki/" target="_blank">Koneki project</a>. The Koneki project focusses on machine-2-machine (M2M) development and hence does not yet support local run and debug configurations. With a <a href="http://www.eclipse.org/forums/index.php/t/296547/" target="_blank">support link</a> to some <a href="http://mwebhack.blogspot.com/2012/01/lua-development-tools-koneki-ide-based.html" target="_blank">helpful pages</a> (which didn&#8217;t work straight away), I fiddled around a bit and got it working through the &#8216;external tools&#8217; workaround, though still with some quirks. Also not sure it all works as it should, especially adding command line parameters is something I&#8217;ll be needing to fix still.<span id="more-604"></span></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-3106191361299034";
/* 468x60, gemaakt 2-6-10 */
google_ad_slot = "2317741540";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>Here&#8217;s how to set it up (on Windows that is, but with some scripting also on other platforms);</p>
<ol>
<li>Download and install the standalone version (that&#8217;s what I used)</li>
<li>Start it and create a simple new project called &#8216;test&#8217;; menu File &gt; New &gt; Lua project</li>
<li>Create a new external tool config; menu Run &gt; External Tools &gt; External Tools Configurations&#8230;</li>
<li>On the left pane right-click &#8216;Program&#8217; and select New, then configure it as follows;<a href="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/02/koneki_ldt1.png"><img class="aligncenter size-medium wp-image-605" title="koneki_ldt1" src="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/02/koneki_ldt1-295x300.png" alt="" width="295" height="300" /></a></li>
<li>Obviously, &#8216;Location&#8217; should point to your local Lua VM</li>
<li>Now add a statement to your test project; print(&#8220;Hello world&#8221;) and click the &#8216;External Tools&#8217; button and select &#8216;lua_run&#8217; as configured in step 4.<br />
<span style="text-decoration: underline;"><strong>IMPORTANT</strong></span>: you must first select &#8216;main.lua&#8217; in the script explorer or you&#8217;ll get an error;<a href="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/02/koneki_ldt2.png"><img class="aligncenter size-medium wp-image-606" title="koneki_ldt2" src="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/02/koneki_ldt2-300x123.png" alt="" width="300" height="123" /></a></li>
<li>You should now see &#8220;Hello world&#8221; in the console window</li>
</ol>
<p>&nbsp;</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-3106191361299034";
/* 468x60, gemaakt 2-6-10 */
google_ad_slot = "2317741540";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>Now that&#8217;s for running a Lua script directly, so how about debugging? The debug features go through a network connection to a remote device (or &#8216;localhost&#8217;), but it will require the script to be running with the Lua debugger modules loaded. So I created a batch file to do this.</p>
<ol>
<li>Download the <a href="http://wiki.eclipse.org/Koneki/LDT/Concepts/Debugger#DBGP_Client" target="_blank">debugger files (DBGP client)</a> and store them in a folder &#8216;luadebug&#8217; inside the directory where Eclipse is installed, for example; &#8220;C:\Program Files\EclipseLDT\debuglua&#8221;</li>
<li>Download <a href="http://www.thijsschreijer.nl/blog/?download=ldtdebug.zip">this batch file</a> (downloaded 69 times) and store it in the same directory as the debugger files</li>
<li>Create another &#8216;external tool&#8217; config as detailed above, with the following settings;<a href="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/02/koneki_ldt3.png"><img class="aligncenter size-medium wp-image-607" title="koneki_ldt3" src="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/02/koneki_ldt3-295x300.png" alt="" width="295" height="300" /></a></li>
<li>The path to the Lua VM is now in the &#8216;Arguments&#8217; pane, so make sure it is correct for your local Lua VM.</li>
<li>Add a debug configuration via menu; Run &gt; Debug configurations&#8230;</li>
<li>Configure it with the following settings;<a href="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/02/koneki_ldt4.png"><img class="aligncenter size-medium wp-image-608" title="koneki_ldt4" src="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/02/koneki_ldt4-300x261.png" alt="" width="300" height="261" /></a></li>
<li>Start the debugger by selecting &#8216;lua_debugger&#8217; from the<strong> debug button</strong> drop-down;<a href="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/02/koneki_ldt5.png"><img class="aligncenter size-medium wp-image-609" title="koneki_ldt5" src="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/02/koneki_ldt5-300x109.png" alt="" width="300" height="109" /></a></li>
<li> Then start the application by selecting &#8216;lua_debug&#8217; from the &#8216;External Tools&#8217; button;<a href="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/02/koneki_ldt6.png"><img class="aligncenter size-medium wp-image-610" title="koneki_ldt6" src="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/02/koneki_ldt6-300x124.png" alt="" width="300" height="124" /></a></li>
<li>The application will start with the debugger module loaded, it will connect to the debugger GUI within Eclipse.</li>
</ol>
<p>In the debug configuration, a batch file is used. The batch file takes two parameters; <strong>a)</strong> path to the Lua VM, <strong>b)</strong> path to the debug target. The batch file will run the following steps;</p>
<ol>
<li>update the LUA_PATH environment variable such that the debugger modules will be in the search path</li>
<li>start the Lua VM and initially execute the debugger modules</li>
<li>then start the target Lua script</li>
<li>after exiting it will restore the LUA_PATH variable</li>
</ol>
<p>This approach prevents me from having to add the debugger code to the actual code. Though it is a windows batch file, it should be easy to port it to other platforms.</p>
<p>What&#8217;s to be improved still;</p>
<ul>
<li>start debugger and debug target with a single click</li>
<li>allow for adding command line parameters to the target</li>
<li>having some sort of default start file, instead of manually having to select the correct file before starting it</li>
<li>the debugger requires a link to a specific project in its setup, so probably a specific setup is required per project (haven&#8217;t tested that yet)</li>
<li>the batch file does not support setting the remote debugger IP, port or IDE key, so it always uses the defaults (127.0.0.1, 10000, luaidekey)</li>
</ul>
<p>I&#8217;m interested in solutions to these, so if you find one let me know&#8230;</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-3106191361299034";
/* 468x60, gemaakt 2-6-10 */
google_ad_slot = "2317741540";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thijsschreijer.nl/blog/?feed=rss2&#038;p=604</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fixing the UPnP stack issues</title>
		<link>http://www.thijsschreijer.nl/blog/?p=589</link>
		<comments>http://www.thijsschreijer.nl/blog/?p=589#comments</comments>
		<pubDate>Fri, 06 Jan 2012 21:54:59 +0000</pubDate>
		<dc:creator>Thijs Schreijer</dc:creator>
				<category><![CDATA[UPnP]]></category>
		<category><![CDATA[Developer Tools for UPnP Technologies]]></category>
		<category><![CDATA[UPnP stack]]></category>

		<guid isPermaLink="false">http://www.thijsschreijer.nl/blog/?p=589</guid>
		<description><![CDATA[The last few days I spent some time fixing the .NET UPnP stack to be more resilient. The stack itself it pretty ok, but the problem is that you do not have control over all the other UPnP devices out there. If these are faulty and don&#8217;t play by the rules, you can either ignore them [...]]]></description>
			<content:encoded><![CDATA[<p>The last few days I spent some time fixing the <a href="http://opentools.homeip.net/dev-tools-for-upnp" target="_blank">.NET UPnP stack</a> to be more resilient. The stack itself it pretty ok, but the problem is that you do not have control over all the other UPnP devices out there. If these are faulty and don&#8217;t play by the rules, you can either ignore them (what the UPnP stack did until now) or try and handle only those parts that are ok.</p>
<p>Supporting for the <a title="UPnP-2-xPL gateway" href="http://www.thijsschreijer.nl/blog/?page_id=550">UPnP gateway</a> showed that several devices would simply not show up. Some fiddling <a href="http://coherence.beebits.net/wiki/UPnP-Inspector" target="_blank">with other UPnP tools</a> and the debug facilities showed that the devices had faulty description xml&#8217;s (bad UPnP implementations by their vendors). The cases were the <a href="http://www.gracedigitalaudio.com/tuner-wifi-ethernet-radio-tuner-gdiirdt200-p-91.html" target="_blank">Grace Digital tuner </a>and the <a href="http://micasaverde.com/" target="_blank">Vera home automation box</a> (the Grace Digital has a <a title="Updated descriptions after the firmware update" href="http://www.promixis.com/forums/showthread.php?21127-UPnP-and-Girder&amp;p=145814#post145814" target="_blank">firmware update, beta, available</a> that fixes the issue)</p>
<p>I had to take a pretty steep dive into the code to fix all the undelying elements. What happened was that the code for parsing device and service xml&#8217;s only had exception handling on the highest level. This means that you get either <em>all</em> or <em>nothing</em>.<span id="more-589"></span></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-3106191361299034";
/* 468x60, gemaakt 2-6-10 */
google_ad_slot = "2317741540";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>The update now includes more error checking so that individual elements that do not adhere to the UPnP standards are now left out. So any faulty device or service will still get parsed, for all the proper elements it has. To know whether there are any issues with the description xml&#8217;s, the debug window can be used.</p>
<p>Showing the debug window can be done from the menu, or via the &#8216;/DEBUG&#8217; commandline option.</p>
<p>As an example using the faulty service description of the <a href="http://www.gracedigitalaudio.com/tuner-wifi-ethernet-radio-tuner-gdiirdt200-p-91.html" target="_blank">Grace Digital tuner</a>, that device has/had a <a title="RenderingControl1.xml" href="http://www.promixis.com/forums/showthread.php?21127-UPnP-and-Girder&amp;p=145801#post145801">RenderingControl1.xml</a> service description with an action argument that referenced a non-existing statevariable. If you load this xml into the Service Author tool, it would simply display an error and do nothing;</p>
<div id="attachment_593" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/01/UPnP_Resilience_before.png"><img class="size-medium wp-image-593" title="UPnP_Resilience_before" src="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/01/UPnP_Resilience_before-300x140.png" alt="" width="300" height="140" /></a><p class="wp-caption-text">Error message before the fix, simply wouldn&#39;t load</p></div>
<p><script type="text/javascript"><!--
google_ad_client = "pub-3106191361299034";
/* 468x60, gemaakt 2-6-10 */
google_ad_slot = "2317741540";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>With the fixed version of the stack, it now logs the errors, but commences with parsing the proper parts of the device;</p>
<div id="attachment_592" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/01/UPnP_Resilience_after.png"><img class="size-medium wp-image-592" title="UPnP_Resilience_after" src="http://www.thijsschreijer.nl/blog/wp-content/uploads/2012/01/UPnP_Resilience_after-300x240.png" alt="" width="300" height="240" /></a><p class="wp-caption-text">The debug window indicates what&#39;s wrong, but it still loads</p></div>
<p>In the screenshot you can see in the top pane of the debug window that the errors pertain to the actions <strong>GetLoudness</strong> and <strong>SetLoudness</strong>. In the bottom pane it is mentioned that there is an invalid reference to the <strong>Loudness</strong> statevariable. In the main <em>Service Author</em> window, all proper defined actions are now shown (note that <strong>Get/SetLoudness</strong> are absent here).</p>
<p>The practical use for the <em>Service Author</em> application is very limited, but I have no access to the device itself, so this was the only way to show the effects. Any way, the same UPnP stack can be used with the <em>Device Spy</em>, which basically means that from now on even the bad behaving devices will show up in the <em>Device Spy</em>, which is great for troubleshooting UPnP devices, and of course, the stack can be used to build controlpoints that are also capable of controlling those bad behaving devices.</p>
<p>I mailed the input to <a title="Ylian Saint-Hilaire (Intel)" href="http://software.intel.com/en-us/blogs/author/ylian-saint-hilaire/" target="_blank">Ylian Saint-Hilaire (Intel)</a>, who currently maintains the <a title="Developer Tools for UPnP Technologies" href="http://opentools.homeip.net/dev-tools-for-upnp" target="_blank">Developer Tools for UPnP Technologies</a>. So I&#8217;m expecting the update to become available soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thijsschreijer.nl/blog/?feed=rss2&#038;p=589</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Updates and bugfixes for the UPnP gateway and xPLGirder</title>
		<link>http://www.thijsschreijer.nl/blog/?p=587</link>
		<comments>http://www.thijsschreijer.nl/blog/?p=587#comments</comments>
		<pubDate>Tue, 03 Jan 2012 22:44:56 +0000</pubDate>
		<dc:creator>Thijs Schreijer</dc:creator>
				<category><![CDATA[Girder]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[UPnP]]></category>
		<category><![CDATA[xPL]]></category>
		<category><![CDATA[gateway]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[xPL protocol]]></category>

		<guid isPermaLink="false">http://www.thijsschreijer.nl/blog/?p=587</guid>
		<description><![CDATA[Today I uploaded yet another update for the gateway and xPLGirder component. Mike C put it to the test and had a list findings, most are resolved now. Besides those bugfixes the component now also uses lua events (based on the component model) besides the regular Girder events. This should make it easier to develop lua [...]]]></description>
			<content:encoded><![CDATA[<p>Today I uploaded yet another update for the <a title="UPnP-2-xPL gateway" href="http://www.thijsschreijer.nl/blog/?page_id=550">gateway</a> and <a title="xPLGirder component" href="http://www.thijsschreijer.nl/blog/?page_id=507">xPLGirder component</a>. Mike C put it to the test and had a list findings, most are resolved now. Besides those bugfixes the component now also uses lua events (based on the component model) besides the regular Girder events. This should make it easier to develop lua code that works with the xPL component.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thijsschreijer.nl/blog/?feed=rss2&#038;p=587</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UPnP bugfix for xPL gateway and xPLGirder</title>
		<link>http://www.thijsschreijer.nl/blog/?p=582</link>
		<comments>http://www.thijsschreijer.nl/blog/?p=582#comments</comments>
		<pubDate>Wed, 28 Dec 2011 16:38:29 +0000</pubDate>
		<dc:creator>Thijs Schreijer</dc:creator>
				<category><![CDATA[Girder]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[UPnP]]></category>
		<category><![CDATA[xPL]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[xPL protocol]]></category>

		<guid isPermaLink="false">http://www.thijsschreijer.nl/blog/?p=582</guid>
		<description><![CDATA[Here&#8217;s another update of the gateway and the xPLGirder component. It had a nasty (and hard to find) bug, which took me nearly a day to find and fix (fixing was actually 1 minute). There is also a functional update (to the xPLGirder plugin) that accompanies the bugfix; if for some reason the announcement of a [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s another update of the <a title="UPnP-2-xPL gateway" href="http://www.thijsschreijer.nl/blog/?page_id=550">gateway</a> and the <a title="xPLGirder component" href="http://www.thijsschreijer.nl/blog/?page_id=507">xPLGirder component</a>. It had a nasty (and hard to find) bug, which took me nearly a day to find and fix (fixing was actually 1 minute). There is also a functional update (to the xPLGirder plugin) that accompanies the bugfix; if for some reason the announcement of a UPnP device does not complete, this is now detected and any missing elements will be re-requested.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thijsschreijer.nl/blog/?feed=rss2&#038;p=582</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UPnP tutorial using Girder</title>
		<link>http://www.thijsschreijer.nl/blog/?p=569</link>
		<comments>http://www.thijsschreijer.nl/blog/?p=569#comments</comments>
		<pubDate>Fri, 09 Dec 2011 21:03:11 +0000</pubDate>
		<dc:creator>Thijs Schreijer</dc:creator>
				<category><![CDATA[Girder]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[UPnP]]></category>
		<category><![CDATA[xPL]]></category>
		<category><![CDATA[gateway]]></category>
		<category><![CDATA[Lua]]></category>

		<guid isPermaLink="false">http://www.thijsschreijer.nl/blog/?p=569</guid>
		<description><![CDATA[This post will try to explain how the UPnP devices can be controlled using Girder. By explaining some UPnP basics and at the same time create some example code to control a simple device. Prerequisites; Girder installed xPLGirder component installed (and working, check the readme) UPnP-2-xPL gateway installed Developer tools for UPnP development installed For [...]]]></description>
			<content:encoded><![CDATA[<p>This post will try to explain how the UPnP devices can be controlled using Girder. By explaining some UPnP basics and at the same time create some example code to control a simple device.<span id="more-569"></span></p>
<h2>Prerequisites;</h2>
<ul>
<li><a href="http://www.promixis.com">Girder</a> installed</li>
<li><a title="xPLGirder component" href="http://www.thijsschreijer.nl/blog/?page_id=507">xPLGirder component</a> installed (and working, check the readme)</li>
<li><a title="UPnP-2-xPL gateway" href="http://www.thijsschreijer.nl/blog/?page_id=550">UPnP-2-xPL gateway</a> installed</li>
<li><a href="http://opentools.homeip.net/dev-tools-for-upnp">Developer tools for UPnP development</a> installed</li>
<li>For the purpose of this tutorial; <a title="UPnP example in Visual Basic, an improved Network Light sample" href="http://www.thijsschreijer.nl/blog/?p=450">Software Light</a> (the adapted version from www.thijsschreijer.nl)</li>
</ul>
<p>&nbsp;</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-3106191361299034";
/* 468x60, gemaakt 2-6-10 */
google_ad_slot = "2317741540";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h2>About UPnP devices</h2>
<p>A UPnP device is an abstract representation of a device, with a certain hierarchy of services, variables, methods and devices.</p>
<ul>
<li>Each device can have services and embedded (sub)devices</li>
<li>Each service can have statevariables and methods</li>
<li>Each method can have arguments, these arguments are always associated with a statevariable</li>
</ul>
<p>From a control perspective there are 2 types of UPnP capable structures;</p>
<ol>
<li>Devices; these expose all sorts of information about themselves (as mentioned above)</li>
<li>Controlpoints; these collect information about devices and allow its user to control the devices</li>
</ol>
<p>In physical appliances the two can be combined. For example, a TV set acts as a UPnP media player/renderer device (UPnP device) but it also allows you to browse a remote UPnP media server and play it on the local UPnP renderer (the TV itself), and as such is a control point.</p>
<p>&nbsp;</p>
<h2>Tutorial start</h2>
<p>Start the Software Light and Device Spy (utility from the developer tools). The device spy should now display the software light and you should be able to browse its properties, services, methods, etc. Now start Girder and the UPnP-2-xPL gateway, then use the Girder variable inspector (press F12) and refresh the display, when you now browse to UPnP.devices, you should get a similar tree to the Device Spy tree.</p>
<p>So what has happened so far;</p>
<ul>
<li>The software light uses the UPnP protocol to announce itself on the network to UPnP capable controlpoints</li>
<li>The UPnP-2xPL gateway is a UPnP controlpoint and collects information about all UPnP devices on the network. At the same time it is a xPL device and it will transmit the received UPnP device information onto the xPL network to xPL clients.</li>
<li>The Girder xPLGirder component is an xPL client that collects the UPnP information from the UPnP-2-xPL gateway and stores it in a table for Girder to access and control it.</li>
</ul>
<p>So, through this route; Software Light -&gt; UPnP protocol -&gt; UPnP-2-xPL gateway -&gt; xPL protocol -&gt; xPLGirder, Girder now has all the information required to control the device. The image below shows the Girder variable inspector tree with the matching elements in the Device Spy.</p>
<div id="attachment_570" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.thijsschreijer.nl/blog/wp-content/uploads/2011/12/1_girder-spy.jpg"><img class="size-medium wp-image-570" title="Matching elements between Girder and Device Spy" src="http://www.thijsschreijer.nl/blog/wp-content/uploads/2011/12/1_girder-spy-300x216.jpg" alt="" width="300" height="216" /></a><p class="wp-caption-text">Matching elements between Girder and Device Spy</p></div>
<p>To access the information in Girder there are 2 ways;</p>
<ol>
<li>traverse the hierarchical device tree from the UPnP.devices table, or</li>
<li>directly accessing elements by their ID, through the UPnP.IDlist table.</li>
</ol>
<p>The gateway dissects the UPnP devices into their underlying components and provides each with an ID to reference. This ID is not persistent, it is a sequential number provided by the gateway and may differ from one session to the next. Each UPnP element within Girder has the following properties regarding this ID;</p>
<ul>
<li>ID; the ID of the element</li>
<li>parent; the ID of the parent that an element belongs to, only top-level devices (root-devices) do not have a parent property.</li>
<li>IDlist; list of child IDs</li>
</ul>
<p>See the image below; <span style="color: #ff0000;">red shows the parent-relationship</span>, <span style="color: #3366ff;">blue the IDlist with child relationship</span>, <span style="color: #339966;">green shows the service relation to its methods and statevariables</span>.</p>
<div id="attachment_571" class="wp-caption aligncenter" style="width: 234px"><a href="http://www.thijsschreijer.nl/blog/wp-content/uploads/2011/12/2_parent-child.jpg"><img class="size-medium wp-image-571" title="Parent-child relationships" src="http://www.thijsschreijer.nl/blog/wp-content/uploads/2011/12/2_parent-child-224x300.jpg" alt="" width="224" height="300" /></a><p class="wp-caption-text">Parent-child relationships</p></div>
<p><script type="text/javascript"><!--
google_ad_client = "pub-3106191361299034";
/* 468x60, gemaakt 2-6-10 */
google_ad_slot = "2317741540";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>To consistently control a device, we must be capable of uniquely identifying the same device over session, for this we&#8217;ll use the device UUID (unique and according to the UPnP protocol always the same). There is only one issue with it; Girder cannot display variables in the variable inspector that have either a &#8216;.&#8217; (dot) or &#8216;:&#8217; (colon) in their name. So the xPLGirder component will replace those with &#8216;_&#8217; (underscores) to make sure we can visually browse the devices and its properties in Girder.</p>
<p>Now create a new text file called &#8216;networklight.lua&#8217; and add the following;</p>
<pre><strong>-- Setup persistent device adn service IDs</strong>
<strong>local light = UPnP.device["&lt;copied ID&gt;"]</strong>
<strong>local power = light.services["&lt;copied ID&gt;"]</strong>
<strong>local dimmer = light.services["&lt;copied ID&gt;"]</strong></pre>
<p>In Girder right-click the UUID of the the device in the device table (not the deviceid property inside the table!) and select &#8216;Copy variable name&#8217; from the menu. Now in the created lua file paste it over the &#8216;&lt;copied ID&gt;&#8217; value in the &#8216;local light = ..&#8217; line. Repeat this for the SwitchPower and DimmerService services.</p>
<div id="attachment_572" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.thijsschreijer.nl/blog/wp-content/uploads/2011/12/3_copy_id.jpg"><img class="size-medium wp-image-572" title="Get the unique ID's" src="http://www.thijsschreijer.nl/blog/wp-content/uploads/2011/12/3_copy_id-300x216.jpg" alt="" width="300" height="216" /></a><p class="wp-caption-text">Get the unique ID&#39;s</p></div>
<p>Now copy the code from the below example, but do not overwrite the ID&#8217;s you just copied;</p>
<pre><strong>-- Setup persistent device and service IDs</strong>
<strong>local light = UPnP.devices["c910a273-d553-4c8a-92b0-e62ddb60fd46"]</strong>
<strong>local dimmer = light.services["urn_upnp-org_serviceId_DimmingService_0001"]</strong>
<strong>local power = light.services["urn_upnp-org_serviceId_SwitchPower_0001"]</strong>

<strong>-- define global and methods to export</strong>
<strong>Light = {</strong>

<strong> On = function (self)</strong>
<strong> return power.methods.SetTarget:execute(true)</strong>
<strong> end,</strong>

<strong> Off = function (self)</strong>
<strong> return power.methods.SetTarget:execute(false)</strong>
<strong> end,</strong>

<strong> Dim = function (self, level)</strong>
<strong> return dimmer.methods.SetLoadLevelTarget:execute(level)</strong>
<strong> end,</strong>

<strong> Status = function (self)</strong>
<strong> local load = dimmer.variables.LoadLevelStatus.value .. "%"</strong>
<strong> if power.variables.Status.value == "False" then</strong>
<strong> print("Light is currently off.")</strong>
<strong> else</strong>
<strong> print("Light is currently on at " .. load)</strong>
<strong> end</strong>
<strong> end,</strong>
<strong>}</strong></pre>
<p>Now lets step through this code. The first lines with the ID&#8217;s make sure that the correct reference to the services we need are available. Then the global table &#8216;Light&#8217; gets defined with several functions/methods. To make the device do what you want, or get the information that you need, you need to understand how to use a devices methods and variables to get that information.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-3106191361299034";
/* 468x60, gemaakt 2-6-10 */
google_ad_slot = "2317741540";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h2>Some generics/conventions about UPnP</h2>
<p>(in Device Spy navigate to the SwitchPower service)</p>
<p>Variables may or may not be evented. That is an evented variable will inform any subscribed controlpoint of changes in value, whereas as non-evented variable will not do this. If a varaible is non-evented, then the common convention to get the value is through a method called &#8216;Get&lt;varname&gt;&#8217;. In this case there is the &#8216;Target&#8217; statevariable in the SwitchPower service, adn if you examine its properties you&#8217;ll see it is non-evented. But in the methodlist there is a method called &#8216;GetTarget&#8217;, which still enables you to get the value (the naming convention also extends to &#8216;Set&#8217; for setting a value, in this case &#8216;SetTarget&#8217;). Using the device spy you can check the variables for being evented or not, and the methods for &#8216;Get&#8217;ing and &#8216;Set&#8217;ing.</p>
<p>Eventhough a power switch is either On or Off, the SwitchPower service still has 2 state variables; Target and Status. This is rather common with UPnP devices. Status will hold the current value, while Target holds the value, to which the device is currently working. For a powerswitch this may seem redundant, but for a valve for example it would not be. For example a valve that takes 1 minute to completely open. The same for the dimmer, if the dimmer is set to slowly brighten over a period of 30 minutes, the target maybe 100%, while the actual value will only slowly progress towards the 100%.</p>
<p>Methods take 0 or more parameters, each of them may be defined as direction IN (provided to the method) or direction OUT (returned from the method). Additionally (and optional) one of the OUT parameters may be set as the main return value (RetVal), but this is often not set. The order for method arguments is defined; first all the IN parameters, then RetVal, and finally all other OUT parameters. If you scan the methods in Device Spy, you&#8217;ll see that the &#8216;Return argument&#8217; property mostly has value &#8216;&lt;none&gt;&#8217; indicating that RetVal has not been set.</p>
<p>As a definition for method arguments, the statevariables are reused. Most methods deal with one or more statevariables anyway, so by coupling the arguments with a statevariable, suddenly the type and allowed values for the argument are pretty well defined. In some cases there are no related statevariables for a method and then a special statevariable needs to be created solely for this purpose. Those statevariable names must start with &#8216;A_ARG_TYPE_&#8217; by convention. For the same matter; any statevariables or methods that start with &#8216;X_&#8217; are vendor specific extensions to standard UPnP services. In Device Spy the methods have a list of properties, numbered per argument; &#8216;Argument x&#8217;, which contains the basic type and the argument name, and &#8216;Argument x ASV&#8217; which contains the name of the associated statevariable. For example, method SetLoadLevelTarget of the DimmingService has &#8216;Argument 1 ASV&#8217; set to LoadLevelTarget, if you now lookup the statevariable LoadLevelTarget, you&#8217;ll see that this is an &#8216;ui1&#8242; (unsigned integer) type, with a valid range from 0 to 100.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-3106191361299034";
/* 468x60, gemaakt 2-6-10 */
google_ad_slot = "2317741540";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<h2>Understanding the code</h2>
<p>Now lets start with the easiest commands; the On() and Off() methods in our sample code. We need to control the SwitchPower service and set a new Target value. If you check the contents of the SetTarget method, here the ASV is the statevariable Target, which simply reads as a boolean type. Both methods require a single argument, IN, no arguments defined as OUT. So the overall code is simply from the service (power) select the correct method (methods.SetTarget this is 1-on-1 with the UPnP defined name) and call &#8216;execute&#8217; on it using the correct number of arguments; power.methods.SetTarget:execute(false)</p>
<p>On to the next method; Dim(). Its based on the dimmer service and its method &#8216;SetLoadLevelTarget&#8217;, basically using variable LoadLevel, with the generic conventions applied and hence the pre-fix &#8216;Set&#8217; and the post-fix &#8216;Target&#8217;, as explained above. If you browse it using Device Spy, and also the ASV LoadLevel, you&#8217;ll see its an unsigned integer with a range from 0 to 100. As with the On() and Off() commands, all we need to do is call the right method with the new level to be set.</p>
<p>The last method in our sample code reports back the current status and prints it in the Girder lua console. The statevariables Status (on the SwitchPower service) and LoadLevelStatus (on the DimmingService service) are both evented. So whenever their value changes any clients will be informed. xPLGirder will automatically update the value of the variable in the hierarchical device/service tree. Hence it will always contain the latest value (but only if they are evented!!). Now simply collect the value from the LoadLevel variable, combine it with the Status of the SwitchPower and construct the result to be printed.</p>
<p><span class="Apple-style-span" style="font-size: 20px; font-weight: bold;">Something about conversions;</span></p>
<p>All data is transferred as strings (both for xPL as well as UPnP). So in the example, the On() and Off() call the SetTarget method with a lua boolean value, which will automatically be converted to a string. The return values, the value of the variable &#8216;power.variables.Status.value&#8217; in the example code is a string value that reads &#8220;True&#8221; or &#8220;False&#8221; it will not automatically be transferred back to a lua boolean. Its the same for the IDs used, they are all strings even though they contain numerical values. So looking up an element in the IDlist must be done using strings; local myElem = UPnP.IDlist(&#8220;15&#8243;).</p>
<h2>Controlling the light</h2>
<p>Now save your code. Create a new Girder Script action and copy the full contents of the file created into this new script action. Now execute the action once. If you now refresh the variable inspector, you should see the global &#8216;Light&#8217; table and if you expand it, the methods inside; On(), Off(), Dim() and Status().</p>
<div id="attachment_579" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.thijsschreijer.nl/blog/wp-content/uploads/2011/12/4_light.jpg"><img class="size-medium wp-image-579" title="The created Light device" src="http://www.thijsschreijer.nl/blog/wp-content/uploads/2011/12/4_light-300x217.jpg" alt="" width="300" height="217" /></a><p class="wp-caption-text">The created Light device</p></div>
<p>In the Girder lua console type &#8216;Light:On()&#8217; and press enter to turn the light on. &#8216;Light:Off()&#8217; to switch it off again. Use &#8216;Light:On()&#8217; and &#8216;Light:Dim(50)&#8217; to switch it to 50%.</p>
<p>If this doesn&#8217;t work, make sure you&#8217;ve got all components running properly. Also note that the Network Light included with the Developer tools for UPnP does change its UUID every time it starts, so every time you restart the light, you should update your code to the new UUID. The <a title="UPnP example in Visual Basic, an improved Network Light sample" href="http://www.thijsschreijer.nl/blog/?p=450">updated version of the light</a> does not have this issue.</p>
<p>&nbsp;</p>
<p>I hope this was helpful, and I&#8217;d welcome some feedback for improvements. If you need help, please post on the <a href="http://www.promixis.com/forums/forumdisplay.php?21-Girder-5" target="_blank">Girder forum</a>.</p>
<p>&nbsp;</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-3106191361299034";
/* 468x60, gemaakt 2-6-10 */
google_ad_slot = "2317741540";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thijsschreijer.nl/blog/?feed=rss2&#038;p=569</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UPnP gateway and xPLGirder update</title>
		<link>http://www.thijsschreijer.nl/blog/?p=565</link>
		<comments>http://www.thijsschreijer.nl/blog/?p=565#comments</comments>
		<pubDate>Fri, 09 Dec 2011 20:18:05 +0000</pubDate>
		<dc:creator>Thijs Schreijer</dc:creator>
				<category><![CDATA[Girder]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[UPnP]]></category>
		<category><![CDATA[xPL]]></category>
		<category><![CDATA[Lua]]></category>

		<guid isPermaLink="false">http://www.thijsschreijer.nl/blog/?p=565</guid>
		<description><![CDATA[A few days ago I updated the gateway (I even gave it its own page now) and the xPLGirder component (the only client for the gateway so far). On the Girder forum there are now some users experimenting with it and it seems to be working pretty well. It already outperformed an IR controller Great [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago I updated the <a title="UPnP-2-xPL gateway" href="http://www.thijsschreijer.nl/blog/?page_id=550">gateway</a> (I even gave it its <a title="UPnP-2-xPL gateway" href="http://www.thijsschreijer.nl/blog/?page_id=550">own page</a> now) and the <a title="xPLGirder component" href="http://www.thijsschreijer.nl/blog/?page_id=507">xPLGirder component</a> (the only client for the gateway so far). On the Girder forum there are now some users experimenting with it and it seems to be working pretty well. <a href="http://www.promixis.com/forums/showthread.php?21127-UPnP-and-Girder&amp;p=145872#post145872" target="_blank">It already outperformed an IR controller</a> <img src='http://www.thijsschreijer.nl/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Great to see it finally comes to a use beyond just me!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thijsschreijer.nl/blog/?feed=rss2&#038;p=565</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>All new UPnP-2-xPL gateway</title>
		<link>http://www.thijsschreijer.nl/blog/?p=531</link>
		<comments>http://www.thijsschreijer.nl/blog/?p=531#comments</comments>
		<pubDate>Fri, 26 Aug 2011 20:02:14 +0000</pubDate>
		<dc:creator>Thijs Schreijer</dc:creator>
				<category><![CDATA[Girder]]></category>
		<category><![CDATA[Home automation]]></category>
		<category><![CDATA[UPnP]]></category>
		<category><![CDATA[xPL]]></category>
		<category><![CDATA[UPnP stack]]></category>
		<category><![CDATA[xPL protocol]]></category>

		<guid isPermaLink="false">http://www.thijsschreijer.nl/blog/?p=531</guid>
		<description><![CDATA[It&#8217;s been more than a year since I actually updated the gateway, but this is a major overhaul, still early stage, so probably going to be buggy. The xPL schema set has been revised and is more thorough, the entire UPnP device description will now be announced and it will be done in a more [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been more than a year since I actually updated the gateway, but this is a major overhaul, still early stage, so probably going to be buggy.</p>
<p>The xPL schema set has been revised and is more thorough, the entire UPnP device description will now be announced and it will be done in a more structured way (check the readme for the schema details). Obviously there is no compatibility with the previous version. But that was a piece of disposable-test-code anyway.<span id="more-531"></span></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-3106191361299034";
/* 468x60, gemaakt 2-6-10 */
google_ad_slot = "2317741540";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>The interface is now pretty useless, just shows devices arriving and leaving, no more no less. No more logging of what is going on. Might come back, but for now this is it.</p>
<p>One of the main reasons for not updating it was that I had no real use for it so far. With the <a title="xPLGirder component" href="http://www.thijsschreijer.nl/blog/?page_id=507">xPLGirder plugin</a> for <a title="Promixis Girder Home Automation software" href="http://www.promixis.com/girder.php" target="_blank">Girder</a> being ready and actually pretty stable, the gateway can now be put to good use, but needs maturing. We&#8217;ll see about that, <a href="http://www.promixis.com/forums/showthread.php?21127-UPnP-and-Girder&amp;p=145316#post145316" target="_blank">check this forum thread for updates on the progress</a>.</p>
<p>So whats needed to get going;</p>
<ul>
<li>Simply using it on xPL;</li>
<ul>
<li><a href="http://www.thijsschreijer.nl/blog/?download=upnp2xplgateway.zip">Download the gateway</a> and install it</li>
</ul>
<li>For use with Girder you should additionally;</li>
<ul>
<li>Install the <a title="xPLGirder component" href="http://www.thijsschreijer.nl/blog/?page_id=507" target="_blank">xPLGirder plugin</a> (installing the gateway should take care of the xPL basics, so you only need the Girder plugin, and can skip the rest)</li>
<li>Add the specific UPnP xPL handler to the setup (see the<a href="http://www.promixis.com/forums/showthread.php?21127-UPnP-and-Girder&amp;p=145316#post145316" target="_blank"> forum thread</a> as it is not included yet in the xPLGirder files)</li>
</ul>
<li>Doing some testing;</li>
<ul>
<li>Install the <a title="UPnP example in Visual Basic, an improved Network Light sample" href="http://www.thijsschreijer.nl/blog/?p=450">software lightbulb</a> (if you install the developer tools, skip this one, as those tools have one too)</li>
<li>Install the Device Spy from the <a title="Open tools fro UPnP" href="http://opentools.homeip.net/dev-tools-for-upnp" target="_blank">UPnP developer tools</a></li>
</ul>
</ul>
<div>So what needs to be done still;</div>
<div>
<ul>
<li>Interface needs to be fixed, probably needs to be interface-less, running as a windows service</li>
<li>test against AV devices, which use a more complicated event structure</li>
<li>implement method invokation, so you can &#8216;command&#8217; the UPnP devices besides just reading them</li>
<li>For Girder; more &#8216;hooks&#8217; to the devices, to make it easier for users to work with UPnP devices</li>
</ul>
<div>
<p><script type="text/javascript"><!--
google_ad_client = "pub-3106191361299034";
/* 468x60, gemaakt 2-6-10 */
google_ad_slot = "2317741540";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.thijsschreijer.nl/blog/?feed=rss2&#038;p=531</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Updated xPLlib, with support for large fragmented messages</title>
		<link>http://www.thijsschreijer.nl/blog/?p=525</link>
		<comments>http://www.thijsschreijer.nl/blog/?p=525#comments</comments>
		<pubDate>Fri, 19 Aug 2011 18:54:58 +0000</pubDate>
		<dc:creator>Thijs Schreijer</dc:creator>
				<category><![CDATA[Home automation]]></category>
		<category><![CDATA[xPL]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[xPL protocol]]></category>
		<category><![CDATA[xpllib]]></category>

		<guid isPermaLink="false">http://www.thijsschreijer.nl/blog/?p=525</guid>
		<description><![CDATA[After some discussion a proposal was made on the xPL forums to add fragmentation so the message size limit could be bypassed. The schema for this is &#8216;fragment.basic&#8217; and support for it has been added to the xPL library for .NET in version 5.4. There are some other minor updates too, check the changelog for [...]]]></description>
			<content:encoded><![CDATA[<p>After some discussion a proposal was made on the xPL forums to add fragmentation so the message size limit could be bypassed. The schema for this is &#8216;fragment.basic&#8217; and support for it has been added to the xPL library for .NET in version 5.4.</p>
<p>There are some other minor updates too, check the changelog for those.</p>
<p>xPLLib for .NET is available for download on <a title="xPLLib for .Net" href="http://www.thijsschreijer.nl/blog/?page_id=118">the xPLLib page</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thijsschreijer.nl/blog/?feed=rss2&#038;p=525</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some updates; xPLLib and WireShark xPL dissector</title>
		<link>http://www.thijsschreijer.nl/blog/?p=519</link>
		<comments>http://www.thijsschreijer.nl/blog/?p=519#comments</comments>
		<pubDate>Fri, 05 Aug 2011 17:28:30 +0000</pubDate>
		<dc:creator>Thijs Schreijer</dc:creator>
				<category><![CDATA[Home automation]]></category>
		<category><![CDATA[xPL]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[dissector]]></category>
		<category><![CDATA[Lua]]></category>
		<category><![CDATA[protocol analyzer]]></category>
		<category><![CDATA[utility]]></category>
		<category><![CDATA[WireShark]]></category>
		<category><![CDATA[xPL protocol]]></category>
		<category><![CDATA[xpllib]]></category>

		<guid isPermaLink="false">http://www.thijsschreijer.nl/blog/?p=519</guid>
		<description><![CDATA[Today I posted some long overdue updates. Quite some time ago it was agreed to loosen up the xPL protocol with regard to the values in the xPL message body. From pure ASCII it now allows UTF8 encoding for the values (keys remain ASCII only). At the same time the length restriction of 128 characters [...]]]></description>
			<content:encoded><![CDATA[<p>Today I posted some long overdue updates. Quite some time ago it was agreed to loosen up the xPL protocol with regard to the values in the xPL message body.</p>
<p>From pure ASCII it now allows UTF8 encoding for the values (keys remain ASCII only). At the same time the length restriction of 128 characters was lifted, which basically means that the value can be as long as the overall message size supports (which is set at 1500 bytes).</p>
<p>So todays updates are the<a title="xPLLib for .Net" href="http://www.thijsschreijer.nl/blog/?page_id=118"> xPLLib for .NET</a>, version 5.3, updated to allow these changes and the <a title="WireShark xPL dissector; a network protocol analyzer" href="http://www.thijsschreijer.nl/blog/?p=479">WireShark dissector</a>, version 1.1, which will now show a warning (for backward compatibility) in cases of UTF8 and long values.</p>
<p>There are some other minor updates too, check the changelog for those.</p>
<p><span id="more-519"></span></p>
<p> <script type="text/javascript"><!--
google_ad_client = "pub-3106191361299034";
/* 468x60, gemaakt 2-6-10 */
google_ad_slot = "2317741540";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
<p>Downloads;</p>
<ul>
<li>xPLLib for .NET is available on <a title="xPLLib for .Net" href="http://www.thijsschreijer.nl/blog/?page_id=118">the xPLLib page</a></li>
<li>xPL dissector for WireShark can be <a title="WireShark xPL dissector; a network protocol analyzer" href="http://www.thijsschreijer.nl/blog/?p=479">downloaded from this post</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thijsschreijer.nl/blog/?feed=rss2&#038;p=519</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

