Hallo,
aufbauend auf die vorangegangenen Beiträge, hier ein "PlugPlay"-Beispiel für den HMS100 TF.
An der Hintergrundfarbe lässt sich die Aktualität der Sensorinformationen erkennen: grau=normal; gelb=1 Signal verpasst; hellrot=2 Signale verpasst; rot mehr als zwei Signale nicht mehr empfangen...
(Soll nur ein Beispiel für die vielen Möglichkeiten sein, die man jetzt hat)
[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]
[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]
[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]
[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]
##############################################################
Folgendes Schritte sind dazu notwendig:
1. Ein Anzeige-Objekt anlegen, z.B. "AnzeigeSensorWZ",
Typ: EAGeraet
Makroinhalt ("Ausführen bei Eingabe" gesetzt):
Code: Alles auswählen
GueltigkeitSensorWZ := Stoppzeit(TemperaturWZ.ct)
<?
$Objectname = "AnzeigeSensorWZ";
$HeadLine = "Wohnzimmer";
$Value1 = $TemperaturWZ;
$Value2 = $FeuchteWZ;
$Timer = $GueltigkeitSensorWZ;
//Dieser Pfad muß angepasst werden!!!
include("Z:\\fs20\\php\\HMS100TF.php");
?>
**Anzeige:=Scriptoutput
AnzeigeSensorWZ umschalten
Annahme: Der Temperaturwert liegt im Objekt "TemperaturWZ", der Feuchtigkeitswert im Objekt "FeuchteWZ"
Achtung: Pfad für include anpassen
2. Ein Objekt "GueltigkeitSensorWZ" vom Typ Zeichen anlegen
Makroinhalt (Ausführungsintervall z.B. 1 x pro Sekunde):
3. Im Objekt des Feuchtigkeitssensors (hier "FeuchteWZ" wird folgendes Makro hinterlegt:
("Ausführung bei Empfang" ist gesetzt)
Code: Alles auswählen
Startuhr(TemperaturWZ.ct)
STARTE(AnzeigeSensorWZ)
**Aller 05:13 Minuten wird ein Signal empfangen (kurz vor Signaleingang soll die Farbe bereits umschalten)...
WARTE("00:05:12")
STARTE(AnzeigeSensorWZ)
WARTE("00:05:13")
STARTE(AnzeigeSensorWZ)
WARTE("00:05:13")
STARTE(AnzeigeSensorWZ)
4. Die Datei "HMS100TF.php" in das Verzeichnis spielen, welches unter Punkt 1 unter include angegeben wurde,
Inhalt:
Code: Alles auswählen
<?
//Dieser Pfad ist anzupassen
$filejpg = "z:\\fs20\\temp\\".$Objectname.".jpg";
$HeaderSize = 18;
$SizeX = 150;
$SizeY = 28+$HeaderSize;
$HeadFont = "arialbd.ttf";
$HeadFontSize = 10;
$Font = "ds-digi.ttf";
$FontSize = 18;
$Value1 = sprintf("%.1f", $Value1);
$Value2 = sprintf("%.1f", $Value2);
if ($Value1 < -100) $Value1 = "--,-";
if ($Value2 < -100) $Value2 = "--,-";
$Text1 = str_replace(".", ",", $Value1) . " 'C";
$Text2 = str_replace(".", ",", $Value2) . " %";
$TimerSec = substr($Timer, 0, 2)*3600 + substr($Timer, 3, 2)*60 + substr($Timer, 6, 2);
$ReceiveIntervall = 05*60 + 13;
$im = imagecreatetruecolor ($SizeX, $SizeY);
$gray = ImageColorAllocate ($im, 214, 211, 206);
$darkgray = ImageColorAllocate ($im, 128, 128, 128);
$black = ImageColorAllocate ($im, 0, 0, 0);
$white = ImageColorAllocate ($im, 255, 255, 255);
$yellow = ImageColorAllocate ($im, 255, 255, 0);
$lightred = ImageColorAllocate ($im, 255, 192, 192);
$red = ImageColorAllocate ($im, 255, 0, 0);
$green = ImageColorAllocate ($im, 0, 128, 0);
$blue = ImageColorAllocate ($im, 0, 0, 255);
$hintergrund = $gray;
$vordergrund = $blue;
if ($TimerSec >= $ReceiveIntervall-2)
{
$hintergrund = $yellow;
}
if ($TimerSec >= 2*$ReceiveIntervall-2)
{
$hintergrund = $lightred;
}
if ($TimerSec >= 3*$ReceiveIntervall-2)
{
$hintergrund = $red;
$vordergrund = $white;
}
ImageTTFText ($im, 18, 0, 0, 0, $black, $fontdir."wingding.ttf", "");
imagefill($im, 0, 0, $hintergrund);
imagerectangle ($im, 0, 0, $SizeX-1, $SizeY-1, $darkgray);
imagerectangle ($im, 1, 1, $SizeX-2, $SizeY-2, $darkgray);
imagerectangle ($im, 3, 3, $SizeX-2, $SizeY-2, $darkgray);
imagerectangle ($im, 1, 1, $SizeX-4, $SizeY-4, $white);
imagerectangle ($im, 2, 2, $SizeX-1, $SizeY-1, $darkgray);
imagerectangle ($im, 0, 0, $SizeX-3, $SizeY-3, $white);
imageline($im, 2, $HeaderSize, $SizeX-4, $HeaderSize, $white);
imageline($im, 2, $HeaderSize+1, $SizeX-4, $HeaderSize+1, $darkgray);
imageline($im , ceil($SizeX/2), $HeaderSize+1, ceil($SizeX/2), $SizeY-4 , $white);
imageline($im , ceil($SizeX/2)+1, $HeaderSize+1, ceil($SizeX/2)+1, $SizeY-4 , $darkgray);
$tb = imagettfbbox($HeadFontSize, 0, $HeadFont, $HeadLine);
ImageTTFText ($im, $HeadFontSize, 0, ceil(($SizeX-50 - $tb[2]) / 2), $HeadFontSize+5, $black, $HeadFont, $HeadLine);
$tb = imagettfbbox($FontSize, 0, $Font, $Text1);
ImageTTFText ($im, $FontSize, 0, ceil(($SizeX/2 - $tb[2]) / 2), $SizeY-7, $vordergrund, $Font, $Text1);
$tb = imagettfbbox($FontSize, 0, $Font, $Text2);
ImageTTFText ($im, $FontSize, 0, ceil($SizeX/2)-2+ceil(($SizeX/2 - $tb[2]) / 2), $SizeY-7, $vordergrund, $Font, $Text2);
Imagejpeg ($im, $filejpg , 99);
ImageDestroy ($im);
?>
Achtung: Pfad für $filejpg anpassen
5. Anzeige-Objekt (hier "AnzeigeSensorWZ") in die Visualisierung bringen , Projekt starten
6. Anzeigeobjekt anklicken, dabei sollte das JPG dort entstehen, wie der Pfad unter Punkt 4 festgelegt wurde (vorher eventuell das Temp-Verzeichniss anlegen)
7. Dem Anzeigeobjekt für beide Zustände die unter Punkt 6 entstandene Grafik zuordnen.
-> FERTIG
##############################################################
Wenn man -wie im obigen Beispiel- auch den Zeitstempel seit letztem Signaleinlauf in die Visualisierung bringen möchte, braucht man nur noch das Objekt "
GueltigkeitSensorWZ" in die Ansicht einfügen.
Viel Spass damit
Thomas
PS:
- Voraussetzungen: PHP installiert, zusätzlich die php_gd2.dll vorhanden, php.ini angepasst (wie bereits von sanys beschrieben)
- weiterhin: Schriftarten vorhanden (speziell "ds-digi.ttf"), hier kann man natürlich auch mit anderen Schriftarten spielen...
- Ich habe bewusst auf die Ausgabe als BMP (BMP.PHP) verzichtet, da diese enorm Performance frisst und bei diesen kleinen Schriftarten kaum Vorteile bringt...