Ankündigung

Einklappen
Keine Ankündigung bisher.

UVR1611 über BL-NET auslesen Jetzt einfacher

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] UVR1611 über BL-NET auslesen Jetzt einfacher

    Hallo,

    ich habe das Plugin zum einlesen von Werten von der UVR etwas weiter entwickelt.

    Was mich am Plugin gestört habe ist einzig die Konfiguration. Die Strings
    Code:
    [UVR1611DATEN]$n1a0|$n1a1|$n1a2|$n1d0|$n1d1[/UVR1611DATEN]
    ('1/6/100','1/6/101','1/6/102','1/7/100','1/7/101');
    (9.001,9.001,9.001,1.001,1.001);
    ('aussen_temp','innen_temp','vorlauf_temp','ventilHzRL_bool','anforderungBrenner_bool');
    zu erstellen war recht aufwändig.

    Allerdings hat TA einen wunderbares GUI für uns: Den TA-Designer.
    Dieser erstellt eine XML und die HTML. Die XML ist die *.conf des Plugin.

    Vorgehen:
    1) Konfiguration im TA-Designer erstellen
    Der TA-Designer dient dazu, das OnlineSchema - also die Visu der UVR- zu erstellen. Dies besteht aus drei Schritten:
    • Import der TAPPS *.dat
    • Import eines Bildes -z.B. dem Hydraulikschema
    • Drag&Drop der Variablen in das Bild.

    Super hier: Es sind alle Funktionen aus der TAPPS richtig bezeichnet. Man kann sie browsen. Siehe Anhang.

    Für das Plugin müssen jetzt einfach alle gewünschten Variablen in das Bild gezogen werden.
    Die GA und der DPT werden über den Text (Default XXX), siehe zweiter Screenshot, definiert.

    2) Plugin konfigurieren
    Die XML in das Web-IF (unter conf) kopieren.
    Im Plugin die IP anpassen.

    3) OnlineSchema.html anpassen und übertragen*)
    Nach dem Kopieren der XML in das Web-If kann im Plugin-Log der String gefunden werden, der in die HTML (das Online-Schema) kopiert werden muss. Dann wird die HTML-Datei ganz normal mit dem Memory-Manager in den BL-Net übertragen.


    Funktionen:
    RRD
    Alle Variablen werden eingelesen und mit ihrem Namen als RRD gespeichert. Der Name des RRD kommt aus der XML/der UVR/dem TA-Designer. Er muss nicht manuell angegeben werden.

    KNX
    Variablen für die wie o.g. im TA-Designer eine Ga und ein DPT angegeben werden, werden auf den Bus gesendet

    Visu
    Wer sich im TA-Designer ein bisschen mehr Arbeit macht, hat gleich auch ne Visu für die UVR.
    [ACHTUNG]Bisher kaum getestet[/ACHTUNG]

    [HILFE]Danke an micha für das ursprüngliche Plugin und Swiss für die Hilfe[/HILFE]

    Hier das Plugin
    Code:
    #!/usr/bin/perl
    use strict;
    
    # ******************************************************************************
    # by Hendrik Friedel (henfri) basierend auf Plugin von micha218 erweitert um XML-Einlesen
    # Vielen Dank für die Hilfe von swiss beim XML.
    # Das Plugin liest Werte der UVR 1611 über BL-Net ein, legt sie in RRDs ab und 
    # sendet sie auf den Bus.
    # Im Onlineschema des BL-Net müssen die Variabeln der zu lesenden Ein-/Ausgänge
    # innerhalb der Tags [UVR1611DATEN] [/UVR1611DATEN] eingetragen sein. Dies kann
    # z.B. im META Tag "Description" manuell vor dem Übertragen mit dem Memory
    # Manager hinzugefügt werden.
    # Beispiel:
    # <!-- [UVR1611DATEN]$n1a0|$n1a1|$n1a2|$n1d0|$n1d1[/UVR1611DATEN] -->
    # Info zum Schema: http://doku.uvr1611.at/doku.php/de/onlineschema/onlineschema 
    # Der String wird im Plugin-Log angegeben. Bitte daraus in die HTML kopieren. 
    # Konfiguration:
    # Das Plugin benötigt als Input lediglich die XML des TA-Designer (http://www.ta.co.at/download/datenblaumltter/volumenstromgeber-fts-vfs-vsg/fts-dl/index.php?option=com_jdownloads&Itemid=103&task=viewcategory&catid=153)
    # Hierzu bitte im Designer alle Größen, die eingelesen werden sollen per Drag&Drop in das Schema ziehen. 
    # Die Positionierung der Elemente ist nicht relevant -es bietet sich aber an, gleich die Visualisierung 
    # mit zu erstellen.
    # Die Gruppenadressen und DPT werden ebenfalls im TA-Designer definiert.
    # Hierzu wird der "Test-Text" (Doppelklick auf Feld) genutzt.
    # 1/2/3;9.001 (GA;DPT)
    # Die Daten werden zugleich in einen RRD gespeichert. Der Name entspricht der Bezeichnung in der XML
    # In der Plugin-Datei (dem Code, dieser Datei) muss nur die URL ($uvrURL) angepasst werden
    # *****************VORSICHT***************************
    # ****Die XML darf keine Sonderzeichen enthalten******
    # *****************VORSICHT***************************
    # Idee zur Vereinfachung: in der XML haben alle Zeilen eine ID/sind nummeriert.
    # Diese IDs sind auch in der HTML vorhanden (div-Elemente)
    # Hierüber können die Daten zugeordnet werden, ohne dass der String in die HTML eingefügt werden muss.
    # ******************************************************************************
    
    my $uvrUrl = 'http://192.168.178.5/GRAFIK1.htm';
    
    my @rrdName;
    my @knxGA;
    my @knxDPT;
    
    # Alternative Konfiguration ohne XML:
    # my @knxGA = ('1/6/100','1/6/101','1/6/102','1/7/100','1/7/101');
    # my @knxDPT = (9.001,9.001,9.001,1.001,1.001);
    # my @rrdName = ('aussen_temp','innen_temp','vorlauf_temp','ventilHzRL_bool','anforderungBrenner_bool');
    
    
    
    # vorübergehedes disablen des Plugins:
    # return "disabled";
    
    # plugin nicht zyklisch ausführen
    # $plugin_info{$plugname.'_cycle'} = 0;
    # plugin zyklisch ausführen
    $plugin_info{$plugname.'_cycle'} = $wg_config{''}{'rrd_interval'};
    
    # Eine KNX GA abonnieren: Plugin wird aufgerufen, sobald ein Paket an diese GA
    # kommt. Der Inhalt des Pakets steht dann in $msg.
    # $plugin_subscribe{'7/0/15'}{$plugname} = 1;
    
    
    #Ab hier nichts mehr ändern. Läuft automatisch
    my %umlaute = ("ä" => "ae", "Ä" => "Ae", "ü" => "ue", "Ü" => "Ue", "ö" => "oe", "Ö" => "Oe", "ß" => "ss" );
    my $umlautkeys = join ("|", keys(%umlaute));
    my $i = 0;
    
    
    if (@knxGA) {
      plugin_log($plugname, 'Manuelle Konfiguration ohne XML via Variablen im Plugin-Code')
    } else
    {
    # XML darf keine ÄÖÜ so wie andere Sonderzeichen oder das scharfe doppel S enthalten!!!!
    
    
    
    use XML::Simple;
    use Encode qw(encode decode);
    
    my $xml = new XML::Simple;
    
    my $xml_file = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
    
    my @objekt;
    my @tmpText;
    my $tmpStr;
    my $value;
    my $htmlStr='';
    my $GAStr='';
    my $rrdNameStr='';
    my $DPTStr='';
    
    
    
    
    my $xmlStr= do {
        local $/ = undef;
        open my $fh, "<", $xml_file
            or die "could not open $xml_file: $!";
        <$fh>;
    };
    
    $xmlStr=~ s/($umlautkeys)/$umlaute{$1}/g;
    
    $value = $xml->XMLin(encode("utf8","$xmlStr"),GroupTags=>{RequestedTerminations=>'String'})->{Seiten}->{Seite_0}->{Objekte}; #lese alle Elemente zwischen <Objekte> und </Objekte> aus der xml
    
    while ((my $key) = each %{$value}) {        
        my $can_subindex = $value->{$key}->{can_subindex};
        my $can_index = $value->{$key}->{can_index};
        my $can_knoten = $value->{$key}->{can_knoten};            
            
        $can_subindex = sprintf ("%x" , $can_subindex); #Mache aus Integer HEX
        $can_index = sprintf ("%x" , $can_index); #Mache aus Integer HEX
        $can_knoten = sprintf ("%x" , $can_knoten); #Mache aus Integer HEX
            
        my $hilfsvariabel = substr($can_index,0,2); #Speichere die ersten beiden Stellen von can_index
        $can_index = substr($can_index,2) . $hilfsvariabel; #Stelle die ersten beiden Stellen hinten an
            
        $objekt[$i] = '$X'.$can_index.'0'.$can_subindex.'0'.$can_knoten; # $ausgabe enthält den gewünschten Wert
        
    
        $tmpStr = $value->{$key}->{Bezeichnung};
        #$tmpStr  =~ tr/:s+/__/;
        @tmpText = split(/.dat: /,$tmpStr);
        $tmpStr = @tmpText[1];
        #Replace Umlaute
        $tmpStr =~ s/($umlautkeys)/$umlaute{$1}/g;
        #Convert RRD Names to be compatible to Filename
        $tmpStr =~ s/[^A-Za-z0-9\-\.]/_/g;
        $rrdName[$i] = 'UVR_'.$tmpStr;   
        
        $tmpStr = $value->{$key}->{Text};
        plugin_log($plugname, 'DEBUG tmpStr Text'.$tmpStr);
        @tmpText = split(/\;/,$tmpStr);
        $knxGA[$i] = @tmpText[0]; 
        $knxDPT[$i] =  @tmpText[1];    
        plugin_log($plugname, 'DEBUG GA_DPT'.$knxGA[$i].'_'.$knxDPT[$i]);
        $htmlStr = $htmlStr.'|'.$objekt[$i]; 
        $GAStr = $GAStr.'|'.$knxGA[$i];
        $DPTStr = $DPTStr.'|'.$knxDPT[$i];
        $rrdNameStr = $rrdNameStr.'|'.$rrdName[$i];
        $i++;
    }
    
    #Convert HTML-String for Online-Schema to UpperCase
    $htmlStr=~ tr/A-Za-z/a-zA-Z/;
    
    
    plugin_log($plugname, 'Konfiguration eingelesen.');
    plugin_log($plugname, 'Namen:'.$rrdNameStr);
    plugin_log($plugname, 'Gruppenadressen:'.$GAStr);
    plugin_log($plugname, 'DPTs:'.$DPTStr);
    plugin_log($plugname, 'UVR Variablen:'.$htmlStr);
    $htmlStr='<!-- [UVR1611DATEN]'.$htmlStr.'[/UVR1611DATEN] -->';
    plugin_log($plugname, 'Der String in der HTML sollte so aussehen:');
    plugin_log($plugname, $htmlStr);
    }
    
    
    
    
    
    # Falls keine Zahl vom BL-Net übertragen wird sollten folgende Werte als boolean true (1) erkannt werden
    my @booleanTrue = ('EIN','ON','ein','true');
    my $tempValue;
    
    use LWP::Simple;
    my $urlContent = get($uvrUrl);
    return 'UVR-Datenabfrage fehlgeschlagen für $uvrUrl' unless defined $urlContent;
    $urlContent =~ /\[UVR1611DATEN\](.+)\[\/UVR1611DATEN\]/;
      plugin_log($plugname, 'Rueckgabe aus HTML');
      plugin_log($plugname, $1 );
    my @uvrVars = split(/\|/,$1);
    my $counter = 0;
    my $rrd_counter = 0;
    my $knx_counter = 0;
    
    my $dbgOut;
    
    foreach (@knxGA){
      plugin_log($plugname, '------Bearbeite Nr'.$counter.' Name='.$rrdName[$counter].'-------');
      $tempValue = $uvrVars[$counter+1]; 
      plugin_log($plugname, 'RückgabeUVR='.$tempValue);
      $tempValue =~ s/EIN/1/g;
      $tempValue =~ s/AUS/0/g;
      $tempValue =~ s/\,/./g; # , durch . ersetzen
      $tempValue =~ s/([-+]?[0-9]*\.[0-9]+|[0-9]+)//g;
      $tempValue = $1;
      plugin_log($plugname, 'Nachbehandelter Text='.$tempValue);
      if ($tempValue !~ /[+-]?\d+[.,]?d*/) {
         plugin_log($plugname, 'Nachbehandelter Text ist keine Zahl');
        foreach my $x (@booleanTrue) {
          if ($tempValue eq $x) {
            $tempValue = '1';
             plugin_log($plugname, 'tempValue wird 1 zugewiesen');
            last;
          }
        }
        if ($tempValue ne '1') {
          $tempValue = '0';
           plugin_log($plugname, 'tempValue wird 0 zugewiesen');
        }
      }
      if(($_ ne '')&&($_ ne 'xxx')){
        knx_write($_, $tempValue, $knxDPT[$counter]);
        plugin_log($plugname, "knx_write($_, $tempValue, $knxDPT[$counter])");
        $knx_counter++;
        }
      if($rrdName[$counter] ne ''){
        update_rrd($rrdName[$counter],'',$tempValue);
        plugin_log($plugname, "update_rrd($rrdName[$counter],'',$tempValue)");
        $rrd_counter++;
        }
       #plugin_log($plugname, $dbgOut.'--- '.$counter.':'.$rrdName[$counter].'*'.$uvrVars[$counter].'*'.$tempValue.'*'.$_.'*'.$knxDPT[$counter]);
      $counter++;
      }
      
    # plugin_log($plugname, "@uvrVars -- @knxGA");
    return $counter." Werte von UVR abgefragt, ".$rrd_counter." Werte als RRD gespeichert und ".$knx_counter." Werte an KNX gesendet";
    
    # Copyright (C) 2012 Michael Schneider, Hendrik Friedel
    #
    # This program is free software: you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation, either version 3 of the License, or
    # (at your option) any later version.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program.  If not, see <http://www.gnu.org/licenses/>
    und eine Beispiel-Config (nicht erschrecken: Wird automatisch erstellt)
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <TA-CanTouch Version="1.0" Pfad="H:\HeimNetzwerk\UVR\TA-Designer1\MeinProjekt\MeinProjekt">
      <globale_Einstellungen CAN_Knoten="15" Backlight_Timeout="2" Backlight_Brightness="90" Default_Startpage="" Sensorkorrektur="0" Sprache_CAN_Touch="1" Colour_Wochentagszuordnung="63519"/>
      <Netzwerk_Einstellungen IP_Address="3232235771" IP_Subnet="4294918080" IP_Gateway="3232235521" IP_DNS="3271759939" IP_DNS2="3271759940"/>
      <datFiles>
        <dat_File_0 Datei="H:\HeimNetzwerk\UVR\TA-Designer1\MeinProjekt\TA-Designer\FRIEDEL6.dat"/>
      </datFiles>
      <Seiten>
        <Seite_0 Typ="Onlineschema_Blnet" Name="Onlineschema: HydraulikSchema.GIF" Titel="Onlineschema" Grafikpfad="C:\Users\henfri\Pictures\HydraulikSchema.GIF" Filename="\Onlineschema_BlNet\Schema 1\HydraulikSchema.GIF" Refresh_Link="http://192.168.178.5/GRAFIK.html" Grafikpfad_amBLNet="1" Refresh_Zeit="3">
          <Objekte>
            <Objekt_0 x_l="800" y_o="121" x_r="42" y_u="150" Sondertype="0" Bezeichnung="FRIEDEL6.dat: T.Kollektor Wert" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8333" can_subindex="1" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_1 x_l="799" y_o="89" x_r="41" y_u="118" Sondertype="0" Bezeichnung="FRIEDEL6.dat: Solarstr. Wert" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8333" can_subindex="16" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_2 x_l="690" y_o="113" x_r="42" y_u="142" Sondertype="0" Bezeichnung="FRIEDEL6.dat: T.Aussen Wert" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8333" can_subindex="12" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_3 x_l="854" y_o="385" x_r="43" y_u="408" Sondertype="0" Bezeichnung="FRIEDEL6.dat: T.Speicher 2 Wert" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="11691775" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8333" can_subindex="3" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_4 x_l="854" y_o="354" x_r="41" y_u="377" Sondertype="0" Bezeichnung="FRIEDEL6.dat: T.Speicher 1 Wert" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="255" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8333" can_subindex="2" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_5 x_l="854" y_o="420" x_r="43" y_u="443" Sondertype="0" Bezeichnung="FRIEDEL6.dat: T.Speicher 3 Wert" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="16744448" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8333" can_subindex="4" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_6 x_l="854" y_o="475" x_r="49" y_u="498" Sondertype="0" Bezeichnung="FRIEDEL6.dat: T.Speicher 4 Wert" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="16711680" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8333" can_subindex="5" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_7 x_l="645" y_o="296" x_r="-29" y_u="319" Sondertype="0" Bezeichnung="FRIEDEL6.dat: Pumpe-Solar 1 Zustand (Ein/Aus)" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8362" can_subindex="1" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_8 x_l="645" y_o="274" x_r="-68" y_u="297" Sondertype="0" Bezeichnung="FRIEDEL6.dat: Pumpe-Solar 1 Drehzahlstufe" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8363" can_subindex="1" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_9 x_l="293" y_o="262" x_r="37" y_u="291" Sondertype="0" Bezeichnung="FRIEDEL6.dat: Pumpe-Hzkr 1 Zustand (Ein/Aus)" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8362" can_subindex="2" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_10 x_l="453" y_o="260" x_r="38" y_u="289" Sondertype="0" Bezeichnung="FRIEDEL6.dat: Pumpe-Hzkr 2 Zustand (Ein/Aus)" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8362" can_subindex="3" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_11 x_l="751" y_o="372" x_r="40" y_u="401" Sondertype="0" Bezeichnung="FRIEDEL6.dat: Umsch_Solar   Zustand (Ein/Aus)" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8362" can_subindex="4" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_12 x_l="1064" y_o="330" x_r="41" y_u="359" Sondertype="0" Bezeichnung="FRIEDEL6.dat: Anf.Kessel Zustand (Ein/Aus)" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8362" can_subindex="5" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_13 x_l="163" y_o="268" x_r="41" y_u="297" Sondertype="0" Bezeichnung="FRIEDEL6.dat: Pumpe_Lftg    Zustand (Ein/Aus)" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8362" can_subindex="7" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_14 x_l="107" y_o="647" x_r="92" y_u="676" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ SOLAR Vorlauftemperatur" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13709" can_subindex="7" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_15 x_l="107" y_o="682" x_r="45" y_u="711" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ SOLAR Rücklauftemperatur" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13713" can_subindex="7" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_16 x_l="107" y_o="609" x_r="43" y_u="638" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ SOLAR Volumenstrom" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13717" can_subindex="7" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_17 x_l="108" y_o="718" x_r="44" y_u="747" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ SOLAR Momentanleistung" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13728" can_subindex="7" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_18 x_l="406" y_o="643" x_r="49" y_u="672" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ Pellets   Vorlauftemperatur" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13709" can_subindex="10" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_19 x_l="405" y_o="682" x_r="38" y_u="711" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ Pellets   Rücklauftemperatur" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13713" can_subindex="10" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_20 x_l="405" y_o="715" x_r="36" y_u="744" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ Pellets   Momentanleistung" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13728" can_subindex="10" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_21 x_l="405" y_o="754" x_r="41" y_u="783" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ Pellets   Megawattstunden (Zähler)" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13730" can_subindex="10" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_22 x_l="107" y_o="753" x_r="45" y_u="782" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ SOLAR Megawattstunden (Zähler)" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13730" can_subindex="7" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_23 x_l="405" y_o="607" x_r="41" y_u="636" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ Pellets   Volumenstrom" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13717" can_subindex="10" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_24 x_l="993" y_o="608" x_r="342" y_u="637" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ Pellets   Volumenstrom" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13717" can_subindex="11" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_25 x_l="994" y_o="641" x_r="336" y_u="670" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ Pellets   Vorlauftemperatur" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13709" can_subindex="11" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_26 x_l="993" y_o="680" x_r="330" y_u="709" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ Pellets   Rücklauftemperatur" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13713" can_subindex="11" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_27 x_l="994" y_o="715" x_r="335" y_u="744" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ Pellets   Momentanleistung" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13728" can_subindex="11" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_28 x_l="993" y_o="752" x_r="337" y_u="781" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ Pellets   Megawattstunden (Zähler)" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13730" can_subindex="11" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_29 x_l="707" y_o="606" x_r="49" y_u="635" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ HZK. Volumenstrom" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13717" can_subindex="8" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_30 x_l="705" y_o="717" x_r="54" y_u="746" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ HZK. Momentanleistung" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13728" can_subindex="8" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_31 x_l="705" y_o="755" x_r="43" y_u="784" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ HZK. Megawattstunden (Zähler)" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13730" can_subindex="8" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_32 x_l="708" y_o="644" x_r="37" y_u="673" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ HZK. Vorlauftemperatur" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13709" can_subindex="8" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_33 x_l="707" y_o="680" x_r="49" y_u="709" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ HZK. Rücklauftemperatur" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="0" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-24;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13713" can_subindex="8" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_34 x_l="30" y_o="106" x_r="41" y_u="129" Sondertype="0" Bezeichnung="FRIEDEL6.dat: LuftHinterWT  Wert" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="255" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="1/2/3;9" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8333" can_subindex="10" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_35 x_l="163" y_o="66" x_r="37" y_u="89" Sondertype="0" Bezeichnung="FRIEDEL6.dat: T.RL_Lueftun  Wert" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="16711680" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8333" can_subindex="13" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_36 x_l="163" y_o="181" x_r="38" y_u="204" Sondertype="0" Bezeichnung="FRIEDEL6.dat: T.VL_Lueftun  Wert" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="255" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8333" can_subindex="14" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_37 x_l="771" y_o="167" x_r="15" y_u="190" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ SOLAR Vorlauftemperatur" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="255" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13709" can_subindex="7" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_38 x_l="664" y_o="239" x_r="3" y_u="262" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ SOLAR Rücklauftemperatur" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="16711680" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13713" can_subindex="7" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_39 x_l="633" y_o="347" x_r="-94" y_u="370" Sondertype="0" Bezeichnung="FRIEDEL6.dat: WMZ SOLAR Volumenstrom" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="13717" can_subindex="7" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_40 x_l="29" y_o="204" x_r="46" y_u="227" Sondertype="0" Bezeichnung="FRIEDEL6.dat: T.Aussen Wert" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="16711680" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8333" can_subindex="12" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_41 x_l="311" y_o="356" x_r="58" y_u="379" Sondertype="0" Bezeichnung="FRIEDEL6.dat: FBHEIZ.&quot; 1 Vorlauftemperatur" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="12347" can_subindex="3" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_42 x_l="312" y_o="385" x_r="63" y_u="408" Sondertype="0" Bezeichnung="FRIEDEL6.dat: FBHEIZ.&quot; 1 Vorlaufsolltemperatur" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="12360" can_subindex="3" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
            <Objekt_43 x_l="164" y_o="303" x_r="55" y_u="326" Sondertype="0" Bezeichnung="FRIEDEL6.dat: Pumpe_Lftg    Drehzahlstufe" lockabel="0" locked="0" ausrichtung="0" Schriftfarbe="8421504" Hintergrund="16777215" invisble="0" Einheit="1" VorText="" Text="xxx" NachText="" Schriftart="0;-19;0;0;0;700;0;0;0;0;3;2;1;34;Calibri" Syntax="" Syntax2="" can_knoten="1" can_index="8363" can_subindex="7" changeable="0" Objekt_Typ="CAN_BL_Net_Obj"/>
          </Objekte>
        </Seite_0>
        <Seite_1 Typ="Onlineschema_Blnet" Name="Onlineschema: HydraulikSchema.GIF" Titel="Onlineschema" Grafikpfad="C:\Users\henfri\Pictures\HydraulikSchema.GIF" Filename="\Onlineschema_BlNet\Schema 2\HydraulikSchema.GIF" Refresh_Link="" Grafikpfad_amBLNet="1" Refresh_Zeit="0">
          <Objekte/>
        </Seite_1>
      </Seiten>
    </TA-CanTouch>
    und eine Beispiel-HTML (nicht erschrecken: Wird automatisch erstellt)
    Code:
    <!--2.0-->
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <style type="text/css">
      body {font-size: 14px; font-family: Verdana, Arial, Helvetica, sans-serif; background-repeat: no-repeat; background-color: transparent; background: transparent; margin: 0px; padding: 0px;}
      #frame {text-align: left; vertical-align: top; position: relative; margin-left: 0;}
    
    /*########## CSS-ID: Positionen und Darstellung der Anzeigeparameter ##########*/
    #pos0{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:121px; left:800px; }
    #pos1{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:89px; left:799px; }
    #pos2{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:113px; left:690px; }
    #pos3{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(255,102,178); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:385px; left:854px; }
    #pos4{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(255,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:354px; left:854px; }
    #pos5{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(0,128,255); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:420px; left:854px; }
    #pos6{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(0,0,255); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:475px; left:854px; }
    #pos7{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:296px; left:645px; }
    #pos8{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:274px; left:645px; }
    #pos9{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:262px; left:293px; }
    #pos10{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:260px; left:453px; }
    #pos11{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:372px; left:751px; }
    #pos12{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:330px; left:1064px; }
    #pos13{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:268px; left:163px; }
    #pos14{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:647px; left:107px; }
    #pos15{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:682px; left:107px; }
    #pos16{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:609px; left:107px; }
    #pos17{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:718px; left:108px; }
    #pos18{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:643px; left:406px; }
    #pos19{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:682px; left:405px; }
    #pos20{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:715px; left:405px; }
    #pos21{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:754px; left:405px; }
    #pos22{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:753px; left:107px; }
    #pos23{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:607px; left:405px; }
    #pos24{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:608px; left:993px; }
    #pos25{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:641px; left:994px; }
    #pos26{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:680px; left:993px; }
    #pos27{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:715px; left:994px; }
    #pos28{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:752px; left:993px; }
    #pos29{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:606px; left:707px; }
    #pos30{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:717px; left:705px; }
    #pos31{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:755px; left:705px; }
    #pos32{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:644px; left:708px; }
    #pos33{position:absolute; font-family: Calibri; font-size: 18pt; color: rgb(0,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:680px; left:707px; }
    #pos34{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(255,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:106px; left:30px; }
    #pos35{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(0,0,255); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:66px; left:163px; }
    #pos36{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(255,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:181px; left:163px; }
    #pos37{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(255,0,0); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:167px; left:771px; }
    #pos38{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(0,0,255); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:239px; left:664px; }
    #pos39{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:347px; left:633px; }
    #pos40{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(0,0,255); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:204px; left:29px; }
    #pos41{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:356px; left:311px; }
    #pos42{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:385px; left:312px; }
    #pos43{position:absolute; font-family: Calibri; font-size: 14pt; color: rgb(128,128,128); background: rgb(255,255,255); font-style: normal; font-weight: bold; text-align: left; top:303px; left:164px; }
    </style>
    <script type="text/javascript">
    <!--
     var Title ="Onlineschema";  // Titeltext im Browserfenster
     var GraphicFile = "GRAFIK.gif";  // Pfad der Grafikdatei
     var Width = "1200px";
     var Height = "800px";
     
    //### Intervallzeit [in Sekunden] fr eine automatische Aktualisierung der Messwerte: ###
    //### < "30" = keine automatische Aktualisierung ###
    //--------------------------------------------------
     var AutoRefreshTime = "60";
    
    //### Linktext für manuelle Aktualisierung der Messwerte: ###
    //### "" = kein Link für manuelle Aktualisierung ###
    //--------------------------------------------------
     var RefreshLink ="http://192.168.178.5/GRAFIK.html";
     
     function set_dimenson_para (){
     document.getElementById("frame").style.width = Width;
     document.getElementById("frame").style.hight = Height;
     }
     -->
    </script>
     
     </head>
     <body onload="set_dimenson_para ()">
     <div id="frame">
     <!--########## Definitionen der Anzeigeparameter ##########-->
    <div id="pos0">$X8D200101</div>
    <div id="pos1">$X8D201001</div>
    <div id="pos2">$X8D200C01</div>
    <div id="pos3">$X8D200301</div>
    <div id="pos4">$X8D200201</div>
    <div id="pos5">$X8D200401</div>
    <div id="pos6">$X8D200501</div>
    <div id="pos7">$XAA200101</div>
    <div id="pos8">$XAB200101</div>
    <div id="pos9">$XAA200201</div>
    <div id="pos10">$XAA200301</div>
    <div id="pos11">$XAA200401</div>
    <div id="pos12">$XAA200501</div>
    <div id="pos13">$XAA200701</div>
    <div id="pos14">$X8D350701</div>
    <div id="pos15">$X91350701</div>
    <div id="pos16">$X95350701</div>
    <div id="pos17">$XA0350701</div>
    <div id="pos18">$X8D350A01</div>
    <div id="pos19">$X91350A01</div>
    <div id="pos20">$XA0350A01</div>
    <div id="pos21">$XA2350A01</div>
    <div id="pos22">$XA2350701</div>
    <div id="pos23">$X95350A01</div>
    <div id="pos24">$X95350B01</div>
    <div id="pos25">$X8D350B01</div>
    <div id="pos26">$X91350B01</div>
    <div id="pos27">$XA0350B01</div>
    <div id="pos28">$XA2350B01</div>
    <div id="pos29">$X95350801</div>
    <div id="pos30">$XA0350801</div>
    <div id="pos31">$XA2350801</div>
    <div id="pos32">$X8D350801</div>
    <div id="pos33">$X91350801</div>
    <div id="pos34">$X8D200A01</div>
    <div id="pos35">$X8D200D01</div>
    <div id="pos36">$X8D200E01</div>
    <div id="pos37">$X8D350701</div>
    <div id="pos38">$X91350701</div>
    <div id="pos39">$X95350701</div>
    <div id="pos40">$X8D200C01</div>
    <div id="pos41">$X3B300301</div>
    <div id="pos42">$X48300301</div>
    <div id="pos43">$XAB200701</div>
    </div>
    </body>
    </html>
    [WARNUNG]Und jetzt will ich nie wieder hören, dass CommunityGate User bisher nie zur Community beigetragen haben.[/WARNUNG]

    Gruß,
    Hendrik

    *) Dieser Schritt kann entfallen, wenn hier jemand mithilft:
    https://knx-user-forum.de/forum/supp...wiregate/25382
    Angehängte Dateien

    #2
    Es ist nicht immer leicht alle Beiträge in der richtigen Reihenfolge zu lesen
    Also, geht doch, HTML-paren ist k***

    Makki
    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
    -> Bitte KEINE PNs!

    Kommentar


      #3
      PS: irgendwann brauch ich das noch, weil meine Heizungsregelung ist immernoch kompletter Kernschrott und das beste was mir einfällt um diese komplett zu ersetzen - ist eine UVR1611
      (oder doch ein Arduino - nein ich hab keine Zeit für sowas )

      Makki
      EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
      -> Bitte KEINE PNs!

      Kommentar


        #4
        Zitat von makki Beitrag anzeigen
        Also, geht doch, HTML-paren ist k***
        Missverständnis:
        Es gibt zwei Aufgabenstellungen:
        a) Konfiguration, welche Werte gelesen werden sollen, welchen Datentyp, Namen und Einheit(DPT) sie haben
        b) Die Werte aus dem Web-IF auslesen

        a) wurde bisher komplett manuell gemacht. Durch meine Modifikationen funktioniert dies jetzt über das Auslesen der xml des Visu-Mal-Programms des Herstellers


        b) wurde bisher und wird weiterhin folgendermaßen gemacht:
        Die Visu enthält bestimmte Codes ("Hex-Code"), die vom Webserver der Regelung ("BL-Net") durch die Temperaturen/Stellgrößen/... ersetzt werden.

        Das Visu-Mal Programm setzt diese Hex-Codes in <div> Tags die durchnummeriert sind. Die Nummerierung entspricht der Nummerierung der XML.
        Momentan wird dies nicht genutzt. Stattdessen erzeugt das Plugin einen String in dem die Hex-Codes Pipe (|) getrennt vorkommen.
        Dieser wird vom User als Kommentar in die HTML gepackt, auf den Webserver hoch geladen und vom Plugin ausgelesen (bedenke: die Hex-Codes sind jetzt durch die Werte ersetzt).

        Also: Momentan wird eine Pipe-Separierte-Liste geparst. Die Alternative wäre eine HTML-Datei. Pest oder Cholera.
        Vorteil der Pipe-Liste: Es ist genau die Reihenfolge, die das Plugin erwartet, da die Liste ja vom Plugin erstellt wird.
        Vorteil der HTML: Die HTML wird so direkt vom Visu-Designer geschrieben. Die Datei wird auch regelmäßig überschrieben. Da der Pipe-String jedesmal manuell wieder eintransplantiert werden muss ist das etwas nervig/fehleranfällig. Geht aber.


        Zitat von makki Beitrag anzeigen
        PS: irgendwann brauch ich das noch, weil meine Heizungsregelung ist immernoch kompletter Kernschrott und das beste was mir einfällt um diese komplett zu ersetzen - ist eine UVR1611
        Na, dann freue ich mich darauf, auch dir persönlich mal etwas zurück geben zu können/dir zu helfen ;-)

        Gruß,
        Hendrik

        Kommentar


          #5
          Hallo Hendrik.

          Sorry. Ich habe jetzt das ganze 6 mal gelesen und versucht zu verstehen. Kurz dachte ich sogar mal, ich hätte es begriffen aber irgendwie stehe ich gerade total auf dem Schlauch

          Wie genau funktioniert mit dem aktuellen Plugin das auslesen der Werte?

          Was muss der User machen? und vorallem wiso (Zusammenhang...)? -> Hier reicht mir der grobe Zusammenhang.

          Was willst du mit dem Inhalt der HTML? Dort stehen ja keine Werte sondern nur die Zuordnung von pos zu HEX-String... Aber entspricht diese Zuordnung nicht genau der Reihenfolge der Objekte im XML?

          ...ich bin total verwirrt...
          Gruss Patrik alias swiss

          Kommentar


            #6
            Hallo,

            @swiss: ich versucher es -später.
            Hier erstmal ein bugfix:
            Code:
            #!/usr/bin/perl
            use strict;
            
            # ******************************************************************************
            # by Hendrik Friedel (henfri) basierend auf Plugin von micha218 erweitert um XML-Einlesen
            # Vielen Dank für die Hilfe von swiss beim XML.
            # Das Plugin liest Werte der UVR 1611 über BL-Net ein, legt sie in RRDs ab und 
            # sendet sie auf den Bus.
            # Im Onlineschema des BL-Net müssen die Variabeln der zu lesenden Ein-/Ausgänge
            # innerhalb der Tags [UVR1611DATEN] [/UVR1611DATEN] eingetragen sein. Dies kann
            # z.B. im META Tag "Description" manuell vor dem Übertragen mit dem Memory
            # Manager hinzugefügt werden.
            # Beispiel:
            # <!-- [UVR1611DATEN]$n1a0|$n1a1|$n1a2|$n1d0|$n1d1[/UVR1611DATEN] -->
            # Info zum Schema: http://doku.uvr1611.at/doku.php/de/onlineschema/onlineschema 
            # Der String wird im Plugin-Log angegeben. Bitte daraus in die HTML kopieren. 
            # Konfiguration:
            # Das Plugin benötigt als Input lediglich die XML des TA-Designer (http://www.ta.co.at/download/datenblaumltter/volumenstromgeber-fts-vfs-vsg/fts-dl/index.php?option=com_jdownloads&Itemid=103&task=viewcategory&catid=153)
            # Hierzu bitte im Designer alle Größen, die eingelesen werden sollen per Drag&Drop in das Schema ziehen. 
            # Die Positionierung der Elemente ist nicht relevant -es bietet sich aber an, gleich die Visualisierung 
            # mit zu erstellen.
            # Die Gruppenadressen und DPT werden ebenfalls im TA-Designer definiert.
            # Hierzu wird der "Test-Text" (Doppelklick auf Feld) genutzt.
            # 1/2/3;9.001 (GA;DPT)
            # Die Daten werden zugleich in einen RRD gespeichert. Der Name entspricht der Bezeichnung in der XML
            # In der Plugin-Datei (dem Code, dieser Datei) muss nur die URL ($uvrURL) angepasst werden
            # *****************VORSICHT***************************
            # ****Die XML darf keine Sonderzeichen enthalten******
            # *****************VORSICHT***************************
            # Idee zur Vereinfachung: in der XML haben alle Zeilen eine ID/sind nummeriert.
            # Diese IDs sind auch in der HTML vorhanden (div-Elemente)
            # Hierüber können die Daten zugeordnet werden, ohne dass der String in die HTML eingefügt werden muss.
            # ******************************************************************************
            
            my $uvrUrl = 'http://192.168.178.5/GRAFIK1.htm';
            
            my @rrdName;
            my @knxGA;
            my @knxDPT;
            
            # Alternative Konfiguration ohne XML:
            # my @knxGA = ('1/6/100','1/6/101','1/6/102','1/7/100','1/7/101');
            # my @knxDPT = (9.001,9.001,9.001,1.001,1.001);
            # my @rrdName = ('aussen_temp','innen_temp','vorlauf_temp','ventilHzRL_bool','anforderungBrenner_bool');
            
            
            
            # vorübergehedes disablen des Plugins:
            # return "disabled";
            
            # plugin nicht zyklisch ausführen
            # $plugin_info{$plugname.'_cycle'} = 0;
            # plugin zyklisch ausführen
            $plugin_info{$plugname.'_cycle'} = $wg_config{''}{'rrd_interval'};
            
            # Eine KNX GA abonnieren: Plugin wird aufgerufen, sobald ein Paket an diese GA
            # kommt. Der Inhalt des Pakets steht dann in $msg.
            # $plugin_subscribe{'7/0/15'}{$plugname} = 1;
            
            
            #Ab hier nichts mehr ändern. Läuft automatisch
            my %umlaute = ("ä" => "ae", "Ä" => "Ae", "ü" => "ue", "Ü" => "Ue", "ö" => "oe", "Ö" => "Oe", "ß" => "ss" );
            my $umlautkeys = join ("|", keys(%umlaute));
            my $i = 0;
            
            
            if (@knxGA) {
              plugin_log($plugname, 'Manuelle Konfiguration ohne XML via Variablen im Plugin-Code')
            } else
            {
            # XML darf keine ÄÖÜ so wie andere Sonderzeichen oder das scharfe doppel S enthalten!!!!
            
            
            
            use XML::Simple;
            use Encode qw(encode decode);
            
            my $xml = new XML::Simple;
            
            my $xml_file = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
            
            my @objekt;
            my @tmpText;
            my $tmpStr;
            my $value;
            my $htmlStr='';
            my $GAStr='';
            my $rrdNameStr='';
            my $DPTStr='';
            
            
            
            
            my $xmlStr= do {
                local $/ = undef;
                open my $fh, "<", $xml_file
                    or die "could not open $xml_file: $!";
                <$fh>;
            };
            
            $xmlStr=~ s/($umlautkeys)/$umlaute{$1}/g;
            
            $value = $xml->XMLin(encode("utf8","$xmlStr"),GroupTags=>{RequestedTerminations=>'String'})->{Seiten}->{Seite_0}->{Objekte}; #lese alle Elemente zwischen <Objekte> und </Objekte> aus der xml
            
            while ((my $key) = each %{$value}) {        
                my $can_subindex = $value->{$key}->{can_subindex};
                my $can_index = $value->{$key}->{can_index};
                my $can_knoten = $value->{$key}->{can_knoten};            
                    
                $can_subindex = sprintf ("%x" , $can_subindex); #Mache aus Integer HEX
                $can_index = sprintf ("%x" , $can_index); #Mache aus Integer HEX
                $can_knoten = sprintf ("%x" , $can_knoten); #Mache aus Integer HEX
                    
                my $hilfsvariabel = substr($can_index,0,2); #Speichere die ersten beiden Stellen von can_index
                $can_index = substr($can_index,2) . $hilfsvariabel; #Stelle die ersten beiden Stellen hinten an
                    
                $objekt[$i] = '$X'.$can_index.'0'.$can_subindex.'0'.$can_knoten; # $ausgabe enthält den gewünschten Wert
                
            
                $tmpStr = $value->{$key}->{Bezeichnung};
                #$tmpStr  =~ tr/:s+/__/;
                @tmpText = split(/.dat: /,$tmpStr);
                $tmpStr = @tmpText[1];
                #Replace Umlaute
                $tmpStr =~ s/($umlautkeys)/$umlaute{$1}/g;
                #Convert RRD Names to be compatible to Filename
                $tmpStr =~ s/[^A-Za-z0-9\-\.]/_/g;
                $rrdName[$i] = 'UVR_'.$tmpStr;   
                
                $tmpStr = $value->{$key}->{Text};
                plugin_log($plugname, 'DEBUG tmpStr Text'.$tmpStr);
                @tmpText = split(/\;/,$tmpStr);
                $knxGA[$i] = @tmpText[0]; 
                $knxDPT[$i] =  @tmpText[1];    
                plugin_log($plugname, 'DEBUG GA_DPT'.$knxGA[$i].'_'.$knxDPT[$i]);
                $htmlStr = $htmlStr.'|'.$objekt[$i]; 
                $GAStr = $GAStr.'|'.$knxGA[$i];
                $DPTStr = $DPTStr.'|'.$knxDPT[$i];
                $rrdNameStr = $rrdNameStr.'|'.$rrdName[$i];
                $i++;
            }
            
            #Convert HTML-String for Online-Schema to UpperCase
            $htmlStr=~ tr/A-Za-z/a-zA-Z/;
            
            
            plugin_log($plugname, 'Konfiguration eingelesen.');
            plugin_log($plugname, 'Namen:'.$rrdNameStr);
            plugin_log($plugname, 'Gruppenadressen:'.$GAStr);
            plugin_log($plugname, 'DPTs:'.$DPTStr);
            plugin_log($plugname, 'UVR Variablen:'.$htmlStr);
            $htmlStr='<!-- [UVR1611DATEN]'.$htmlStr.'[/UVR1611DATEN] -->';
            plugin_log($plugname, 'Der String in der HTML sollte so aussehen:');
            plugin_log($plugname, $htmlStr);
            }
            
            
            
            
            
            # Falls keine Zahl vom BL-Net übertragen wird sollten folgende Werte als boolean true (1) erkannt werden
            my @booleanTrue = ('EIN','ON','ein','true');
            my $tempValue;
            
            use LWP::Simple;
            my $urlContent = get($uvrUrl);
            return 'UVR-Datenabfrage fehlgeschlagen für $uvrUrl' unless defined $urlContent;
            $urlContent =~ /\[UVR1611DATEN\](.+)\[\/UVR1611DATEN\]/;
              plugin_log($plugname, 'Rueckgabe aus HTML');
              plugin_log($plugname, $1 );
            my @uvrVars = split(/\|/,$1);
            my $counter = 0;
            my $rrd_counter = 0;
            my $knx_counter = 0;
            
            my $dbgOut;
            
            foreach (@knxGA){
              plugin_log($plugname, '------Bearbeite Nr'.$counter.' Name='.$rrdName[$counter].'-------');
              $tempValue = $uvrVars[$counter+1]; 
              plugin_log($plugname, 'RückgabeUVR='.$tempValue);
              $tempValue =~ s/EIN/1/g;
              $tempValue =~ s/\ //g;
              $tempValue =~ s/AUS/0/g;
              $tempValue =~ s/\,/./g; # , durch . ersetzen
              $tempValue =~ s/([-+]?[0-9]*\.[0-9]+|[0-9]+)//g;
              $tempValue = $1;
              plugin_log($plugname, 'Nachbehandelter Text='.$tempValue);
              if ($tempValue !~ /[+-]?\d+[.,]?d*/) {
                 plugin_log($plugname, 'Nachbehandelter Text ist keine Zahl');
                foreach my $x (@booleanTrue) {
                  if ($tempValue eq $x) {
                    $tempValue = '1';
                     plugin_log($plugname, 'tempValue wird 1 zugewiesen');
                    last;
                  }
                }
                if ($tempValue ne '1') {
                  $tempValue = '0';
                   plugin_log($plugname, 'tempValue wird 0 zugewiesen');
                }
              }
              if(($_ ne '')&&($_ ne 'xxx')){
                knx_write($_, $tempValue, $knxDPT[$counter]);
                plugin_log($plugname, "knx_write($_, $tempValue, $knxDPT[$counter])");
                $knx_counter++;
                }
              if($rrdName[$counter] ne ''){
                update_rrd($rrdName[$counter],'',$tempValue);
                plugin_log($plugname, "update_rrd($rrdName[$counter],'',$tempValue)");
                $rrd_counter++;
                }
               #plugin_log($plugname, $dbgOut.'--- '.$counter.':'.$rrdName[$counter].'*'.$uvrVars[$counter].'*'.$tempValue.'*'.$_.'*'.$knxDPT[$counter]);
              $counter++;
              }
              
            # plugin_log($plugname, "@uvrVars -- @knxGA");
            return $counter." Werte von UVR abgefragt, ".$rrd_counter." Werte als RRD gespeichert und ".$knx_counter." Werte an KNX gesendet";
            
            # Copyright (C) 2012 Michael Schneider
            #
            # This program is free software: you can redistribute it and/or modify
            # it under the terms of the GNU General Public License as published by
            # the Free Software Foundation, either version 3 of the License, or
            # (at your option) any later version.
            #
            # This program is distributed in the hope that it will be useful,
            # but WITHOUT ANY WARRANTY; without even the implied warranty of
            # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
            # GNU General Public License for more details.
            #
            # You should have received a copy of the GNU General Public License
            # along with this program.  If not, see <http://www.gnu.org/licenses/>
            Gruß,
            Hendrik

            Kommentar


              #7
              Ich versuche es nochmal:

              An der UVR hängt ein Gerät namens BL-Net (BootLoader-Net). Dieses ist quasi dessen IP-Schnittstelle mit Webserver.

              Auf diesen BL-Net kann man einen HTML Datei hochladen (über ein spezielles Programm)

              Lädt man diese HTML Datei über http wieder runter, so hat der BL-Net alle darin vorkommenden Hex-Codes durch die Messwerte ersetzt. Soweit klar?
              Das dient dazu eine Visualisierung zu erstellen.

              Um das Erstellen der Visu zu erleichtern gibt es den TA-Designer. Hier können die Messwerte per Drag&Drop auf ein Hintergrund Bild gezogen werden. Der TA-Designer speichert dies als Projektdatei (die bekannte XML). Außerdem wird die HTML erzeugt.

              Die XML wird NUR für den TA-Designer benötigt. Den muss man nicht nutzen, sondern kann die HTML auch selbst tippern.
              Die XML wird nicht für die Programmierung der UVR oder für die Visu benötigt. Es ist lediglich die Projekt-Datei des TA-Designers (vergleichbar eib.db?!)

              Soweit klar?

              Jetzt kommt das Plugin ins Spiel:
              Es liest die XML ein, extrahiert daraus:
              Namen des Messwertes
              Hex-Code
              GA
              DPT

              (für die letzten beiden werden Text-Felder im TA-Designer missbraucht).
              und verwendet diese Infos als Config für das Plugin

              Im Plugin-Log werden die Hex-Codes dann pipe-getrennt ausgegeben.

              Der User muss diesen String jetzt -in einem HTML-Kommentar(1) verpackt- in die HTML seiner Visu (UVR1611 Visu) kopieren und die so geänderte HTML hochladen.

              Das Plugin ruft regelmäßig die HTML vom BL-Net ab, extrahiert die Werte, speichert sie als rrd und sendet an KNX.


              Zitat von swiss Beitrag anzeigen
              Wie genau funktioniert mit dem aktuellen Plugin das auslesen der Werte?

              Was muss der User machen? und vorallem wiso (Zusammenhang...)? -> Hier reicht mir der grobe Zusammenhang.
              Ich hoffe das ist jetzt klar?

              Was willst du mit dem Inhalt der HTML? Dort stehen ja keine Werte sondern nur die Zuordnung von pos zu HEX-String... Aber entspricht diese Zuordnung nicht genau der Reihenfolge der Objekte im XML?
              Hier liegt das Missverständnis vor. In der HTML stehen auch heute ja schon die Werte drin -ohne den HTML-Kommentar(1). Denn die Visu stellt die Werte ja da.
              Die Reihenfolge der Div-Tags entspricht der XML. Genau. Und das möchte ich nutzen um von dem HTML-Kommentar(1) weg zu kommen, damit der User den nicht jedes mal wenn er die Visu ändert wieder rein-kopieren muss.

              Gruß,
              Hendrik

              Kommentar


                #8
                Ach sooo... Also willst du kurz gesagt folgendes machen...

                - Name, GA, DPT und Pos aus der XML lesen
                - Aus der HTML Visu mit Hilfe der Pos angabe die zugehörigen Werte einlesen
                - Das ganze auf den BUS und ins RRD

                Ok. Das hilft mir bei der Suche nach einem geeigneten Verfaren zum Parsen der HTML Seite schon enorm weiter.

                Dann wäre vieleicht HTML::SimpleParse ein guter Weg. Die Syntax scheint mir wesentlich einfacher und sollte eigentlich zu diesem Zweck ausreichen... Am Ende der Doku unter ToDo steht im zweiten codeschnipsel ein interessantes Beispiel dass hier funktionierne könnte
                Gruss Patrik alias swiss

                Kommentar


                  #9
                  Hallo,

                  da hier bisher niemand geflucht hat, hab ich das Plugin jetzt eingecheckt.

                  Gruß,
                  Hendrik

                  Kommentar

                  Lädt...
                  X