SensorAndSwitch Haus-Automation auf Webserver-Basis

Ja, normal.
Es ist eine CGI, das bedeutet: Für Webserver
Als Parameterliste wird nicht..
$@
...sondern...
$QUERY_STRING
..ausgewertet.

Nochmal...
Wenn dein Webserver auf...
http://fritz.box:81/
...läuft, dann...
http://fritz.box:81/cgi-bin/dialer.cgi?**1
...aufrufen.

In der Konsole: sh dialer.cgi
Code:
sh ../cgi-bin/dialer.cgi
Content-type: text/plain

dialer.cgi: Hangup!
In der Konsole gibt es aber keinen: $QUERY_STRING
Den bekommt er nur vom Webserver geliefert.
 
Zuletzt bearbeitet:
@koyaanisqatsi:

muß nochmal nachhaken, ich bekomme das einfach nicht zum laufen mit der "pseudocputemp.php".
Die Ausgaben auf der Konsole sind valide

55
T#55#

aber es wird einfach nichts angezeigt.
Befülle ich die Variable mit einem festen Wert:

statt
$Status = system("/usr/bin/ctlmgr_ctl r power status/act_temperature");

einfach
$Status = 99;

dann funktioniert es.

Habe auch schon
$Status = exec("/usr/bin/ctlmgr_ctl r power status/act_temperature");

ausprobiert, damit die erste Ausgabe unterdrückt wird, aber das klappt auch nicht.

Wo ist der Fehler?
 
sorry Anfäger!

bei Telnet kommt jetzt dialer-fehler.JPG

und im Browser
servererror1.JPG
 
@eDonkey: /usr/bin/ctlmgr_ctl wird im Webserver nicht ausgeführt. Keine Rechte. Hab das gleiche Problem.
 
:confused:
JL3 schrieb:
Was genau soll ich wieder einbauen?
@JL3: Ein Kettenstartglied welches eine URL als Schalter benutzt, die angegeben werden kann.
Ich meine, am Anfang war mal so etwas mit dabei, jetzt nicht mehr.

@Alle: Wenn ihr Shellskript CGIs nicht ausführen könnt, wird es so sein,
dass ihr euren Webserver mit einem unprivilegierten Usernamen laufen lasst.

Es gibt andere Wege den Server vor Unbefugten zu schützen.
Zum Beispiel auf localhost laufen lassen, oder nur bestimmten Servern (IPs)
die Berechtigung des Zugriffs erteilen.

Beim busybox httpd mach ich das über Allow und Deny Statements...
httpd.conf
Code:
# allow/deny order
A:127.0.0.1     # allow local loopback connections
A:192.168.178.  # allow from local network
A:10.10.10.     # allow up/down Proxies
A:85.183.               # allow from workingplace
D:*                     # deny from other ip connections
Selbst wenn ihr meine DynDNS-Adresse kennen würdet, kämmt ihr deswegen nicht auf ihn drauf.

Und für Leute die dann trotzdem gerne ein User/Passwort eingeben möchten...
httpd.conf
Code:
# securing the server with name and password (use "httpd -m PASSWORD" fo encryption)
/sensorandswitch:poweruser:$1$CFRj4/UM$Ypa2gY.UE8cKELkv7UpW90
...dann läuft auch ohne Login rein gar nichts mehr.
 
Zuletzt bearbeitet:
@koyaanisqatsi: Ach das, das wurde überflüssig.

eine pseudowebauto.php mit
Code:
<?php
	$url="http://...";
	$ch = curl_init();
	$timeout = 5;
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
	curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
	$Status = curl_exec($ch);
	curl_close($ch);
[COLOR="#FF0000"]	echo "S##";[/COLOR]
?>
tuts auch.


Nachtrag: der echo ist wichtig, dass man mit dem Script "schalten" kann und es unter den Schaltern aufgeführt wird (in der sasapui.php) ...
 
Zuletzt bearbeitet:
Ok, ich werds mir schon ausknobeln. ;)

@Alle: Lasst doch mal euren Webserver zu Testzwecken als User/Gruppe root laufen.
Das tut auch ganz bestimmt nicht weh. :mrgreen:

Als Ansporn: new_mediaserver_01.jpg(Echt kalt draussen)

@JL3: Das mit dem "auto" im Pseudogerätenamen find ich richtig: :cool:
 
Zuletzt bearbeitet:
@koyaanisqatsi:

der Apache startet leider nicht als "root".
 
Richtig, er meldet, dass er dafür neu kompiliert werden müsse. Im Übertragenen Sinne mit dem Schalter "unsicher/Sicherheitsrisiko". Das hatte ich auch schon mit root probiert.

Im Script oben fehlte übrigens noch der echo, dass das Script als schaltfähig erkannt wird.
Nachtrag2: echo "S##";
 
Zuletzt bearbeitet:
Schade.
Warum lass ich meinen als root laufen?
Ganz einfach: Nur so kann ich z.B. einen Rechner über CGI mit ether-wake aufwecken.
Der root bekommt auch diese Suchpfade: /bin:/usr/bin:/sbin:/usr/sbin

:doktor:
Im Script oben fehlte übrigens noch der echo, dass das Script als schaltfähig erkannt wird.
Zum Glück, als ich es als PHP für dialer.cgi in /sensorandswitch angelegt habe,
wären sonst bei mir Zuhause sämtliche Telefone angesprungen.
(Madame wäre da noch am schafen gewesen)
Gerade noch mal gutgegangen. :mrgreen:
 
Zuletzt bearbeitet:
Wäre schön, wenn es ginge. Klar dürfte dann der Webserver sehr viel mehr, nur wie bekommt man das hin, ohne große Eingriffe in die FW der Fritzbox? Soll ja schließlich auf einer ungeFREETZten Fritzbox laufen.
 
JL3, rate mal welcher Server auf der Box noch mit root Rechten läuft.
Richtig, der AVM-Webserver.
Wer den übernimmt, hat die Box übernommen. ;)


/cgi-bin/dialer.cgi
Code:
#!/bin/sh
echo 'Content-type: text/plain
'
if [ ${QUERY_STRING} == "**1" ] ; then
/usr/bin/ctlmgr_ctl w telcfg command/Dial ${QUERY_STRING}
echo -ne "1"
elif [ ${QUERY_STRING} == "" ] ; then
/usr/bin/ctlmgr_ctl w telcfg command/Hangup 1
echo -ne "0"
fi
if [ ${QUERY_STRING} == "info=status" ] ; then
echo -ne "0"
else
echo -ne "0"
fi
#EOF
Wurde "entschärft". Die dialer.cgi kann jetzt nur noch Fon1 anwählen.

pseudofon1.php
PHP:
<?php
$Status="";
$query="";
error_reporting(1);
if ($_GET["info"]=="status") {
$query="info=status";
}
if ($_GET["schalter"]=="1") {
$query="**1";
}
if ($_GET["schalter"]=="0") {
$query="";
}
$url="http://fritz.box:81/cgi-bin/dialer.cgi?".$query;
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0)");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$Status = curl_exec($ch);
curl_close($ch);
echo "S#".$Status."#";
?>
Klingelt bei Aktivierung bis zum nächsten...
info=status (cron, sensorandswitchautopro.php, Refreshzeit, höchstens also 1 Minute)
...und bleibt eigentlich immer "Rot" (nicht eingeschaltet).
pseudofon1_01.jpg
...klingelingeling. ;)
In den Einstellungen von SAS also mindestens mal 15 Sekunden eintragen.
 
Zuletzt bearbeitet:
Klar, sonst könnte er nicht schalten und walten. Bringt uns aber im Endeffekt nicht mit dem Problem weiter. :gruebel:

Zur pseudofon1.php: Klingt gut. :)
 
Zuletzt bearbeitet:
ich geb´s auf,

in der sensorandswitch wird das Symbol noch nicht mal rot,
und wenn ich pseudofon1.php?schalter=1 eingebe kommt "500 Internal Server Error"

es soll halt nicht sein!
 
Echt schade.
Denn wenn mal die Laufzeit verglichen wird...
(Shellskript) CGI vs PHP
...kann es eigentlich nur "Einen geben".

Ich werd mich, trotz hammermässigen Erfolgserlebnissen mit den CGIs,
und den Pseudogeräten, damit mal zurückhalten.
(Und still und heimlich eine pseudo/CGI Sammlung aufmachen)
Auf Anfragen werd ich natürlich sofort reagieren. ;)
...oder ihr stellt alle auf den busybox httpd um. :silly:
 
nach Busybox hab ich auch schon geliebäugelt, wenn ich das richtig sehe geht das aber nur mit Freetz?

und das krieg ich doch erst recht nicht zum laufen! oder gibt´s was fertiges für Fb 7170 oder 7270?

Hätte da noch eine andere Idee, hab doch 2 Ip-Telefone, kann ich die nicht von außen ansteuern, das sie eine Nummer wählen?
mit XML oder was auch immer.
 
Nein.

Ich hab alles auf einer ungemoddeten 7360SL.
Das freetz brauchte ich nur mal wegen anderer Sachen.

Meine busybox 1.21 MIPS hab ich von hier: busybox.net
Das passende php-cgi von hier: fritzmod.net
Und was darf alles in die httpd.conf? wiki.openwrt.org

Mittlerweile kenn ich mich ganz gut damit aus.
Also ruhig fragen. ;)
 
Zuletzt bearbeitet:
@koyaanisqatsi

Nein.

Das passende php-cgi von hier: fritzmod.net

Welche Version hast du? Läuft da auch cURL bei dir drauf? Danke

EDIT @koyaanisqatsi Danke für den Link, habe da ne neue PHP Version für meine Box gesaugt und nun habe ich es auf dem Apache der Freetz TBFlex 3.1 Version am laufen.
 
Zuletzt bearbeitet:
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.