SensorAndSwitch Haus-Automation auf Webserver-Basis

Danke,

die error.log muss ich mir mal genauer ansehen.

die ist ca. 3 GB groß und auf einem kurzen Blick noch jede Menge Fehler drin.

Auch fehlende Dateien usw.
 
Ui UiUiUi....

Behalte dein Logverzeichnis im Auge.

Für ein sauberes Log im laufenden Betrieb setze ich die gerne mal zurück auf 0 Byte.
Das geht als root so...
Code:
echo -ne > /var/log/apache2/error.log


Dateien in /var/log/...
Alles was eine Zahl im Namen, oder .old und .gz am Ende,
kann getrost gelöscht werden.
 
Zuletzt bearbeitet:
Hi Leute,
kann man das SAS4PI auch auf einem NAS-Laufwerk in meinem Fall von Zyxel das NSA310 zum laufen bringen ?
Wenn ja wer kann mir dabei helfen ?

Vielen Dank

Gruß Benne007
 
@ws65: Normale Starts tauchen hier auf: last | grep 'system'
 
bin jetzt mal andere Logs durch gegangen,

bei dem pilight.log komme ich dem Fehler glaube ich schon näher.

CPU Auslastung zum Teil sehr hoch!!

muss jetzt nur noch rausfinden warum?

das oben ist gut, aber an den Tagen wo er nicht geschaltet hat, war kein reboot.

Rebooten tut er eigentlich nicht von selbst, nur schaltet er scheinbar, wenn CPU Auslastung zu hoch auf Sparflamme, und macht einfach nicht alles?
 
@ws65: top starten und beobachten, da muss der Übeltäter mit hoher CPU-Last auftauchen.
...bei mehreren CPUs die Taste C drücken. ;)
 
@ws65: Du hast einen Logikfehler in deinen Schaltungen. Die "Helfer" werden ständig an und aus geschaltet. Da sich sasap nun nicht mehr nur 1x die Minute aufruft, sondern mehrmals, treten auch bestimmte Schaltzustände nun öfter ein. Ich muss mir das genauer ansehen, um dir zu sagen, wo du was ändern musst.
 
Was ist Helfer-3? Wer schaltet Helfer-3?

Warum liefern die meisten Scripte fehlerhafte Statusmeldungen?
Code:
05:30 Sa 11.04.2015 1 Helfer01 an S1 (1,K,0,0,0,1,X,0530,*,********,Helfer01) 
05:31 Sa 11.04.2015 9 Edimax-neu an S1 (9,K,0,0,0,1,S,1,1,Helfer-3,Edimax-neu) 
05:31 Sa 11.04.2015 12 It-St-03a an [B][COLOR="#FF0000"]Sp[/COLOR][/B] (12,K,0,0,0,1,S,1,1,Helfer-3,It-St-03a) 
06:30 Sa 11.04.2015 6 Rev-01 an [B][COLOR="#FF0000"]Sp[/COLOR][/B] (6,K,0,0,0,1,X,0630,*,********,Rev-01) 
06:57 Sa 11.04.2015 4 Helfer02 aus [B][COLOR="#FF0000"]Sc[/COLOR][/B] (4,K,0,0,0,0,A,15,*,********,Helfer02) 
06:58 Sa 11.04.2015 10 Edimax-neu aus S0 (10,K,0,0,0,0,S,1,0,Helfer-3,Edimax-neu) 
06:58 Sa 11.04.2015 11 It-St-03a aus [B][COLOR="#FF0000"]Sp[/COLOR][/B] (11,K,0,0,0,0,S,1,0,Helfer-3,It-St-03a) 
09:01 Sa 11.04.2015 3 Ro-03c aus [B][COLOR="#FF0000"]St[/COLOR][/B] (3,K,0,0,0,0,X,0901,*,********,Ro-03c)

Meine Vermutung sind Probleme mit unsauber erstellten PSGs. Meistens schafft sas die Selbstkorrektur der Datenbank rechtzeitig, manchmal aber auch nicht, dann wird diese durch unsaubere Statuswerte zerschossen. sasap schaltet dann in dem Durchgang nicht, dann repariert es sich wieder durch sasag und so ist es ein schleichender Fehler.
 
Zuletzt bearbeitet:
Hi Leute,
kann man das SAS4PI auch auf einem NAS-Laufwerk in meinem Fall von Zyxel das NSA310 zum laufen bringen ?
Wenn ja wer kann mir dabei helfen ?

Vielen Dank

Gruß Benne007
Solange darauf ein Webserver mit den Vorgaben php5, curl usw. lauffähig ist, funktioniert das.
 
eigentlich bin ich der Meinung meine Helfer funktionieren gut.

kann ja nur einmal schalten, wenn an ist schaltet es ja nicht ein zweites mal an.

und in der Log ist doch auch nichts von doppelt schalten.

meine Helfer 1+2 sind eigentlich ganz normale Pseudoschalter, nur Helfer3 ist etwas umgbaut.

aber der kommt ja gar nicht zum schalten, weil Helfer2 (Dämmerungschalter) nicht schaltet.

beobachte das ja meißt in der Sas-Anzeige,
Helfer1 ist ja am Tag immer an, wenns dunkel wird, schaltet Helfer2 (normalerweise), beim nächsten aktualisieren dann Helfer3.
und danach werden erst die Lampen geschaltet!
sieht für mich ok aus!
 
Das Problem ist, dass die PSGs inzwischen beim Schalten ihren Status in die DB schreiben. Dieser ist bei vielen definitiv falsch. sasag korrigiert das dann irgendwann durch die Statusabfrage, aber dazwischen kann sasap nichts machen, auch wenn vermeintlich die Schaltzustände erreicht sind. Das ist das Problem. Wäre es noch wie früher, so würde nach sasap gleich sasag laufen und es würden immer richtige Statuswerte beim nächsten sasap-Aufruf drin stehen, das ist seit 4.00.4057 (korrigiert) anders. Da gelten höhere Anforderungen auf Richtigkeit eines korrekten Schaltstatus an die PSGs. Das passt genau mit dem Auftreten deiner Probleme zusammen.

Nachtrag: Diese Änderung hat es damals ermöglicht, der Minutenfrist zu entgehen und Aktualisierungen variabler zu gestalten. Es stellt nun natürlich ein sauber erstelltes psg voraus. Auch bei Übergabe von schalter=1 muss ein echo "S#1#"; im psg ausgegeben werden, sonst krachts in der DB.

Nachtrag2: Helfer02 liefert Mist zurück: 06:57 Sa 11.04.2015 4 Helfer02 aus Sc (4,K,0,0,0,0,A,15,*,********,Helfer02)

poste bitte mal psgHelfer02.php
 
Zuletzt bearbeitet:
na mal abwarten,
vllt. ist es doch nur meine CPU-Auslastung.
Sas4 läuft ja jetzt wieder auf der SD-Karte, und das Speichern der Webcam auf der Festplatte hab ich auch erst mal abgestellt.
hab auch noch eine andere neuere Festplatte, mus die mal versuchen.

die Scripte werde ich allerdings auch nochmal prufen, ob der Status (mit echo )überall richtig programmiert ist.
 
Ich schau gern mal drüber. Ich habe mir selbst mal mit einem alten Script "unerklärliche Phänomene" verursacht. Daher...
 
im Test läuft das bei mir gut, wenn ich in der Anzeig

aussenbeleuchtung.JPG

meinen D-Schalter von Hand schalte, wird sofort Grün, dauert es etwas und Helfer3 schaltet, wird Grün, und etwas später auch die Lampen.

auch ausschalten funktioniert so.

aber hier meine Scripte dazu,
Helfer1
PHP:
<?php 
	echo "FN#Zeitschalter#";
	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch Automation Pro                                    |
		|   PseudoGeräte-Script                                               |
		|   ===============================================================   |
		|   -> Schalter                                                       |
		|      Dieses Script soll Pseudozähler.php aufrufen                   |
		|                                                                     |
		+---------------------------------------------------------------------+
		Pfad für Statusdatei in "conf/statuspfad.php" angegeben !
		*/	

    include __DIR__."/../include/psg.php";
	include __dir__."/../conf/statuspfad.php";
#	$gerarray=getGerInfo(substr(basename(__FILE__,".php"),3));
	$Statusdatei=$Statuspfad."statushelfer1.txt";    #hier Namen für Status-Datei eingeben 
	$Zaehlerdatei=$Statuspfad."zaehler.txt";
	$dateihandle=fopen($Zaehlerdatei,"r+");
			$a = fread($dateihandle, 50);
			rewind($dateihandle);
	$Status="S##E##";
	if (!file_exists($Statusdatei)) {
		$fd=fopen($Statusdatei,"w");
		$Status="S#0#";
		fputs($fd,$Status);
		fclose($fd);
	}
	if ($_GET["info"]=="status") {
		$fd=fopen($Statusdatei,"r");
		$xml=fgets($fd);
		fclose($fd);
		if (strpos($xml,"1")) {
			$Status="S#1#";
		}
		if (strpos($xml,"0")) {
			$Status="S#0#";
		}
	}
	
	if ($_GET["schalter"]=="1") {
		$fd=fopen($Statusdatei,"w");		
			$a++;
			fwrite($dateihandle,$a);
			fclose($dateihandle);			
		$Status="S#1#";
		fputs($fd,$Status);
		fclose($fd);
	}
	if ($_GET["schalter"]=="0") {
		$fd=fopen($Statusdatei,"w");		
			$a--;
			fwrite($dateihandle,$a);
			fclose($dateihandle);			
		$Status="S#0#";
		fputs($fd,$Status);
		fclose($fd);
	}
	echo "P#".'1. Helfer Zeit - '.$a." Gerät(e) an *html#";
	echo $Status;
	exit;
?>

Helfer2
PHP:
<?php 
	echo "FN#D-Schalter#";
	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch Automation Pro                                    |
		|   PseudoGeräte-Script                                               |
		|   ===============================================================   |
		|   -> Schalter                                                       |
		|      Dieses Script soll Pseudozähler.php aufrufen                   |
		|                                                                     |
		+---------------------------------------------------------------------+
		*/
    include __DIR__."/../include/psg.php";
	include __dir__."/../conf/statuspfad.php";   
#	$gerarray=getGerInfo(substr(basename(__FILE__,".php"),3));
	$Statusdatei=$Statuspfad."statushelfer2.txt";    #hier Namen für Status-Datei eingeben 
	$Zaehlerdatei=$Statuspfad."zaehler.txt";
		$dateihandle=fopen($Zaehlerdatei,"r+");
			$a = fread($dateihandle, 50);
			rewind($dateihandle);
			
	$Status="S##E##";
	if (!file_exists($Statusdatei)) {
		$fd=fopen($Statusdatei,"w");
		$Status="S#0#";
		fputs($fd,$Status);
		fclose($fd);
	}
	if ($_GET["info"]=="status") {
		$fd=fopen($Statusdatei,"r");
		$xml=fgets($fd);
		fclose($fd);
		if (strpos($xml,"1")) {
			$Status="S#1#";
		}
		if (strpos($xml,"0")) {
			$Status="S#0#";
		}
	}
	
	if ($_GET["schalter"]=="1") {
		$fd=fopen($Statusdatei,"w");			
			$a++;
			fwrite($dateihandle,$a);
			fclose($dateihandle);			
		$Status="S#1#";
		fputs($fd,$Status);
		fclose($fd);
	}
	if ($_GET["schalter"]=="0") {
		$fd=fopen($Statusdatei,"w");			
			$a--;
			fwrite($dateihandle,$a);
			fclose($dateihandle);			
		$Status="S#0#";
		fputs($fd,$Status);
		fclose($fd);
	}
	echo "P#". '2. Helfer SA / SU - '.$a." Gerät(e) an *html#"; 
	echo $Status;
	exit;
?>

Helfer3
PHP:
<?php 
	echo "FN#Helfer 3#";
	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch Automation Pro                                    |
		|   PseudoGeräte-Script                                               |
		|   ===============================================================   |
		|   -> Schalter  Helfer 3, schaltet wenn Helfer 1 und Helfer 2 "Ein"  |
		|                                                                     |
		+---------------------------------------------------------------------+
		Pfad für Statusdatei in "conf/statuspfad.php" angegeben !
		*/	
    include __DIR__."/../include/psg.php";
	include __dir__."/../conf/statuspfad.php";

    
	$Statusdatei=$Statuspfad."helfer-3.txt";    #hier Namen für Status-Datei eingeben 
	$Zaehlerdatei=$Statuspfad."zaehler.txt";
	$dateihandle=fopen($Zaehlerdatei,"r+");
			$a = fread($dateihandle, 50);
			rewind($dateihandle);
	$Status="S##E##";
	if (!file_exists($Statusdatei)) {
		$fd=fopen($Statusdatei,"w");
		$Status="0";
		fputs($fd,"S#".$Status."#");
		fclose($fd);
	}
	if ($_GET["info"]=="status") {
		$fd=fopen($Statusdatei,"r");
		$xml=fgets($fd);
		fclose($fd);
		if (strpos($xml,"1")) {
			$Status="S#1#";
		}
		if (strpos($xml,"0")) {
			$Status="S#0#";
		}
	}
	if (($a=="2") and ($Status="S#0#")) {
		$fd=fopen($Statusdatei,"w");
#   	schaltet nicht, ändert nur den Status!
		$Status="S#1#";
		fputs($fd,$Status);
		fclose($fd);
	}
	if (($a<"2") and ($Status="S#1#")){
		$fd=fopen($Statusdatei,"w");
#		schaltet nichts, ändert nur den Status !
		$Status="S#0#";
		fputs($fd,$Status);
		fclose($fd);
	}
	echo "P#".'schaltet automatisch mit Helfer 1 und 2'."*HTML#"; 
	echo $Status;
	exit;
?>
 
Sorry, komme erst jetzt zum Ansehen der psgs.

helfer1 und 2 müssten normalerweise korrekt arbeiten. helfer3 hat fehlerhafte if-Abfragen. $a==2 statt $a=="2" und $a<2 statt $a<"2" sonst vergleichst du Strings und keine Zahlen. ;) Das nur nebenbei. Trotzdem dürfte es korrekt arbeiten, weil String "1" ist kleiner String "2".

Ich frage mich jetzt, woher die im Log stehenden falschen Status-Rückmeldungen kommen... :gruebel:
Vor allem: Helfer1 liefert korrekt, Helfer2 falsch, obwohl beide gleich aufgebaut sind.
Helfer01 an S1 - S1 ist hier Schalter auf 1 und das ist ok.
Helfer02 aus Sc - Sc ist hier mehr als seltsam. Woher kommt das c? Da wurde wohl auch nicht geschaltet. Da hätte S0 kommen müssen.
 
Zuletzt bearbeitet:
heute Abend hat er wieder ganz normal geschaltet,
im Log ist aber bei Helfer2 wieder Status Sc ??
 
Ich schau mir die Schalt-includes an. Normalerweise müsste er nach dem psg S0 schreiben. Ich gehe dem nach...

Nachtrag: Zwar habe ich noch einmal die Schalt-Funktion überarbeitet, aber da kann der Grund auch nicht wirklich liegen. (Kommt in der nächsten Version)

Am besten du beobachtest es weiter und achtest auch auf ungewöhnliche CPU-Last zum Schaltzeitpunkt. Irgendwie fehlt mir der Ansatzpunkt, woran es noch liegen könnte. :gruebel:
 
Zuletzt bearbeitet:
die richtige Idee hab ich auch nicht,

nur könnte das an meinem eigenwilligen speichern der Statusdateien in einem extra Verzeichnis liegen?
könnte ich ja mal raus machen.

Dann habe ich mir nochmal die Log Datei genauer angesehen,
aufgefallen ist mir da, das ab 23.04.15 ( SAS4 ß ) bei meinen PseudoScripten andere Statusmeldungen kommen.
Sc, St, Sp ! was bedeutet St und Sp ?

irgendwas scheint da mit PseudoScript und SAS4 nicht zu passen.

und trotzdem, er schaltet ja tagelang ganz normal, und irgendwann ist mal ein Ausreiser drin!

Doch die Cpu-Auslastung?
wenn ich aber mit Top nachschaue liege ich zwischen 25 und 45%, davon ca 20% PHP im normalen Betrieb.
 
Warte mal auf den nächsten Build. Da habe ich etwas an der Auswertung der Status-Meldung geändert. Sc, St und Sp dürfte nämlich überhaupt nicht kommen. Wie das zusammengebastelt wird, ist mir etwas unklar. Inzwischen habe ich Einen PHP-Befehl zur Entfernung von HTML-Tags nun durch eigene Routinen ersetzt. Vielleicht passt es dann wieder.
 
Neue Version 4.01.4104
weitere Infos im
SAS4PI-Web
  • [4104] Bugfix: PSG-Status-Meldung.
  • [4104] Automation: Neuer Vergleichsoperator "ungleich 0 und kleinergleich" ("!0<=").
 
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.