Hilfen zur Konvertierung von pseudo...php zu psg...php

JL3

Aktives Mitglied
Mitglied seit
4 Dez 2010
Beiträge
1,995
Punkte für Reaktionen
8
Punkte
38
Wer alte pseudo...php-Scripte hat, die er in das neue psg...php Format umwandeln möchte, kann diese hier posten.


-
Zunächst trage ich hier schon einmal die wichtigsten Dinge zusammen:
  • pseudoNAME.php muss zu psgNAME.php umbenannt werden.
  • Im SAS-Hauptverzeichnis muss ein Unterverzeichnis psg/ angelegt werden, wohin die neuen psg-Scripte verschoben werden müssen, um sie zu aktivieren.
  • In jedes Script muss statt
    PHP:
    	include "include/includepseudo.php";
    nun
    PHP:
    	include __DIR__."/../include/psg.php";
    und zum Nutzen der öffentlichen Funktionen und Variablen
    PHP:
    	$gerarray=getGerInfo(substr(basename(__FILE__,".php"),3));
  • Konfigurationsdateien müssen umbenannt werden. Beispiel: sensorandswitchemail.conf in sasemail.conf usw. kurz: alles was sensorandswitch hieß, heißt nun sas.
  • Pfade zu Konfigurationsdateien müssen angepasst werden. Z. B.:
    PHP:
     		$dateiMailBox=__DIR__."/../conf/sasemail.conf";
  • Generell sollte/muss vor einen relativen Unterverzeichnispfad nun ein __DIR__."/../conf/... statt nur conf/...
    __DIR__ ist eine PHP-Systemvariable und enthält den Pfad der psg-Datei und nicht der aufrufenden/includierenden Datei, was wichtig ist.
 
Zuletzt bearbeitet:
Hallo JL3,

habe mir mal das Script "pseudosendmailauto.php" aus der Version 3.00.2470 angesehen und versucht
es an die Version 4.01.4104 anzupassen. Leide bin ich zu keinem Ergebnis gekommen damit das Script funktioniert.
Ich kann das Script in der "Schaltbedingungserfassung" nicht auswählen und deshalb nicht nutzen.

Der Name des geänderten Script´s lauted bei mir "psgSendeMail.php". Ich werde mal das Script hier posten.

PHP:
<?php

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch                                      PSG-Script   |
		|   ===============================================================   |
		|   -> sendMail                     eMail senden bei einem Ereignis   |
		|                                                                  ** |
		+---------------------------------------------------------------------+
	*/

	error_reporting(0);
	require(__DIR__."/include/phpmailer.php");
	$mail=new PHPMailer();
	include __DIR__."/include/dateien.php";
	include __DIR__."/include/functions.php";
	include __DIR__."/include/conf.php";
	include __DIR__."/include/config.php";
	include __DIR__."/include/define.php";

	$Pfad=".";

	$ZeitG=date("HiNdmYI");
	$Zeit=substr($ZeitG,0,13);

	$Status="S##E##";
	if (!file_exists($Pfad."/statussendmail.txt")) {
		$fp=fopen($Pfad."/statussendmail.txt","w");
		$Status="0";
		fputs($fp,"S#".$Status."#");
		fclose($fp);
	}
	if ($_GET["info"]=="status") {
		$fp=fopen($Pfad."/statussendmail.txt","r");
		$xml=fgets($fp);
		fclose($fp);
		if (strpos($xml,"1")) {
			$Status="S#1#";
		}
		if (strpos($xml,"0")) {
			$Status="S#0#";
		}
	}
	if ($_GET["schalter"]=="1") {
		$fp=fopen($Pfad."/statussendmail.txt","w");
		$Status="S#1#";
		fputs($fp,$Status);
		fclose($fp);
	}
	if ($_GET["schalter"]=="0") {
		$fp=fopen($Pfad."/statussendmail.txt","w");
		$Status="S#0#";
		fputs($fp,$Status);
		fclose($fp);
	}

	if ($_GET["schalter"]=="0" or $_GET["schalter"]=="1") {
		$fp=fopen($Pfad."/statussendmail.html","w");
		$Status="Schaltvorgang [".$_GET["schalter"]."] wurde ausgelöst: ".substr($Zeit,0,2).":".substr($Zeit,2,2).' '.substr($Wt[substr($Zeit,4,1)],0,2).' '.substr($Zeit,5,2).".".substr($Zeit,7,2).".".substr($Zeit,9,4);
		fputs($fp,$Status);
		fclose($fp);
		$mailversendername='SensorAndSwitch Automation Pro';
		$mailversender=$Conf["MAILVERSENDER"];
		$mailempfaenger=$Conf["MAILEMPFAENGER"];
		$mailbetreff='Schaltvorgang ausgeloest';
		$mailserver=$Conf["MAILSERVER"];
		$mailserverport=$Conf["MAILSERVERPORT"];
		$mailbenutzer=$Conf["MAILBENUTZER"];
		$mailkennwort=$Conf["MAILKENNWORT"];
		$mailTLSSSL=$Conf["MAILTLSSSL"];
		$mailinhalt=$Pfad."/statussendmail.html";
		$mail->From=$mailversender;
		$mail->FromName=$mailversendername;
		$mail->AddAddress($mailempfaenger);
		$mail->IsSMTP();
		$mail->Host=$mailserver;
		$mail->Port=$mailserverport;
		$mail->SMTPSecure=$mailTLSSSL;
		$mail->SMTPAuth=true;
		$mail->Username=$mailbenutzer;
		$mail->Password=$mailkennwort;
		$mail->CharSet="ansi";
		$mail->IsHTML(true);
		$mail->Subject=$mailbetreff;
		$mail->Body = file_get_contents($mailinhalt);
		$mail->Send();
		unlink($Pfad."/statussendmail.html");
		$Status="S#".$_GET["schalter"]."#";
	}
	echo $Status;
	exit;

?>

Falls ich da noch Fehler im Script habe, die die Funktion behindern bitte mal erläutern.

Danke im Voraus

Viele Grüsse

ElefantenMaus
 
psgSendeMailauto.php
PHP:
<?php

    /*
        +---------------------------------------------------------------------+
        |                                                                     |
        |   SensorAndSwitch                                      PSG-Script   |
        |   ===============================================================   |
        |   -> sendMail                     eMail senden bei einem Ereignis   |
        |                                                                  ** |
        +---------------------------------------------------------------------+
    */

    require(__DIR__."/../include/phpmailer.php");
	include __DIR__."/../include/psg.php";
	$gerarray=getGerInfo(substr(basename(__FILE__,".php"),3));

    $Pfad=__DIR__."/.";

    $ZeitG=date("HiNdmYI");
    $Zeit=substr($ZeitG,0,13);

    $Status="S##E##";
    if (!file_exists($Pfad."/statussendmail.txt")) {
        $fp=fopen($Pfad."/statussendmail.txt","w");
        $Status="0";
        fputs($fp,"S#".$Status."#");
        fclose($fp);
    }
    if ($_GET["info"]=="status") {
        $fp=fopen($Pfad."/statussendmail.txt","r");
        $xml=fgets($fp);
        fclose($fp);
        if (strpos($xml,"1")) {
            $Status="S#1#";
        }
        if (strpos($xml,"0")) {
            $Status="S#0#";
        }
    }
    if ($_GET["schalter"]=="1") {
        $fp=fopen($Pfad."/statussendmail.txt","w");
        $Status="S#1#";
        fputs($fp,$Status);
        fclose($fp);
    }
    if ($_GET["schalter"]=="0") {
        $fp=fopen($Pfad."/statussendmail.txt","w");
        $Status="S#0#";
        fputs($fp,$Status);
        fclose($fp);
    }

    if ($_GET["schalter"]=="0" or $_GET["schalter"]=="1") {
        $fp=fopen($Pfad."/statussendmail.html","w");
        $Status="Schaltvorgang [".$_GET["schalter"]."] wurde ausgelöst: ".substr($Zeit,0,2).":".substr($Zeit,2,2).' '.substr($Wt[substr($Zeit,4,1)],0,2).' '.substr($Zeit,5,2).".".substr($Zeit,7,2).".".substr($Zeit,9,4);
        fputs($fp,$Status);
        fclose($fp);
		$mail=new PHPMailer();
        $mailversendername='SensorAndSwitch Automation Pro';
        $mailversender=$Conf["MAILVERSENDER"];
        $mailempfaenger=$Conf["MAILEMPFAENGER"];
        $mailbetreff='Schaltvorgang ausgeloest';
        $mailserver=$Conf["MAILSERVER"];
        $mailserverport=$Conf["MAILSERVERPORT"];
        $mailbenutzer=$Conf["MAILBENUTZER"];
        $mailkennwort=$Conf["MAILKENNWORT"];
        $mailTLSSSL=$Conf["MAILTLSSSL"];
        $mailinhalt=$Pfad."/statussendmail.html";
        $mail->From=$mailversender;
        $mail->FromName=$mailversendername;
        $mail->AddAddress($mailempfaenger);
        $mail->IsSMTP();
        $mail->Host=$mailserver;
        $mail->Port=$mailserverport;
        $mail->SMTPSecure=$mailTLSSSL;
        $mail->SMTPAuth=true;
        $mail->Username=$mailbenutzer;
        $mail->Password=$mailkennwort;
        $mail->CharSet="ansi";
        $mail->IsHTML(true);
        $mail->Subject=$mailbetreff;
        $mail->Body = file_get_contents($mailinhalt);
        $mail->Send();
        unlink($Pfad."/statussendmail.html");
        $Status="S#".$_GET["schalter"]."#";
    }
    echo $Status;
    exit;

?>

Ich kann es momentan nicht testen, aber müsste so aussehen. ;)
 
Zuletzt bearbeitet:
Hallo JL3,

das geänderte Script läuft bei mir ohne Probleme.

Danke
 
Prima :)

Ich hatte übrigens die Erläuterung vergessen.

Die Pfade zu den includes mussten noch angepasst werden. __DIR__ ist die Position der psg-Datei. Mit .. gehts nach sas zurück und dann includes und die entsprechende zu includierende Datei. Includiert man psg.php, so sind alle relevanten Dateien mit dabei. Für den Mailversand dann noch phpmailer.php, das war es schon. $mail=new PHPMailer(); hätte ich nicht verschieben müssen, aber hatte ich beim ersten Ändern versehentlich oben rausgelöscht und dann an neuer Position eingefügt. $Pfad noch angepasst, dass es ins psg-Verzeichnis schreibt. Das nur noch zur Erklärung, was verändert wurde. Achja, auto im Namen noch eingefügt, dass das psg nur in der Automation erscheint. ;)
 
so, ich mach jetz mal hier weiter, möchte nicht den Hauptfred zumüllen mit meinem stümperhaften auftreten hier ! ;-)

ich habe :

einen schalter:
psgtest.php

PHP:
<?php // Pingtest,Fotoabholung
    include __DIR__."/../include/psg.php";
error_reporting(0);
if ($_GET["info"]=="status") {
$Device='192.168.xxx.xxx';
$Status=shell_exec('ping -c 1 -W 1 '.$Device.' >/dev/null;[ $? -eq 1 ] && echo "P#0*
<div style=\"position:absolute;top:-18px;font-size:14px;width:324px;\"><img src=\"images/schalter0.png\"/></div>#" || echo "P#1*
<div style=\"position:absolute;top:-10px;font-size:14px;width:240px;\">
<a href="'.$Conf["PSG"].'doittest.php?user='.$guiuser.'"><img src=\"images/downpic.png\"></a></div>#"');
}
echo $Status;

?>

und ein doittest.php

PHP:
<?php

    /*
        +---------------------------------------------------------------------+
        |                                                                                       |
        |   SensorAndSwitch Automation Pro                                    |
        |   PseudoGeräte-Script                                    RaspberryPI  |
        |   ====================================   |
        |   Datensicherung                                             sashelper   |
        |                                                                                       |
        +---------------------------------------------------------------------+
    */

    include_once __DIR__."/../include/psg.php";
    include_once __DIR__."/../".PIC."design.php";
    include_once __DIR__."/../".PIC.DESIGN."design.php";

    $befehl='sudo ./test.sh';
    $url=$helperurlpi."?befehl=".encodiere($befehl,33455);
    $Status=web($url,$post);
    header("Location: ".$Conf["EURL"].'?user='.$guiuser);

    exit;

?>

und eine test.sh die über die console funktioniert !!

Ich steig nicht dahinter warum die test.sh über sas nicht ausgeführt wird !!
Die psgHimbeere läuft korrekt, nur mein schalter nicht !!! hm...

@JL3 , stimmt der crontab eintrag so :

kopie der consolenausgabe crontab -e

datei /tmp/crontab.KbV77p/crontab
Code:
* * * * * /usr/local/bin/sas/sasstart
20 * * * * /usr/local/bin/sas/sassicherndb
@reboot { sleep 30 ; echo '  \\e[32m\\e[1mStart\\e[0m  '$( date +"\%H:\%M:\%S $* * * * * /usr/local/bin/sas/nettest

könnte es auch sein das ich mal wieder ein rechteproblem hab ???
 
Zuletzt bearbeitet:
Das mit dem User klappt übrigens erst mit der nächsten Alpha korrekt, aber die beiden psgs kannst du schon so abändern, dass es dann funktioniert.

Was ist mit dem Schalter?

OT: Ich bastle gerade an der function digits(), die man in psgs verwenden kann, um Zahlen in 7Digit-Form darzustellen, wie bei LCD-Displayanzeigen. Ist gerade bei Messwerten ein netter Effekt. ;)

- - - Aktualisiert - - -

Update Download: SAS V6.00.5533 alpha auf Post #1
u. a. Bugfix user
 
Zuletzt bearbeitet:
öhm, ich glaub du warst mitmantworten schneller als ich mit der frage !!!

edit:

ich hab immer noch den verdacht das mir auch noch irgendwas fehlt,
die psg's sind aus der sas4604575.zip

is die sas6alpha.zip vom 08.10.2016 vollständig oder fehlt da irgendwas aus ev. einer vorgängerversion ?
welche datei welche rechte?
fragen über fragen ....
 
Zuletzt bearbeitet:
Da sieht was etwas wirr aus. Die crontab stimmt nicht ganz, da sind zwei Zeilen durcheinander:
Code:
* * * * * /usr/local/bin/sas/sasstart
20 * * * * /usr/local/bin/sas/sassicherndb
* * * * * /usr/local/bin/sas/nettest
@reboot { sleep 30 ; echo '  \\e[32m\\e[1mStart\\e[0m  '$( date +"\%H:\%M:\%S \%a \%d.\%m.\%Y"; ) >> /usr/local/etc/sas/start ; } &

- - - Aktualisiert - - -

Die doit ist ok

Die psgTest.php ist so ein Problem und besser anders zu lösen.

- - - Aktualisiert - - -

Zunächst nicht shell-echo für psg-Infos verwenden. Das ist so ein Problem.

Was soll P#0*...# für ein Psg sein? Es gibt nur P#...irgendwas zum Darstellen...*HTML# oder S#0# bzw. S#1# für echte Schalter.

- - - Aktualisiert - - -

Etwa so (ohne Gewähr):

PHP:
<?php // Pingtest,Fotoabholung
    include __DIR__."/../include/psg.php";
error_reporting(0);
if ($_GET["info"]=="status") {
$Device='192.168.xxx.xxx';
$Status=shell_exec('ping -c 1 -W 1 '.$Device.' >/dev/null;[ $? -eq 1 ] && echo "P#
<div style=\"position:absolute;top:-18px;font-size:14px;width:324px;\"><img src=\"images/schalter0.png\"/></div>*HTML#" || echo "P#
<div style=\"position:absolute;top:-10px;font-size:14px;width:240px;\">
<a href="'.$Conf["PSG"].'doittest.php?user='.$guiuser.'"><img src=\"images/downpic.png\"></a></div>*HTML#"');
}
echo $Status;

?>
 
also in v3 hat das supi funktioniert, es wird meine ipcam angepingt mit dem psg

cam aus :
test aus.JPG

cam an:
test an.JPG

edit:

crontab is geändert
psgtest auch
die psgtest wird denk ich durch deine änderung korrekt angezeigt,
die test.sh wird allerdings nicht ausgeführt !!

edit2:

kommando zurück, psgtest wird doch nicht richtig angezeigt, das ding schaltet nicht zurück auf aus wenn ping
nicht zurück kommt !!
 
Zuletzt bearbeitet:
ich hab mal etwas mit deinen Scripts gespielt,

bei mir funktioniert das mit sas6, nur bei dem sh Aufruf,
den Pfad mit angeben und den Punkt weglassen.
das geht bei mir:
PHP:
$befehl='sudo /var/www/stop-nas-pi1.sh';

meine Ping Abfragen sehen allerdings etwas anders aus, irgendwo geklaut!
PHP:
<?php
            echo "FN#Fonepad#";
            /*
                +---------------------------------------------------------------------+
                |                                                                     |
                |   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";
            
            $gerarray=getGerInfo(substr(basename(__FILE__,".php"),3));
                        
            $geraet="192.168.178.35"; # ändern
             $befehl='sudo ping -w 2 '.$geraet;
            $url=$helperurlpi."?befehl=".encodiere($befehl,33455);
            $Status=web($url,$post);
            $on=substr($Status,strpos($Status,"transmitted,")+12)*1;
            if ($on!=0) {
                echo "P#".'FonePad ist an!'."*HTML#";
                echo "S#1#";
            }
            else {
                echo "P#".'FonePad ist aus!'."*HTML#";
                echo "S#0#";
            }

            exit;
            
        ?>
die Ausgabe müsstest du nur für dich anpassen.
 
psgtest.php
PHP:
<?php
    include_once __DIR__."/../include/psg.php";
    $ver="V#V 6.00#";
    $ip='192.168.xxx.xxx';
    $befehl='sudo ping -c 1 -W 1 '.$ip.' >/dev/null 2>/dev/null; if [ $? != 0 ]; then echo "0"; else echo "1"; fi';
    $url=$helperurlpi."?befehl=".encodiere($befehl,33455);
    $Status=trim(web($url,$post));
    $info="";
    if ($Status=="1") {
        $info.='P#<div style="position:absolute;top:-10px;font-size:14px;width:240px;"><a href="'.$Conf["PSG"].'doittest.php?user='.$guiuser.'"><img src="'.picdesign("downpic.png").'" border="0"></a></div>*HTML#';
    }
    else {
        $info.='P#<div style="position:absolute;top:-18px;font-size:14px;width:324px;"><img src="'.picdesign("schalter0.png").'" border="0"></div>*HTML#';
    }
    echo $info.$ver;
?>
 
Zuletzt bearbeitet:
ihr seid die besten, habt mir beide geholfen, zum einen gehts .sh mitm kompletten pfad jetzt
und die psgtest gefällt mir so besser und funktioniert !! jippi

Thanks euch beiden ;)
 
Schön, dass es funktioniert. :)
 
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.