SensorAndSwitch Haus-Automation auf Webserver-Basis

@JL3: Beides geht. Mit ctlmgr_ctl lesen/schreiben.
Oder SAS schreibt mit shell_exec und eventadd ins Fritz!Box Ereignisprotokoll.
 
@koyaanisqatsi: Hilf mir doch bitte nochmal auf die Sprünge: Wie lese ich mit cltmgr_ctl die Absenderdaten des Push Service denn aus? Da stehe ich etwas auf dem Schlauch.

Habe es gefunden, aber noch nicht alle Parameter beisammen...
 
Zuletzt bearbeitet:
@JL3:

Aus Neugierde hab ich mal Dein Rundum-Sorglos-Paket ausgepackt.
Könnte es sein, das der Port 8080 für den httpd etwas unglücklich gewählt ist. Der ist auf der 7490 schon belegt.

http://www.wehavemorefun.de/fritzbox/Port_8080
 
@JL3: Mehr als die die hier kenn ich auch nicht
Code:
QUERIES = {...
["emailnotify:settings/From"] = ""SERVERNAME" <[email protected]>",
["emailnotify:settings/SMTPServer"] = "mail.gmx.net:465",
["emailnotify:settings/accountname"] = "[email protected]",
["emailnotify:settings/passwd"] = "****",
["emailnotify:settings/starttls"] = "1",
...}
Mit ctlmgr_ctl die Werte auslesen...
Code:
ctlmgr_ctl r emailnotify settings/From
ctlmgr_ctl r emailnotify settings/SMTPServer
ctlmgr_ctl r emailnotify settings/accountname
ctlmgr_ctl r emailnotify settings/passwd
ctlmgr_ctl r emailnotify settings/starttls
 
Zuletzt bearbeitet:
die hier: /usr/bin/ctlmgr_ctl r emailnotify settings/passwd
bringt **** ----- also unnütz :(
 
Die Datei hat nichts mit cron zu tun.

Die Datei sensorandswitchmail.phpconf müsst ihr im Unterverzeichnis conf/ anlegen, da ich ja nicht eure Mailanmeldedaten kenne. Da sind Variablen drin, die dann von sensorandswitchmail.php included werden und diese mit den korrekten Daten versorgt.
Ihr müsst dann noch in den Einstellungen "Log-Datei / E-Mail-URL:" "Log-Datei mailen" auswählen und dahinter den Link http://[Servername und Port des Webservers auf der Fritzbox]/[Pad zu sas]/sensorandswitchmail.php

Beispiel zu sensorandswitchmail.phpconf:
Code:
<?php
$versender='SensorAndSwitch Automation Pro<[B][COLOR="#FF0000"][email protected][/COLOR][/B]>';
$empfaenger='[COLOR="#FF0000"][B][email protected][/B][/COLOR]';
$betreff='Schaltstatus vom '.$_GET["vom"];                      
$server='[COLOR="#FF0000"][B]smtp.server.com:587[/B][/COLOR]';                                  
$benutzer='[B][COLOR="#FF0000"][email protected][/COLOR][/B]';                              
$kennwort='[B][COLOR="#FF0000"]DeinMailKennwort[/COLOR][/B]';                                   
$TLSSSL="[COLOR="#FF0000"][B]ja[/B][/COLOR]";                                                   
$inhalt="sensorandswitchautopro.html"; 
?>

Alles was rot ist, muss mit euren Daten versorgt werden.

Die tägliche Versendung erfolgt um 23:59 nach Abarbeitung aller Schaltvorgänge und wird von sensorandswitchautopro.php übernommen, der ja vom crond minütlich gestartet wird.

Die Mail sieht dann so aus:
Anhang anzeigen 79117

Ich hoffe, ich habe es verständlich erklärt. Wenn nicht, bitte nachfragen. :)


Danke das hilft schon mal sehr weiter, jedoch würde ich gerne diese Info per
NMA geschickt bekommen: (http://www.ip-phone-forum.de/showthread.php?t=273150&p=2053023&viewfull=1#post2053023)
 
Und ich habe da noch ein Wunsch :p

Kann man nicht bei dann schalte von als Auswahl noch Benachrichtigungsoptionen einfügen?

Zum Beispiel:

  • Email
  • NMA
  • Growl
  • ggf. SMS
  • etc
 
Freie Portnummer:
Nein, Port 8089 gehört:TR-069
8088 wäre noch frei. ;)

Port 8181 und 8182 gehören der Kindersicherung.

Für den "anderen Weg"...
/cgi-bin/eventadd
Code:
#!/bin/sh
if [ ${QUERY_STRING} -nq "" ]
then
#local arg=$(echo ${QUERY_STRING} | base64)
local arg=${QUERY_STRING}
/sbin/eventadd 1 "$arg"
else
#local arg=$(echo ${@} | base64)
local arg=${@}
/sbin/eventadd 1 "$arg"
fi
#EOF

Der Aufruf, hier ein Webseitenbesucher...
/cgi-bin/index
Code:
#!/bin/sh
echo 'Content-Type: text/html; charset="utf-8"
'
cat hd_st
printf "<title>Home</title>"
#cat jscript
cat hd_en
#printf "<body onload=\"initClick( \047button\047 )\">"
cat logo_anim
#cat uhr_logo
cat bd_mn
#cat cycler
[B][COLOR=red]sh eventadd "${SERVER_SOFTWARE}: ${REMOTE_ADDR}" "${HTTP_USER_AGENT}"[/COLOR][/B]
cat phpqrcode
echo '</body>
</html>
'

Ereignislog...
Code:
28.11.14 19:54:38 busybox httpd/1.21.1: 192.168.178.1 Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0
:rolleyes:
Das kann dann auch die SAS Logmeldung sein und ganz normal mit der Pushmail Funktion der Fritzbox, die das Ereignisprotokoll enthält, veschickt werden.

Vielleicht als 3. Logmöglichkeit?
 
Zuletzt bearbeitet:
@dtrieb
demnach ein freier Aktor?
PseudoGerät Schalter mit Versendefunktion wäre das.
Ein Pseudo-Schalter-Script, das statt zu schalten, eine Versendetätigkeit ausführt. Nicht schlecht, aber es gehört nicht ins sasap sondern getrennt in ein PseudoGeräte-Script.
Grundstock wäre pseudoschalter.php umbenannt zu pseudomailauto.php, weil in der WebUI will man es ja nicht haben.
In den Rumpfcode von sas werde ich es nicht einbauen. Da gehört es nicht rein. Eine pseudomailauto.php dafür entwerfen wäre da eher das Ziel. Aber erstmal muss ich noch delay realisieren.

@koyaanisqatsi:
Für den 3. Weg bin ich am überlegen... :gruebel: Problem ist die starke Fritzboxbindung. Mal sehen, ist jetzt ohnehin keine Top-Priorität.
 
3. Art des Log
Eben deswegen zusätzlich.
Die Lokalität des Servers ist natürlich davon abhängig. ;)
Darauf zu prüfen ist bestimmt nicht schwer.
 
@koyaanisqatsi: Nein, einfach die Funktion aufrufen und wenn als Status nichts zurückkommt, ists keine Fritzbox. ;)
 
@fred_feuerstein: Nein, das ist schon klar. Trotzdem will man ja den Grund wissen, warum es nicht läuft. Das Script ist damit erstmal ausgeschlossen, jetzt gehts mit php.ini und der Serverkonfiguration weiter. Was könnte da unterschiedlich sein? Fehlt vielleicht curl als Modul? Hast du mal ins Error.log des Apache einen Blick geworfen, ob da was drinsteht?

So, ist eine Weile her ... aber es hat mir auf dem Raspi tatsächlich php5-curl gefehlt. Gerade nachinstalliert und prompt kann ich das neue sensorandswitchupdate.php ausführen und es wird alles installiert !!
Perfekt. Nun kann ich wieder weiter testen.
 
@fred_feuerstein: Das hört sich gut an. :)

@ koyaanisqatsi: Ich habe mir gerade mal den lua-Interpreter geschnappt. Mal sehen, ob man damit mehr anstellen kann. :)

Nachtrag: http://fritz.box/query.lua?sid=[sessionid]&mail=emailnotify:settings/From
Damit kann man viele Infos per url sich holen OHNE auf der Fritzbox seinen Webserver laufen zu haben. Die SessionID ist ja kein großes Problem.
Es geht zwar nur das Lesen von Infos, aber für nen Sensor prima:
http://fritz.box/query.lua?sid=[sid]&wlan=wlan:status/ap_enabled
 
Zuletzt bearbeitet:
LUA
Damit würdest du die Brücke zwischen Lokal/Nicht lokal schlagen.
Leider hab ich mit LUA noch nicht besonders viel gemacht.

Am Rande:
Da fällt mir ein, den AVM Webserver kann man einfach für seine
eigene Zwecke nutzen. Einfach einen von den drei /var/html[.nas,.myfritz] Links
auf ein eigens dafür angelegtes Verzeichnis inklusive cgi-bin zeigen lassen.
Das spart den busybox httpd für Shellskript-CGI und erweitert um: LUA (/cgi-bin/luacgi)
Auch temporär:
1. /var/html[.nas,.myfritz] löschen
2. Neuen Link erstellen (Eigenes Webverzeichnis inkl. cgi-bin)
3. Do what you wanna do...
4. /var/html[.nas,.myfritz] löschen
5. /var/html[.nas,.myfritz] wiederherstellen (AVM)

Je nach dem welchen Link du "verbiegtst" erreichst du dann den Server unter...
1. fritz.box fritz.fonwlan.box (/var/html)
2. fritz.nas fritz.box/nas (/var/html.nas)
3. myfritz.box fritz.box/myfritz (/var/html.myfritz)
Konfguration (Startdateien etc) einsehbar in: /var/flash/ar7.cfg (websrv{})

Beispielflipflopschalter (Shellskript) für /var/html.myfritz
rc.changemyfritz
Code:
#!/bin/sh
case $1 in
status) ls -la /var/html* ;;
*) if [ -x  /var/html/cgi-bin/my_own.cgi ]
then
rm /var/html.myfritz
ln -sf /usr/www.myfritz/avm /var/html.myfritz
echo 'AVM'
else
rm /var/html.myfritz
ln -sf /var/media/NEW_LINK /var/html.myfritz
echo 'USB'
fi
;;
esac
#EOF
Aufruf ohne Parameter testet auf: /var/html/cgi-bin/my_own.cgi
my_own.cgi befindet sich in: /var/media/NEW_LINK/cgi-bin/
Existiert my_own.cgi nicht, ist der AVM Webspace aktiv und
der Link wird auf USB Webspace gesetzt.
Existiert my_own.cgi wird der Link auf AVM Webspace zurückgesetzt.
 
Zuletzt bearbeitet:
Mal ein optisches Beispiel für den neuen Parameter P#xxx*HTML#

Einmal die Temp über URL traditionell mit T#nnn#
Einmal mit P#xxx*yyy#
Und dann der WLAN-Status (per URL) mit P#xxx*HTML# - wobei hier Text und Bild als HTML eingebunden wurden.
Das Ganze ist später im pseudobeispiele/-Verzeichnis mit dabei, sodass ihr sehen könnt, wie es geht.
wlanundmehr.png
 
@koyaanisqatsi:
Sorry wenn ich ein etwas älteres Thema nochmal ausgrabe, Aber hast Du eigentlich das Problem mit der "pseudogastwlan.php" aus #437 gelöst bekommen?
 
@koyaanisqatsi:
Sorry wenn ich ein etwas älteres Thema nochmal ausgrabe, Aber hast Du eigentlich das Problem mit der "pseudogastwlan.php" aus #437 gelöst bekommen?
Hier das Script:
Code:
<?php

        /*
                +---------------------------------------------------------------------+
                |                                                                     |
                |   SensorAndSwitch Automation Pro                                    |
                |   PseudoGeräte-Script                                               |
                |   ===============================================================   |
                |   -> GastWLAN                                                       |
                |                                                                     |
                +---------------------------------------------------------------------+
        */

        error_reporting(0);
		if ($_GET["info"]=="status") {
			$Status = shell_exec("/usr/bin/ctlmgr_ctl r wlan settings/guest_ap_enabled");
			if ($Status) {
				echo "S#".trim($Status)."#";
			}
			else {
				echo "S##E##";
			}
		}
		if ($_GET["schalter"]=="1") {
			$Status = shell_exec("/usr/bin/ctlmgr_ctl w wlan settings/guest_ap_enabled 1");
			if ($Status) {
				echo "S#1#";
			}
			else {
				echo "S##E##";
			}
		}
		if ($_GET["schalter"]=="0") {
			$Status = shell_exec("/usr/bin/ctlmgr_ctl w wlan settings/guest_ap_enabled 0");
			if ($Status) {
				echo "S#0#";
			}
			else {
				echo "S##E##";
			}
		}
        exit;
?>
Mit dem httpd als Webserver auf der Fritzbox funktioniert es damit. Status und Schalten geht einwandfrei.

Das Script wird im pseudobeispiele/-Verzeichnis bei der nächsten Labor dabei sein.
 
Zuletzt bearbeitet:
Super und jetzt ganz ohne cgi. Im ersten Moment hat es nicht funktioniert und das Script liefert auch kein Echo auf der Konsole.
Nachdem ich im Web-Interface der FB einmal das Gast-Wlan aktiviert hatte, erkannte das sas.php den aktuellen Status und das Schalten funktionierte.

Danke
 
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.