SensorAndSwitch Haus-Automation auf Webserver-Basis

Ich denke, ich habe den Fehler gefunden. Es ist eine plötzlich abgelaufene Session der FB, die immer wieder Ärger macht. Da muss ich basteln. Heute aber nicht mehr ;) Der Rest von heute ist sas-frei... :mrgreen:

Nachtrag: Naja, fast. Hat mir keine Ruhe gelassen und jetzt ist dieser Fehler korrigiert. Sieht schon entschieden besser aus. Die nächste Labor dürfte stabiler sein.


-Nachtrag2:

Die Tests ergeben nur noch geringe Ungereimtheiten, die z. Tl. auf die Fritzbox zurückzuführen sind. (Ausgeschaltete Steckdosen zeigen Stromverbrauch in Watt an. Die WebGUI der Fritzbox ebenfalls.)

Pseudoscripte müssen teils etwas überarbeitet werden, wenn sie Probleme bereiten. cURL-Aufrufe in PseudoScripten sollten durch $Status=web($url,$post); ersetzt werden. In dieser Funktion sind timeouts eher optimiert.

Aufrufe von curl auf Kommandozeilenebene z. B. für Edimax-Steckdosen sollten auf die curl-Funktion von PHP umgeschrieben werden und ebenfalls mit $Status=web($url,$post); aufgerufen werden. Ein Edimax-Script ist im entsprechenden Thread hier im Forum von mir gepostet. curl-Kommandozeilen-Installation und xml-Dateien werden dadurch unnötig,

PseudoScripte mit sehr langer Abruflaufzeit sind zu begrenzen, da sonst sasap beim Sammeln der Daten in Zeitnot gerät.

Sollten beim Anklicken eines Schalters im WebGUI plötzlich alle Slots verschwinden, so hat man genau dieses kleine Zeitfenster erwischt, was zwischen Prüfung, ob frei und Schreiben der Gerätecache-Daten liegt, erwischt und sich selbst den Cache zerschossen. Dies kommt sehr selten vor, da es sich nur um einen Sekundenbruchteil handelt. Hier einfach nur eine Minute warten, sasap baut den Cache wieder auf und sas greift dann selbständig wieder darauf zu und die Anzeige passt wieder.

sasap MUSS nun als Cache-Liererant per cron laufen, sonst wird sas keine Gerätedaten erhalten.

Ok, das war es erstmal. Ich hoffe auf Eure Rückmeldungen und dass es mit der Labor 1677 nun wieder stabil läuft. :)
 
Zuletzt bearbeitet:
SAS-Labor 1677 Link gelöscht.


-Bild: SAS2001696 (mit interner kleiner Bereinigung)
sas2001696beta.jpg
Entspricht vom Schaltverhalten und dem Umfang der 1677labor.
 
Zuletzt bearbeitet:
Test, Laborversionen

die 1621 ist noch am besten gelaufen.

die 1664 am Anfang auch, dann hat sie aber Probleme bei den Geräte Arrys im Tem Verzeichnis bekommen,
hat nicht mehr aktualisiert!
hab dann das Temp Verzeichnis mal gelöscht und seit dem geht nichts mehr.
auch die 1667 liest keine Geräte ein, Temp bleibt leer!
 
Ja, etwas über eine Minute lang, bis der crond sasap aufruft und den Gerätecache neu erstellt. Dann kann sas die Geräte aus dem Cache laden. Ich baue das "Selbstladen" in sas wieder nach und nach ein. War bei der Fehlersuche hinderlich gewesen.

Die erstellten Dateien im \...\sensorandswitch\tmp\ sind normalerweise:
sensorandswitchbrain.data
sensorandswitchgerarr.dataauto
sensorandswitchgerarr.datafritz
sensorandswitchgerarr.datapreudo

sowie während des Arbeitens von sasap noch:
sensorandswitchgerarr.datasasapbusy
sensorandswitchgerarr.datasasapwrite

sas erstellt ab und an beim Schalten, wenn es selbst den Cache aktualisieren muss:
sensorandswitchgerarr.datasasswitch

Nachtrag: Bei mir läuft sas seit gestern Nacht nun problemlos auf dem Pi.
 
Zuletzt bearbeitet:
sorry, hab gerade im anderen Theared gelesen,

der Pfad in Cron war nicht richtig.

hab inzwischen so viele am testen, das ich durcheinander gekommen bin.

jetzt läuft es wieder!
 
Yeah, eine gute Nachricht. Danke für die Info. :)
 
Moin

Dann fang ich mal an...
1. killall crond vorm Entpacken, crond danach starten.
2. Pseudoschalter liefert mit web() immer S## zurück (wie soll $post genau aussehen?).
3. Deswegen steht Pseudoschalter auf aus und man kann ihn nur ausstellen.
4. In eine vorhandene sensorandswitchautopro.html wird hinter den </body> geschrieben.
 
Hm, das ist jetzt etwas Rätselraten, was du meinst. Aber da fang ich mal an.

zu 1.) war dies deine Installationsvorgehensweite... denke ich mal. Ist ok.
zu 2.) web($url,$post) beinhaltet die aufzurufende URL und in $post einen leeren String oder Angaben, die in $_POST mitgesendet werden sollen (nicht mit $_GET zu verwechseln, die man in die URL packen kann)
zu 3.) Welche Datei betrifft es? pseudoschalter.php? Wenn, ja, muss ich da mal reinschaun.
zu 4.) Da erfolgte keine Verschickung und da lief was schief. Sonst rollt er den Zeiger zurück und schreibt weiter. Werfe ich aber mal einen Blick drauf.

Danke für die Infos. :)
 
SAS-Labor 1698 Link entfernt
 
Zuletzt bearbeitet:
Mein Fehler...
zu 2.) web($url,$post) beinhaltet die aufzurufende URL und in $post einen leeren String oder Angaben, die in $_POST mitgesendet werden sollen (nicht mit $_GET zu verwechseln, die man in die URL packen kann)
...hab versucht den QUERY_STRING im $post zu übergeben.
Der bleibt also in der $url und $post ist einfach leer, zwei Gänsefüßchen: web($url,"");
Dann gehts auch wieder. ;)
 
Jep. Das mit $post ist praktisch, wenn man xml an die Edimax-Dose schicken will oder Formular-Daten an eine Webseite. Sonst bleibts leer. :)
 
@alle: Gibt es noch Probleme mit der SAS-Labor 1698?
 
Bei mir, ohne Schaltsteckdosen nur mit Pseudoscripten so...
sas_wlan_01.jpg
...alles OK soweit.
Die SQLite Pseudoscripte werden zwar von sasap.php (crond) wieder ausgeschaltet,
aber das ist nicht so schlimm.

@SF1975: Diesen "Effekt" hatte ich mal als ich den Webserver geschützt hatte.
Also Benutzer/Passwort nicht in der EURL hatte.
Oder auch wenn der Verzeichnisschutz entfernt wurde aber noch Benutzer/Passwort
in der EURL stand.
 
Zuletzt bearbeitet:
also bei mir funktioniert alles wie gewünscht.

ca. 40 Scripte drin, Web, Funkschalter, Fritzbox Sensoren, Pi Sensorn, keine Probleme.
wo es noch etwas hakt, das sind meine Rufumleitungen, denke das hat abr nichts mit der Labor zu tun!
Wähle dazu ja eine Kurzwahlnummer aus dem Telefonbuch, aber der will nach draußen wählen (jFritz geht auf).
wähle ich die Kurzwahl vom Telefon ist s ok.
Aber das ist ein anderes Problem und hat sicher nichts mit der Labor zu tun!
Ansonsten die Anzeige ist super schnell, was er im Hintergrund macht ist ja erst mal egal.
 
Hallo,
@koyaanisqatsi: Alle Dateien und Verzeichnisse haben 777. Was meinst Du mit EURL??

Da es einfach nicht will, stelle ich meine Versuche mit SAS endgültig ein.

Schönes Wochenende,
Frank
 
@SF1975: conf/sensorandswitch.conf --> EURL=http://fritz.box:81/sensorandswitch/sas.php
Vielleicht hat es aber auch mit crond zu tun? Dann crond beenden und neustarten.
Hängt aber der crond Aufruf, muss dieser auch gekillt werden.
Das kann mit ps und dem syslog herausgefunden werden.
syslog
Code:
Jan 22 10:14:27 crond[972]: crond: crond (busybox 1.21.1) started, log level 8
Jan 22 10:15:01 crond[972]: crond: USER root pid 1021 cmd /var/media/NEW_LINK/cgi-bin/php-cgi -f /var/media/NEW_LINK/sensorandswitch/sasap.php
Jan 22 10:16:01 crond[972]: crond: user root: process already running: /var/media/NEW_LINK/cgi-bin/php-cgi -f /var/media/NEW_LINK/sensorandswitch/sasap.php
Jan 22 10:17:01 crond[972]: crond: user root: process already running: /var/media/NEW_LINK/cgi-bin/php-cgi -f /var/media/NEW_LINK/sensorandswitch/sasap.php
Jan 22 10:18:01 crond[972]: crond: user root: process already running: /var/media/NEW_LINK/cgi-bin/php-cgi -f /var/media/NEW_LINK/sensorandswitch/sasap.php
 
Zuletzt bearbeitet:
Inzwischen bin ich bei Labor 1702, die jetzt seit gestern ohne ein Problem bei mir arbeitet. Ich habe der Version noch alternative Beschaffungsmethoden für die Gerätedaten eingebaut, wenn der Cache mal nicht lesbar, zerstört oder leer ist. Das funktioniert auch wunderbar.

@SF1975: Diie Anzeige, obwohl sie bei den Pseudoscripten leer ist, sieht gut aus. Das Problem liegt in der sensorandswitch.conf. Die Einstellung für EURL= nicht auf einen Namen, sondern auf die IP des Gerätes setzen. Auch in der sensorandswitchhelperurl.phpconf ggf. IPs in die URLs eintragen. Die leeren Geräteanzeigen deuten nur darauf hin, dass der sashelper E## zurückliefert, weil er entweder nicht gefunden wird oder weil er selbst keine Verbindung hat. Üblicher Fehler: Die Fritzbox löst den Namen des Servers falsch oder gar nicht auf. Abhilfe: IP eintragen. Ich habe mir deinen Fehler schlimmer vorgestellt, so als ob leere Slots angezeigt würden. Das Problem gab es laufend mit den vorangegangenen Labors. Das Andere ist auf normalem Wege in den Griff zu bekommen.

Spätestens wenn auf eine laufende korrekt anzeigende Vorversion ein Update der 2.00 läuft, läuft auch die 2.00.

Ich werde heute nioch abwarten und testen und wenn dann alles noch funktioniert, gebe ich die 2.00 dann regulär zum Update frei.

Geschwindigkeits- und reaktionsmäßig ist die 2.00 jedenfalls um einiges schneller geworden als die 1er-Versionen. :)

Noch ein paar Anmerkungen am Rande:
Die includefritzbox.php wurde durch die includegeraete.php ersetzt. Alte Scripte werden dennoch weiterlaufen, weil eine includefritzbox.php noch dabei ist, die aber selbst die includegeraete.php includiert. Trotzdem sollte bei neuen Pseudo-Scripten nun die neue includegeraete.php statt der includefritzbox.php includiert werden.
Verson 2.00 ist strenger mit der Auslegung der Pseudos. Zu einer E## ist zwingend auch ein Pseudo mitzuliefern, den es betrifft. Also z. B.: T##E## Früher reichte sogar nur E#.
Ein PseudoScript für einen Schalter sollte bei Fehler statt S##E## besser S#2# zurückliefern. Dies stört eventuelle weitere Pseudos im Script nicht und zeigt einen schwarzen (nicht erreichbaren) Schalter statt kompletten Verbindungsverlust an.

@ws65: Der Kommandozeilen-curl für die Edimax macht im Hintergrund richtig Probleme. Versuche doch bitte einmal das neue Schalterscript von mir und melde bitte, ob es bei dir ebenfalls problemlos und schnell läuft. Dieses beinhaltet keinen externen curl mehr und schreibt auch keine output-Datei. Ich poste es mal hier:

pseudoedimax.php
PHP:
<?php 

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch Automation Pro                                    |
		|   Pseudo-Schalter-Script                                            |
		|   ===============================================================   |
		|   -> Schalter                                                       |
		|      Edimax Schaltsteckdosen können mit diesem Script eingebunden   |
		|      werden.                                                        |
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
 
	error_reporting(0);
	include "include/includefritzbox.php";	# später include "include/includedateien.php";
	include "include/includefunctions.php";
	include "include/includeconf.php";
	include "include/includeconfig.php";
	include "include/includedefine.php";
	# ----------------------------------------------------------------------- #
	# Diese Variablen müssen gegebenenfalls angepasst werden:                 #
	# *******************************************************                 #
	$user="admin";                   # Benutzer                               #
	$password="1234";                # Kennwort                               #
	$ip="192.168.1.131:10000";       # IP-Adresse der Edimax                  #
	# ----------------------------------------------------------------------- #
	$Scriptname=pathinfo($_SERVER['PHP_SELF'],PATHINFO_FILENAME);
	# on
	$poston='<?xml version="1.0" encoding="utf-8"?><SMARTPLUG id="edimax"><CMD id="setup"><Device.System.Power.State>ON</Device.System.Power.State></CMD></SMARTPLUG>';
	# off
	$postoff='<?xml version="1.0" encoding="utf-8"?><SMARTPLUG id="edimax"><CMD id="setup"><Device.System.Power.State>OFF</Device.System.Power.State></CMD></SMARTPLUG>';
	# status
	$poststatus='<?xml version="1.0" encoding="UTF8"?><SMARTPLUG id="edimax"><CMD id="get"><Device.System.Power.State></Device.System.Power.State></CMD></SMARTPLUG>';
	# url
	$url='http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi';
	
	$Status="S#2#";
	if ($_GET["info"]=="status") {
		$xml=web($url,$poststatus);
		if (strpos($xml,"ON")) {
			$Status="S#1#";
		}
		if (strpos($xml,"OFF")) {
			$Status="S#0#";
		}
	}
	if ($_GET["schalter"]=="1") {
		$Status=web($url,$poston);
		$Status="S#1#";
	}
	if ($_GET["schalter"]=="0") {
		$Status=web($url,$postoff);
		$Status="S#0#";
	}
	echo $Status;

?>
Die xml-Dateien für on, off und status kannst du dann löschen, da unnötig. ;)

So, gestern war ich mit dem Testen nachts gegen 3 fertig. Heute mache ich erstmal Schluss mit sas und hoffe, dass das Ergebnis trotz einiger Hürden mit den Labors trotzdem zufriedenstellend ausgefallen ist. ;)
 
Zuletzt bearbeitet:
@koyaanisqatsi: Ich bräuchte mal deine Hilfe bei einem Pseudoscript für die Fritzbox-Abfrage. Ähnlich des Anrufbeantworter-Scripts würde ich gerne eines für die Abfrage nach neuen Mails bei den eingebundenen Mailaccounts basteln. Das MT-F blinkt ja auch, wenn da etwas ankommt. Kennst du da einen Betriebssystembefehl bei der Fritzbox, der mir da etwas liefert? Könntest du mir da bitte eventuell einen Tipp geben?
 
gibt es auch ein paket für die synology nas?
 
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.