SensorAndSwitch Haus-Automation auf Webserver-Basis

Code:
<?php 
 
/* Edi.php */
 
$user="admin";
$password="1234";
$ip="192.168.178.27:10000";
$Pfad="/var/media/ftp/Generic-Flash-Disk-01/apache-1341/htdocs";

$an=$Pfad.'/curl -d @'.$Pfad.'/on.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi';
$aus=$Pfad.'/curl -d @'.$Pfad.'/off.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi';
$state=$Pfad.'/curl -d @'.$Pfad.'/powerstate.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi';

$edipowerstate="F";
$xml=shell_exec($state);
if (strpos($xml,">ON<") {
	$edipowerstate="1";
}
if (strpos($xml,">OFF<") {
	$edipowerstate="0";
}

$Status="E";

if ($edipowerstate==$Status) {
	$Status="N";
}

if ($_GET["schalter"]=="1" and $edipowerstate=="0") {
	$output=shell_exec($an);
	$Status="1";
}

if ($_GET["schalter"]=="0" and $edipowerstate=="1") {
	$output=shell_exec($aus);
	$Status="0";
}

$edipowerstate="F";
$xml=shell_exec($state);
if (strpos($xml,">ON<") {
	$edipowerstate="1";
}
if (strpos($xml,">OFF<") {
	$edipowerstate="0";
}

if ($edipowerstate!=$Status) {
	$Status="E";
}

?>
Die Aufrufe liefern ein xml. Probiers mal mit dem Script hier aus.
 
das klapt nicht,
schaltet nicht und liefert auch kein Status zurück

auch wenn ich nur im Browser mit Parameter aufrufe, nur eine weise Seite und kein schalten.
 
Code:
<?php 
 
$user="admin";
$password="1234";
$ip="192.168.178.27:10000";
$Pfad="/var/media/ftp/Generic-Flash-Disk-01/apache-1341/htdocs";

$an=$Pfad.'/curl -d @'.$Pfad.'/on.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi';
$aus=$Pfad.'/curl -d @'.$Pfad.'/off.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi';
$state=$Pfad.'/curl -d @'.$Pfad.'/powerstate.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi -o '.$Pfad.'/output.txt';

$edipowerstate="F";
$output=shell_exec($state);
$xml=file_get_contents($Pfad.'/output.txt');
if (strpos($xml,">ON<")) {
	$edipowerstate="1";
}
if (strpos($xml,">OFF<")) {
	$edipowerstate="0";
}

$Status="E";

if ($edipowerstate==$Status) {
	$Status="N";
}

if ($_GET["schalter"]=="1" and $edipowerstate=="0") {
	$output=shell_exec($an);
	$Status="1";
}

if ($_GET["schalter"]=="0" and $edipowerstate=="1") {
	$output=shell_exec($aus);
	$Status="0";
}

$edipowerstate="F";
$output=shell_exec($state);
$xml=file_get_contents($Pfad.'/output.txt');
if (strpos($xml,">ON<")) {
	$edipowerstate="1";
}
if (strpos($xml,">OFF<")) {
	$edipowerstate="0";
}

if ($edipowerstate!=$Status) {
	$Status="E";
}

echo $Status;

?>
Da war ein PHP-Klammerproblem und hab die Ausgabe von $Status vergessen ;)
 
ich weis zwar nicht so richtig was ich tue,

aber ich hab mir mal zur Hilfe ein echo $xml; bei Zeile 16 eingefügt und den Rest als Kommentar ausgeklammert!

Ergebnis war dann "OFF" oder "ON"

dann hab ich dieses "(strpos($xml,">ON<")" abgeändert in "($xml=="ON")" bzw OFF .

damit läuft das Script wieder durch, schaltet aber noch nicht.

werde jetzt aber mal das nächste versuchen!
 
Da ist noch ein Fehler ...... Sekunde..... doch hier:

if ($edipowerstate==$_GET["schalter"]) {
$Status="N";
}
 
Zuletzt bearbeitet:
auch das 2. läuft nicht durch,

wieder bei dem Teil (strpos($xml,">ON<")

wenn ich das ändere ausklammere dann geht es zumindest durch!
 
in $xml steht also "ON" oder "OFF" drin?

häng doich mal bitte die erzeugte output.txt hier als Anhang rein.

Bei strpos fehlt ne Klammer zu? Schon gemerkt?
 
Zuletzt bearbeitet:
ja, nur OFF oder ON

bei beiden Versionen
 
Code:
<?php 
 
$user="admin";
$password="1234";
$ip="192.168.178.27:10000";
$Pfad="/var/media/ftp/Generic-Flash-Disk-01/apache-1341/htdocs";

$an=$Pfad.'/curl -d @'.$Pfad.'/on.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi';
$aus=$Pfad.'/curl -d @'.$Pfad.'/off.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi';
$state=$Pfad.'/curl -d @'.$Pfad.'/powerstate.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi -o '.$Pfad.'/output.txt';

$edipowerstate="F";
$output=shell_exec($state);
$xml=file_get_contents($Pfad.'/output.txt');
if (strpos($xml,"ON")) {
	$edipowerstate="1";
}
if (strpos($xml,"OFF")) {
	$edipowerstate="0";
}

$Status="E";

if ($edipowerstate==$_GET["schalter"]) {
	$Status="N";
}

if ($_GET["schalter"]=="1" and $edipowerstate=="0") {
	$output=shell_exec($an);
	$Status="1";
}

if ($_GET["schalter"]=="0" and $edipowerstate=="1") {
	$output=shell_exec($aus);
	$Status="0";
}

$edipowerstate="F";
$output=shell_exec($state);
$xml=file_get_contents($Pfad.'/output.txt');
if (strpos($xml,"ON")) {
	$edipowerstate="1";
}
if (strpos($xml,"OFF")) {
	$edipowerstate="0";
}

if ($edipowerstate!=$Status) {
	$Status="E";
}

echo $Status;

?>
 
Super,
jetzt läuft es.

eine Kleinikkeit noch, hab es im Moment ja im Browser laufen.
Beim einschalten änder sich der Status auf 1, ist ja ok.
beim ausschalten geht der auf 0, nach gefühlt 30 Sekunden aber auf E !
 
Schau ich mir schnell an.
 
Code:
<?php 
 
$user="admin";
$password="1234";
$ip="192.168.178.27:10000";
$Pfad="/var/media/ftp/Generic-Flash-Disk-01/apache-1341/htdocs";

$an=$Pfad.'/curl -d @'.$Pfad.'/on.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi';
$aus=$Pfad.'/curl -d @'.$Pfad.'/off.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi';
$state=$Pfad.'/curl -d @'.$Pfad.'/powerstate.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi -o '.$Pfad.'/output.txt';

$edipowerstate="F";
$output=shell_exec($state);
$xml=file_get_contents($Pfad.'/output.txt');

if (strpos($xml,"ON")) {
	$edipowerstate="1";
}

if (strpos($xml,"OFF")) {
	$edipowerstate="0";
}

$Status="E";

if ($edipowerstate==$_GET["schalter"]) {
	$Status="N";
}

if ($_GET["schalter"]=="1" and $edipowerstate=="0") {
	$output=shell_exec($an);
	$Status="1";
}

if ($_GET["schalter"]=="0" and $edipowerstate=="1") {
	$output=shell_exec($aus);
	$Status="0";
}

$edipowerstate="F";
$output=shell_exec($state);
$xml=file_get_contents($Pfad.'/output.txt');

if (strpos($xml,"ON")) {
	$edipowerstate="1";
}

if (strpos($xml,"OFF")) {
	$edipowerstate="0";
}

if ($edipowerstate!=$Status and $Status!="N") {
	$Status="E";
}

echo $Status;

?>

Das passierte, wenn der Schaltvorgang schon so war, wie er sein sollte. Hätte "N" anzeigen sollen. :)

Das versteht dann smarthomeautopro.php als gewünschter Schaltzustand bereits erreicht.
 
Zuletzt bearbeitet:
genau, jetzt spring er auf N

Danke!
 
Keine Ursache, Hauptsache jetzt klappts :)
 
Neue Labor 5211
mit Pseudo-Sensor- und Pseudo-Schalter-Script-Beispielen und kleineren Korrekturen beim alternativen Fritzbox-Geräteeinlesen bei FW <6.10.
 
Hallo,
Leider funktioniert bei mir Dein Tool nur bis Version 3.9xxx, danach nur noch ein weißer Bildschirm. Die von mir vorher beschriebene Fehlermeldung bleibt.
Da nicht benötigt, steige ich aus. Sorry.

Frank
 
@SF1975: Es ist bei dir mit großer Wahrscheinlichkeit eine Einstellung der Serverkonfiguration oder der php.ini. Funktionierte denn Server2go vom SmartHome Web? Diese Version ist so konfiguriert, dass es damit keine Probleme gibt. Die Serverkonfiguration ist nunmal bei jedem anders. Aber wenn du ohnehin keinen weiteren Bedarf hast, musst du dir die Suche nach dem Grund, warum es nicht läuft (vermutlich curl-Paket nicht implementiert), nicht antun. Die Version 3.9x läuft ja bei dir.

Wenn du irgendwann dennoch wieder Bedarf haben solltest, kannst du jederzeit gerne wieder vorbei schaun. :)
 
Damit könnte man sich sogar etwas ansagen lassen:

Code:
<button onclick="onSpeechClick()">Buttonbeschriftung</button>
<script>
function onSpeechClick(){
var msg=new SpeechSynthesisUtterance('Hier kommt der Text hin!');
msg.lang = 'de-DE';
msg.volume = 1; // 0 to 1
msg.rate = 0.5; // 0.1 to 10
msg.pitch = 1; //0 to 2
window.speechSynthesis.speak(msg);}
</script>
 
Achja und wenn ich schon dabei bin ...

Für die Labor-Version
Wie damals (für conf), wäre es schön wenn wir einfach ein Verzeichnis "Scripts" für die UserScripts hätten ...
 
@dtrieb: Sorry, das mit dem Unterverzeichnis macht aus mehreren Gründen Probleme, aber bei mir fangen alle Zusatzscripte mit pseudo... an. Vielleicht bastel ich das noch, aber im Moment sehe ich das als Zweitrangig, bevor nicht das Hauptsript fertig ist.

Aber ich habe die Fritzbox dazu überreden können, Statusmails mit den Schaltvorgängen täglich als HTML-E-Mail zu versenden (über mailer: $Status=shell_exec("/sbin/mailer send -f \"$versender\" -t \"$empfaenger\" -s \"$betreff\" -i \"$inhalt\" -m \"$server\" -a \"$benutzer\" -w \"$kennwort\"$l");). Das Script ist separat ausgelagert, weil nicht jeder die Scripte auf einer Fritzbox am Laufen hat. Aber ich lege ein Muster bei. Auch das "normale" Log ist nun eine HTML-Datei. Das Ganze teste ich gerade bei mir. :)
 

Statistik des Forums

Themen
246,162
Beiträge
2,247,157
Mitglieder
373,688
Neuestes Mitglied
Alf777
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.