|
From: <j-...@us...> - 2011-11-29 16:33:18
|
Revision: 550
http://openautomation.svn.sourceforge.net/openautomation/?rev=550&view=rev
Author: j-n-k
Date: 2011-11-29 16:33:08 +0000 (Tue, 29 Nov 2011)
Log Message:
-----------
merged all changes from post-0.6.0 to HEAD, fixing TAB in a lot of places
Modified Paths:
--------------
CometVisu/trunk/visu/designs/structure_pure.js
CometVisu/trunk/visu/lib/templateengine.js
CometVisu/trunk/visu/plugins/diagram/structure_plugin.js
CometVisu/trunk/visu/visu_config.xsd
CometVisu/trunk/visu/visu_config_demo.xml
Modified: CometVisu/trunk/visu/designs/structure_pure.js
===================================================================
--- CometVisu/trunk/visu/designs/structure_pure.js 2011-11-27 21:44:05 UTC (rev 549)
+++ CometVisu/trunk/visu/designs/structure_pure.js 2011-11-29 16:33:08 UTC (rev 550)
@@ -60,7 +60,14 @@
this.addCreator('page', {
create: function( page, path, flavour ) {
var $p = $(page);
- var ret_val = $('<div class="widget" />');
+
+ var address = {};
+ if ($p.attr('ga')) {
+ src = $p.attr('ga');
+ ga_list.push($p.attr('ga'));
+ address[ '_' + $p.attr('ga') ] = [ 'DPT:1.001', 0 ];
+ }
+
var pstyle = ( '0' != path ) ? 'display:none;' : ''; // subPage style
var name = $p.attr('name');
var type = $p.attr('type'); //text, 2d or 3d
@@ -68,10 +75,24 @@
var wstyle = ''; // widget style
if( $p.attr('align') ) wstyle += 'text-align:' + $p.attr('align') + ';';
if( wstyle != '' ) wstyle = 'style="' + wstyle + '"';
- ret_val.addClass( 'link' ).addClass('pagelink');
- ret_val.append( '<div ' + wstyle + '><a href="javascript:scrollToPage(\''+path+'\')">' + name + '</a></div>' );
+
+ var ret_val;
+
+ if ($p.attr('visible')=='false') {
+ ret_val=$('');
+ } else { // default is visible
+ ret_val = $('<div class="widget"/>');
+ ret_val.addClass( 'link' ).addClass('pagelink');
+ ret_val.append( '<div ' + wstyle + '><a href="javascript:scrollToPage(\''+path+'\')">' + name + '</a></div>' );
+ }
+
var childs = $p.children();
var container = $( '<div class="clearfix"/>' );
+
+ var $container = $( '<div class="clearfix" path="'+path+'"/>');
+ for( var addr in address ) $container.bind( addr, this.update );
+ var container=$container;
+
container.append( '<h1>' + name + '</h1>' );
$( childs ).each( function(i){
container.append( create_pages( childs[i], path + '_' + i, flavour ) );
@@ -85,10 +106,18 @@
attributes: {
align: { type: 'string', required: false },
flavour:{ type: 'string', required: false },
- name: { type: 'string', required: true }
+ name: { type: 'string', required: true },
+ ga: { type: 'addr', required: false },
+ visible:{ type: 'string', required: false }
},
elements: {
},
+ update: function(e, data) {
+ if (data==01) {
+ scrollToPage(this.attributes.path.nodeValue);
+ visu.write(e.type.substr(1), transformEncode("DPT:1.001", 0));
+ }
+ },
content: true
});
@@ -697,7 +726,11 @@
if( $p.attr('background') ) style += 'background-color:' + $p.attr('background') + ';';
if( style != '' ) style = 'style="' + style + '"';
var actor = '<div class="actor"><iframe src="' +$p.attr('src') + '" ' + style + '></iframe></div>';
- ret_val.append( $(actor) );
+
+ var refresh = $p.attr('refresh') ? $p.attr('refresh')*1000 : 0;
+ ret_val.append( $(actor).data( {
+ 'refresh': refresh
+ } ).each(setupRefreshAction) ); // abuse "each" to call in context...
return ret_val;
},
attributes: {
@@ -705,7 +738,8 @@
width: { type: 'string', required: false },
height: { type: 'string', required: false },
frameborder: { type: 'list' , required: false, list: {'true': "yes", 'false': "no"} },
- background: { type: 'string', required: false }
+ background: { type: 'string', required: false },
+ refresh: { type: 'numeric', required: false }
},
elements: {
label: { type: 'string', required: false, multi: false }
Modified: CometVisu/trunk/visu/lib/templateengine.js
===================================================================
--- CometVisu/trunk/visu/lib/templateengine.js 2011-11-27 21:44:05 UTC (rev 549)
+++ CometVisu/trunk/visu/lib/templateengine.js 2011-11-29 16:33:08 UTC (rev 550)
@@ -344,6 +344,14 @@
{
$('#'+page_id).css( 'display', '' ); // show new page
main_scroll.seekTo( $('.page').index( $('#'+page_id)[0] ), speed ); // scroll to it
+ var pagedivs=$('div', '#'+page_id);
+ for( var i = 0; i<pagedivs.length; i++) //check for inline diagrams & refresh
+ {
+ if( pagedivs[i].className == 'diagram_inline')
+ {
+ refreshDiagram(pagedivs[i]);
+ }
+ }
}
function updateTopNavigation()
@@ -408,7 +416,7 @@
var refresh = $(this).data('refresh');
if( refresh && refresh > 0 )
{
- var target = $('img', $(this) )[0];
+ var target = $('img', $(this) )[0] || $('iframe', $(this) )[0];
var src = target.src;
if( src.indexOf('?') < 0 ) src += '?';
$(this).data('interval', setInterval( function(){refreshAction(target, src);}, refresh ) );
Modified: CometVisu/trunk/visu/plugins/diagram/structure_plugin.js
===================================================================
--- CometVisu/trunk/visu/plugins/diagram/structure_plugin.js 2011-11-27 21:44:05 UTC (rev 549)
+++ CometVisu/trunk/visu/plugins/diagram/structure_plugin.js 2011-11-29 16:33:08 UTC (rev 550)
@@ -56,6 +56,8 @@
diagram.data("datasource", $p.attr("datasource") || "AVERAGE");
diagram.data("label", $p.find('label')[0] ? $p.find('label')[0].textContent : '');
diagram.data("refresh", $p.attr("refresh"));
+ diagram.data("linecolor", $p.attr("linecolor") || "");
+ diagram.data("gridcolor", $p.attr("gridcolor") || "");
refreshDiagram(diagram, {});
@@ -69,7 +71,9 @@
series: {type: "list", required: false, list: {hour: "hours", day: "days", week: "weeks", month: "months", year: "years"}},
period: {type: "numeric", required: false},
datasource: {type: "list", required: false, list: {'MIN': "Min", 'AVERAGE': "Avg", 'MAX': "Max"}},
- refresh: {type: "numeric", required: false}
+ refresh: {type: "numeric", required: false},
+ linecolor: {type: "string", required: false},
+ gridcolor: {type: "string", required: false}
},
elements: {
label: { type: 'string', required: false, multi: false }
@@ -112,6 +116,8 @@
diagram.data("datasource", $p.attr("datasource") || "AVERAGE");
diagram.data("label", $p.find('label')[0] ? $p.find('label')[0].textContent : '');
diagram.data("refresh", $p.attr("refresh"));
+ diagram.data("linecolor", $p.attr("linecolor") || "");
+ diagram.data("gridcolor", $p.attr("gridcolor") || "");
var bDiagram = $("<div class=\"diagram\" id=\"" + id + "_big\"/>");
@@ -177,6 +183,8 @@
period: {type: "numeric", required: false},
datasource: {type: "list", required: false, list: {'MIN': "Min", 'AVERAGE': "Avg", 'MAX': "Max"}},
refresh: {type: "numeric", required: false},
+ linecolor: {type: "string", required: false},
+ gridcolor: {type: "string", required: false},
tooltip: {type: "list", required: false, list: {'true': "yes", 'false': "no"}},
},
elements: {
@@ -185,6 +193,140 @@
content: false
});
+VisuDesign_Custom.prototype.addCreator("diagram_info", {
+ create: function( page, path ) {
+ var $p = $(page);
+
+ var address = {};
+ $p.find('address').each( function(){
+ var src = this.textContent;
+ ga_list.push( src )
+ address[ '_' + src ] = [ this.getAttribute('transform') ];
+ });
+
+ function uniqid() {
+ var newDate = new Date;
+ return newDate.getTime();
+ }
+
+ var id = "diagram_" + uniqid();
+
+ var ret_val = $('<div class="widget" />');
+ ret_val.addClass( 'diagram' );
+
+ var labelElement = $p.find('label')[0];
+ var label = labelElement ? '<div class="label">' + labelElement.textContent + '</div>' : '';
+
+ var actor = '<div class="actor switchUnpressed ';
+ if ( $p.attr( 'align' ) )
+ actor += $p.attr( 'align' );
+ actor += '">';
+ var map = $p.attr('mapping');
+ if( mappings[map] && mappings[map][value] )
+ actor += '<div class="value">' + mappings[map][value] + '</div>';
+ else
+ actor += '<div class="value">-</div>';
+ actor += '</div>';
+
+ var $actor = $(actor).data({
+ 'address' : address,
+ 'format' : $p.attr('format'),
+ 'mapping' : $p.attr('mapping'),
+ 'styling' : $p.attr('styling')
+ });
+ for( var addr in address ) $actor.bind( addr, this.update );
+
+ ret_val.append(label).append($actor);
+
+ $actor.addClass("clickable");
+
+ var bDiagram = $("<div class=\"diagram\" id=\"" + id + "_big\"/>");
+
+ bDiagram.data("id", id);
+ bDiagram.data("rrd", $p.attr("rrd"));
+ bDiagram.data("unit", $p.attr("unit") || "");
+ bDiagram.data("series", $p.attr("series") || "day");
+ bDiagram.data("period", $p.attr("period") || 1);
+ bDiagram.data("datasource", $p.attr("datasource") || "AVERAGE");
+ bDiagram.data("label", labelElement.textContent);
+ bDiagram.data("refresh", $p.attr("refresh"));
+ bDiagram.data("linecolor", $p.attr("linecolor") || "");
+ bDiagram.data("gridcolor", $p.attr("gridcolor") || "");
+
+ var data = jQuery.extend({}, bDiagram.data());
+
+ $actor.bind("click", function() {
+ bDiagram.data(data);
+ bDiagram.css({height: "90%"});
+
+ showPopup("unknown", {title: labelElement.textContent, content: bDiagram});
+ bDiagram.parent("div").css({height: "100%", width: "90%", margin: "auto"}); // define parent as 100%!
+
+ var bDiagramOpts = {yaxis: {labelWidth: null}};
+ if ($p.attr("tooltip") == "true") {
+ // if we want to display a tooltip, we need to listen to the event
+ var previousPoint = null;
+ jQuery(bDiagram).bind("plothover", function (event, pos, item) {
+ jQuery("#x").text(pos.x.toFixed(2));
+ jQuery("#y").text(pos.y.toFixed(2));
+
+ if (item) {
+ if (previousPoint != item.datapoint) {
+ previousPoint = item.datapoint;
+
+ $("#diagramTooltip").remove();
+ var x = item.datapoint[0],
+ y = item.datapoint[1].toFixed(2);
+
+ //This is a mess but toLocaleString expects UTC again
+ var offset = new Date().getTimezoneOffset() * 60 * 1000;
+ var dte = new Date(x + offset);
+ showDiagramTooltip(item.pageX, item.pageY,
+ dte.toLocaleString() + ": " + y + jQuery(this).data("unit"));
+ }
+ }
+ else {
+ $("#diagramTooltip").remove();
+ previousPoint = null;
+ }
+
+ })
+ .bind("click", function(event) {
+ // don't let the popup know about the click, or it will close on touch-displays
+ event.stopPropagation();
+ });
+
+ bDiagramOpts = jQuery.extend(bDiagramOpts, {grid: {hoverable: true, clickable: true} });
+ }
+
+ refreshDiagram(bDiagram, bDiagramOpts);
+ return false;
+ });
+
+ return ret_val;
+ },
+ update: defaultUpdate,
+ attributes: {
+ rrd: {type: "string", required: true},
+ unit: {type: "string", required: false},
+ series: {type: "list", required: false, list: {hour: "hours", day: "days", week: "weeks", month: "months", year: "years"}},
+ period: {type: "numeric", required: false},
+ datasource: {type: "list", required: false, list: {'MIN': "Min", 'AVERAGE': "Avg", 'MAX': "Max"}},
+ refresh: {type: "numeric", required: false},
+ tooltip: {type: "list", required: false, list: {'true': "yes", 'false': "no"}},
+ linecolor: {type: "string", required: false},
+ gridcolor: {type: "string", required: false},
+ format: { type: 'format', required: false },
+ mapping: { type: 'mapping', required: false },
+ styling: { type: 'styling', required: false }
+ },
+ elements: {
+ label: { type: 'string', required: true, multi: false },
+ address: { type: 'address', required: true, multi: true }
+ },
+ content: {type: "string", required: true}
+});
+
diagramColors = {
data: $("<span class='link'><a href='#' /></a>").find("a").css("color")
};
@@ -209,7 +351,9 @@
var refresh = diagram.data("refresh");
var datasource = diagram.data("datasource") || "AVERAGE";
var period = diagram.data("period") || 1;
-
+ var linecolor = diagram.data("linecolor") || diagramColors.data;
+ var gridcolor = diagram.data("gridcolor") || "#81664B";
+
var series = {
hour: {label: "hour", res: "60", start: "hour", end: "now"},
day: {label: "day", res: "300", start: "day", end: "now"},
@@ -236,12 +380,10 @@
grid: {
show: true,
aboveData: false,
- color: "#81664B",
+ color: gridcolor,
backgroundColor: "black",
- tickColor: "#81664B",
- borderColor: "#81664B"//,
- //axisMargin: 0,
- //labelMargin: 0
+ tickColor: gridcolor,
+ borderColor: gridcolor
}
},
flotoptions);
@@ -255,7 +397,7 @@
dataType: "json",
type: "GET",
success: function(data) {
- var color = diagramColors.data || options.grid.color;
+ var color = linecolor || options.grid.color;
var offset = new Date().getTimezoneOffset() * 60 * 1000;
//TODO: find a better way
for (var j = 0; j < data.length; j++) {
@@ -275,9 +417,6 @@
}
}
-
-
-
return false;
}
Modified: CometVisu/trunk/visu/visu_config.xsd
===================================================================
--- CometVisu/trunk/visu/visu_config.xsd 2011-11-27 21:44:05 UTC (rev 549)
+++ CometVisu/trunk/visu/visu_config.xsd 2011-11-29 16:33:08 UTC (rev 550)
@@ -43,7 +43,6 @@
<xsd:attribute name="max" type="xsd:decimal" />
<xsd:attribute name="step" type="xsd:decimal" />
-
<xsd:attribute name="transform" type="xsd:string" />
<xsd:attribute name="format" type="xsd:string" />
@@ -152,17 +151,17 @@
<xsd:element name="page">
<xsd:complexType>
<xsd:choice minOccurs="0" maxOccurs="unbounded">
- <!-- visual effects -->
+ <!-- visual effects -->
<xsd:element name="line" type="line" />
- <xsd:element name="break" type="break" />
- <xsd:element name="group" type="group" />
+ <xsd:element name="break" type="break" />
+ <xsd:element name="group" type="group" />
<!-- list all possbile widgets here -->
<xsd:element name="text" type="text" />
<xsd:element name="switch" type="switch" />
<xsd:element name="toggle" type="switch" />
<xsd:element name="trigger" type="trigger" />
<xsd:element name="multitrigger" type="multitrigger" />
- <xsd:element name="infotrigger" type="infotrigger" />
+ <xsd:element name="infotrigger" type="infotrigger" />
<xsd:element name="designtoggle" type="designtoggle" />
<xsd:element name="slide" type="slide" />
<xsd:element name="info" type="info" />
@@ -179,21 +178,23 @@
<xsd:attribute name="name" type="xsd:string" use="required" />
<xsd:attribute name="flavour" type="xsd:string" use="optional" />
<xsd:attribute ref="align" use="optional" />
+ <xsd:attribute name="ga" type="addr" use="optional" />
+ <xsd:attribute name="visible" type="xsd:boolean" />
</xsd:complexType>
</xsd:element>
<xsd:complexType name="group">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
- <!-- visual effects -->
+ <!-- visual effects -->
<xsd:element name="line" type="line" />
- <xsd:element name="break" type="break" />
- <!-- list all possbile widgets here -->
+ <xsd:element name="break" type="break" />
+ <!-- list all possbile widgets here -->
<xsd:element name="text" type="text" />
<xsd:element name="switch" type="switch" />
<xsd:element name="toggle" type="switch" />
<xsd:element name="trigger" type="trigger" />
<xsd:element name="multitrigger" type="multitrigger" />
- <xsd:element name="infotrigger" type="infotrigger" />
+ <xsd:element name="infotrigger" type="infotrigger" />
<xsd:element name="designtoggle" type="designtoggle" />
<xsd:element name="slide" type="slide" />
<xsd:element name="info" type="info" />
@@ -267,17 +268,17 @@
<xsd:element name="address" type="address" minOccurs="1" maxOccurs="unbounded"/>
</xsd:choice>
<xsd:attribute name="upvalue" type="xsd:string" use="optional"/>
- <xsd:attribute name="downvalue" type="xsd:string" use="optional"/>
- <xsd:attribute name="uplabel" type="xsd:string" use="optional"/>
- <xsd:attribute name="downlabel" type="xsd:string" use="optional"/>
+ <xsd:attribute name="downvalue" type="xsd:string" use="optional"/>
+ <xsd:attribute name="uplabel" type="xsd:string" use="optional"/>
+ <xsd:attribute name="downlabel" type="xsd:string" use="optional"/>
<xsd:attribute name="change" type="xsd:string" use="optional"/>
<xsd:attribute ref="min" />
<xsd:attribute ref="max" />
<xsd:attribute ref="mapping" use="optional"/>
- <xsd:attribute ref="styling" use="optional"/>
+ <xsd:attribute ref="styling" use="optional"/>
<xsd:attribute ref="align" use="optional" />
- <xsd:attribute ref="format" use="optional" />
- <xsd:attribute name="infoposition" type="xsd:decimal" use="optional" />
+ <xsd:attribute ref="format" use="optional" />
+ <xsd:attribute name="infoposition" type="xsd:decimal" use="optional" />
</xsd:complexType>
<xsd:complexType name="multitrigger">
@@ -331,7 +332,7 @@
<xsd:complexType name="video">
<xsd:choice maxOccurs="unbounded" minOccurs="0">
- <xsd:element name="label" type="xsd:string" maxOccurs="1" />
+ <xsd:element name="label" type="xsd:string" maxOccurs="1" />
</xsd:choice>
<xsd:attribute name="src" type="uri" use="required" />
<xsd:attribute name="width" type="dimension" />
@@ -341,13 +342,14 @@
<xsd:complexType name="iframe">
<xsd:choice maxOccurs="unbounded" minOccurs="0">
- <xsd:element name="label" type="xsd:string" maxOccurs="1" />
+ <xsd:element name="label" type="xsd:string" maxOccurs="1" />
</xsd:choice>
<xsd:attribute name="src" type="uri" use="required" />
<xsd:attribute name="width" type="dimension" />
<xsd:attribute name="height" type="dimension" />
<xsd:attribute name="frameborder" type="xsd:string" />
<xsd:attribute name="background" type="xsd:string" />
+ <xsd:attribute name="refresh" type="xsd:decimal" />
</xsd:complexType>
<xsd:complexType name="colorchooser" >
@@ -358,40 +360,60 @@
</xsd:complexType>
<xsd:complexType name="diagram_inline">
- <xsd:simpleContent>
- <xsd:extension base="xsd:string">
- <xsd:attribute name="rrd" type="xsd:string" use="required" />
- <xsd:attribute name="unit" type="xsd:string" use="optional" />
- <xsd:attribute name="width" type="dimension" use="optional"/>
- <xsd:attribute name="series" type="xsd:string" use="optional"/>
- <xsd:attribute name="height" type="dimension" use="optional"/>
- <xsd:attribute name="refresh" type="xsd:integer" use="optional" />
- <xsd:attribute name="period" type="xsd:string" use="optional" />
- <xsd:attribute name="datasource" type="xsd:string" use="optional" />
- </xsd:extension>
- </xsd:simpleContent>
+ <xsd:choice maxOccurs="unbounded" minOccurs="1">
+ <xsd:element name="label" type="xsd:string" maxOccurs="1" />
+ </xsd:choice>
+ <xsd:attribute name="rrd" type="xsd:string" use="required" />
+ <xsd:attribute name="unit" type="xsd:string" use="optional" />
+ <xsd:attribute name="width" type="dimension" use="optional"/>
+ <xsd:attribute name="series" type="xsd:string" use="optional"/>
+ <xsd:attribute name="height" type="dimension" use="optional"/>
+ <xsd:attribute name="refresh" type="xsd:integer" use="optional" />
+ <xsd:attribute name="period" type="xsd:string" use="optional" />
+ <xsd:attribute name="datasource" type="xsd:string" use="optional" />
+ <xsd:attribute name="linecolor" type="xsd:string" use="optional" />
+ <xsd:attribute name="gridcolor" type="xsd:string" use="optional" />
</xsd:complexType>
<xsd:complexType name="diagram_popup" >
- <xsd:simpleContent>
- <xsd:extension base="xsd:string">
- <xsd:attribute name="rrd" type="xsd:string" use="required" />
- <xsd:attribute name="unit" type="xsd:string" use="optional" />
- <xsd:attribute name="series" type="xsd:string" use="optional" />
- <xsd:attribute name="refresh" type="xsd:integer" use="optional" />
- <xsd:attribute name="period" type="xsd:string" use="optional" />
- <xsd:attribute name="datasource" type="xsd:string" use="optional" />
- <xsd:attribute name="tooltip" type="xsd:string" use="optional" />
- </xsd:extension>
- </xsd:simpleContent>
+ <xsd:choice maxOccurs="unbounded" minOccurs="1">
+ <xsd:element name="label" type="xsd:string" maxOccurs="1" />
+ </xsd:choice>
+ <xsd:attribute name="rrd" type="xsd:string" use="required" />
+ <xsd:attribute name="unit" type="xsd:string" use="optional" />
+ <xsd:attribute name="series" type="xsd:string" use="optional" />
+ <xsd:attribute name="refresh" type="xsd:integer" use="optional" />
+ <xsd:attribute name="period" type="xsd:string" use="optional" />
+ <xsd:attribute name="datasource" type="xsd:string" use="optional" />
+ <xsd:attribute name="tooltip" type="xsd:string" use="optional" />
+ <xsd:attribute name="linecolor" type="xsd:string" use="optional" />
+ <xsd:attribute name="gridcolor" type="xsd:string" use="optional" />
</xsd:complexType>
+<xsd:complexType name="diagram_info" >
+ <xsd:choice maxOccurs="unbounded" minOccurs="1">
+ <xsd:element name="label" type="xsd:string" maxOccurs="1" />
+ <xsd:element name="address" type="address" minOccurs="1"/>
+ </xsd:choice>
+ <xsd:attribute ref="format" use="optional" />
+ <xsd:attribute ref="styling" use="optional" />
+ <xsd:attribute ref="mapping" use="optional" />
+ <xsd:element name="label" type="xsd:string" maxOccurs="1" />
+ <xsd:attribute name="rrd" type="xsd:string" use="required" />
+ <xsd:attribute name="unit" type="xsd:string" use="optional" />
+ <xsd:attribute name="series" type="xsd:string" use="optional" />
+ <xsd:attribute name="refresh" type="xsd:integer" use="optional" />
+ <xsd:attribute name="period" type="xsd:string" use="optional" />
+ <xsd:attribute name="datasource" type="xsd:string" use="optional" />
+ <xsd:attribute name="tooltip" type="xsd:string" use="optional" />
+ <xsd:attribute name="linecolor" type="xsd:string" use="optional" />
+ <xsd:attribute name="gridcolor" type="xsd:string" use="optional" />
+</xsd:complexType>
+
<xsd:complexType name="break" />
<xsd:complexType name="line" />
<!-- toggle is not yet implemented -->
-<!-- shade is not yet implemented -->
-
</xsd:schema>
Modified: CometVisu/trunk/visu/visu_config_demo.xml
===================================================================
--- CometVisu/trunk/visu/visu_config_demo.xml 2011-11-27 21:44:05 UTC (rev 549)
+++ CometVisu/trunk/visu/visu_config_demo.xml 2011-11-29 16:33:08 UTC (rev 550)
@@ -370,6 +370,10 @@
<label>KNX traffic</label>
</diagram_popup>
<diagram_inline rrd="eib_traffic" width="600" height="400"/>
+ <diagram_info rrd="200_DALI_Linie_1_Strom" unit="mA" series="day" refresh="300">
+ <label>DALI Strom L1</label>
+ <address transform="DPT:9.021">14/2/7</address>
+ </diagram_info>
<line/>
<page name="Erweiterte Widgets">
<text>Auf dieser Seite sind Widgets zu finden, die noch in Entwicklung
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|