SensorAndSwitch Haus-Automation auf Webserver-Basis

Prima. :)

Das mit den SIP-Konten, was hast du da konkret vor? (Ich habe das Problem, es bei mir nicht testen zu können, daher könnte ich das nur blind programmieren und du müsstest es bei dir testen)

- - - Aktualisiert - - -

psgSIP-Konten.php
PHP:
<?php

    /*

        +---------------------------------------------------------------------+
        |                                                                     |
        |   SensorAndSwitch Automation Pro                                    |
        |   PseudoGeräte-Script                                               |
        |   ===============================================================   |
        |   -> SIP                                                            |
        |   Fritz!Box Anrufbeantworter / Rufnummern / WLAN / Mediapl.-WebDAV  |
        |                                                                     |
        +---------------------------------------------------------------------+
    */

    include __DIR__."/../include/psg.php";

    $Login=$Conf["FB"]."/login_sid.lua";
    $user=$Conf["USER"];
    $password=$Conf["PASSWORD"];
    /*
    Anrufbeantworter
    */
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=tam:settings/TAM0/Active";
    $Status1=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=tam:settings/TAM1/Active";
    $Status2=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=tam:settings/TAM2/Active";
    $Status3=webget($url);
    $ab1="2";
    $ab2="2";
    $ab3="2";
    $x1=explode('"',$Status1);
    if ($x1[3]=="0" or $x1[3]=="1") {
        $ab1=$x1[3];
    }
    $x2=explode('"',$Status2);
    if ($x2[3]=="0" or $x2[3]=="1") {
        $ab2=$x2[3];
    }
    $x3=explode('"',$Status3);
    if ($x3[3]=="0" or $x3[3]=="1") {
        $ab3=$x3[3];
    }
    /*
    Rufnummern
    */
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip7/connect";
    $Status1=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip9/connect";
    $Status2=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip8/connect";
    $Status3=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip0/connect";
    $Status4=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip12/connect";
    $Status5=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip13/connect";
    $Status6=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip14/connect";
    $Status7=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip15/connect";
    $Status8=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip16/connect";
    $Status9=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip10/connect";
    $Status10=webget($url);
    $t1="2";
    $t2="2";
    $t3="2";
    $t4="2";
    $t5="2";
    $t6="2";
    $t7="2";
    $t8="2";
    $t9="2";
    $t10="2";

    $x1=explode('"',$Status1);
    if ($x1[3]=="1" or $x1[3]=="2") {
        $t1=$x1[3]-1;
    }
    $x2=explode('"',$Status2);
    if ($x2[3]=="1" or $x2[3]=="2") {
        $t2=$x2[3]-1;
    }
    $x3=explode('"',$Status3);
    if ($x3[3]=="1" or $x3[3]=="2") {
        $t3=$x3[3]-1;
    }
    $x4=explode('"',$Status4);
    if ($x4[3]=="1" or $x4[3]=="2") {
        $t4=$x4[3]-1;
    }
    $x5=explode('"',$Status5);
    if ($x5[3]=="1" or $x5[3]=="2") {
        $t5=$x5[3]-1;
    }
    $x6=explode('"',$Status6);
    if ($x6[3]=="1" or $x6[3]=="2") {
        $t6=$x6[3]-1;
    }
    $x7=explode('"',$Status7);
    if ($x7[3]=="1" or $x7[3]=="2") {
        $t7=$x7[3]-1;
    }
    $x8=explode('"',$Status8);
    if ($x8[3]=="1" or $x8[3]=="2") {
        $t8=$x8[3]-1;
    }
    $x9=explode('"',$Status9);
    if ($x9[3]=="1" or $x9[3]=="2") {
        $t9=$x9[3]-1;
    }
    $x10=explode('"',$Status10);
    if ($x10[3]=="1" or $x10[3]=="2") {
        $t10=$x10[3]-1;
    }
    /*
    Anzeige
    */
    echo 'P#<div style="font-size:20px;text-align:right;width:320px;position:absolute;top:-16px;"><img src="'.picdesign("psensor.png").'" border="0"></div><div style="font-size:12px;text-align:right;width:250px;position:absolute;top:+5px;"><div>AB: <img src="'.picdesign("mled".$ab1.".png").'" height="15px"><img src="'.picdesign("mled".$ab2.".png").'" height="15px"><img src="'.picdesign("mled".$ab3.".png").'" height="15px"> 1&1: <img src="'.picdesign("mled".$t1.".png").'" height="15px"><img src="'.picdesign("mled".$t2.".png").'" height="15px"><img src="'.picdesign("mled".$t3.".png").'" height="15px"><img src="'.picdesign("mled".$t4.".png").'" height="15px"><br> Sipgate: <img src="'.picdesign("mled".$t5.".png").'" height="15px"><img src="'.picdesign("mled".$t6.".png").'" height="15px"><img src="'.picdesign("mled".$t7.".png").'" height="15px"><img src="'.picdesign("mled".$t8.".png").'" height="15px"><img src="'.picdesign("mled".$t9.".png").'" height="15px"><img src="'.picdesign("mled".$t10.".png").'" height="15px"></div>*HTML#';
    exit;
    
?>

hier habe ich die SAS-eigene Funktion webget() zum Einlesen benutzt. Bei mir kommt zumindest eine Anzeige raus...
sipkonten.jpg
 
Der shutdown kennt keine Verzögerung in Sekunden mehr. Die kleinste Einheit sind Minuten. Doch man kann den Befehl austricksen:

5 Sekunden bis shutdown:
Code:
{ sleep 5 ; shutdown -h now 2>/dev/null >/dev/null ; } &
 
Das System fährt nach einer Minute herunter. Standardvorgabe.
 
Den Parameter -t gibt es beim shutdown nicht mehr. Dafür obige Abwandlung benutzen. sudo nicht vergessen. Ggf. einfach die beiden doits hier posten, dann schau ich drüber. ;)
 
ok, dann nur die Zeilen mit dem $befehl:
doitrebootnow.php
PHP:
$befehl='{ sudo sleep 3 ; sudo shutdown -r now 2>/dev/null >/dev/null ; } &';

doitshutdownnow.php
PHP:
$befehl='{ sudo sleep 3 ; sudo shutdown -h now 2>/dev/null >/dev/null ; } &';
 
Nicht nur das. Mit Jessie hat sich auch Einiges verändert. ;)
 
helfen kann ich da auch nicht,
hab selber so meine Probleme mit dem Format der Anzeige.

vor alemm die fürchterlich langen Echo Zeilen.
ich versuch dann immer die Anzeige erst teilweise in Variablen zu speichern, und am Ende nur die Variablen zusammen setzen.

hab mal 2 Beispiele, 1x meine Netzwerkanzeige und darunter mein Klingelbilder Anzeige.
immer wenn einer an der Haustür klingelt bekommt Jessie Arbeit,
ein Python Script reagiert auf das Klingel, speichert mir 2 Bilder, verkleinert ein Bild und speichert es in das Images Verzeichnis von Sas, ruft über Asterisk noch an, usw.
Sas mus dann noch für die Anzeige der Bilder den Rest machen.

meine Anzeigen sind noch lange nicht perfekt, aber es wird so langsam.
hier mal die 2 Scripte,
PHP:
<?php
            /*
                +---------------------------------------------------------------------+
                |                                                                     |
                |   SensorAndSwitch Automation Pro                                    |
                |   PseudoGeräte-Script                                 RaspberryPI   |
                |   ===============================================================   |
                |   Netzwerk Info Zeile                                                |
                |                                                                     |
                +---------------------------------------------------------------------+
            */

            error_reporting(0);
            
            include __DIR__."/../include/psg.php";
            include __dir__."/../conf/statuspfad.php";
            
            $Statusdatei=$Statuspfad."statusinfonzw.txt";
            $gerarray=getGerInfo(substr(basename(__FILE__,".php"),3));

        $geraetnzw = array(
        array("192.168.178.1"," Fb 7490"),
        array("192.168.178.3"," Fb 7270"),
        array("192.168.178.23"," D830 W "),
        array("192.168.178.25"," S3     "),
        array("192.168.178.26"," S-NB   "),
        array("192.168.178.31"," T-Pad  "),
        array("192.168.178.32"," S5     "),
        array("192.168.178.33"," L-NB   "),
        array("192.168.178.35"," F-Pad  "),
        array("192.168.178.34"," D830 K "),
        array("192.168.178.103"," Sat 1  "),    
        array("192.168.178.102"," Sat 2  "),
        array("192.168.178.105"," MyNas  "),
        array("192.168.178.111"," Yeal.  "),
        array("192.168.178.112"," GXV    "),
        array("192.168.178.240"," Cam 1  "),
        array("192.168.178.242"," Cam 2  "),
        array("192.168.178.243"," Cam 3  "),
        );
            $f = array();
            $t = array();
        
        $zahl = 9;
        $a = 0;
        $anzeige1='<span style="font-size:14px;position:absolute;left:0px;top:25px;"><img src="'.PIC.'mpsensor.png"></span>';
        while($a < $zahl)
            {
            $befehl='sudo ping -c 1 -w 1 '.$geraetnzw[$a][0];
            $url=$helperurlpi2."?befehl=".encodiere($befehl,33455);
            $Status=web($url,$post); 
            $on=substr($Status,strpos($Status,"transmitted,")+12)*1;
                if ($on!=0) {
                $t[$a]="1"; $f[$a]="lime";
                }
                else {
                    $t[$a]="0"; $f[$a]="red";
                }
            $Abstand=65;
            $b=$a*$Abstand+30;                 # 30 = Abstand hinter Pic bis erste Anzeige
            $c=$a*$Abstand+$Abstand+30-7;     # -7 = Trennungszeichen 7 Pixel vor der 2. Anzeige
            $Anz[$a]=' <span style="font-size:14px;position:absolute;left:'.$b.'px;color: '.$f[$a].';top:25px;">'.$geraetnzw[$a][1]. '</span>';
            $Trennung[$a]=' <span style="font-size:14px;position:absolute;left:'.$c.'px;color:yellow;top:25px;"> | </span>';
            $anzeige1=$anzeige1.$Anz[$a].$Trennung[$a];
            $a++;
            }
        
        $zahl = 18;
        $a = 9;
        $anzeige2='<span style="font-size:14px;position:absolute;left:0px;top:45px;"><img src="'.PIC.'mpsensor.png"></span>';
        while($a < $zahl)
            {
            $befehl='sudo ping -c 1 -w 1 '.$geraetnzw[$a][0];
            $url=$helperurlpi2."?befehl=".encodiere($befehl,33455);
            $Status=web($url,$post); 
            $on=substr($Status,strpos($Status,"transmitted,")+12)*1;
                if ($on!=0) {
                $t[$a]="1"; $f[$a]="lime";
                }
                else {
                    $t[$a]="0"; $f[$a]="red";
                }
            $Abstand=65;
            $b=($a-9)*$Abstand+30;                     # 9 * Abstand abziehen damit Anzeige wieder von Links beginnt!
            $c=($a-9)*$Abstand+$Abstand+30-7;        #
            $Anz[$a]=' <span style="font-size:14px;position:absolute;left:'.$b.'px;color: '.$f[$a].';top:45px;">'.$geraetnzw[$a][1]. '</span>';
            $Trennung[$a]=' <span style="font-size:14px;position:absolute;left:'.$c.'px;color:yellow;top:45px;"> | </span>';
            $anzeige2=$anzeige2.$Anz[$a].$Trennung[$a];
            $a++;
            }    
        
        echo 'IB#<div style="font-size:18px;position:absolute;left:200px;top:0px;">Netzwerkgeräte</div>'.$anzeige1.$anzeige2.' #';
        exit;         
?>

und Kamera Bilder,
PHP:
<?php
    echo "FN#Klingel Bilder#";
            /*
                +---------------------------------------------------------------------+
                |                                                                     |
                |   SensorAndSwitch Automation Pro                                    |
                |   PseudoGeräte-Script                                 RaspberryPI   |
                |   ===============================================================   |
                |   Klingel-Bilder                                                     |
                |                                                                     |
                +---------------------------------------------------------------------+
            */

            error_reporting(0);
            
            include __DIR__."/../include/psg.php";
            include __dir__."/../conf/statuspfad.php";
            
            $Statusdatei=$Statuspfad."statusinfonzw.txt";
            $gerarray=getGerInfo(substr(basename(__FILE__,".php"),3));
            
        # Datum und Zeit von den Bilddateien holen
        
        $befehl='sudo stat -c %z /var/www/sas/images/bild1.jpg';
        $url=$helperurlpi2."?befehl=".encodiere($befehl,33455);
        $Status=web($url,$post);
        $datum1=substr($Status, 0, 10);
        $zeit1=substr($Status, 11, 8);
        
        $befehl='sudo stat -c %y /var/www/sas/images/bild2.jpg';
        $url=$helperurlpi2."?befehl=".encodiere($befehl,33455);
        $Status=web($url,$post);
        $datum2=substr($Status, 0, 10);
        $zeit2=substr($Status, 11, 8);
        
        $befehl='sudo stat -c %y /var/www/sas/images/bild3.jpg';
        $url=$helperurlpi2."?befehl=".encodiere($befehl,33455);
        $Status=web($url,$post);
        $datum3=substr($Status, 0, 10);
        $zeit3=substr($Status, 11, 8);
        
        # Format für Textanzeige
        
        $fdatum1="<div style='position:absolute;top:20px;font-size:10px;'>";
        $fdatum2="<div style='position:absolute;left:230px;top:20px;font-size:10px;'>";
        $fdatum3="<div style='position:absolute;left:460px;top:20px;font-size:10px;'>";
        $fzeit1="<div style='position:absolute;top:50px;font-size:14px;'>";
        $fzeit2="<div style='position:absolute;left:230px;top:50px;font-size:14px;'>";
        $fzeit3="<div style='position:absolute;left:460px;top:50px;font-size:14px;'>";
        $format_ende="</div>";
        
        # Anzege für Text zusammen bauen
        
        $td1=$fdatum1.$datum1.$format_ende;
        $td2=$fdatum2.$datum2.$format_ende;
        $td3=$fdatum3.$datum3.$format_ende;
        $tz1=$fzeit1.$zeit1.$format_ende;
        $tz2=$fzeit2.$zeit2.$format_ende;
        $tz3=$fzeit3.$zeit3.$format_ende;
        
        # Format für die Bildanzeige
        
        $formatb1="<div style='position:absolute;left:60px;top:-10px;'>";
        $formatb2="<div style='position:absolute;left:295px;top:-10px;'>";
        $formatb3="<div style='position:absolute;left:525px;top:-10px;'>";
        
        # Bildanzeige zusammen bauen
        
        $bild1="<img src='".PIC."bild1.jpg'>";
        $bildanz1=$formatb1.$bild1.$format_ende;
        $bild2="<img src='".PIC."bild2.jpg'>";
        $bildanz2=$formatb2.$bild2.$format_ende;
        $bild3="<img src='".PIC."bild3.jpg'>";
        $bildanz3=$formatb3.$bild3.$format_ende;
            
        echo "IB#$td1 $tz1 $bildanz1 $td2 $tz2 $bildanz2 $td3 $tz3 $bildanz3#";
        exit;         
?>

hilft dir sicher nicht viel, aber das Formatieren der Anzeige ist mit Variablen für mich einfacher und es gibt auch nicht so viel Durcheinander mit einfachen und doppelten Anführungszeichen!

nzw_und_klingel.JPG

Edit: hab das erste Script nochmal ausgetauscht, verbessert.
da ist aber noch Platz für neue ideen!
 
Zuletzt bearbeitet:
PHP:
<?php

    /*

        +---------------------------------------------------------------------+
        |                                                                     |
        |   SensorAndSwitch Automation Pro                                    |
        |   PseudoGeräte-Script                                               |
        |   ===============================================================   |
        |   ->  Rufnummern und Ping                                           |
        |                                                                     |
        +---------------------------------------------------------------------+
    */

    include_once __DIR__."/../include/psg.php";

    $Login=$Conf["FB"]."/login_sid.lua";
    $user=$Conf["USER"];
    $password=$Conf["PASSWORD"];

     /*
    Rufnummern
    */
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip7/connect";  /* x */
    $Status1=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip9/connect";  /* x */
    $Status2=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip0/connect";  /* x */
    $Status3=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip8/connect";  /* x */
    $Status4=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip10/connect";  /* x */
    $Status5=webget($url);    
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip11/connect";  /* x */
    $Status6=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip12/connect";  /* x */
    $Status7=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip13/connect";  /* x */
    $Status8=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip14/connect";  /* x */
    $Status9=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip15/connect";  /* x */
    $Status10=webget($url);
    $url=$Conf["FB"]."/query.lua?sid=".GetSessionID($Login,$user,$password)."&wlan=sip:status/sip16/connect";  /* x */
    $Status11=webget($url);

    $t1="2";
    $t2="2";
    $t3="2";
    $t4="2";
    $t5="2";
    $t6="2";
    $t7="2";
    $t8="2";
    $t9="2";
    $t10="2";
    $t11="2";
    
    $x1=explode('"',$Status1);
    if ($x1[3]=="1" or $x1[3]=="2") {
        $t1=$x1[3]-1;
    }
    $x2=explode('"',$Status2);
    if ($x2[3]=="1" or $x2[3]=="2") {
        $t2=$x2[3]-1;
    }
    $x3=explode('"',$Status3);
    if ($x3[3]=="1" or $x3[3]=="2") {
        $t3=$x3[3]-1;
    }
    $x4=explode('"',$Status4);
    if ($x4[3]=="1" or $x4[3]=="2") {
        $t4=$x4[3]-1;
    }
    $x5=explode('"',$Status5);
    if ($x5[3]=="1" or $x5[3]=="2") {
        $t5=$x5[3]-1;
    }
    $x6=explode('"',$Status6);
    if ($x6[3]=="1" or $x6[3]=="2") {
        $t6=$x6[3]-1;
    }
    $x7=explode('"',$Status7);
    if ($x7[3]=="1" or $x7[3]=="2") {
        $t7=$x7[3]-1;
    }
    $x8=explode('"',$Status8);
    if ($x8[3]=="1" or $x8[3]=="2") {
        $t8=$x8[3]-1;
    }
    $x9=explode('"',$Status9);
    if ($x9[3]=="1" or $x9[3]=="2") {
        $t9=$x9[3]-1;
    }
    $x10=explode('"',$Status10);
    if ($x10[3]=="1" or $x10[3]=="2") {
        $t10=$x10[3]-1;
    }
    $x11=explode('"',$Status11);
    if ($x11[3]=="1" or $x11[3]=="2") {
        $t11=$x11[3]-1;
    }

# Ping            
    $geraet1="x.x.x.x";   # FritzBox am VDSL
    $geraet2="x.x.x.x";   # FritzBox 7490 II
    $geraet3="x.x.x.x";   # Repeater 1750E
    $geraet4="x.x.x.x";  # FritzBox 4040
    
    $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;
    
    $befehl='sudo ping -w 2 '.$geraet3;
    $url=$helperurlpi."?befehl=".encodiere($befehl,33455);
    $Status3=web($url,$post);
    $on3=substr($Status3,strpos($Status3,"transmitted,")+12)*1;
    
    $befehl='sudo ping -w 2 '.$geraet4;
    $url=$helperurlpi."?befehl=".encodiere($befehl,33455);
    $Status4=web($url,$post);
    $on4=substr($Status4,strpos($Status4,"transmitted,")+12)*1;

    $befehl='sudo ping -w 2 '.$geraet5;
    $url=$helperurlpi."?befehl=".encodiere($befehl,33455);
    $Status5=web($url,$post);
    $on5=substr($Status5,strpos($Status5,"transmitted,")+12)*1;
    
#    Satz 1
    $Statusdateinzw01=$Statuspfad."statusnzw001.txt";    
    $fd=fopen($Statusdateinzw01,"r");
    $xml=fgets($fd);
    if ($on1!=0) {                
        $Status="S#1#";
        if ( $xml <> $Status ) { 
            $fd=fopen($Statusdateinzw01,"w");
            fputs($fd,$Status); 
            fclose($fd);
            }
        $tt1="1";
    }
    else {                
        $Status="S#0#";
        if ( $xml <> $Status ) { 
        $fd=fopen($Statusdateinzw01,"w");
        fputs($fd,$Status); 
        fclose($fd);
        }
        $tt1="0";
    }

#    Satz 2
    $Statusdateinzw05=$Statuspfad."statusnzw005.txt";
    $fd=fopen($Statusdateinzw05,"r");
    $xml=fgets($fd);
    if ($on2!=0) {                
        $Status="S#1#";
        if ( $xml <> $Status ) { 
            $fd=fopen($Statusdateinzw05,"w");
            fputs($fd,$Status); 
            fclose($fd);
            }
        $tt2="1";
    }
    else {            
        $Status="S#0#";
        if ( $xml <> $Status ) { 
            $fd=fopen($Statusdateinzw05,"w");
            fputs($fd,$Status); 
            fclose($fd);
        }
        $tt2="0";
    }

#    Satz 3
    $Statusdateinzw02=$Statuspfad."statusnzw002.txt";    
    $fd=fopen($Statusdateinzw02,"r");
    $xml=fgets($fd);
    if ($on3!=0) {                
        $Status="S#1#";
        if ( $xml <> $Status ) { 
            $fd=fopen($Statusdateinzw02,"w");
            fputs($fd,$Status); 
            fclose($fd);
            }
        $tt3="1";
    }
    else {                
        $Status="S#0#";
        if ( $xml <> $Status ) { 
        $fd=fopen($Statusdateinzw02,"w");
        fputs($fd,$Status); 
        fclose($fd);
        }
        $tt3="0";
    }

#    Satz 4
    $Statusdateinzw10=$Statuspfad."statusnzw010.txt";    
    $fd=fopen($Statusdateinzw10,"r");
    $xml=fgets($fd);
    if ($on4!=0) {                
        $Status="S#1#";
        if ( $xml <> $Status ) { 
            $fd=fopen($Statusdateinzw10,"w");
            fputs($fd,$Status); 
            fclose($fd);
            }
        $ttt4="1";
    }
    else {                
        $Status="S#0#";
        if ( $xml <> $Status ) { 
        $fd=fopen($Statusdateinzw10,"w");
        fputs($fd,$Status); 
        fclose($fd);
        }
        $tt4="0";
    }
  
    if (($on1!=0) or ($on2!=0) or ($on3!=0) or ($on4!=0)) {
        $gon="1";
    }
        else {
        $gon="0";
    }
            
    # Anzeige
    $info='';
    $info.='<div style="font-size:20px;left:-90px;top:20px;position:absolute;"><img src="'.picdesign("aktiv1.png").'" border="0"></div>';
    $info.='<div style="font-size:12px;text-align:left;width:250px;position:absolute;top:10px;">Tel.: <img src="'.picdesign("mled".$t1.".png").'" height="15px"> - <img src="'.picdesign("mled".$t2.".png").'" height="15px"> - <img src="'.picdesign("mled".$t3.".png").'" height="15px"> - Fax: <img src="'.picdesign("mled".$t4.".png").'" height="15px"></div>';
    $info.='<div style="font-size:12px;text-align:left;width:300px;position:absolute;top:30px;">Tel.: <img src="'.picdesign("mled".$t5.".png").'" height="15px"> - <img src="'.picdesign("mled".$t6.".png").'" height="15px"> - <img src="'.picdesign("mled".$t7.".png").'" height="15px"> - <img src="'.picdesign("mled".$t8.".png").'" height="15px"> - <img src="'.picdesign("mled".$t9.".png").'" height="15px"> - <img src="'.picdesign("mled".$t10.".png").'" height="15px"> - <img src="'.picdesign("mled".$t11.".png").'" height="15px"></div>';
    $info.='<div style="font-size:12px;text-align:left;width:250px;position:absolute;top:50px;">Root: <img src="'.PIC.'mled'.$tt1.'.png" height="15px"> 7490: <img src="'.PIC.'mled'.$tt2.'.png" height="15px"> 1750E: <img src="'.PIC.'mled'.$tt3.'.png" height="15px"> 4040: <img src="'.PIC.'mled'.$tt4.'.png" height="15px"></div>';
    $info.='<div style="font-size:12px;text-align:left;width:300px;position:absolute;top:70px;">On/off: <img src="'.PIC.'mled'.$gon.'.png" height="15px"></div>';
    echo 'IB#<div style="position:absolute;left:85px;top:0px;">'.$info.'</div>#';
    exit;
    
?>

- - - Aktualisiert - - -

@all: Es ist für mich sehr interessant, was bei jedem einzelnen von Euch für Slotinhalte in SaS zur Anzeige kommen. Daran sehe ich, wie flexibel das PsG-Konzept wirklich ist und wieviele unterschiedliche Ideen von Euch schon umgesetzt wurden. :)
 
Zuletzt bearbeitet:
bei mir läuft es,

klein bisschen angepasst, hab nicht so viele Telefone!

aber als Test funktioniert es.
Frank_m27.JPG
benannt hab ich es mit psgFrank_m27.php

Edit: einen kleinen Fehler hab ich gefunden:

bei der Variablen $tt4 war einmal ein "t" zuviel drin!
 
Zuletzt bearbeitet:
Eine leere Anzeige bedeutet meist ein PHP-Fehler. Ggf. mal auf den Pi gehen und in das Verzeichnis wechseln, wo das psg liegt, Dann dort mit php psginfoCenter.php direkt laufen lassen und schauen, ob php eine Fehlermeldung ausgibt. Bei mir zeigt das psg was an...
 
Das Problem ist vermutlich nur eine Kleinigkeit durchs Kopieren. ;)
 
mal ne Frage,

warum braucht ein Script das auf dem Pi 1 mit Sas 4 in knapp 1 Minute fertig ist, auf dem Pi 2 mit Sas 6 über 5 Minuten?

wo muss ich da suchen?
 
@Frank_m27: Vermutlich ja, aber schwer zu sagen, woran es konkret liegt. Normalerweise würde sich die Datenbank neu bilden.

@w65: Ein PsG? Wenn ja, bitte mal posten.
 
@Frank_m27: /tmp sollte für alle User (others) rwt sein...
Code:
ls -dla /tmp
drwxrwx[COLOR=red]rwt[/COLOR] 9 root root 4096 Oct 28 13:17 /tmp

@JL3: Interessant: Nach /var/tmp gehören die Dateien, die ein Reboot überleben sollen.
...wusste ich auch noch nicht.

Siehe: Bei Verzeichnissen --> https://de.m.wikipedia.org/wiki/Sticky_Bit
 
Zuletzt bearbeitet:
Ich habe im SAS-Verzeichnis zwei tmp-Verzeichnisse:
Code:
drwxrwxrwt 2 root root   200 Okt 28 14:00 tmp
drwxrwxrwx 1 root root     0 Apr 28  2016 tmpbackup

in der /etc/fstab:
Code:
proc            /proc               proc     defaults                       0  0
/dev/mmcblk0p1  /boot               vfat     defaults                       0  2
/dev/mmcblk0p2  /                   ext4     defaults,noatime,commit=86400  0  1
tmpfs           /share/www/sas/tmp  tmpfs    nosuid,size=10M                0  0

unter /etc/init.d/starten:
Code:
#! /bin/sh
# /etc/init.d/starten
#
### BEGIN INIT INFO
# Provides: Starten
# Required-Start: $local_fs
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Start-Before: rsyslog
# X-Stop-After: rsyslog
# Short-Description: Starten
# Description: Startroutine beim Hochfahren
### END INIT INFO
#
echo "Script /etc/init.d/starten"
echo "=========================="
case "$1" in
start)
echo "Start..."
cp /var/www/sas/tmpbackup/*.d* /var/www/sas/tmp
chown www-data:www-data /var/www/sas/tmp/*.d*
chmod 0777 /var/www/sas/tmp/*.d*
echo "Fertig!"
exit 0
;;
stop)
echo "stop ohne Funktion."
exit 0
;;
*)
echo "Benutzung: /etc/init.d/starten {start|stop}"
exit 1
;;
esac
exit 0

und mein reboot-Script was ich benutze ist
Code:
start reboot

Dadurch wird beim Reboot zuerst die DB nach tmpbackup gerettet und beim Hochfahren im starten-Script wieder hergestellt.

Dazu muss auch im reboot-doit der "{ sleep 3; shutdown -r...}-Befehl durch "sudo /usr/local/bin/sas/start reboot" ersetzt werden.
 
genau genommen sind das 2 fast gleiche psg´s.
arbeiten als Wechselschalter, könnte mann vllt. auch einfacher machen.

schalten abwechselnd ein Python Script für meine Klingelsteuerung.
eimal Klingel-intern oder Klingel-extern, auch die Möglichkeit kommplett aus sollte gegeben sein.

Nebenfrage, könnte das daran liegen, wenn ich das mit Sas starte sind 3 Prozesse aktiv.
seltsam, heute nur 2 Prozesse.

die Cpu Auslastung kann das auch nicht sein, ist im grünen Bereich!

Pi2-Cpu1.JPGPi2-Cpu2.JPGPi2-Klingel.JPG

PHP:
<?php
    echo "FN#Klingel Extern#";
            /*
                +---------------------------------------------------------------------+
                |                                                                     |
                |   SensorAndSwitch Automation Pro                                    |
                |   PseudoGeräte-Script                                 RaspberryPI   |
                |   ===============================================================   |
                |   Smartphone                                            sashelper   |
                |                                                                     |
                +---------------------------------------------------------------------+
            */

    error_reporting(0);
            
    include __DIR__."/../include/psg.php";
    include __dir__."/../conf/statuspfad.php";
            
    $gerarray=getGerInfo(substr(basename(__FILE__,".php"),3));
                        
    $befehl='sudo ps aux | grep -v grep | grep python'; 
    $url=$helperurlpi2."?befehl=".encodiere($befehl,33455);
    $Status=web($url,$post);

    if ($Status<>"") {
        if (strpos($Status,"intern")) {
            $Ausgabe = "Klingel intern ist an !";
            $Status="S#0#";                    # Status 0 da extern abgefragt wird
        }
        if (strpos($Status,"extern")){
            $Ausgabe = "Klingel extern ist an !";
            $Status="S#1#";
        }
    }
    else {
        $Ausgabe="Klingel auf Asterisk ist aus!";
        $Status="S#0#";
    }

    if ($_GET["schalter"]=="1") {
        # damit nichts doppelt läuft, erst mal alle Prozesse löschen
        $befehl='sudo killall python';
        $url=$helperurlpi2."?befehl=".encodiere($befehl,33455);
        $Status=web($url,$post);
        # jetzt neu starten
        $befehl='sudo python /var/www/klingel_extern.py &';
        $url=$helperurlpi2."?befehl=".encodiere($befehl,33455);
        $Status=web($url,$post);
        $Status="S#1#";
    }
    if ($_GET["schalter"]=="0") {
        $befehl='sudo killall python';
        $url=$helperurlpi2."?befehl=".encodiere($befehl,33455);
        $Status=web($url,$post);
        $Status="S#0#";
        
    }
    
    echo "P#$Ausgabe*HTML#";
    echo $Status;
    exit;
?>

PHP:
<?php
    echo "FN#Klingel Intern#";
            /*
                +---------------------------------------------------------------------+
                |                                                                     |
                |   SensorAndSwitch Automation Pro                                    |
                |   PseudoGeräte-Script                                 RaspberryPI   |
                |   ===============================================================   |
                |   Smartphone                                            sashelper   |
                |                                                                     |
                +---------------------------------------------------------------------+
            */

    error_reporting(0);
            
    include __DIR__."/../include/psg.php";
    include __dir__."/../conf/statuspfad.php";
            
    $gerarray=getGerInfo(substr(basename(__FILE__,".php"),3));
                        
    $befehl='sudo ps aux | grep -v grep | grep python'; 
    $url=$helperurlpi2."?befehl=".encodiere($befehl,33455);
    $Status=web($url,$post);

    if ($Status<>"") {
        if (strpos($Status,"intern")) {
            $Ausgabe = "Klingel intern ist an !";
            $Status="S#1#";
        }
        if (strpos($Status,"extern")){
            $Ausgabe = "Klingel extern ist an !";
            $Status="S#0#";            # Status 0 da ja interne Klingel abgefragt wird
        }
    }
    else {
        $Ausgabe="Klingel auf Asterisk ist aus!";
        $Status="S#0#";
            }

    if ($_GET["schalter"]=="1") {
        # damit nichts doppelt läuft, erst mal alle Prozesse löschen
        $befehl='sudo killall python';
        $url=$helperurlpi2."?befehl=".encodiere($befehl,33455);
        $Status=web($url,$post);
        # jetzt neu starten
        $befehl='sudo python /var/www/klingel_intern.py &';
        $url=$helperurlpi2."?befehl=".encodiere($befehl,33455);
        $Status=web($url,$post);
        $Status="S#1#";
    }
    if ($_GET["schalter"]=="0") {
        $befehl='sudo killall python';
        $url=$helperurlpi2."?befehl=".encodiere($befehl,33455);
        $Status=web($url,$post);
        $Status="S#0#";
        
    }
    
    echo "P#$Ausgabe*HTML#";
    echo $Status;
    exit;
?>
 
@ws65: Merkwürdig, warum das Script 5 Minuten braucht... Das dürfte es nicht. Vielleicht startet Python langsamer. Muss ich mir näher ansehen.

- - - Aktualisiert - - -

@Frank_m27: PHP gibt das PsG ohne Fehlermeldung aus. Das passt, denke ich.
 
das Python Script schaltet sofort, aber die Anzeigen von den psg´s dauern!
nach 5 Minuten wird der Text aktuallisiert, nach 6 Minuten ist auch der Status richtig!

auf dem PI 1 mit Sas 4 ist das zwischen 15 und 45 Sekunden fertig.
 
@ws65: Schwer zu sagen, woran das liegt. Du fragst ja Prozesse ab, ob diese noch laufen. Die Datenbankaktualisierung ist bei jedem Durchlauf aller psgs.

- - - Aktualisiert - - -

@ws65: Wieviele PsGs laufen auf dem Pi1 und wieviele auf dem Pi2? Ich rätsele noch immer wegen der 5 Minuten herum. Die beiden psgs sind es wohl nicht...
 
auf dem Pi-1 mit sas 4 ca. 40 psg´s,
auf dem Pi-2 mit sas 6 ca. 20 psg´s.

bin am überlegen ob da die Sd-Karte eventuell doch nicht mehr so ganz in Ordnung ist?

spiele gerade mal die Sicherung auf eine andere Sd-Karte, mal sehen, ob das esser geht?
 
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.