SensorAndSwitch Haus-Automation auf Webserver-Basis

Jetzt habe ich den Fehler. Du hast ein großes Logikproblem. Das kann nicht funktionieren. Ich habe anfangs nicht auf deine Kettenbildung geachtet.
Poste bitte mal deine sasap.conf, dann schreibe ich sie dir um, dass es funktioniert.

Die Kettenglieder müssen bis zum letzten einer Kette wahr sein, da liegt dein Schaltproblem. Man kann nicht vom Einschalten bis zum Ausschalten eine Kette bauen, das sind z. B. zwei getrennte.

Beschreibe bitte auch noch einmal ganz genau, wann was unter welchen Bedingungen geschaltet werden soll.


Nachtrag:
Dein Kettenstartglied mit der SCHID 3 ist zum Beispiel nur in der Minute des Sonnenuntergangs wahr und alle Folgeglieder können nach dieser Minute nie wahr werden, weil dann das Startglied bereits falsch ist. Ich hoffe du erkennst die Problematik. Daher musst du dir dort mit einem Schalter behelfen. Dieser muss bei Sonnenuntergang auf ein gestellt werden.

Danach wird eine neue Kette begonnen, wo zuerst geprüft wird, ob der Schalter auf ein steht. Dann kommt das Folgeglied mit der Abfrage ob das Smartphone an ist und dadurch wird dann die Lampe eingeschaltet.

Zum Ausschalten der Lampe dann eine neue Startkette mit Lampe an, Folgeglied Smartphone aus, schaltet Lampe aus.

Zum Sonnenaufgang muss dann mit einer weiteren Startkette der Schalter wieder aus.

Das mal so grob zusammengefasst. :)
 
Zuletzt bearbeitet:
@JL3,
ok ich versuche es mal.
Also ich komme nach Sonnenuntergang nach hause und es ist noch nicht 22:30Uhr.
Mein Smartphone loggt sich in mein heimisches Wlan ein WR-Stehlampe geht an.
Gehe ich vor 22:30 noch mal ausser Haus Smartphone loggt sich aus Lampe aus.
Bleibe ich zu hause soll Lampe um 22:30 ausgehen auch wenn Smartphone eingeloggt ist.

Meine sasap.conf

# SensorAndSwitch Automation Pro (UI) V 4.50.4467 (C)2014/15 BlueDragon
6,+,7,0,0,0,A,-570,*,********,-
1,K,0,0,0,1,A,120,*,********,GastWLAN
7,+,0,0,0,0,S,1,0,Smartphone,WR-Stehlampe
4,+,5,0,0,1,S,1,1,Smartphone,WR-Stehlampe
2,K,0,0,0,0,U,-120,*,********,GastWLAN
3,K,4,0,0,0,U,0,*,********,-
5,+,6,0,0,1,W,>,3,WR-Stehlampe,-
8,K,0,0,0,0,X,2230,*,********,WR-Stehlampe


1 und 2 schaltet nur mein Gast-Wlan ein und aus.

Gruß Benne007
 
Ok, dann versuche ich das nochmal in die einzelnen Bedingungen aufzusplitten.

Zunächst einmal musst du dir einen Pseudo-Schalter basteln, der festhält, wann der Sonnenuntergang "wirkt", da der eigentliche Sonnenuntergang nur 1 Minute lang wahr ist.

1 K 0 wenn Sonnenuntergang, schalte Schalter an

Jetzt legen wir fest, wie lange dieser Zustand des Schalters aktiv sein soll:

2 K 0 wenn 22:30, schalte Schalter aus

Jetzt kommt die Einschaltkette für die Lampe

3 K 4 wenn Schalter ist an, schalte nichts an
4 + 0 wenn Smartphone ist an, schalte WR-Stehlampe an

Jetzt für aus bei Weggehen:

5 K 6 wenn Schalter ist an, schalte nichts an
6 + 0 wenn Smartphone ist aus, schalte WR-Stehlampe aus

zur Sicherheit noch:

7 K 0 wenn 22:31, schalte WR-Stehlampe aus

psgSchalter.php
PHP:
<?php 

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch Automation Pro                                    |
		|   PseudoGeräte-Script                                               |
		|   ===============================================================   |
		|   -> Schalter                                                       |
		|      Dieses Script simuliert ein PseudoGerät Schalter zu Test-      |
		|      zwecken.                                                       |
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
 
	error_reporting(0);
	$Pfad=".";
	
	$Status="S##E##";
	if (!file_exists($Pfad."/".pathinfo($_SERVER['PHP_SELF'],PATHINFO_FILENAME).".status")) {
		$fp=fopen($Pfad."/".pathinfo($_SERVER['PHP_SELF'],PATHINFO_FILENAME).".status","w");
		$Status="0";
		fputs($fp,"S#".$Status."#");
		fclose($fp);
	}
	if (isset($_GET["info"]) and $_GET["info"]=="status") {
		$fp=fopen($Pfad."/".pathinfo($_SERVER['PHP_SELF'],PATHINFO_FILENAME).".status","r");
		$xml=fgets($fp);
		fclose($fp);
		if (strpos($xml,"1")) {
			$Status="S#1#";
		}
		if (strpos($xml,"0")) {
			$Status="S#0#";
		}
	}
	if (isset($_GET["schalter"]) and $_GET["schalter"]=="1") {
		$fp=fopen($Pfad."/".pathinfo($_SERVER['PHP_SELF'],PATHINFO_FILENAME).".status","w");
		$Status="S#1#";
		fputs($fp,$Status);
		fclose($fp);
	}
	if (isset($_GET["schalter"]) and $_GET["schalter"]=="0") {
		$fp=fopen($Pfad."/".pathinfo($_SERVER['PHP_SELF'],PATHINFO_FILENAME).".status","w");
		$Status="S#0#";
		fputs($fp,$Status);
		fclose($fp);
	}
	echo $Status;
	exit;

?>
 
Zuletzt bearbeitet:
Ist der Pseudoschalter der Pseudosenor in der Schaltbedingungserfassung ?
 
Nein, der ist unter "Schalterposition" als Gerät "Schalter" zu finden.
 
@JL3
super funktioniert auf anhieb.
Vielen Dank.
1 Frage hätte ich noch an den Meister. Ist es möglich neben dem Schalter hinter URL noch eine Text z.B Sonnenuntergang aktiv bzw. Sonnenuntergang nicht aktiv zu setzen und wennja wie ?

Gruß Benne007
 
Ja, das geht.

psgSchalter.php
PHP:
<?php
	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                      PSG-Script   |
		|   ===============================================================   |
		|   Schalter                                                  (psg)   |
		|                                                                     |
		|   (C)2014/15 BlueDragon                                             !
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
	
	include __DIR__."/../include/psg.php";

	$ver="V#V 4.00#";
    $Pfad=".";
    $Statusdatei=$Pfad."/".pathinfo($_SERVER['PHP_SELF'],PATHINFO_FILENAME).".status"; 
    
    $Status="S##E##";
    if (!file_exists($Statusdatei)) {
        $fp=fopen($Statusdatei,"w");
        $Status="0";
        fputs($fp,"S#".$Status."#");
        fclose($fp);
    }
    if ($_GET["info"]=="status") {
        $fp=fopen($Statusdatei,"r");
        $xml=fgets($fp);
        fclose($fp);
        if (strpos($xml,"1")) {
            $Status="S#1#";
			$info="V#Sonnenuntergang aktiv*AIN#";
        }
        if (strpos($xml,"0")) {
            $Status="S#0#";
			$info="V#Sonnenuntergang inaktiv*AIN#";
        }
    }
    if ($_GET["schalter"]=="1") {
        $fp=fopen($Statusdatei,"w");
        $Status="S#1#";
        fputs($fp,$Status);
        fclose($fp);
		$info="V#Sonnenuntergang aktiv*AIN#";
    }
    if ($_GET["schalter"]=="0") {
        $fp=fopen($Statusdatei,"w");
        $Status="S#0#";
        fputs($fp,$Status);
        fclose($fp);
		$info="V#Sonnenuntergang inaktiv*AIN#";
    }
    echo $Status.$ver.$info;
	exit;
	
?>
 
@JL3,
irgendetwas passt bei dem 2 Schalter php nicht. Die Anzeige ist da und ich kann den Schalter auch zum Test Betätigen und wird grün bzw. der Text andert sich in aktiv aber jetzt funzt das mit dem ein.- und ausschalten nicht mehr richtig wenn sich das Handy ein.- oder ausloggt. Es sieht so aus als ob jetzt die Bedingungen nicht mehr stimmen aber ich weiss nicht warum.
Mach dir keine Stress ich benutze erst ,mal den ersten Schalter und wenn du vielleicht Zeit hast kannst du ja nochmal drüber schauen.

Danke

Gruß Benne007
 
Ich habe gerade bei mir selbst beide Schalter-Dateien getestet. Beide funktionieren tadellos. Kann es sein, dass du die zweite Datei nicht mit "UTF-8 ohne BOM" gespeichert hast? Schau bitte mal nach.
 
Ok,
ja das wars läuft jetzt super.
Ich danke dir.

Gruß Benne007
 
Moin,
hab da mal eine Frage. Wenn ich meine Fritte neu starte muß ich dann sashelper auf der Fritte neu installieren oder gibt es da einen Startbefehl für ?
Hatte es ja schon mal installiert mit "./install.sh 89".

Vielen Dank

Gruß Benne007
 
Code:
/var/media/ftp/busybox/httpd -p 89 -h /var/media/ftp/USB-Stick/myweb -c /var/media/ftp/busybox/httpd.conf
startet den Webserver wieder und weist ihm Port 89 zu und die angegebene Konfigurationsdatei.
 
ok Danke,
das könnte ich doch auch so in die Debug.cfg eingeben können oder ?
Bei mir habe ich sie wieder aktiviert.

Grß benne007
 
Ja, das ist kein Problem.
 
Hi und noch eine Frage,
ich habe das psgSmartphone.php mit der ich die verbundenen Smartphones bei mir im Heimnetz anzeigen lasse.
Jetzt hätte ich gerne eine Art Zeitstempel das mir angezeigt wird wann sich das Smartphone eingeloggt bzw. ausgeloggt hat.
ich habe es mit $zeit=date("H:i") versucht aber dann wird bei jeder abfrage bzw. ping die Zeit aktualisiert. Das möchte ich aber nicht so sondern 1x wenn einloggt und 1x wenn ausloggt.
Wie kann ich das realisieren ?

Für Hilfe wäre ich Dankbar

Gruß Benne007
 
Neue Version 4.50.4470
weitere Infos im
SAS4PI-Web
  • [4470] Optimierung der Löschvorgänge alter PSGs in der Datenbank.
 
Hallo @benne007,

dein Zeitstempel kannst du realisieren, wenn du den Status von deinem Smartphone zwischenspeicherst.

dann kannst du auch die Zeit speichern.

meine Zustände der Netzwerkgeräte sind alle mit Status gespeichert, da ich sie so in einem anderen Script schneller abrufen kann.

hier ein Beispiel mit 2 Netzwerkgeräten, wo ich den Status gespeichert habe.
PHP:
        <?php
			echo "FN#Sat-Receiver#";
            /*
                +---------------------------------------------------------------------+
                |                                                                     |
                |   SensorAndSwitch Automation Pro                                    |
                |   PseudoGeräte-Script                                 RaspberryPI   |
                |   ===============================================================   |
                |   Smartphone                                            sashelper   |
                |                                                                     |
                +---------------------------------------------------------------------+
            */

            error_reporting(0);
            
            # In der folgenden Datei sind die Variablen der sashelper mit Pfadangaben
            # benannt, wie z. B.:
            # $helperurlpi='http://192.168.178.xxx/sas/sensorandswitchhelper.php';
            include __DIR__."/../include/psg.php";
			include __dir__."/../conf/statuspfad.php";
			$gerarray=getGerInfo(substr(basename(__FILE__,".php"),3));

            $geraet1="192.168.178.100"; # Digicorder 1
			$geraet2="192.168.178.102"; # Digicorder 2
			
			$befehl='sudo ping -w 2 '.$geraet1;
            $url=$helperurlpi."?befehl=".encodiere($befehl,33455);
            $Status1=web($url,$post);
            $on1=substr($Status1,strpos($Status1,"transmitted,")+12)*1;
            
			$befehl='sudo ping -w 2 '.$geraet2;
            $url=$helperurlpi."?befehl=".encodiere($befehl,33455);
            $Status2=web($url,$post);
            $on2=substr($Status2,strpos($Status2,"transmitted,")+12)*1;

#	Sa1t 1 Ip - 100		
			$Statusdateinzw100=$Statuspfad."statusnzw100.txt";	
			$fd=fopen($Statusdateinzw100,"r");
			$xml=fgets($fd);
			if ($on1!=0) {				
				$Status="S#1#";
				if ( $xml <> $Status ) { 
					$fd=fopen($Statusdateinzw100,"w");
					fputs($fd,$Status); 
					fclose($fd);
					}
				$t1="1";
            }
				else {				
					$Status="S#0#";
					if ( $xml <> $Status ) { 
					$fd=fopen($Statusdateinzw100,"w");
					fputs($fd,$Status); 
					fclose($fd);
					}
					$t1="0";
				}
      
#	Sat 2  IP - 102
			$Statusdateinzw102=$Statuspfad."statusnzw102.txt";
			$fd=fopen($Statusdateinzw102,"r");
			$xml=fgets($fd);
			if ($on2!=0) {				
				$Status="S#1#";
				if ( $xml <> $Status ) { 
					$fd=fopen($Statusdateinzw102,"w");
					fputs($fd,$Status); 
					fclose($fd);
					}
				$t2="1";
            }
				else {			
					$Status="S#0#";
					if ( $xml <> $Status ) { 
						$fd=fopen($Statusdateinzw102,"w");
						fputs($fd,$Status); 
						fclose($fd);
					}
					$t2="0";
				}
			if (($on1!=0) or ($on2!=0)) {
				echo "S#1#";
			}
				else {
				echo "S#0#";
			}
			echo 'P#Digicorder Erdgeschoss  <img src="'.PIC.'mled'.$t1.'.png"> Keller  <img src="'.PIC.'mled'.$t2.'.png">*HTML#';
            exit;
            
        ?>
 
@ws65,
vielen Dank, werde ich mal ausprobieren ob ich das hinkriege.

Gruß Benne007
 
Neue Version 4.50.4497
weitere Infos im
SAS4PI-Web
  • [4497] Verbesserungen am Log-File.
  • [4497] Bugfix: Ein Fehler in der Gruppenschaltkorrektur wurde behoben.
 
Hallo,
Automatisch angezeigt wird es noch nicht. Wie lange dauert das eigentlich immer?
 
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.