(Anmerkung: Mit dem Zusatz „@HomeWebView“ in der Variablenbeschreibung kann die Web-Ansicht schon in der vorherigen Version angewendet werden)
Diese Möglichkeit habe ich zur Anzeige einfacher Dashboards innerhalb der App genutzt.
Eine dreispaltige Tabelle in HTML stellt die Daten übersichtlich und gruppiert dar.
Alles wird in der CCU (zyklisch) verarbeitet, wird keine Online-Verbindung benötigt.
Für die Erstellung der Dashboards verwende ich zwei alternative Ansätze
1. Automatische Generierung der Tabelle aus einer Favoritenliste
-- Vorteil: Schnell implementiert, sofort anwendbar
-- Nachteil: Im Skript vorgegebenes Layout und Farbgestaltung
2. Nutzung eines Templates, das dann (periodisch) mit Daten befüllt wird
-- Vorteil: Flexible Gestaltung des Dashboards, schnelle Designänderung durch Anpassen des Templates
-- Nachteil: Größerer Aufwand für das Skript zum Befüllen des Templates
Ansatz 1: Automatik
Ein Skript liest in einer Schleife alle Objekte aus der Favoritenliste und erstellt daraus eine Tabelle. Der Objektname ist jeweils die Spaltenüberschrift, der Datenwert wird darunter angezeigt.
Beispiel mit Favoritenliste "X1. Einstellungen":
1. Eine neue Systemvariable anlegen
-- "Dashboard: Einstellungen" (Typ Zeichenkette. Wird für die Anzeige verwendet)
2. HM Skript erstellen
-- a. Favoritenliste und Dashboard Variable bei Bedarf anpassen
-- b. Alle Objekte in einer Schleife auslesen und in die Tabelle eintragen
-- c. Löschen aller Zeilenumbrüche (werden in @home noch als "\n" ausgegeben
-- d. Schreiben in die Systemvariable "Dashboard: Einstellungen"
3. HM Skript zyklisch ausführen, z.B. alle 1 Stunde
4. Systemvariable "Dashboard: Einstellungen" anzeigen
-- a. Systemvariable "Dashboard: Einstellungen" in eine Favoritenliste einfügen
-- b. In @home die Favoritenliste anzeigen und für "Dashboard: Einstellungen" die Web-Ansicht aktivieren
Skript:
Code: Alles auswählen
! HTML Dashboard für @Home App
!
! Generiert ein HTML Dashboard aller Systemvariable im Favoriten
! "X1. Einstellungen"
!
! 09.11.21 ED: Inital Version
! ---------------------------------------------------------------------------
var oInput = dom.GetObject("X1. Einstellungen"); ! Favoritenliste
var oOutput = dom.GetObject("Dashboard: Einstellungen"); ! Dashboard Variable
!--- ab hier keine Änderungen notwendig ---
string sHTML= "";
var colmn= 3; ! Anzahl Spalten
! Aktueller Zeitstempel
var T00 = system.Date("%H:%M:%S");
! CSS Formatiertierung als Liste. Trennzeichen ist "#"
string off_on = "<td>Aus#<td style=\"color:white;background-color:green;\">Ein";
string off_red_on = "<td style=\"color:white;background-color:red;\">Aus#<td style=\"color:white;background-color:green;\">Ein";
string door_off_on = "<td style=\"color:white;background-color:green; \">Verriegelt#<td style=\"color:white;background-color:red; \">Offen";
string css_on_ok = "<td style=\"color:white; background-color:green;\">";
string css_off_ok = "<td style=\"color:black; background-color:lightgrey;\">";
string css_on_fail = "<td style=\"color:white; background-color:red;\">";
string css_off_fail = "<td style=\"color:white; background-color:red;\">";
string css_data = "<td style=\"color:black; background-color:lightgrey;\">";
string css_tbl_head = "<tr style=\"font-size: 0.7em; color:white; background-color:blue;\">";
string css_tbl_row = "<tr valign=\"top\" style=\"font-size: 0.7em; height: 2em;\">";
! HTML Text Template einer dreispaltigen Tabelle
! ----------------------------------------------
sHTML = "
<head>
<style>
table {text-align: center; font-size: 1.0em; font-family: sans-serif;}
</style>
</head>
<body>
<table>
<tr style=\"font-size: 0.7em;\">
<td style=\"width: 27%; text-align:left;\">Status: T00</td>
<td style=\"width: 27%;\"></td>
<td style=\"width: 27%;\"></td>
</tr>
<tr>
<th colspan=\"3\">Einstellungen</th>
</tr>
###
***
</table>
</body>";
! ----------------------------------------------
! Daten auslesen und in HTML Text einfügen
! ----------------------------------------
sHTML = sHTML.Replace("T00", T00);
var lst = oInput.EnumUsedNames(); ! Alle Objekte In Favorit in Liste übernehmen
object obj; ! Für Abarbeitung der Liste
var i = 0; ! Zähler
string name; ! Objektname aus Liste
WriteLine("lst = " # lst );
foreach(name, lst)
{
obj = dom.GetObject(name);
! Dashboards in Favoriten ggf überspringen
if (name.Substr(0,4) == "Dash") { continue; }
! Datenausgabe:
! -------------------
! Systemvariable
if (obj.IsTypeOf(OT_VARDP))
{
if (i==0)
{
WriteLine("Zeile Start")
! Neue Reihe, Header- und Datenzeile einleiten
sHTML = sHTML.Replace("###", css_tbl_head # "### " );
sHTML = sHTML.Replace("***", css_tbl_row # "*** " );
}
WriteLine("i = " # i);
! Header
sHTML = sHTML.Replace("###", ("<td>"#name#"</td>###"));
if (obj.ValueType() == 16)
{
sHTML = sHTML.Replace("***", (css_data # (obj.ValueList().StrValueByIndex(";", obj.Value())) # " " # obj.ValueUnit()) #"</td>***");
}
elseif (obj.ValueType() == 2)
{
if (obj.Value() == 0)
{sHTML = sHTML.Replace("***", (css_off_ok # obj.ValueName() # " " # obj.ValueUnit()) #"</td>***");}
else
{sHTML = sHTML.Replace("***", (css_on_ok # obj.ValueName() # " " # obj.ValueUnit()) #"</td>***");}
}
else
{
sHTML = sHTML.Replace("***", (css_data # obj.Value().ToString(1) # " " # obj.ValueUnit()) #"</td>***");
}
! Nächstes Objekte
i=i+1;
if (i==colmn)
{
WriteLine("Zeile Ende")
! Reihe fertig, Header- und Datenzeile abschliessen
sHTML = sHTML.Replace("###", "</tr> ");
sHTML = sHTML.Replace("***", "</tr>###*** ");
i=0;
}
}
}
! Ungültige Zeichen entfernen oder ersetzen
sHTML = sHTML.Replace("\n", ""); ! Zeilenumbrüche im String entfernen
sHTML = sHTML.Replace("###", ""); ! Einfügemarkierung löschen
sHTML = sHTML.Replace("***", ""); ! Einfügemarkierung löschen
WriteLine("Output = " # sHTML);
! HTML String in Anzeig-Variable schreiben
oOutput.Variable( sHTML );
WriteLine(" fertig");
Ansatz 2: Template
Hier benötigt die Umsetzung mehr individuelle Arbeit im Skript, ist aber trotzdem recht einfach machbar.
Das beigefügte Beispiel zeigt Schaltzustände und zugehörigen Schaltzeitpunkt an:
1. Zwei neue Systemvariablen anlegen
-- a. "Dashboard: Licht" (Typ Zeichenkette. Wird für die Anzeige verwendet)
-- b. "Dashboard: Licht Template" (Typ Zeichenkette. Enthält den HTML Rohtext)
2. HTML Template Seite mit gewünschtem Layout und Inhalt erstellen
-- a. Eindeutig benannte Platzhalter für Daten innerhalb der Seite (z.B. "Lxx" wobei xx eine eindeutige Zahl ist)
-- b. Eindeutig benannte Platzhalter für Zeitstempel innerhalb der Seite (z.B. "tLxx" wobei xx eine eindeutige Zahl ist)
-- c. HTML Text über das HM WebGUI in die Systemvariable "Dashboard: Licht Template" kopieren
3. HM Skript erstellen
-- a. Lesen aller anzuzeigenden Daten und zugehöriger Zeitstempel
-- b. Lesen der Systemvariable "Dashboard: Licht Template"
-- c. Ersetzen der Platzhalter durch die jeweiligen Daten
-- d. Löschen aller Zeilenumbrüche (werden in @home sonst als "\n" ausgegeben)
-- e. Schreiben in die Systemvariable "Dashboard: Licht"
4. HM Skript zyklisch ausführen, z.B. alle 5 Minuten
5. Systemvariable "Dashboard: Licht" anzeigen
-- a. Systemvariable "Dashboard: Licht" in eine Favoritenliste einfügen
-- b. In @home die Favoritenliste anzeigen und für "Dashboard: Licht" die Web-Ansicht aktivieren
HTML Template:
Code: Alles auswählen
<head>
<style>
table {text-align: center; font-size: 1.0em; font-family: sans-serif;}
</style>
</head>
<body>
<table>
<tr style="font-size: 0.7em;">
<td style="width: 27%; text-align:left;">Status: T00</td>
<td style="width: 27%;"></td>
<td style="width: 27%;"></td>
</tr>
<tr>
<th colspan="3">Eingang und UG</th>
</tr>
<tr style="font-size: 0.7em; color:white; background-color:blue;">
<td>Büro Licht</td>
<td>Büro Arbeitslicht</td>
<td>Flur Deckenlicht</td>
</tr>
<tr style="font-size: 0.7em; color:black; background-color:lightgrey;">
<td>L10</td>
<td>L11</td>
<td>L12</td>
</tr>
<tr style="font-size: 0.7em;">
<td>tL10</td>
<td>tL11</td>
<td>tL12</td>
</tr>
<tr style="font-size: 0.7em; color:white; background-color:blue;">
<td>Garage</td>
<td>Treppenhaus</td>
<td>UG Flurlampe</td>
</tr>
<tr style="font-size: 0.7em; color:black; background-color:lightgrey;">
<td>L13</td>
<td>L14</td>
<td>L15</td>
</tr>
<tr style="font-size: 0.7em;">
<td>tL13</td>
<td>tL14</td>
<td>tL15</td>
</tr>
<tr>
<th colspan="3">EG und Garten</th>
</tr>
<tr style="font-size: 0.7em; color:white; background-color:blue;">
<td>WZ Stehlampe</td>
<td>WZ TV LED</td>
<td>EG Flurlampe</td>
</tr>
<tr style="font-size: 0.7em; color:black; background-color:lightgrey;">
<td>L16</td>
<td>L17</td>
<td>L21</td>
</tr>
<tr style="font-size: 0.7em;">
<td>tL16</td>
<td>tL17</td>
<td>tL21</td>
</tr>
<tr style="font-size: 0.7em; color:white; background-color:blue;">
<td>WZ Sofa LED</td>
<td>WZ Leselampe</td>
<td>Esstisch</td>
</tr>
<tr style="font-size: 0.7em; color:black; background-color:lightgrey;">
<td>L19</td>
<td>L18</td>
<td>L20</td>
</tr>
<tr style="font-size: 0.7em; ">
<td>tL19</td>
<td>tL18</td>
<td>tL20</td>
</tr>
<tr style="font-size: 0.7em; color:white; background-color:blue;">
<td>Küche Arbeitsfläche</td>
<td>Küche Unterlicht</td>
<td>Terrassenlicht</td>
</tr>
<tr style="font-size: 0.7em; color:black; background-color:lightgrey;">
<td>L22</td>
<td>L23</td>
<td>L24</td>
</tr>
<tr style="font-size: 0.7em;">
<td>tL22</td>
<td>tL23</td>
<td>tL24</td>
</tr>
<tr style="font-size: 0.7em; color:white; background-color:blue;">
<td>Gartenlicht</td>
<td>Terrasse Steckdose</td>
</tr>
<tr style="font-size: 0.7em; color:black; background-color:lightgrey;">
<td>L25</td>
<td>L37</td>
</tr>
<tr style="font-size: 0.7em;">
<td>tL25</td>
<td>tL37</td>
</tr>
<tr>
<th colspan="3">Sonstige Schalter</th>
</tr>
<tr style="font-size: 0.7em; color:white; background-color:blue;">
<td>Waschmaschine</td>
<td>Trockner</td>
<td>PV Wasser</td>
</tr>
<tr style="font-size: 0.7em; color:black; background-color:lightgrey;">
<td>L26</td>
<td>L27</td>
<td>L28</td>
</tr>
<tr style="font-size: 0.7em;">
<td>tL26</td>
<td>tL27</td>
<td>tL28</td>
</tr>
<tr style="font-size: 0.7em;">
<td>L30 W</td>
<td>L31 W</td>
<td>L32 W</td>
</tr>
<tr style="font-size: 0.7em; color:white; background-color:blue;">
<td>Umwälzpumpe</td>
<td>Haustürschloss</td>
</tr>
<tr style="font-size: 0.7em; color:black; background-color:lightgrey;">
<td>L29</td>
<td>L36</td>
</tr>
<tr style="font-size: 0.7em;">
<td>tL29</td>
<td>tL36</td>
</tr>
<tr>
<th colspan="3">Einstellungen</th>
</tr>
<tr style="font-size: 0.7em; color:white; background-color:blue;">
<td>Morgenlicht ein</td>
<td>Abendlicht ein</td>
<td>Abendlicht aus</td>
</tr>
<tr style="font-size: 0.7em;">
<td>L33</td>
<td>L34</td>
<td>L35</td>
</tr>
</table>
<!----------------------------->
<!--END
<!----------------------------->
</body>
</html>
Code: Alles auswählen
! HTML Dashboard für @Home App
!
! Füllt die Variable "Dashboard: Licht" mit entsprechenden Zustandsdaten.
! Verwendet dazu den String in "Dashboard: Licht Template" als Input.
! Prinzip: Wenn Zustand "True" dann wird Texthintergrund Grün eingefärbt
! Platzhalter im Template werden durch entsprechende CSS Formatierung ersetzt.
!
! In @Home nicht darstellbare Zeichen (z.B. Zeilenumbrüche) werden entfernt.
!
! 07.11.21 ED: Inital Version
! ---------------------------------------------------------------------------
var oInput = dom.GetObject("Dashboard: Licht Template");
var oOutput = dom.GetObject("Dashboard: Licht");
! Aktueller Zeitstempel
var T00 = system.Date("%H:%M:%S");
! CSS Formatiertierung als Liste. Trennzeichen ist "#"
string off_on = "<td>Aus#<td style=\"color:white;background-color:green;\">Ein";
string off_red_on = "<td style=\"color:white;background-color:red;\">Aus#<td style=\"color:white;background-color:green;\">Ein";
string door_off_on = "<td style=\"color:white;background-color:green; \">Verriegelt#<td style=\"color:white;background-color:red; \">Offen";
! Systemvariable
! Geräte
var L10 = dom.GetObject("Büro Dietmar Licht:Schalter").DPByHssDP("STATE").Value();
var L11 = dom.GetObject("Büro Dietmar Deckenlicht:Schalter").DPByHssDP("STATE").Value();
var L12 = dom.GetObject("Flurdeckenlicht:Schalter").DPByHssDP("STATE").Value();
var L13 = dom.GetObject("Garagenlicht:Schalter").DPByHssDP("STATE").Value();
var L14 = dom.GetObject("Treppenhauslicht:Schalter").DPByHssDP("STATE").Value();
var L15 = dom.GetObject("UG Flur-Lampe:Schalter").DPByHssDP("STATE").Value();
var L16 = dom.GetObject("Wohnzimmer Stehlampe:Schalter").DPByHssDP("STATE").Value();
var L17 = dom.GetObject("Wohnzimmer TV LED:Schalter").DPByHssDP("STATE").Value();
var L18 = dom.GetObject("Wohnzimmer Leselampe:Schalter").DPByHssDP("STATE").Value();
var L19 = dom.GetObject("Wohnzimmer Sofa LED:Schalter").DPByHssDP("STATE").Value();
var L20 = dom.GetObject("Esstisch:Schalter").DPByHssDP("STATE").Value();
var L21 = dom.GetObject("EG Flur-Lampe:Schalter").DPByHssDP("STATE").Value();
var L22 = dom.GetObject("Küche Arbeitsfläche:Schalter").DPByHssDP("STATE").Value();
var L23 = dom.GetObject("Küche Unterlicht:Schalter").DPByHssDP("STATE").Value();
var L24 = dom.GetObject("Terrasse Licht:Schalter").DPByHssDP("STATE").Value();
var L25 = dom.GetObject("Gartenbeleuchtung:Schalter").DPByHssDP("STATE").Value();
var L26 = dom.GetObject("Waschmaschine:Schalter").DPByHssDP("STATE").Value();
var L27 = dom.GetObject("Trockner:Schalter").DPByHssDP("STATE").Value();
var L28 = dom.GetObject("Warmwasser PV Heizstab:Schalter").DPByHssDP("STATE").Value();
var L29 = dom.GetObject("Wasser Umwälzpumpe:Schalter").DPByHssDP("STATE").Value();
var L30 = dom.GetObject("Trockner:Messwert").DPByHssDP("POWER").Value();
var L31 = dom.GetObject("Waschmaschine:Messwert").DPByHssDP("POWER").Value();
var L32 = dom.GetObject("Warmwasser PV Heizstab:Messwert").DPByHssDP("POWER").Value();
var L33 = dom.GetObject("S:Morgenlicht an");
var L34 = dom.GetObject("S:Abendlicht Sonnenuntergang");
var L35 = dom.GetObject("S:Abendlicht aus");
var L36 = dom.GetObject("Haustürschloss:1").DPByHssDP("STATE").Value();
var L37 = dom.GetObject("Terrasse Steckdose:Schalter").DPByHssDP("STATE").Value();
! Letzte Statusänderung auslesen
! ------------------------------
var tL10 = dom.GetObject("Büro Dietmar Licht:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL11 = dom.GetObject("Büro Dietmar Deckenlicht:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL12 = dom.GetObject("Flurdeckenlicht:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL13 = dom.GetObject("Garagenlicht:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL14 = dom.GetObject("Treppenhauslicht:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL15 = dom.GetObject("UG Flur-Lampe:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL16 = dom.GetObject("Wohnzimmer Stehlampe:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL17 = dom.GetObject("Wohnzimmer TV LED:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL18 = dom.GetObject("Wohnzimmer Leselampe:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL19 = dom.GetObject("Wohnzimmer Sofa LED:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL20 = dom.GetObject("Esstisch:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL21 = dom.GetObject("EG Flur-Lampe:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL22 = dom.GetObject("Küche Arbeitsfläche:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL23 = dom.GetObject("Küche Unterlicht:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL24 = dom.GetObject("Terrasse Licht:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL25 = dom.GetObject("Gartenbeleuchtung:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL26 = dom.GetObject("Waschmaschine:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL27 = dom.GetObject("Trockner:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL28 = dom.GetObject("Warmwasser PV Heizstab:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL29 = dom.GetObject("Wasser Umwälzpumpe:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL30 = dom.GetObject("Waschmaschine:Messwert").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL31 = dom.GetObject("Trockner:Messwert").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL32 = dom.GetObject("Warmwasser PV Heizstab:Messwert").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL36 = dom.GetObject("Haustürschloss:1").LastDPActionTime().Format("%d.%m.%y %H:%M");
var tL37 = dom.GetObject("Terrasse Steckdose:Schalter").LastDPActionTime().Format("%d.%m.%y %H:%M");
! ---------------------------------------------------
! Template in HTML String übernehmen und vorbereiten
var sHTML = oInput.Value();
!WriteLine("Input = " # sHTML);
! Ungültige Zeichen entfernen oder ersetzen
sHTML = sHTML.Replace("\n", ""); ! Zeilenumbrüche im String entfernen
! Daten in HTML String eintragen
sHTML = sHTML.Replace("T00", T00);
sHTML = sHTML.Replace("<td>L10", (off_on.StrValueByIndex("#",L10)));
sHTML = sHTML.Replace("<td>L11", (off_on.StrValueByIndex("#",L11)));
sHTML = sHTML.Replace("<td>L12", (off_on.StrValueByIndex("#",L12)));
sHTML = sHTML.Replace("<td>L13", (off_on.StrValueByIndex("#",L13)));
sHTML = sHTML.Replace("<td>L14", (off_on.StrValueByIndex("#",L14)));
sHTML = sHTML.Replace("<td>L15", (off_on.StrValueByIndex("#",L15)));
sHTML = sHTML.Replace("<td>L16", (off_on.StrValueByIndex("#",L16)));
sHTML = sHTML.Replace("<td>L17", (off_on.StrValueByIndex("#",L17)));
sHTML = sHTML.Replace("<td>L18", (off_on.StrValueByIndex("#",L18)));
sHTML = sHTML.Replace("<td>L19", (off_on.StrValueByIndex("#",L19)));
sHTML = sHTML.Replace("<td>L20", (off_on.StrValueByIndex("#",L20)));
sHTML = sHTML.Replace("<td>L21", (off_on.StrValueByIndex("#",L21)));
sHTML = sHTML.Replace("<td>L22", (off_on.StrValueByIndex("#",L22)));
sHTML = sHTML.Replace("<td>L23", (off_on.StrValueByIndex("#",L23)));
sHTML = sHTML.Replace("<td>L24", (off_on.StrValueByIndex("#",L24)));
sHTML = sHTML.Replace("<td>L25", (off_on.StrValueByIndex("#",L25)));
sHTML = sHTML.Replace("<td>L26", (off_red_on.StrValueByIndex("#",L26)));
sHTML = sHTML.Replace("<td>L27", (off_red_on.StrValueByIndex("#",L27)));
sHTML = sHTML.Replace("<td>L28", (off_red_on.StrValueByIndex("#",L28)));
sHTML = sHTML.Replace("<td>L29", (off_on.StrValueByIndex("#",L29)));
sHTML = sHTML.Replace("<td>L36", (door_off_on.StrValueByIndex("#",L36)));
sHTML = sHTML.Replace("<td>L37", (off_on.StrValueByIndex("#",L37)));
sHTML = sHTML.Replace("L30", L30.ToString(1));
sHTML = sHTML.Replace("L31", L31.ToString(1));
sHTML = sHTML.Replace("L32", L32.ToString(1));
sHTML = sHTML.Replace("L33", L33.ValueList().StrValueByIndex(";", L33.Value()));
sHTML = sHTML.Replace("L34", L34.ValueList().StrValueByIndex(";", L34.Value()));
sHTML = sHTML.Replace("L35", L35.ValueList().StrValueByIndex(";", L35.Value()));
sHTML = sHTML.Replace("tL10", tL10);
sHTML = sHTML.Replace("tL11", tL11);
sHTML = sHTML.Replace("tL12", tL12);
sHTML = sHTML.Replace("tL13", tL13);
sHTML = sHTML.Replace("tL14", tL14);
sHTML = sHTML.Replace("tL15", tL15);
sHTML = sHTML.Replace("tL16", tL16);
sHTML = sHTML.Replace("tL17", tL17);
sHTML = sHTML.Replace("tL18", tL18);
sHTML = sHTML.Replace("tL19", tL19);
sHTML = sHTML.Replace("tL20", tL20);
sHTML = sHTML.Replace("tL21", tL21);
sHTML = sHTML.Replace("tL22", tL22);
sHTML = sHTML.Replace("tL23", tL23);
sHTML = sHTML.Replace("tL24", tL24);
sHTML = sHTML.Replace("tL25", tL25);
sHTML = sHTML.Replace("tL26", tL26);
sHTML = sHTML.Replace("tL27", tL27);
sHTML = sHTML.Replace("tL28", tL28);
sHTML = sHTML.Replace("tL29", tL29);
sHTML = sHTML.Replace("tL30", tL30);
sHTML = sHTML.Replace("tL31", tL31);
sHTML = sHTML.Replace("tL32", tL32);
sHTML = sHTML.Replace("tL36", tL36);
sHTML = sHTML.Replace("tL37", tL37);
! Spezialbehandlungen
! -------------------
WriteLine("Output = " # sHTML);
! HTML String in Anzeig-Variable schreiben
oOutput.Variable( sHTML );
WriteLine(" fertig");
Noch eine Anmerkung:
-- Bei mir lässt sich die Systemvariable mit dem HTML Text im HM WebGUI nur über einen Trick wieder ändern: Systemvariable öffnen, Typ der Variablen auf Logik ändern und wieder auf Zeichenkette zurücksetzen. Jetzt kann der neue HTML Text wieder hinein kopiert werden