SensorAndSwitch Haus-Automation auf Webserver-Basis

Treiber nur zum Display ansteuern gabs da nicht, nur ein angepasstes Raspbian.
Ja, mit einen Framebuffertreiber.
[video=youtube;a2CStAaMbmA]https://www.youtube.com/watch?v=a2CStAaMbmA[/video]
Und wenn du startx aufrufst würd halt ein angepasstes SaS den Windowmanager ersetzen.
Äh, ich mein den Webbrowser mit SaS laden.
 
Zuletzt bearbeitet:
Ja, das war noch der Pi1A. Problem ist der Webbowser vom Raspbian. Da flackert sas drauf. Beim Pi1B+ baut sich die Seite in Zeitlupe auf und beim Pi2B ist die Geschwindigkeit ok, aber es flackert. Aber eine Lösung gibts bestimmt auch dafür. Vieleicht SAS auf Python-Basis zum Anzeigen benutzen. ;)
 
Och, es muss nicht unbedingt eine Webseite sein.
Als ich mich mit XAMPP oder LAMPP beschäftigt habe,
fiel mir AnkeCalligraph auf.
AnkeCalligraph.png
Mit der GD und FreeType lässt sich da einiges anstellen.

Von Captcha bis Kunst, oder einfach eine dynamische Spielerei.
xtm_01.png
Ich denke natürlich dabei eher an eine gut lesbare grafisch aufbereitete Info. ;)
...dargestellt in einem einzigen Bild.
iart.php
PHP:
<?php
//include "langsettings.php";
// Copyright (C) 2002/2003 Kai Seidler <[email protected]>
//
// 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 2 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, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
error_reporting(E_ALL);
if(isset($_REQUEST['text'])) {
$text=$_REQUEST['text'];
$ASSO[0]=$text;
unset($text);
}
if(isset($_REQUEST['text1'])) {
$text=$_REQUEST['text1'];
$ASSO[1]=$text;
unset($text);
}
//if(!isset($_REQUEST['text'])) $ASSO[0]=$_SERVER['HTTP_HOST'];
//if(count($ASSO)==1) array_push($ASSO,date("H:i")." Uhr",date("D-d M-Y"));
if(!isset($_REQUEST['text'])) $ASSO[0]=mt_rand(1,time());
if(@$_REQUEST['img']!=1)
{
header('Content-Type: text/html; Charset="UTF-8"');
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="refresh" content="<?=mt_rand(15,60)?>">
<meta name="author" content="Kai Oswald Seidler">
<link href="iart.css" rel="stylesheet" type="text/css">
<link rel="shortcut icon" type="image/png" href="1px.png">
</head>
<body>
<a onfocus="this.blur();" href=""><img onfocus="this.blur();" style="width:400px;height:400px;" src="iart.php?img=1&text=<?=urlencode($ASSO[mt_rand(0,count($ASSO)-1)])?>" alt="iart"></a>
</body>
</html>
<?php
        exit;
    }

    if(isset($_REQUEST['text'])) {
    $fontfile = "./bluehigh.ttf";
    }else{
    $fontfile = "./AnkeCalligraph.TTF";
    }
    $size = 14;
    $h = 400;
    $w = 400;

    $im  =  ImageCreate($w, $h);

    $fill = ImageColorAllocate($im, 0, 0, 15);
    $light = ImageColorAllocate($im, 0, 200, 0);
    $corners = ImageColorAllocate($im, 0, 155, 0);
    $dark = ImageColorAllocate($im, 0, 100 , 0);
    $black = ImageColorAllocate($im , 0, 0 , 0);

    $colors[1] = ImageColorAllocate($im, 0, 200, 0);
    $colors[2] = ImageColorAllocate($im, 0, 155, 0);
    $colors[3] = ImageColorAllocate($im, 0, 100, 0);
    $colors[4] = ImageColorAllocate($im, 0, 55, 0);

    header("Content-Type: image/png");

    $c = 1;
    $anz = (count($ASSO) * $size);
    $step = (4 / $anz);
    for ($i = 0; $i < $anz; $i += 1) {
        $fsize = mt_rand($size, ($size * 3));
        $x = mt_rand(0, $w);
        $y = mt_rand(0, $h);
        $color = $colors[$c];
        $c += $step;
        ImageTTFText($im, $fsize, 1, $x, $y, $color, $fontfile, $ASSO[mt_rand(0,count($ASSO)-1)]);
    }
/* (Kein) Rand (Rahmen, Border)
    ImageLine($im, 0, 0, $w - 1, 0, $dark);
    ImageLine($im, 0, 0, 0, $h - 2, $dark);
    ImageLine($im, $w - 1, 0, $w-1, $h, $light);
    ImageLine($im, 0, $h - 1, $w - 1, $h - 1, $light);
    ImageSetPixel($im, 0 , $h - 1, $corners);
    ImageSetPixel($im, $w - 1, 0, $corners);
*/
    ImagePNG($im);
    exit;
?>
 
Zuletzt bearbeitet:
Neue Version 4.50.4500
weitere Infos im
SAS4PI-Web
  • [4500] Verbesserungen am Log-File (Darstellung).
  • [4500] Designs werden nun auch bei Benutzern in den Geräteslots berücksichtigt und korrekt dargestellt.
  • [4500] Bugfix: Kleinere Darstellungsfehlerbehebung bei Designs.
 
Neue Version 4.50.4501
weitere Infos im
SAS4PI-Web
  • [4501] Bugfix: Kleinere Darstellungsfehlerbehebung bei Designs bei Info-Slots.


-Nachtrag:
Beim Upload habe ich noch eine fehlerhafte Version erwischt. Daher sicherstellen, dass der Update erst nach 21:11 erfolgt ist. Ansonsten einen Update mit sasupdate?update=erzwingen durchführen.

Sorry.


-Zur Info:
Mit picdesign() werden nun anstelle von festen Pfaden mit Bilddateinamen nun Platzhalter mit dem Dateinamen des Bildes in die Datenbank geschrieben. Diese werden dann von der WebGUI von sas in den Pfaden des jeweiligen Designs dargestellt, sodass auf Gerät A mit Benutzer X ein anderes Design als auf Gerät B mit Benutzer Y angezeigt werden kann und das gleichzeitig.
 
Zuletzt bearbeitet:
Moins

Habe grad mein erstes Update mit "webmin" gemacht...
webmin_apt-get_update_01.png
...und, ja, SaS 4 funktioniert danach auch munter weiter.
 
Frage an die Experten,
In der aktuellen Laborfirmware gibt es keinen Telnetzugang mehr, z.B. Fritzbox 7390, 7490 usw. Das würde ja bedeuten das man in zukünftigen Firmwareupdates kein Telnetzugang mehr hat. Wie kann man dann den Webserver für SAS nach einem Neustart der Fritzbox aktivieren ? Gibt es da eine Lösung ?

Gruß Benne007
 
Moins

Ja, mehrere.

1. Temporärer Zugang* mit Pseudofirmwareflash.
2. Dauerhafter Zugang mit freetz, auch ohne freetz**, mit Entpacken der Firmware
Modifizierung mit Zugang, Neupacken, flashen.
3. Setzt funktionierende debug.cfg vorraus, siehe 2., lädt busybox/dropbear aus dem Netz und startet einen telnetd/ssh Server.
4. So eine Firmware (Labor/Release) wo es nicht geht, nicht benutzen.

* Nach Boxneustart kein telnet, aber Modifizierung von TFFS (Konfigurationsdateien) möglich.
** Bei DualBootBoxen wie der 7490 mit "modfs" von PeterPawn, kein Problem. ;)

PS: Natürlich bebt die "Szene" ob diesen Themas. Es wird zur Zeit fleissig ausgelotet was geht und was nicht.***
...falls es dich interessiert: KlickKlack (und es hat mir auch Jemand geholfen)

*** Und zwar schneller als AVM reagieren kann :D
 
Zuletzt bearbeitet:
OK Danke für die hilfreichen Varianten

Gruß Benne007
 
No Problem

Noch eine Zusatzinfo

In freetz menuconfig (Trunk Version) ist die Aktivierung der /var/flash/debug.cfg standardmässig aktiv.
Allerdings ist freetz nicht zwingend, aber die CrossCompile Umgebung bringt ein Tool mit, mit welchen nur
die Firmware entpackt, Änderungen gepatcht, und wieder gepackt wird.
In einen solchen Image ist dann kein freetz enthalten, aber es ist Mithilfe von freetz entstanden.
 
Ja ok,
so habe ich mir die debug.cfg zurückgeholt.

Gruß Benne007
 
Sorry Leute. ich muss Euch mal stören, denn es gibt eine neue Version: ;)

-Neue Version 4.50.4525
weitere Infos im
SAS4PI-Web
  • [4525] Interne Änderung der Abspeicherform von Bilddateiplatzhaltern in der Datenbank, sodass keine Irritationen bei Pfadangaben mehr entstehen können.
  • [4525] Neuer doppelt hoher Info-Slot mit Pseudo IB## verwendbar.
  • [4525] Angepasstes Beispiel-PSG Wetter und dazu passendes neues InfoWetter.


-Anmerkungen:
  • Wenn nach dem Update kurzzeitig die Slot-Anzeige nur Platzhalter statt Bildinhalte anzeigt, dann muss ein Aktualisierungszyklus von sasag gewartet werden. Danach repariert sich die Datenbank automatisch und die Anzeige ist wieder korrekt.
  • Das Design classic wird nicht mehr mitgeliefert. IB## lassen sich mit dem alten classic-Design nicht darstellen.
  • Das psg infoWetter funktioniert nur im Zusammenhang mit dem aktuellen psg Wetter. Es zeigt grafisch aufbereitet den Tagestemperaturverlauf min. und max. pro Stunde:
    infoWetter.jpg
    Es wird pro Stunde die Temperaturspanne (min./max in cyan) und die Temperatursäule farblich je nach Temperaturhöhe dargestellt. Vortagessäulen sind farblich dunkler und werden auch nicht in der Tages-min./max.-Berechnung berücksichtigt.
    Die gesamte Darstellung ist keine Bildgrafik, sondern basiert auf reinem CSS, sodass die Tabelle mit dem Browser verlustfrei zoombar ist.
 
Zuletzt bearbeitet:
Aktualisierte psginfoWetter.php Außentemperatur:

PHP:
<?php 

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                                   |
		|   Pseudo-Script                                                     |
		|   ===============================================================   |
		|   Info                                                              |
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
 
	error_reporting(0);
	include __DIR__."/../include/psg.php";

	$ver="V#V 4.70#";
	$name="Wetter";
	$gerarray=getGerInfo($name);
	$tempz=unserialize($gerarray["tempz"]);
	$info ="";
	
	# 10 Grad-Linien
	
	for ($g=0;$g<=8;$g++) {
		$l=$g*10+6;
		if ($g!=5) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(80,80,80);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
		}
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.($l-4).'px;left:0px;font-size:10px;width:30px;text-align:right">'.(50-$g*10).'°C</div>';
	}
	
	# 5 Grad-Linien
	
	for ($g=0;$g<=9;$g++) {
		$l=$g*10+1;
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(60,60,60);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
	}
	
	# Markierung akt. Stunde
	
	for ($z=0;$z<=23;$z++) {
		$h=50+30+10+15;
		$t=1;
		$p=$z*20+5+30;
		if ($z==$gerarray["zeith"]) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.($p-2).'px;background-color:rgb(80,80,80);border-style:solid;border-color:rgb(80,80,80);font-size:8px;width:19px;height:'.$h.'px"></div>';
		}
	}
	
	# Temperatursäulen
	
	for ($z=0;$z<=23;$z++) {
		$h=$tempz[$z]["max"]-$tempz[$z]["min"];
		$h0=$tempz[$z]["max"];
		$t=50+7-$tempz[$z]["max"];
		$t0=$t;
		$p=$z*20+5+30;
		$f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
		$f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
		if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=50+7;}
		if (isset($tempz[$z]["max"])) {
			if ($tempz[$z]["max"]>=35) {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.$f0.','.($f0/4).','.$f0.');border-style:solid;border-color:rgb('.$f0.','.($f0/4).','.$f0.');font-size:8px;width:15px;height:'.$h0.'px"></div>';
			}
			else {
				if (isset($tempz[$z]["max"])) {
					if ($tempz[$z]["max"]>=30) {
						$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.$f0.',0,0);border-style:solid;border-color:rgb('.$f0.',0,0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
					}
					else {
						if ($tempz[$z]["max"]>=27.5) {
							$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.$f0.','.($f0/2).',0);border-style:solid;border-color:rgb('.$f0.','.($f0/2).',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
						}
						else {
							if ($tempz[$z]["max"]>=25) {
								$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.$f0.','.($f0/1).',0);border-style:solid;border-color:rgb('.$f0.','.($f0/1).',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
							}
							else {
								if ($tempz[$z]["max"]>=20) {
									$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.($f0/2).','.$f0.',0);border-style:solid;border-color:rgb('.($f0/2).','.$f0.',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
								}
								else {
									if ($tempz[$z]["max"]>=10) {
										$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.$f0.',0);border-style:solid;border-color:rgb(0,'.$f0.',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
									}
									else {
										if ($tempz[$z]["max"]>=0) {
											$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.$f0.','.$f0.');border-style:solid;border-color:rgb(0,'.$f0.','.$f0.');font-size:8px;width:15px;height:'.$h0.'px"></div>';
										}
										else {
											if ($tempz[$z]["min"]<=-15) {
												$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t0.'px;left:'.$p.'px;background-color:rgb('.($f0/2).',0,'.$f0.');border-style:solid;border-color:rgb('.($f0/2).',0,'.$f0.');font-size:8px;width:15px;height:'.$h0.'px"></div>';
											}
											else {
												$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t0.'px;left:'.$p.'px;background-color:rgb(0,0,'.$f0.');border-style:solid;border-color:rgb(0,0,'.$f0.');font-size:8px;width:15px;height:'.$h0.'px"></div>';
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	
	# 0 Grad-Linie
	
	for ($g=0;$g<=8;$g++) {
		$l=$g*10+6;
		if ($g==5) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(120,120,120);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
		}
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.($l-4).'px;left:0px;font-size:10px;width:30px;text-align:right">'.(50-$g*10).'°C</div>';
	}
	
	# Rest
	
	for ($z=0;$z<=23;$z++) {
		if ($z<=$gerarray["zeith"]) {
			if ($tempz[$z]["min"]<$tempz[24]["min"] or !isset($tempz[24]["min"])) {
				if (isset($tempz[$z]["min"])) {
					$tempz[24]["min"]=$tempz[$z]["min"];
					$tempz[24]["minh"]=$z;
				}
			}
			if ($tempz[$z]["max"]>$tempz[24]["max"] or !isset($tempz[24]["max"])) {
				if (isset($tempz[$z]["max"])) {
					$tempz[24]["max"]=$tempz[$z]["max"];
					$tempz[24]["maxh"]=$z;
				}
			}
		}
		$h=$tempz[$z]["max"]-$tempz[$z]["min"];
		$h0=$tempz[$z]["max"];
		$t=50+7-$tempz[$z]["max"];
		$t0=$t;
		$p=$z*20+5+30;
		$f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
		$f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
		if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=$tempz[$z]["max"]*-1+50+7;}
		
		# Zeitskala
		
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.(97).'px;left:'.$p.'px;font-size:10px;width:15px;text-align:center">'.$z.'h</div>';
		
		# Werte
		
		if (isset($tempz[$z]["max"])) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t0.'px;left:'.$p.'px;background-color:rgb(0,'.$f.','.$f.');border-style:solid;border-color:rgb(0,'.$f.','.$f.');font-size:8px;width:15px;height:'.$h.'px"></div>';
			if ($tempz[$z]["max"]>=0) {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(69).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;">'.number_format(sprintf('%.1f',$tempz[$z]["max"]),1,",",".").'</div>';
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(79).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;">'.number_format(sprintf('%.1f',$tempz[$z]["min"]),1,",",".").'</div>';
			}
			else {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(29).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;">'.number_format(sprintf('%.1f',$tempz[$z]["max"]),1,",",".").'</div>';
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(39).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;">'.number_format(sprintf('%.1f',$tempz[$z]["min"]),1,",",".").'</div>';
			}
		}
	}
	$info.='<div id="text" style="position:absolute;border:1px;top:0px;left:520px;text-align:right;width:90px;font-size:12px;">Außen-<br />temperatur</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:35px;left:520px;text-align:right;width:90px;font-size:20px;">'.number_format(sprintf('%.1f',$tempz[24]["max"]),1,",",".").'°C</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:55px;left:520px;text-align:right;width:90px;font-size:12px;">('.$tempz[24]["maxh"].'h) max.</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:70px;left:520px;text-align:right;width:90px;font-size:20px;">'.number_format(sprintf('%.1f',$tempz[24]["min"]),1,",",".").'°C</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:90px;left:520px;text-align:right;width:90px;font-size:12px;">('.$tempz[24]["minh"].'h) min.</div>';
	echo 'IB#<div style="position:absolute;left:85px;top:0px;">'.$info.'</div>#'.$ver;
	
?>

neue psginfoWetterHydro.php Luftfeuchtigkeit:

PHP:
<?php

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                                   |
		|   Pseudo-Script                                                     |
		|   ===============================================================   |
		|   Info                                                              |
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
 
	error_reporting(0);
	include __DIR__."/../include/psg.php";

	$ver="V#V 4.60#";
	$name="Wetter";
	$gerarray=getGerInfo($name);
	$feuchtz=unserialize($gerarray["feuchtz"]);
	$info ="";
	
	# 10%-Linien
	
	for ($g=0;$g<=10;$g++) {
		$l=$g*10+1;
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(80,80,80);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.($l-4).'px;left:0px;font-size:10px;width:30px;text-align:right">'.(100-$g*10).'%%</div>';
	}
	
	# 5%-Linien
	
	for ($g=0;$g<=9;$g++) {
		$l=$g*10+6;
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(60,60,60);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
	}
	
	# Markierung akt. Stunde
	
	for ($z=0;$z<=23;$z++) {
		$h=113;
		$t=1;
		$p=$z*20+5+30;
		if ($z==$gerarray["zeith"]) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.($p-2).'px;background-color:rgb(80,80,80);border-style:solid;border-color:rgb(80,80,80);font-size:8px;width:19px;height:'.$h.'px"></div>';
		}
	}
	

	# Hydrosäulen
	
	for ($z=0;$z<=23;$z++) {
		$h=$feuchtz[$z]["max"]-$feuchtz[$z]["min"];
		$h0=$feuchtz[$z]["max"];
		$t=100+1-$feuchtz[$z]["max"];
		$t0=$t;
		$p=$z*20+5+30;
		$f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
		$f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
		if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=50+7;}
		if (isset($feuchtz[$z]["max"])) {
			if ($feuchtz[$z]["max"]>=80) {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,0,'.($f0/1).');border-style:solid;border-color:rgb(0,0,'.($f0/1).');font-size:8px;width:15px;height:'.$h0.'px"></div>';
			}
			else {
				if (isset($feuchtz[$z]["max"])) {
					if ($feuchtz[$z]["max"]>=70) {
							$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.($f0/2).','.($f0/1).');border-style:solid;border-color:rgb(0,'.($f0/2).','.($f0/1).');font-size:8px;width:15px;height:'.$h0.'px"></div>';
					}
					else {
						if ($feuchtz[$z]["max"]>=60) {
							$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.($f0/1).','.($f0/1).');border-style:solid;border-color:rgb(0,'.($f0/1).','.($f0/1).');font-size:8px;width:15px;height:'.$h0.'px"></div>';
						}
						else {
							if ($feuchtz[$z]["max"]>=50) {
								$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.($f0/1).','.($f0/2).');border-style:solid;border-color:rgb(0,'.($f0/1).','.($f0/2).');font-size:8px;width:15px;height:'.$h0.'px"></div>';
							}
							else {
								if ($feuchtz[$z]["max"]>=40) {
									$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.$f0.',0);border-style:solid;border-color:rgb(0,'.$f0.',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
								}
								else {
									if ($feuchtz[$z]["max"]>=30) {
										$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.($f0/1).','.($f0/1).',0);border-style:solid;border-color:rgb('.($f0/1).','.($f0/1).',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
									}
									else {
										if ($feuchtz[$z]["max"]>=20) {
											$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.($f0/1).','.($f0/2).',0);border-style:solid;border-color:rgb('.($f0/1).','.($f0/2).',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
										}
										else {
											$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.$f0.',0,0);border-style:solid;border-color:rgb('.$f0.',0,0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
											
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
		
	# Rest
	
	for ($z=0;$z<=23;$z++) {
		if ($z<=$gerarray["zeith"]) {
			if ($feuchtz[$z]["min"]<$feuchtz[24]["min"] or !isset($feuchtz[24]["min"])) {
				if (isset($feuchtz[$z]["min"])) {
					$feuchtz[24]["min"]=$feuchtz[$z]["min"];
					$feuchtz[24]["minh"]=$z;
				}
			}
			if ($feuchtz[$z]["max"]>$feuchtz[24]["max"] or !isset($feuchtz[24]["max"])) {
				if (isset($feuchtz[$z]["max"])) {
					$feuchtz[24]["max"]=$feuchtz[$z]["max"];
					$feuchtz[24]["maxh"]=$z;
				}
			}
		}
		$h=$feuchtz[$z]["max"]-$feuchtz[$z]["min"];
		$h0=$feuchtz[$z]["max"];
		$t=100+1-$feuchtz[$z]["max"];
		$t0=$t;
		$p=$z*20+5+30;
		$f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
		$f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
		if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=$feuchtz[$z]["max"]*-1+50+7;}
		
		# Zeitskala
		
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.(103).'px;left:'.$p.'px;font-size:7px;width:15px;text-align:center">'.$z.'h</div>';
		
		# Werte
		
		if (isset($feuchtz[$z]["max"])) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t0.'px;left:'.$p.'px;background-color:rgb(0,'.$f.','.$f.');border-style:solid;border-color:rgb(0,'.$f.','.$f.');font-size:8px;width:15px;height:'.$h.'px"></div>';
			if ($feuchtz[$z]["max"]>80) {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(83).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$feuchtz[$z]["max"]),0,",",".").'</div>';
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(92).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$feuchtz[$z]["min"]),0,",",".").'</div>';
			}
			else {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(3).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$feuchtz[$z]["max"]),0,",",".").'</div>';
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(12).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$feuchtz[$z]["min"]),0,",",".").'</div>';
			}
		}
	}

	$info.='<div id="text" style="position:absolute;border:1px;top:0px;left:520px;text-align:right;width:90px;font-size:12px;">Hydrometer</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:35px;left:520px;text-align:right;width:90px;font-size:20px;">'.number_format(sprintf('%.0f',$feuchtz[24]["max"]),0,",",".").'%%</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:55px;left:520px;text-align:right;width:90px;font-size:12px;">('.$feuchtz[24]["maxh"].'h) max.</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:70px;left:520px;text-align:right;width:90px;font-size:20px;">'.number_format(sprintf('%.0f',$feuchtz[24]["min"]),0,",",".").'%%</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:90px;left:520px;text-align:right;width:90px;font-size:12px;">('.$feuchtz[24]["minh"].'h) min.</div>';
	echo 'IB#<div style="position:absolute;left:85px;top:0px;">'.$info.'</div>#'.$ver;
	
?>
 
Zuletzt bearbeitet:
aktuelle psgWetter.php:
PHP:
<?php

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                      PSG-Script   |
		|   ===============================================================   |
		|   Wetter                                               Web (curl)   |
		|   ---------------------------------------------------------------   |
		|   openweathermap.org                                                |
		|   Informationen von obiger Homepage für den Ort, der anhand der     |
		|   in den Einstellungen eingelesenen Längen- und Breitengraden       |
		|   ermittelt wurde.                                                  |
		|                                                                     |
		|   (C)2014/15 BlueDragon                                             !
		|                                                                     |
		+---------------------------------------------------------------------+
	*/

	include __DIR__."/../include/psg.php";
	$gerarray=getGerInfo(substr(basename(__FILE__,".php"),3));

	if ($gerarray["Counter"]>=9) {
		$ver="V#V 4.70#";
		$zeit=date("H:i");
		$url="http://api.openweathermap.org/data/2.5/weather?lat=".BREITENGRAD."&lon=".LAENGENGRAD."&mode=xml&units=metric&lang=de";
		$Status=web($url,$post);
		if ($Status) {
			$Cont=simplexml_load_string($Status);
			$Temp=number_format(sprintf('%.1f',$Cont->temperature->attributes()->value),1,",",".");
			$Wind=$Cont->wind->speed->attributes()->name;
			$WGeschwindigkeit=number_format(sprintf('%.2f',$Cont->wind->speed->attributes()->value*6),0,",",".");
			$WRichtung=$Cont->wind->direction->attributes()->code;
			$Luftdruck=number_format(sprintf('%.0f',$Cont->pressure->attributes()->value),0,",",".");
			$Feuchtigkeit=number_format(sprintf('%.0f',$Cont->humidity->attributes()->value),0,",",".");
			$Stadt=$Cont->city->attributes()->name;
			$Symbol='<img src="http://openweathermap.org/img/w/'.$Cont->weather->attributes()->icon.'.png" width="50" height="50">';
			$Wetter=$Cont->weather->attributes()->value;
			$temp=sprintf('%.1f',$Cont->temperature->attributes()->value);
			$feucht=sprintf('%.0f',$Cont->humidity->attributes()->value);
			$luftd=sprintf('%.0f',$Cont->pressure->attributes()->value);
			$zeitl=$gerarray["zeitl"];
			$zeith=date("G")*1;
			$tempz=unserialize($gerarray["tempz"]);
			$feuchtz=unserialize($gerarray["feuchtz"]);
			$luftdz=unserialize($gerarray["luftdz"]);
			if ($zeith!=$zeitl) {
				unset($tempz[$zeith]["min"]);
				unset($tempz[$zeith]["max"]);
				unset($feuchtz[$zeith]["min"]);
				unset($feuchtz[$zeith]["max"]);
				unset($luftdz[$zeith]["min"]);
				unset($luftdz[$zeith]["max"]);
				$zeitl=$zeith;
			}
			if ($zeitl>23) {$zeitl=0;}
			if ($temp<$tempz[$zeith]["min"] or !isset($tempz[$zeith]["min"])) {
				$tempz[$zeith]["min"]=$temp;
			}
			if ($temp>$tempz[$zeith]["max"] or !isset($tempz[$zeith]["max"])) {
				$tempz[$zeith]["max"]=$temp;
			}
			if ($feucht<$feuchtz[$zeith]["min"] or !isset($feuchtz[$zeith]["min"])) {
				$feuchtz[$zeith]["min"]=$feucht;
			}
			if ($feucht>$feuchtz[$zeith]["max"] or !isset($feuchtz[$zeith]["max"])) {
				$feuchtz[$zeith]["max"]=$feucht;
			}
			if ($luftd<$luftdz[$zeith]["min"] or !isset($luftdz[$zeith]["min"])) {
				$luftdz[$zeith]["min"]=$luftd;
			}
			if ($luftd>$luftdz[$zeith]["max"] or !isset($luftdz[$zeith]["max"])) {
				$luftdz[$zeith]["max"]=$luftd;
			}
			$echo="T#".sprintf('%.2f',$Cont->temperature->attributes()->value)."#P#".'<div style="font-size:12px;text-align:right;width:60px;position:absolute;top:-12px;">'.$Luftdruck.' hPa</div><div style="font-size:12px;text-align:left;width:60px;position:absolute;top:14px;"><img src="'.picdesign("wind.png").'" border="0" height="24"></div><div style="font-size:12px;text-align:right;width:60px;position:absolute;top:12px;">'.$WRichtung.'</div><div style="font-size:12px;text-align:right;width:60px;position:absolute;top:26px;">'.$WGeschwindigkeit.' km/h</div><div style="font-size:14px;text-align:right;width:310px;position:absolute;top:-20px;">'.$Symbol.'</div><div style="font-size:14px;text-align:right;width:310px;position:absolute;top:25px;left:0px;">'.$Wetter.'</div><div style="font-size:14px;text-align:left;width:30px;position:absolute;top:-20px;left:70px;"><img class="block" src="'.picdesign("temp.png").'" border="0"></div><div style="font-size:14px;text-align:right;width:100px;position:absolute;top:-12px;left:70px;"><img src="'.picdesign("feucht.png").'" border="0" height="12"> '.$Feuchtigkeit."%%".'</div><div style="font-size:22px;text-align:right;width:100px;position:absolute;top:2px;left:70px;">'.$Temp."°C".'</div>'."*HTML#V#".$Wetter."*ANZWETTER##V#".$Feuchtigkeit."*ANZFEUCHT#V#".$zeit."*Mode#V#".serialize($tempz)."*tempz#V#".serialize($feuchtz)."*feuchtz#V#".serialize($luftdz)."*luftdz#V#".$zeith."*zeith#V#".$zeitl."*zeitl#".$ver;
		}
		else {
			$echo=$ver."C##";
		}
	}
	else {
		$echo=$ver."C##";
	}
	echo $echo;
	exit;
	
?>

psginfoWetterLuftdruck.php:
PHP:
<?php

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                                   |
		|   Pseudo-Script                                                     |
		|   ===============================================================   |
		|   Info                                                              |
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
 
	error_reporting(0);
	include __DIR__."/../include/psg.php";

	$ver="V#V 4.60#";
	$name="Wetter";
	$gerarray=getGerInfo($name);
	$luftdz=unserialize($gerarray["luftdz"]);
	$info ="";
	
	# 10%-Linien
	
	for ($g=0;$g<=10;$g++) {
		$l=$g*10+1;
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(80,80,80);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.($l-4).'px;left:0px;font-size:10px;width:30px;text-align:right">'.(1050-$g*10).'</div>';
	}
	
	# 5%-Linien
	
	for ($g=0;$g<=9;$g++) {
		$l=$g*10+6;
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(60,60,60);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
	}
	
	# Markierung akt. Stunde
	
	for ($z=0;$z<=23;$z++) {
		$h=113;
		$t=1;
		$p=$z*20+5+30;
		if ($z==$gerarray["zeith"]) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.($p-2).'px;background-color:rgb(80,80,80);border-style:solid;border-color:rgb(80,80,80);font-size:8px;width:19px;height:'.$h.'px"></div>';
		}
	}
	

	# hPa-Säulen
	
	for ($z=0;$z<=23;$z++) {
		$h=$luftdz[$z]["max"]-$luftdz[$z]["min"];
		$h0=($luftdz[$z]["max"]-950);
		$t=100+1-($luftdz[$z]["max"]-950);
		$t0=$t;
		$p=$z*20+5+30;
		$f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
		$f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
		if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=50+7;}
		if (isset($luftdz[$z]["max"])) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.($f0/1).','.($f0/1).','.($f0/1).');border-style:solid;border-color:rgb('.($f0/1).','.($f0/1).','.($f0/1).');font-size:8px;width:15px;height:'.$h0.'px"></div>';
		}
	}
		
	# Rest
	
	for ($z=0;$z<=23;$z++) {
		if ($z<=$gerarray["zeith"]) {
			if ($luftdz[$z]["min"]<$luftdz[24]["min"] or !isset($luftdz[24]["min"])) {
				if (isset($luftdz[$z]["min"])) {
					$luftdz[24]["min"]=$luftdz[$z]["min"];
					$luftdz[24]["minh"]=$z;
				}
			}
			if ($luftdz[$z]["max"]>$luftdz[24]["max"] or !isset($luftdz[24]["max"])) {
				if (isset($luftdz[$z]["max"])) {
					$luftdz[24]["max"]=$luftdz[$z]["max"];
					$luftdz[24]["maxh"]=$z;
				}
			}
		}
		$h=$luftdz[$z]["max"]-$luftdz[$z]["min"];
		$h0=($luftdz[$z]["max"]-950);
		$t=100+1-($luftdz[$z]["max"]-950);
		$t0=$t;
		$p=$z*20+5+30;
		$f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
		$f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
		if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=$luftdz[$z]["max"]*-1+50+7;}
		
		# Zeitskala
		
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.(103).'px;left:'.$p.'px;font-size:7px;width:15px;text-align:center">'.$z.'h</div>';
		
		# Werte
		
		if (isset($luftdz[$z]["max"])) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t0.'px;left:'.$p.'px;background-color:rgb(0,'.$f.','.$f.');border-style:solid;border-color:rgb(0,'.$f.','.$f.');font-size:8px;width:15px;height:'.$h.'px"></div>';
			if (($luftdz[$z]["max"]-950)>80) {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(83).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$luftdz[$z]["max"]),0,",","").'</div>';
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(92).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$luftdz[$z]["min"]),0,",","").'</div>';
			}
			else {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(3).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$luftdz[$z]["max"]),0,",","").'</div>';
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(12).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$luftdz[$z]["min"]),0,",","").'</div>';
			}
		}
	}

	$info.='<div id="text" style="position:absolute;border:1px;top:0px;left:520px;text-align:right;width:90px;font-size:12px;">Luftdruck</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:35px;left:520px;text-align:right;width:90px;font-size:18px;">'.number_format(sprintf('%.0f',$luftdz[24]["max"]),0,",",".").' hPa</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:55px;left:520px;text-align:right;width:90px;font-size:12px;">('.$luftdz[24]["maxh"].'h) max.</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:70px;left:520px;text-align:right;width:90px;font-size:18px;">'.number_format(sprintf('%.0f',$luftdz[24]["min"]),0,",",".").' hPa</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:90px;left:520px;text-align:right;width:90px;font-size:12px;">('.$luftdz[24]["minh"].'h) min.</div>';
	echo 'IB#<div style="position:absolute;left:85px;top:0px;">'.$info.'</div>#'.$ver;
	
?>

infoWetter2.jpg
 
Zuletzt bearbeitet:
@JL3,
vielen Dank für das Update und die neuen psg-scripte Wetter, Außentemperatur, Hydro und Luftdruck.
Funktioniert super.

Gruß Benne007
 
Zuletzt bearbeitet:
Sehr schön, ich hoffe, es ist nützlich. ;)

Theoretisch kann man für jedes psg ein psginfo erstellen, um dessen Werte grafisch darzustellen und eine Historie zu bilden.

Hier noch einmal die neuesten Fassungen:

psgWetter.php
PHP:
<?php

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                      PSG-Script   |
		|   ===============================================================   |
		|   Wetter                                               Web (curl)   |
		|   ---------------------------------------------------------------   |
		|   openweathermap.org                                                |
		|   Informationen von obiger Homepage für den Ort, der anhand der     |
		|   in den Einstellungen eingelesenen Längen- und Breitengraden       |
		|   ermittelt wurde.                                                  |
		|                                                                     |
		|   (C)2014/15 BlueDragon                                             !
		|                                                                     |
		+---------------------------------------------------------------------+
	*/

	include __DIR__."/../include/psg.php";
	$gerarray=getGerInfo(substr(basename(__FILE__,".php"),3));

	if ($gerarray["Counter"]>=9) {
		$ver="V#V 4.70#";
		$zeit=date("H:i");
		$url="http://api.openweathermap.org/data/2.5/weather?lat=".BREITENGRAD."&lon=".LAENGENGRAD."&mode=xml&units=metric&lang=de";
		$Status=web($url,$post);
		if ($Status) {
			$Cont=simplexml_load_string($Status);
			$Temp=number_format(sprintf('%.1f',$Cont->temperature->attributes()->value),1,",",".");
			$Wind=$Cont->wind->speed->attributes()->name;
			$WGeschwindigkeit=number_format(sprintf('%.2f',$Cont->wind->speed->attributes()->value*6),0,",",".");
			$WRichtung=$Cont->wind->direction->attributes()->code;
			$Luftdruck=number_format(sprintf('%.0f',$Cont->pressure->attributes()->value),0,",",".");
			$Feuchtigkeit=number_format(sprintf('%.0f',$Cont->humidity->attributes()->value),0,",",".");
			$Stadt=$Cont->city->attributes()->name;
			$Symbol='<img src="http://openweathermap.org/img/w/'.$Cont->weather->attributes()->icon.'.png" width="50" height="50">';
			$Wetter=$Cont->weather->attributes()->value;
			$temp=sprintf('%.1f',$Cont->temperature->attributes()->value);
			$feucht=sprintf('%.0f',$Cont->humidity->attributes()->value);
			$luftd=sprintf('%.0f',$Cont->pressure->attributes()->value);
			$zeitl=$gerarray["zeitl"];
			$zeith=date("G")*1;
			$tempz=unserialize($gerarray["tempz"]);
			$feuchtz=unserialize($gerarray["feuchtz"]);
			$luftdz=unserialize($gerarray["luftdz"]);
			if ($zeith!=$zeitl) {
				unset($tempz[$zeith]["min"]);
				unset($tempz[$zeith]["max"]);
				unset($feuchtz[$zeith]["min"]);
				unset($feuchtz[$zeith]["max"]);
				unset($luftdz[$zeith]["min"]);
				unset($luftdz[$zeith]["max"]);
				$zeitl=$zeith;
			}
			if ($zeitl>23) {$zeitl=0;}
			if ($temp<$tempz[$zeith]["min"] or !isset($tempz[$zeith]["min"])) {
				$tempz[$zeith]["min"]=$temp;
			}
			if ($temp>$tempz[$zeith]["max"] or !isset($tempz[$zeith]["max"])) {
				$tempz[$zeith]["max"]=$temp;
			}
			if ($feucht<$feuchtz[$zeith]["min"] or !isset($feuchtz[$zeith]["min"])) {
				$feuchtz[$zeith]["min"]=$feucht;
			}
			if ($feucht>$feuchtz[$zeith]["max"] or !isset($feuchtz[$zeith]["max"])) {
				$feuchtz[$zeith]["max"]=$feucht;
			}
			if ($luftd<$luftdz[$zeith]["min"] or !isset($luftdz[$zeith]["min"])) {
				$luftdz[$zeith]["min"]=$luftd;
			}
			if ($luftd>$luftdz[$zeith]["max"] or !isset($luftdz[$zeith]["max"])) {
				$luftdz[$zeith]["max"]=$luftd;
			}
			$echo="T#".sprintf('%.2f',$Cont->temperature->attributes()->value)."#P#".'<div style="font-size:12px;text-align:right;width:60px;position:absolute;top:-12px;">'.$Luftdruck.' hPa</div><div style="font-size:12px;text-align:left;width:60px;position:absolute;top:14px;"><img src="'.picdesign("wind.png").'" border="0" height="24"></div><div style="font-size:12px;text-align:right;width:60px;position:absolute;top:12px;">'.$WRichtung.'</div><div style="font-size:12px;text-align:right;width:60px;position:absolute;top:26px;">'.$WGeschwindigkeit.' km/h</div><div style="font-size:14px;text-align:right;width:310px;position:absolute;top:-20px;">'.$Symbol.'</div><div style="font-size:14px;text-align:right;width:310px;position:absolute;top:25px;left:0px;">'.$Wetter.'</div><div style="font-size:14px;text-align:left;width:30px;position:absolute;top:-20px;left:70px;"><img class="block" src="'.picdesign("temp.png").'" border="0"></div><div style="font-size:14px;text-align:right;width:100px;position:absolute;top:-12px;left:70px;"><img src="'.picdesign("feucht.png").'" border="0" height="12"> '.$Feuchtigkeit."%%".'</div><div style="font-size:22px;text-align:right;width:100px;position:absolute;top:2px;left:70px;">'.$Temp."°C".'</div>'."*HTML#V#".$Wetter."*ANZWETTER##V#".$Feuchtigkeit."*ANZFEUCHT#V#".$zeit."*Mode#V#".serialize($tempz)."*tempz#V#".serialize($feuchtz)."*feuchtz#V#".serialize($luftdz)."*luftdz#V#".$zeith."*zeith#V#".$zeitl."*zeitl#".$ver;
		}
		else {
			$echo=$ver."C##";
		}
	}
	else {
		$echo=$ver."C##";
	}
	echo $echo;
	exit;
	
?>

psginfoWetter.php
PHP:
<?php 

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                                   |
		|   Pseudo-Script                                                     |
		|   ===============================================================   |
		|   Info                                                              |
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
 
	error_reporting(0);
	include __DIR__."/../include/psg.php";

	$ver="V#V 4.80#";
	$name="Wetter";
	$gerarray=getGerInfo($name);
	$tempz=unserialize($gerarray["tempz"]);
	$info ="";
	
	# 10 Grad-Linien
	
	for ($g=0;$g<=8;$g++) {
		$l=$g*10+6;
		if ($g!=5) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(80,80,80);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
		}
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.($l-4).'px;left:0px;font-size:10px;width:30px;text-align:right">'.(50-$g*10).'°C</div>';
	}
	
	# 5 Grad-Linien
	
	for ($g=0;$g<=9;$g++) {
		$l=$g*10+1;
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(60,60,60);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
	}
	
	# Markierung akt. Stunde
	
	for ($z=0;$z<=23;$z++) {
		$h=50+30+10+15;
		$t=1;
		$p=$z*20+5+30;
		if ($z==$gerarray["zeith"]) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.($p-2).'px;background-color:rgb(80,80,80);border-style:solid;border-color:rgb(80,80,80);font-size:8px;width:19px;height:'.$h.'px"></div>';
		}
	}
	
	# Temperatursäulen
	
	for ($z=0;$z<=23;$z++) {
		$h=$tempz[$z]["max"]-$tempz[$z]["min"];
		$h0=$tempz[$z]["max"];
		$t=50+7-$tempz[$z]["max"];
		$t0=$t;
		$p=$z*20+5+30;
		$f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
		$f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
		if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=50+7;}
		if (isset($tempz[$z]["max"])) {
			if ($tempz[$z]["max"]>=35) {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.$f0.','.($f0/4).','.$f0.');border-style:solid;border-color:rgb('.$f0.','.($f0/4).','.$f0.');font-size:8px;width:15px;height:'.$h0.'px"></div>';
			}
			else {
				if (isset($tempz[$z]["max"])) {
					if ($tempz[$z]["max"]>=30) {
						$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.$f0.',0,0);border-style:solid;border-color:rgb('.$f0.',0,0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
					}
					else {
						if ($tempz[$z]["max"]>=27.5) {
							$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.$f0.','.($f0/2).',0);border-style:solid;border-color:rgb('.$f0.','.($f0/2).',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
						}
						else {
							if ($tempz[$z]["max"]>=25) {
								$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.$f0.','.($f0/1).',0);border-style:solid;border-color:rgb('.$f0.','.($f0/1).',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
							}
							else {
								if ($tempz[$z]["max"]>=20) {
									$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.($f0/2).','.$f0.',0);border-style:solid;border-color:rgb('.($f0/2).','.$f0.',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
								}
								else {
									if ($tempz[$z]["max"]>=10) {
										$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.$f0.',0);border-style:solid;border-color:rgb(0,'.$f0.',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
									}
									else {
										if ($tempz[$z]["max"]>=0) {
											$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.$f0.','.$f0.');border-style:solid;border-color:rgb(0,'.$f0.','.$f0.');font-size:8px;width:15px;height:'.$h0.'px"></div>';
										}
										else {
											if ($tempz[$z]["min"]<=-15) {
												$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t0.'px;left:'.$p.'px;background-color:rgb('.($f0/2).',0,'.$f0.');border-style:solid;border-color:rgb('.($f0/2).',0,'.$f0.');font-size:8px;width:15px;height:'.$h0.'px"></div>';
											}
											else {
												$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t0.'px;left:'.$p.'px;background-color:rgb(0,0,'.$f0.');border-style:solid;border-color:rgb(0,0,'.$f0.');font-size:8px;width:15px;height:'.$h0.'px"></div>';
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
	
	# 0 Grad-Linie
	
	for ($g=0;$g<=8;$g++) {
		$l=$g*10+6;
		if ($g==5) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(120,120,120);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
		}
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.($l-4).'px;left:0px;font-size:10px;width:30px;text-align:right">'.(50-$g*10).'°C</div>';
	}
	
	# Rest
	
	for ($z=0;$z<=23;$z++) {
		if ($z<=$gerarray["zeith"]) {
			if ($tempz[$z]["min"]<$tempz[24]["min"] or !isset($tempz[24]["min"])) {
				if (isset($tempz[$z]["min"])) {
					$tempz[24]["min"]=$tempz[$z]["min"];
					$tempz[24]["minh"]=$z;
				}
			}
			if ($tempz[$z]["max"]>$tempz[24]["max"] or !isset($tempz[24]["max"])) {
				if (isset($tempz[$z]["max"])) {
					$tempz[24]["max"]=$tempz[$z]["max"];
					$tempz[24]["maxh"]=$z;
				}
			}
		}
		$h=$tempz[$z]["max"]-$tempz[$z]["min"];
		$h0=$tempz[$z]["max"];
		$t=50+7-$tempz[$z]["max"];
		$t0=$t;
		$p=$z*20+5+30;
		$f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
		$f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
		if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=$tempz[$z]["max"]*-1+50+7;}
		
		# Zeitskala
		
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.(97).'px;left:'.$p.'px;font-size:10px;width:15px;text-align:center">'.$z.'h</div>';
		
		# Werte
		
		if (isset($tempz[$z]["max"])) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t0.'px;left:'.$p.'px;background-color:rgb(0,'.$f.','.$f.');border-style:solid;border-color:rgb(0,'.$f.','.$f.');font-size:8px;width:15px;height:'.$h.'px"></div>';
			if ($tempz[$z]["max"]>=0) {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(69).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;">'.number_format(sprintf('%.1f',$tempz[$z]["max"]),1,",",".").'</div>';
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(79).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;">'.number_format(sprintf('%.1f',$tempz[$z]["min"]),1,",",".").'</div>';
			}
			else {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(29).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;">'.number_format(sprintf('%.1f',$tempz[$z]["max"]),1,",",".").'</div>';
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(39).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;">'.number_format(sprintf('%.1f',$tempz[$z]["min"]),1,",",".").'</div>';
			}
		}
	}
	$zh=$gerarray["zeith"];
	$zvh=$zh-1;
	if ($zvh<0) {$zvh=23;}
	$pfeil="&rArr;";
	$w=($tempz[$zh]["max"]+$tempz[$zh]["min"])/2;
	$wv=($tempz[$zvh]["max"]+$tempz[$zvh]["min"])/2;
	if ($wv>$w) {$pfeil='&dArr;';}
	if ($wv<$w) {$pfeil='&uArr;';}
	$info.='<div id="text" style="position:absolute;border:1px;top:0px;left:520px;text-align:left;width:90px;font-size:30px;">'.$pfeil.'</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:0px;left:520px;text-align:right;width:90px;font-size:12px;">Außen-<br />temperatur</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:35px;left:520px;text-align:right;width:90px;font-size:20px;">'.number_format(sprintf('%.1f',$tempz[24]["max"]),1,",",".").'°C</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:55px;left:520px;text-align:right;width:90px;font-size:12px;">('.$tempz[24]["maxh"].'h) max.</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:70px;left:520px;text-align:right;width:90px;font-size:20px;">'.number_format(sprintf('%.1f',$tempz[24]["min"]),1,",",".").'°C</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:90px;left:520px;text-align:right;width:90px;font-size:12px;">('.$tempz[24]["minh"].'h) min.</div>';
	echo 'IB#<div style="position:absolute;left:85px;top:0px;">'.$info.'</div>#'.$ver;
	
?>

psginfoWetterHydro.php
PHP:
<?php

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                                   |
		|   Pseudo-Script                                                     |
		|   ===============================================================   |
		|   Info                                                              |
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
 
	error_reporting(0);
	include __DIR__."/../include/psg.php";

	$ver="V#V 4.80#";
	$name="Wetter";
	$gerarray=getGerInfo($name);
	$feuchtz=unserialize($gerarray["feuchtz"]);
	$info ="";
	
	# 10%-Linien
	
	for ($g=0;$g<=10;$g++) {
		$l=$g*10+1;
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(80,80,80);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.($l-4).'px;left:0px;font-size:10px;width:30px;text-align:right">'.(100-$g*10).'%%</div>';
	}
	
	# 5%-Linien
	
	for ($g=0;$g<=9;$g++) {
		$l=$g*10+6;
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(60,60,60);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
	}
	
	# Markierung akt. Stunde
	
	for ($z=0;$z<=23;$z++) {
		$h=113;
		$t=1;
		$p=$z*20+5+30;
		if ($z==$gerarray["zeith"]) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.($p-2).'px;background-color:rgb(80,80,80);border-style:solid;border-color:rgb(80,80,80);font-size:8px;width:19px;height:'.$h.'px"></div>';
		}
	}
	

	# Hydrosäulen
	
	for ($z=0;$z<=23;$z++) {
		$h=$feuchtz[$z]["max"]-$feuchtz[$z]["min"];
		$h0=$feuchtz[$z]["max"];
		$t=100+1-$feuchtz[$z]["max"];
		$t0=$t;
		$p=$z*20+5+30;
		$f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
		$f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
		if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=50+7;}
		if (isset($feuchtz[$z]["max"])) {
			if ($feuchtz[$z]["max"]>=80) {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,0,'.($f0/1).');border-style:solid;border-color:rgb(0,0,'.($f0/1).');font-size:8px;width:15px;height:'.$h0.'px"></div>';
			}
			else {
				if (isset($feuchtz[$z]["max"])) {
					if ($feuchtz[$z]["max"]>=70) {
							$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.($f0/2).','.($f0/1).');border-style:solid;border-color:rgb(0,'.($f0/2).','.($f0/1).');font-size:8px;width:15px;height:'.$h0.'px"></div>';
					}
					else {
						if ($feuchtz[$z]["max"]>=60) {
							$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.($f0/1).','.($f0/1).');border-style:solid;border-color:rgb(0,'.($f0/1).','.($f0/1).');font-size:8px;width:15px;height:'.$h0.'px"></div>';
						}
						else {
							if ($feuchtz[$z]["max"]>=50) {
								$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.($f0/1).','.($f0/2).');border-style:solid;border-color:rgb(0,'.($f0/1).','.($f0/2).');font-size:8px;width:15px;height:'.$h0.'px"></div>';
							}
							else {
								if ($feuchtz[$z]["max"]>=40) {
									$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb(0,'.$f0.',0);border-style:solid;border-color:rgb(0,'.$f0.',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
								}
								else {
									if ($feuchtz[$z]["max"]>=30) {
										$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.($f0/1).','.($f0/1).',0);border-style:solid;border-color:rgb('.($f0/1).','.($f0/1).',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
									}
									else {
										if ($feuchtz[$z]["max"]>=20) {
											$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.($f0/1).','.($f0/2).',0);border-style:solid;border-color:rgb('.($f0/1).','.($f0/2).',0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
										}
										else {
											$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.$f0.',0,0);border-style:solid;border-color:rgb('.$f0.',0,0);font-size:8px;width:15px;height:'.$h0.'px"></div>';
											
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
		
	# Rest
	
	for ($z=0;$z<=23;$z++) {
		if ($z<=$gerarray["zeith"]) {
			if ($feuchtz[$z]["min"]<$feuchtz[24]["min"] or !isset($feuchtz[24]["min"])) {
				if (isset($feuchtz[$z]["min"])) {
					$feuchtz[24]["min"]=$feuchtz[$z]["min"];
					$feuchtz[24]["minh"]=$z;
				}
			}
			if ($feuchtz[$z]["max"]>$feuchtz[24]["max"] or !isset($feuchtz[24]["max"])) {
				if (isset($feuchtz[$z]["max"])) {
					$feuchtz[24]["max"]=$feuchtz[$z]["max"];
					$feuchtz[24]["maxh"]=$z;
				}
			}
		}
		$h=$feuchtz[$z]["max"]-$feuchtz[$z]["min"];
		$h0=$feuchtz[$z]["max"];
		$t=100+1-$feuchtz[$z]["max"];
		$t0=$t;
		$p=$z*20+5+30;
		$f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
		$f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
		if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=$feuchtz[$z]["max"]*-1+50+7;}
		
		# Zeitskala
		
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.(103).'px;left:'.$p.'px;font-size:7px;width:15px;text-align:center">'.$z.'h</div>';
		
		# Werte
		
		if (isset($feuchtz[$z]["max"])) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t0.'px;left:'.$p.'px;background-color:rgb(0,'.$f.','.$f.');border-style:solid;border-color:rgb(0,'.$f.','.$f.');font-size:8px;width:15px;height:'.$h.'px"></div>';
			if ($feuchtz[$z]["max"]>80) {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(83).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$feuchtz[$z]["max"]),0,",",".").'</div>';
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(92).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$feuchtz[$z]["min"]),0,",",".").'</div>';
			}
			else {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(3).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$feuchtz[$z]["max"]),0,",",".").'</div>';
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(12).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$feuchtz[$z]["min"]),0,",",".").'</div>';
			}
		}
	}

	$zh=$gerarray["zeith"];
	$zvh=$zh-1;
	if ($zvh<0) {$zvh=23;}
	$pfeil="&rArr;";
	$w=($feuchtz[$zh]["max"]+$feuchtz[$zh]["min"])/2;
	$wv=($feuchtz[$zvh]["max"]+$feuchtz[$zvh]["min"])/2;
	if ($wv>$w) {$pfeil='&dArr;';}
	if ($wv<$w) {$pfeil='&uArr;';}
	$info.='<div id="text" style="position:absolute;border:1px;top:0px;left:520px;text-align:left;width:90px;font-size:30px;">'.$pfeil.'</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:0px;left:520px;text-align:right;width:90px;font-size:12px;">Hydrometer</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:35px;left:520px;text-align:right;width:90px;font-size:20px;">'.number_format(sprintf('%.0f',$feuchtz[24]["max"]),0,",",".").'%%</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:55px;left:520px;text-align:right;width:90px;font-size:12px;">('.$feuchtz[24]["maxh"].'h) max.</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:70px;left:520px;text-align:right;width:90px;font-size:20px;">'.number_format(sprintf('%.0f',$feuchtz[24]["min"]),0,",",".").'%%</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:90px;left:520px;text-align:right;width:90px;font-size:12px;">('.$feuchtz[24]["minh"].'h) min.</div>';
	echo 'IB#<div style="position:absolute;left:85px;top:0px;">'.$info.'</div>#'.$ver;
	
?>

psginfoWetterLuftdruck.php
PHP:
<?php

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                                   |
		|   Pseudo-Script                                                     |
		|   ===============================================================   |
		|   Info                                                              |
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
 
	error_reporting(0);
	include __DIR__."/../include/psg.php";

	$ver="V#V 4.80#";
	$name="Wetter";
	$gerarray=getGerInfo($name);
	$luftdz=unserialize($gerarray["luftdz"]);
	$info ="";
	
	# 10%-Linien
	
	for ($g=0;$g<=10;$g++) {
		$l=$g*10+1;
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(80,80,80);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.($l-4).'px;left:0px;font-size:10px;width:30px;text-align:right">'.(1050-$g*10).'</div>';
	}
	
	# 5%-Linien
	
	for ($g=0;$g<=9;$g++) {
		$l=$g*10+6;
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.$l.'px;background-color:rgb(60,60,60);border-style:solid;border-color:black;left:30px;width:485px;height:1px"></div>';
	}
	
	# Markierung akt. Stunde
	
	for ($z=0;$z<=23;$z++) {
		$h=113;
		$t=1;
		$p=$z*20+5+30;
		if ($z==$gerarray["zeith"]) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.($p-2).'px;background-color:rgb(80,80,80);border-style:solid;border-color:rgb(80,80,80);font-size:8px;width:19px;height:'.$h.'px"></div>';
		}
	}
	

	# hPa-Säulen
	
	for ($z=0;$z<=23;$z++) {
		$h=$luftdz[$z]["max"]-$luftdz[$z]["min"];
		$h0=($luftdz[$z]["max"]-950);
		$t=100+1-($luftdz[$z]["max"]-950);
		$t0=$t;
		$p=$z*20+5+30;
		$f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
		$f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
		if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=50+7;}

		$ld=(1050-$luftdz[$z]["max"])/2;
		$fr=intval((50-$ld)+$f0);
		$fg=intval($f0);
		$fb=intval(($ld)+$f0+13);
		if (isset($luftdz[$z]["max"])) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t.'px;left:'.$p.'px;background-color:rgb('.($fr/1).','.($fg/1).','.($fb/1).');border-style:solid;border-color:rgb('.($fr/1).','.($fg/1).','.($fb/1).');font-size:8px;width:15px;height:'.$h0.'px"></div>';
		}
	}
		
	# Rest
	
	for ($z=0;$z<=23;$z++) {
		if ($z<=$gerarray["zeith"]) {
			if ($luftdz[$z]["min"]<$luftdz[24]["min"] or !isset($luftdz[24]["min"])) {
				if (isset($luftdz[$z]["min"])) {
					$luftdz[24]["min"]=$luftdz[$z]["min"];
					$luftdz[24]["minh"]=$z;
				}
			}
			if ($luftdz[$z]["max"]>$luftdz[24]["max"] or !isset($luftdz[24]["max"])) {
				if (isset($luftdz[$z]["max"])) {
					$luftdz[24]["max"]=$luftdz[$z]["max"];
					$luftdz[24]["maxh"]=$z;
				}
			}
		}
		$h=$luftdz[$z]["max"]-$luftdz[$z]["min"];
		$h0=($luftdz[$z]["max"]-950);
		$t=100+1-($luftdz[$z]["max"]-950);
		$t0=$t;
		$p=$z*20+5+30;
		$f=120;if ($z<=$gerarray["zeith"]) {$f=200;}
		$f0=100;if ($z<=$gerarray["zeith"]) {$f0=140;}
		if ($h0<0) {$t=50+7; $h0=$h0*-1; $t0=$luftdz[$z]["max"]*-1+50+7;}
		
		# Zeitskala
		
		$info.='<div id="tab" style="position:absolute;border:1px;top:'.(103).'px;left:'.$p.'px;font-size:7px;width:15px;text-align:center">'.$z.'h</div>';
		
		# Werte
		
		if (isset($luftdz[$z]["max"])) {
			$info.='<div id="tab" style="position:absolute;border:1px;top:'.$t0.'px;left:'.$p.'px;background-color:rgb(0,'.$f.','.$f.');border-style:solid;border-color:rgb(0,'.$f.','.$f.');font-size:8px;width:15px;height:'.$h.'px"></div>';
			if (($luftdz[$z]["max"]-950)>80) {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(83).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$luftdz[$z]["max"]),0,",","").'</div>';
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(92).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$luftdz[$z]["min"]),0,",","").'</div>';
			}
			else {
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(3).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$luftdz[$z]["max"]),0,",","").'</div>';
				$info.='<div id="tab" style="position:absolute;border:1px;top:'.(12).'px;left:'.$p.'px;width:15px;text-align:center;font-size:8px;text-shadow:0px 0px 1px black,0px 0px 1px black,0px 0px 1px black;">'.number_format(sprintf('%.1f',$luftdz[$z]["min"]),0,",","").'</div>';
			}
		}
	}

	$zh=$gerarray["zeith"];
	$zvh=$zh-1;
	if ($zvh<0) {$zvh=23;}
	$pfeil="&rArr;";
	$w=($luftdz[$zh]["max"]+$luftdz[$zh]["min"])/2;
	$wv=($luftdz[$zvh]["max"]+$luftdz[$zvh]["min"])/2;
	if ($wv>$w) {$pfeil='&dArr;';}
	if ($wv<$w) {$pfeil='&uArr;';}
	$info.='<div id="text" style="position:absolute;border:1px;top:0px;left:520px;text-align:left;width:90px;font-size:30px;">'.$pfeil.'</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:0px;left:520px;text-align:right;width:90px;font-size:12px;">Luftdruck</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:35px;left:520px;text-align:right;width:90px;font-size:18px;">'.number_format(sprintf('%.0f',$luftdz[24]["max"]),0,",",".").' hPa</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:55px;left:520px;text-align:right;width:90px;font-size:12px;">('.$luftdz[24]["maxh"].'h) max.</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:70px;left:520px;text-align:right;width:90px;font-size:18px;">'.number_format(sprintf('%.0f',$luftdz[24]["min"]),0,",",".").' hPa</div>';
	$info.='<div id="text" style="position:absolute;border:1px;top:90px;left:520px;text-align:right;width:90px;font-size:12px;">('.$luftdz[24]["minh"].'h) min.</div>';
	echo 'IB#<div style="position:absolute;left:85px;top:0px;">'.$info.'</div>#'.$ver;
	
?>

Alle haben nun auch eine Trendanzeige (Pfeil) und beim Luftdruck ändert sich die Balkenfärbung (rötlicher = Hochdruck, bläulicher = Tiefdruck).
 
Moins

Oh, es tut sich noch was. :D

@JL3: CSS, ist schon witzig was damit alles geht.
Mit einem 1 Pixel grossen transparenten PNG hab ich mal eine "Schutzfolie" über eine Webseite damit gelegt. :D
CSS Menüs die aufklappen, mit hover. Oder das vermeintlich simple zentrieren von Inhalten.

Außerdem müssen wir mal auf die nächste Seite, das unboxing Video verlängert die Ladezeiten hier. :mrgreen:
 
Nächste Woche will ich irgendwann mal an die Sprachsteuerung, sodass man nur noch z. B. "Im Wohnzimmer Licht an" sagen muss und dann schaltet sas. Entsprechende Komponenten für Spracherkennung STT und Sprachausgabe TTS gibt es, aber sind schwer zu finden. Trotzdem bin ich recht zuversichtlich. Dann hört sas auch aufs Wort. ;)

Das Display-Problem ist soweit eingegrenzt, dass man sich an dem Pi, an dem das Display hängt, möglichst nicht anmeldet, dann läuft er ohne Aufhängen, ansonsten hängt er sich nach dem Abmelden nach einigen Stunden einfach auf. Warum das so ist, ist noch immer unklar. :gruebel:

Das große TFT-Display ist ebenfalls noch in Arbeit. Da fällt mir bestimmt auch noch was dazu ein. :)
 
Zuletzt bearbeitet:
Ich habe das Bild zu den aktualisierten psginfo vergessen:
infoWetter3.jpg
 
Schön bunt, und in Farbe.
Ist es denn so im Update? (hab ich noch nicht gemacht)
Oder brauchen wir Copy'n'Paste, hier aus deinem Post?
 

Statistik des Forums

Themen
246,162
Beiträge
2,247,158
Mitglieder
373,688
Neuestes Mitglied
Alf777
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.