<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://savelkoul.net/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Antoine Savelkoul : Model Driven Software Development, Home Automation</title><link>http://savelkoul.net/cs/blogs/antoine/archive/tags/Model+Driven+Software+Development/Home+Automation/default.aspx</link><description>Tags: Model Driven Software Development, Home Automation</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>First designs for the home automation DSLs</title><link>http://savelkoul.net/cs/blogs/antoine/archive/2009/11/05/first-designs-for-the-home-automation-dsls.aspx</link><pubDate>Thu, 05 Nov 2009 18:12:00 GMT</pubDate><guid isPermaLink="false">c85263ac-6350-4393-b21e-03dd809752eb:218</guid><dc:creator>Antoine</dc:creator><slash:comments>0</slash:comments><comments>http://savelkoul.net/cs/blogs/antoine/comments/218.aspx</comments><wfw:commentRss>http://savelkoul.net/cs/blogs/antoine/commentrss.aspx?PostID=218</wfw:commentRss><description>&lt;P&gt;When writing this post I realized how many design choices I have already made while designing the first prototype. Too much to blog about, so I will only discuss a few design choices I have made. Firstly, I would like to start with describing the domain of the first DSLs.&lt;/P&gt;
&lt;P&gt;The first DSLs will be used to define the capabilities of devices that will be controlled by the home automation system. Examples of devices are light switches, dimmers, energy meters and the TV. It should not only be understandable by the designers of the devices, but also by its users. A high level description of the basic functionalities of a television might look like:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;The television has a power button that can be used to turn the television on and of. Furthermore, the volume can be set to a variable level or muted on and off without losing the previous sound level. The user can switch between the sources "HDMI", "VGA", "Composite in" and the build in tuner. The tuner has some pre-sets the user can choose from.&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;A visualization might result in an image like below:&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://www.savelkoul.net/projects/HomeAutomation/Model_TV.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;From this drawing we nearly have a language, we only need to formalize it. A pseudo description of the language might look like:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;A device type has a name&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;A device type has zero or more device functions&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;A device function has a name&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;A device function should be one of the following types:&lt;/EM&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;On / off&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Variable&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Fixed choice&lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Dynamic&amp;nbsp;choice&amp;nbsp;&lt;/EM&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;EM&gt;A fixed choice should have one or more pre defined options&lt;/EM&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;EM&gt;A variable should have a minimum and maximum level&lt;/EM&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;A second DSL is used to describe how the devices will talk&amp;nbsp;with the home automation system. My first observation was that, each device will receive commands through a transmitter unit or another connection. For example the light switches will receive signals from a transmitter and the television via a serial connection. But by defining it this way, each device implementation will depend on a specific transmitter or connection while, for example with the wireless light switches I have used, the user has the choice to use an original manufacturer's transmitter or one of RFXCOM. So, the original design was not completely in line with my goal to have a manufacturer independent solution.&lt;/P&gt;
&lt;P&gt;However, I came up with the idea to include communication protocols so that a manufacturer independent solution is possible. These communication protocols can be best compared with web services. The DSL for the communication protocol will have some resemblance with for example the &lt;A title="Web Service Software Factory" href="http://msdn.microsoft.com/en-us/library/bb931187.aspx" target=_blank&gt;Web Service Software Factory&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Some simplified examples of two communication protocols within my home automation system:&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 10pt 36pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;U&gt;&lt;SPAN style="FONT-FAMILY:Calibri;COLOR:black;"&gt;Wireless light switches&lt;/SPAN&gt;&lt;/U&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 10pt 36pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:Calibri;COLOR:black;"&gt;Request:&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt; 
&lt;TABLE style="MARGIN:auto auto auto 36pt;WIDTH:444.3pt;BORDER-COLLAPSE:collapse;" class=MsoNormalTable cellSpacing=0 cellPadding=0&gt;

&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;&lt;STRONG&gt;Parameter&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;&lt;STRONG&gt;Type&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;&lt;STRONG&gt;Is address&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;&lt;STRONG&gt;Description&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Home code&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;A .. P&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Yes&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Home code set on the device&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Device code&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;1 .. 16&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Yes&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Device group and number&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Value&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;on/off&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;No&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;On/off or dimming&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 10pt 36pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:Calibri;COLOR:black;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 10pt 36pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;U&gt;&lt;SPAN style="FONT-FAMILY:Calibri;COLOR:black;"&gt;TV Serial Control&lt;/SPAN&gt;&lt;/U&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 10pt 36pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:Calibri;COLOR:black;"&gt;Request:&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt; 
&lt;TABLE style="MARGIN:auto auto auto 36pt;WIDTH:444.3pt;BORDER-COLLAPSE:collapse;" class=MsoNormalTable cellSpacing=0 cellPadding=0&gt;

&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;&lt;STRONG&gt;Parameter&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;&lt;STRONG&gt;Type&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;&lt;STRONG&gt;Is address&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;&lt;STRONG&gt;Description&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Set ID&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;1 .. 99&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Yes&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;ID of the television&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Command 1&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;j,k,m,x&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;No&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;First part of command code&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Command 2&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;a .. z&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;No&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;second part of command code&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Data&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;0-255&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;No&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Value (on/of, level etc.)&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 10pt 36pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:Calibri;COLOR:black;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 10pt 36pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:Calibri;COLOR:black;"&gt;Response:&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt; 
&lt;TABLE style="MARGIN:auto auto auto 36pt;WIDTH:444.3pt;BORDER-COLLAPSE:collapse;" class=MsoNormalTable cellSpacing=0 cellPadding=0&gt;

&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;&lt;STRONG&gt;Parameter&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;&lt;STRONG&gt;Type&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;&lt;STRONG&gt;Is address&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-TOP:black 1pt solid;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;&lt;STRONG&gt;Description&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Command 2&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;a .. z&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;No&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Second part of the command received&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Set ID&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;1-99&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Yes&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;ID of the television&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Act code&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;OK, NC&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;No&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Indicates if the command has been received and executed successfully&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;BORDER-LEFT:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:111.75pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;Data&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:77.95pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:windowtext 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;0-255&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:131pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;No&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD style="BORDER-BOTTOM:black 1pt solid;PADDING-BOTTOM:0cm;BACKGROUND-COLOR:transparent;PADDING-LEFT:5.4pt;WIDTH:123.6pt;PADDING-RIGHT:5.4pt;BORDER-RIGHT:black 1pt solid;PADDING-TOP:0cm;"&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY:Calibri;"&gt;New value&lt;/SPAN&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 10pt;" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;SPAN style="FONT-FAMILY:Calibri;COLOR:black;"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Parameters can have a "Is address" flag. This flag will be used to add configuration parameters when adding devices to the home automation system.&lt;/P&gt;
&lt;P&gt;The last DSL I would like to discuss is the DSL used to assign the protocols to the devices. Within the image below we see how, by using the protocols, compatibility between devices can be modelled without creating direct dependencies.&lt;BR&gt;&lt;IMG src="http://www.savelkoul.net/projects/HomeAutomation/Model_DevicesAndProtocols.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;One interesting scenario for this DSL is that it should be easy to work with multiple people on. There will be several ways on how the model will be created. People can assign self defined or existing protocols to devices they have defined, but might not interested in all the transmitters that are available or all devices that can be controlled by a specific transmitter. On the other hand, protocols might be designed to control specific type of devices. For the end user there is no difference between a light switch controlled using a wireless protocol or using Power Line Communication. So, how the model above will be created and visualized is still something to think about.&lt;/P&gt;
&lt;P&gt;Some things that are not yet covered by the DSLs described in this blog post are:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;The translation of commands (protocol) to device functions&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;The translation of commands to, for example, to a textual representation used for communication over a serial link&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;These will also be covered by the first DSL prototypes I am designing. As soon as I have built these prototypes I will make some parts of my project available for download.&lt;/P&gt;
&lt;P&gt;For who is interested in other home automation DSLs too I can recommend the following interesting papers and blog posts of other people (thanks to Steven Kelly for providing some of the references):&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;A title="Online draft from Martin Fowler’s next book" href="http://martinfowler.com/dslwip/Intro.html"&gt;Online draft from Martin Fowler’s next book&lt;/A&gt;.&amp;nbsp;His DSL&amp;nbsp;is based on a state machine.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;A title="Steven Kelly discussing the DSL of Martin Fowler" href="http://www.metacase.com/blogs/stevek/blogView?showComments=true&amp;amp;entry=3414834520"&gt;Steven Kelly discussing the DSL of Martin Fowler&lt;/A&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;A title="The Making Of User-Interface Designer, A Proprietary DSM Tool" href="http://www.dsmforum.org/events/DSM07/papers/safa.pdf"&gt;The Making Of User-Interface Designer, A Proprietary DSM Tool&lt;/A&gt;&amp;nbsp;and &lt;A title="The Practice of Deploying DSM Report from a Japanese Appliance Maker Trenches" href="http://www.dsmforum.org/events/DSM06/Papers/19-safa.pdf"&gt;The Practice of Deploying DSM Report from a Japanese Appliance Maker Trenches&lt;/A&gt; by&amp;nbsp;Laurent Safa.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;Chapter 7 of the &lt;A title="Domain-Specific Modeling book" href="http://www.dsmbook.com/"&gt;Domain-Specific Modeling book&lt;/A&gt; from Steven Kelly and Juha-Pekka Tolvanen. See also the &lt;A title="example on dsmforum.org" href="http://www.dsmforum.org/voicemenu.html"&gt;example on dsmforum.org&lt;/A&gt;.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;A title="Oslo is running my house" href="http://blogs.msdn.com/krisho/archive/2009/03/24/oslo-is-running-my-house.aspx"&gt;OSLO is running my house&lt;/A&gt; by Kris Horrocks.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV&gt;&lt;A title="HAAIS DSL" href="http://portal.acm.org/citation.cfm?id=1519133&amp;amp;dl=GUIDE&amp;amp;coll=GUIDE&amp;amp;CFID=61530208&amp;amp;CFTOKEN=72985758"&gt;HAAIS DSL&lt;/A&gt;. You need a ACM account to download (unfortunately I don’t have such an account) and&amp;nbsp;&lt;A title="HAAIS DSL Presentation" href="http://ess.cs.tu-dortmund.de/workshops/iies/2009/presentations/clemente.pdf"&gt;HAAIS DSL Presentation&lt;/A&gt; (free download). The domain of the DSL on page 25 has an overlap with the domain I described in this blog post.&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://savelkoul.net/cs/aggbug.aspx?PostID=218" width="1" height="1"&gt;</description><category domain="http://savelkoul.net/cs/blogs/antoine/archive/tags/Model+Driven+Software+Development/default.aspx">Model Driven Software Development</category><category domain="http://savelkoul.net/cs/blogs/antoine/archive/tags/Home+Automation/default.aspx">Home Automation</category></item><item><title>Automated home: Applying Interaction Design on DSLs</title><link>http://savelkoul.net/cs/blogs/antoine/archive/2009/10/03/automated-home-applying-interaction-design-on-dsls.aspx</link><pubDate>Sat, 03 Oct 2009 16:17:00 GMT</pubDate><guid isPermaLink="false">c85263ac-6350-4393-b21e-03dd809752eb:215</guid><dc:creator>Antoine</dc:creator><slash:comments>1</slash:comments><comments>http://savelkoul.net/cs/blogs/antoine/comments/215.aspx</comments><wfw:commentRss>http://savelkoul.net/cs/blogs/antoine/commentrss.aspx?PostID=215</wfw:commentRss><description>&lt;P&gt;In my previous posts I have given an impression of the current situation (how the hardware is connected, which software I use). It is very tempting to dig into hardware and software details now, but during previous experiences with designing DSLs I learned that this will be the wrong way.&lt;/P&gt;
&lt;P&gt;During my Master’s thesis a few years ago I did an investigation at one of Netherlands major insurance companies. During this investigation, I designed a number of DSLs for the domain of medical statements. I did this in cooperation with domain experts. The methods I used were very promising.&lt;/P&gt;
&lt;P&gt;One of the methods I was inspired by is Interaction Design. A lot of papers and articles about designing DSLs will start with an analysis of the &lt;STRIKE&gt;problem&lt;/STRIKE&gt; solution domain by discussing complete hardware designs and software architectures (including some of my own). However, I decided to have a look at the how medical statements were defined by medical advisors, evaluated by legal advisors and implemented by software developers. This resulted in a totally different design as I primarily had in mind. I also believe that the methods I used will create more efficient DSLs that will really decrease the time needed per project phase because it covers the most relevant business logic while representing the language of the business. Thereby, the created models can even be used to validate requirements with domain experts saving valuable time on writing documentation.&lt;/P&gt;
&lt;P&gt;For my home automation system, I will apply these successful methods as well. With the only exception, that the group of volunteers who can act as domain experts will be smaller this time. The next step will be to form a list of personas that will have an important part in the process of designing and using this system.&lt;BR&gt;The personas are:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Residents of the automated home (e.g. a family with kids or elderly people)&lt;/LI&gt;
&lt;LI&gt;Owner or maintainer of the home automation system (normally the person in house who also configures the thermostat and television set)&lt;/LI&gt;
&lt;LI&gt;The installer of the home automation system (might be a small company or the owner self)&lt;/LI&gt;
&lt;LI&gt;Equipment manufacturers who want to make their equipment compatible with my home automation system&lt;/LI&gt;
&lt;LI&gt;Hobbyists who want to create their own hardware for the system&lt;/LI&gt;
&lt;LI&gt;Hobbyists who want to add existing (not by the manufacturer supported) hardware to the system&lt;/LI&gt;
&lt;LI&gt;Manufacturers, retailers and hobbyists who want to design their own user interfaces for the system&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In short (when writing an article about my project, I will give more details);&lt;BR&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The average residents just like to have an overview of the system, e.g. knowing where which equipment is located. They will not design their own system but at most define some simple macros.&lt;/LI&gt;
&lt;LI&gt;The installer of the system wants to be able to configure the system, e.g. how everything will be connected. They will also need the possibility to make some adjustments to the user interface and define some more complex macros.&lt;/LI&gt;
&lt;LI&gt;Equipment manufacturers and hobbyists who want to make their hardware compatible with the system need to create a software add-in. They need to be able to define what the capabilities of the hardware are, how they can be configured and implement the communication protocols. In the case of hardware that still has to be developed, the communication protocols might be even in scope for the design.&lt;/LI&gt;
&lt;LI&gt;Finally, some manufacturers, retailers and hobbyists might give their own touch and feel to the system by designing their own user interfaces.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;These are a number of personas I have identified so far. For the first phase of my project I would like to limit my scope to the device side because without having them connected, other parts like customizable user interfaces will be useless. In one of my next blog posts I will show an initial design of my first DSL.&lt;/P&gt;
&lt;P&gt;Recommendation for reading:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Alan Cooper. The Inmates Are Running the Asylum.&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://savelkoul.net/cs/aggbug.aspx?PostID=215" width="1" height="1"&gt;</description><category domain="http://savelkoul.net/cs/blogs/antoine/archive/tags/Model+Driven+Software+Development/default.aspx">Model Driven Software Development</category><category domain="http://savelkoul.net/cs/blogs/antoine/archive/tags/Home+Automation/default.aspx">Home Automation</category></item><item><title>Still busy with DSLs</title><link>http://savelkoul.net/cs/blogs/antoine/archive/2009/09/10/still-busy-with-dsls.aspx</link><pubDate>Thu, 10 Sep 2009 17:22:00 GMT</pubDate><guid isPermaLink="false">c85263ac-6350-4393-b21e-03dd809752eb:210</guid><dc:creator>Antoine</dc:creator><slash:comments>0</slash:comments><comments>http://savelkoul.net/cs/blogs/antoine/comments/210.aspx</comments><wfw:commentRss>http://savelkoul.net/cs/blogs/antoine/commentrss.aspx?PostID=210</wfw:commentRss><description>After moving to the apartment of my girlfriend and my and doing some jobs to make it our place, I recently took a week off to work on some of my ideas. One of the projects I started is a DSL for home automation and smart metering.&amp;nbsp; The goal of the DSL will be to simplify the way of building add-ins to support several types of devices like wireless switch units, energy meters and a/v equipment. This while maintaining a manufacturer independent architecture of the home automation system.&amp;nbsp; Thus far the results are promising. Within the next months, I hope to explain a little bit more of the approach I´m taking in my home automation.&lt;img src="http://savelkoul.net/cs/aggbug.aspx?PostID=210" width="1" height="1"&gt;</description><category domain="http://savelkoul.net/cs/blogs/antoine/archive/tags/Model+Driven+Software+Development/default.aspx">Model Driven Software Development</category><category domain="http://savelkoul.net/cs/blogs/antoine/archive/tags/Home+Automation/default.aspx">Home Automation</category></item></channel></rss>