SensorAndSwitch Haus-Automation auf Webserver-Basis

Da das Test-Script pdftest.php auf Basis von doitWetterPDF.php basiert und läuft, gehe ich von einem Zeitlimitproblem aus. Bei mir läuft doitWetterPDF.php auf einem Pi2 etwa eine Minute. Auf einem B+ wohl länger.

Ändere das Timeout bitte probeweise auf 3000. apache2 danach mit
sudo service apache2 restart
neu starten.

@alle: Kennt noch jemand eine Stelle wo apache2 oder php Zeitlimiteinstellungen haben? Mir fallen im Moment keine mehr ein.
 
Hallo JL3,

habe mal den Timeout auf 3000 gesetzt und apache2 neu gestartet, leider hat sich an dem Fehler nichts geändert.

Bei meinen Versuchen mit dem Script aus Post #1675 ist mir ein Verhalten des
Verzeichnis "include/html2pdf/_tcpdf_5.0.002/cache" aufgefallen.

Datum und Uhrzeit ändern sich wen ich das Script "pdftest.php" gestartet habe und die Test.pdf dann im log Verzeichnis steht.

Starte ich das Script "doitWetterPDF.php" oder "doitWetterPDFDruckversion.php" dann ändert sich
Datum und Uhrzeit des Verzeichnis "include/html2pdf/_tcpdf_5.0.002/cache" auch nach mehreren Minuten nicht.

Das würde doch bedeuten das im Ablauf in der "PDF-Erstellung" bei mir ein Fehler ist.
 
Zuletzt bearbeitet:
Ja, die Frage ist, welcher Fehler. Kommt er im Programmcode erst gar nicht an die Stelle, nach cache etwas zu schreiben, weil er einen Timeout vom Server erhält oder liegt es an irgendeiner Einstellung des apache2, des PHP-Interpreters oder was auch immer? :gruebel: Evtl. hat er zu wenig freien Arbeitsspeicher.

@alle: Läuft es bei jemandem auf dem Pi B+?
 
Zuletzt bearbeitet:
Hallo JL3,

erstmal Danke für die Rückmeldung werde das mal mit einem anderen neuen PI probieren. Der RaspberryPI 2 B hat ja 4 Kerne und
1 GByte RAM, aber das wird erstmal so schnell nicht.

Gruss ElefanetenMaus
 
Hallo JL3,

habe mir heute mal einen RaspberryPI 2 B der ja 4 Kerne und 1 GByte RAM hat zugelegt und muss sagen das alles ohne Probleme läuft.
Die PDF-Dateien werden ohne Probleme im log Verzeichnis erstellt.
Habe einfach die SD-Karte des alten PI in den neuen PI steckt und alles läuft einwandfrei.
Der Geschwindigkeitszuwachs ist gegenüber dem alten PI beachtlich.

Danke nochmal für die hilfreichen Tipps bei der Fehlersuche.

Gruss ElefantenMaus
 
Zuletzt bearbeitet:
Hat jemand ne Idee, wie ich das ganze auf dem Webserver einer Synology NAS (hängt direkt an der FB) zum laufen bekomme? Installation via Update Script funktioniert, aber zugriff auf die FB (7490 mit Labor FW) ist weder von extern (über "musterdomain.info" noch intern "fritz.box / IP" möglich
 
Sorry, dass ich erst jetzt antworten kann, aber leider hat mir die Gesundheit einen Strich durch die Rechnung gemacht. Bin deshalb auch nur kurz hier am vorbeischaun. Die Weiterentwicklung von SAS ruht aus diesem Grund zur Zeit komplett, obwohl ich schon mit der Version 5 begonnen habe.

@ElefantenMaus: Da der Pi2 schnell genug die PDF-Dateien erstellt, läuft er wohl auch nicht in einen Timeout. Mich würde trotzdem interessieren, welcher Timeout den Abbruch beim langsameren B+ verursacht. Vielleicht weiß hier jemand im Forum, der den apache2 gut kennt, wo noch timeouts versteckt sein könnten.

@bluenazgul: Werden denn die an die Fritzbox angeschlossenen Steckdosen nicht erkannt, oder funktionieren die Abfragen von AB-Status, WLAN-Status, etc. nicht? Letztere funktionieren nur, wenn auf der Fritzbox sashelper installiert ist. Die angemeldeten Steckdosen müssten generell erkannt werden.
 
Hallo,

da muss ich mich mal ranhängen, habe das gleiche Problem.
SAS läuft auf einem Synology NAS, FB7490 als Router, Fritz!DECT200 werden nicht erkannt. Installation hat funktioniert, mir werden aber keinerlei Geräte angezeigt. FB user hat "Heimnetz-Rechte".
Welcher Schritt fehlt.

Gruß Mirko
 
Leider habe ich keine 7490, daher muss ich etwas raten. Unter "Heimnetzfreigaben" sollte "Zugriff für Anwendungen zulassen" und "Smarthome-Funktion im FRITZ!Box-Heimnetz freigeben" angehakt sein. Auch einmal mit dem Benutzer "admin" in den SAS-Einstellungen versuchen. Bringt dies auch keinen Erfolg, kann man versuchen, den URL-Aufruf einmal manuell per Browser an die Fritzbox zu schicken. Das aber erst, wenn obiges nicht funktioniert.

In den SAS-Einstellungen muss unter "Fritz!Box Adresse oder IP:" z. B. "http://fritz.box" eingetragen werden. Also mit führendem "http://".
 
Zuletzt bearbeitet:
Hab jetzt noch weiter rumprobiert. Es funktioniert jetzt auch bei mir. Ich musste einen neuen Benutzer anlegen, mit allen nötigen Berechtigungen und dann die Anmeldung an der Web-Oberfläche auf "Benutzer +Passwort " umstellen. Mit den schon vorhandenen Benutzern und Anmeldung "nur Passwort " ging es nicht.

Gruß Mirko
 
Danke für die Rückmeldung. Mit "nur Passwort" wird es tatsächlich etwas kompliziert. Wenn ich mich recht entsinne, muss dann "Benutzer" frei bleiben, aber deine jetzige Lösung mit eigenem Benutzer und Berechtigung ist ohnehin besser. :)
 
Hallo JL3,

habe mal ein altes Script "pseudoCPU-Temp.php" erfolgreich aus der Programmversion 3.00.2470
auf die Programmversion 4.60.4575 abgeändert und auf den PI geladen.

Das Script läuft wunderbar und die CPU-Temperatur der 7490 wird auch korrekt angezeigt.
Je nach Belastung schwankt die Temperatur der FritzBox zwischen 52 und 75 Grad.

Nun meine Frage gibt es die Möglichkeit die Temperatur der FritzBox 7490 grafisch und als
Historie anzeigen zulassen, vergleichbar der Scripte "psgHimbeere.php" und "psginfoHimbeereTemp.php".

Gruss ElefantenMaus
 
Könntest du das script bitte mal hier posten?
 
Hallo HarryHase,

hier das Script "psgFritz!Box CPU.php" das bei meiner 7490 Fritz!Box funktioniert.

PHP:
<?php

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                      PSG-Script   |
		|   PseudoGeräte-Script                                    FritzBox   |
		|   ===============================================================   |
		|                                                         sashelper   |
		|   CPU-Temp der Fritz!Box anzeigen                                   |
		+---------------------------------------------------------------------+
	*/

	error_reporting(0);

	# In der folgenden Datei sind die Variablen der sashelper mit Pfadangaben
	# benannt, wie z. B.:
	# $helperurlfb='http://192.168.123.123/sensorandswitch/sensorandswitchhelper.php';
	include __DIR__."/../include/psg.php";

	$befehl='/usr/bin/ctlmgr_ctl r power status/act_temperature';
	$url=$helperurlfb."?befehl=".encodiere($befehl,33455);
	$Status=web($url,$post);
	if ($Status) {
		echo "T#".$Status."#";
	}
	else {
		echo "T##E##";
	}
	exit;

?>

Bitte mal eine kurze Rückmeldung ob es Probleme gibt damit.

Danke
 
Zuletzt bearbeitet:
Hallo JL3,

habe mal ein altes Script "pseudoCPU-Temp.php" erfolgreich aus der Programmversion 3.00.2470
auf die Programmversion 4.60.4575 abgeändert und auf den PI geladen.

Das Script läuft wunderbar und die CPU-Temperatur der 7490 wird auch korrekt angezeigt.
Je nach Belastung schwankt die Temperatur der FritzBox zwischen 52 und 75 Grad.

Nun meine Frage gibt es die Möglichkeit die Temperatur der FritzBox 7490 grafisch und als
Historie anzeigen zulassen, vergleichbar der Scripte "psgHimbeere.php" und "psginfoHimbeereTemp.php".

Gruss ElefantenMaus

Ja, das geht indem man psginfoHimbeereTemp.php als Grundlage nimmt, es umbenennt in z. B. "psginfoFritz!Box CPUTemp.php" und dort in der Zeile 18 bei $name="Himbeere"; nun $name="Fritz!Box CPU"; schreibt. Damit verweist man auf das psg der Fritzbox (von deinem obigen Beispiel) und von dort wird die Temperatur genommen. ;)
 
Hallo JL3,

Danke für die Hinweise aber leider werden die Temperaturdaten der Fritz!Box weder
grafisch noch in der Historie übernommen und angezeigt.

Irgendwo fehlt in meinen geänderten Script ein Parameter der noch benötigt wird.

Gruss ElefantenMaus
 
Könntest du beide Skripte mit deren kompletten Namen posten, dann sehe ich vielleicht das Problem.
 
Hallo JL3,

hier mal die Scripte die ich hier poste.

Hier das Script "psgFritz!Box CPU.php"

PHP:
<?php

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                      PSG-Script   |
		|   PseudoGeräte-Script                                    FritzBox   |
		|   ===============================================================   |
		|                                                         sashelper   |
		|   CPU-Temp der Fritz!Box anzeigen                                   |
		+---------------------------------------------------------------------+
	*/

	error_reporting(0);

	# In der folgenden Datei sind die Variablen der sashelper mit Pfadangaben
	# benannt, wie z. B.:
	# $helperurlfb='http://192.168.123.123/sensorandswitch/sensorandswitchhelper.php';
	include __DIR__."/../include/psg.php";

	$befehl='/usr/bin/ctlmgr_ctl r power status/act_temperature';
	$url=$helperurlfb."?befehl=".encodiere($befehl,33455);
	$Status=web($url,$post);
	if ($Status) {
		echo "T#".$Status."#";
	}
	else {
		echo "T##E##";
	}
	exit;

?>

und hier das Script "psginfoFritzBox CPUTemp.php"

PHP:
<?php

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

	$ver="V#V 4.55#";
	$name="Fritz!Box CPU";
	$gerarray=getGerInfo($name);
	$tempz=unserialize($gerarray["tempz"]);
	$info ="";

	# 10°C-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).'°C</div>';
	}
	
	# 5°C-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>';
		}
	}
	

	# Tempsäulen
	
	for ($z=0;$z<=23;$z++) {
		$h=$tempz[$z]["max"]-$tempz[$z]["min"];
		$h0=$tempz[$z]["max"];
		$t=100+1-$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"]>=80) {
				$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 (isset($tempz[$z]["max"])) {
					if ($tempz[$z]["max"]>=70) {
						$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 {
						if ($tempz[$z]["max"]>=60) {
							$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 ($tempz[$z]["max"]>=50) {
								$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"]>=40) {
									$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 ($tempz[$z]["max"]>=30) {
										$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 ($tempz[$z]["max"]>=20) {
											$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 {
											$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>';											
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}
		
	# 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=100+1-$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:'.(103).'px;left:'.$p.'px;font-size:7px;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"]>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',$tempz[$z]["max"]),1,",",".").'</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',$tempz[$z]["min"]),1,",",".").'</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',$tempz[$z]["max"]),1,",",".").'</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',$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;">CPU-<br />Temp.</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;
	
?>

Habe leider keine Erfahrung mit diesen PHP-Scripten sonst hätte
ich die fehlenden Parameter selbst gefunden.

Danke für deine Hilfe

Gruss ElefantenMaus
 
Da fehlten in der "psgFritz!Box CPU.php" einige wichtige Daten:

PHP:
<?php

    /*
        +---------------------------------------------------------------------+
        |                                                                     |
        |   SensorAndSwitch                                      PSG-Script   |
        |   PseudoGeräte-Script                                    FritzBox   |
        |   ===============================================================   |
        |                                                         sashelper   |
        |   CPU-Temp der Fritz!Box anzeigen                                   |
        +---------------------------------------------------------------------+
    */

    error_reporting(0);

    # In der folgenden Datei sind die Variablen der sashelper mit Pfadangaben
    # benannt, wie z. B.:
    # $helperurlfb='http://192.168.123.123/sensorandswitch/sensorandswitchhelper.php';
    include __DIR__."/../include/psg.php";
	$gerarray=getGerInfo(substr(basename(__FILE__,".php"),3));

    $befehl='/usr/bin/ctlmgr_ctl r power status/act_temperature';
    $url=$helperurlfb."?befehl=".encodiere($befehl,33455);
    $Statustemp=web($url,$post);
    if ($Statustemp) {
		$temp=sprintf('%.1f',$Statustemp);
		$zeitl=$gerarray["zeitl"];
		$zeith=date("G")*1;
		$tempz=unserialize($gerarray["tempz"]);
		if ($zeith!=$zeitl) {
			$tempz[$zeith]=array();
			$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;
		}
       echo 'T#'.$Statustemp.'#V#'.serialize($tempz).'*tempz#V#'.$zeith.'*zeith#V#'.$zeitl.'*zeitl#'.$ver;
    }
    else {
        echo "T##E##";
    }
    exit;

?>

Ich denke, so müsste es funktionieren. ;)
 
Zuletzt bearbeitet:
Hallo JL3,

Vielen Dank für das geänderte Script "psgFritz!Box CPU.php",
jetzt werden die Temperaturdaten grafisch und in der
Historie angezeigt.

Leider habe ich bei meinem Raspi einen Anzeigefehler mit dem Script
"psginfoFritzBox CPUTemp.php" festgestellt.

Es werden die Anzeigedaten der letzten Stunden gelöscht
und nur die Daten der aktuellen Stunde angezeigt.

Hier mal das Bild von 10 Uhr

Temp 10 Uhr.jpg

und das Bild von 11 Uhr

Temp 11 Uhr.jpg

Gruss ElefantenMaus
 
Zuletzt bearbeitet:
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.