SensorAndSwitch Haus-Automation auf Webserver-Basis

...nope, wird nicht verschoben...

Wird bei mir auch nicht verschoben!
Läuft bei euch definitv die Version 4.01.4753? Bei mir kann ich die conf-Dateien sogar händisch auf dem Server verschieben und das Script schiebt sie im Laufbetrieb wieder zurück.
Außerdem wird der Wochentag hier nicht übernommen:

Anhang anzeigen 78756
Mein Fehler. Habe versehentlich ein Anzeige-Array gelöscht. Es betrifft allerdings nur die Anzeige. Gespeichert wird es richtig. Ist in der nächsten Version korrigiert.
Außerdem schaltet mein DECT nur wenn ich die Seite (smarthomeauto.php) im Browser offen habe.
Läuft das Script nicht als busybox cron? Ansonsten ist das klar. Nur wenn das Script läuft, kann es was tun.
Und ist das gewollt, das man die smarthomeauto.php nicht per klick aufrufen kann?
Definitiv: JA. Die smarthomeauto.php soll ja als cron minütlich auf dem Server ausgeführt werden. Dies geschieht im Hintergrund. Der Aufruf per Browser dient evtl. Kontrollzwecken, falls mal etwas absolut nicht schaltet, wie es soll, um das Schaltverhalten beobachten zu können. Das Anlegen der Schaltvorgänge obliegt der smarthomeautoui.php.
 
Läuft bei euch definitv die Version 4.01.4753? Bei mir kann ich die conf-Dateien sogar händisch auf dem Server verschieben und das Script schiebt sie im Laufbetrieb wieder zurück.

Mein Fehler. Habe versehentlich ein Anzeige-Array gelöscht. Es betrifft allerdings nur die Anzeige. Gespeichert wird es richtig. Ist in der nächsten Version korrigiert.

Läuft das Script nicht als busybox cron? Ansonsten ist das klar. Nur wenn das Script läuft, kann es was tun.

Definitiv: JA. Die smarthomeauto.php soll ja als cron minütlich auf dem Server ausgeführt werden. Dies geschieht im Hintergrund. Der Aufruf per Browser dient evtl. Kontrollzwecken, falls mal etwas absolut nicht schaltet, wie es soll, um das Schaltverhalten beobachten zu können. Das Anlegen der Schaltvorgänge obliegt der smarthomeautoui.php.
Also beim mir läuft definitiv 4.01.4753 ...

Achja
Eine Möglichkeit die smarthomeautoui.php per Oberfläche aufzurufen kommt noch?
 
Läuft bei euch definitv die Version 4.01.4753?

Ja, definitiv, hab aber den Fehler gefunden: ich hatte den Smarthome-Unterordner des Webservers als root angelegt, dein Script läuft aber latürnich im Apache-Kontext als www-data und konnte zwar den Ordner anlegen, aber nur mit den lustigen Rechten 1411 (statt wie von dir vorgegeben 0777) versehen; alle Operationen danach scheiterten.

Hab den Order neu angelegt und Apache bzw. www-data via
Code:
[COLOR=#000000][FONT=Consolas]chown -R www-data:www-data /var/www/smarthome[/FONT][/COLOR]
die notwendigen Rechte gegeben.

Jetzt läuft's wie vom Hersteller (also dir) gewünscht :saufen2:


P.S.: So reicht übrigens auch 0644 für die smarthomeupdate.php, 0666 braucht's nimmer.
 
Zuletzt bearbeitet:
Also beim mir läuft definitiv 4.01.4753 ...
Schau dir bitte mal die Lösung von PCMor im Post #183 an, vermutlich auch ein Rechteproblem vom Server.
Achja
Eine Möglichkeit die smarthomeautoui.php per Oberfläche aufzurufen kommt noch?
Ähhhhhmmm, ja. Etwas ungern, weil man da schnell seine Automation beschädigen kann. smarthome.php nutzt man gern am Tablet usw., smarthomeautoui.php besser am PC, weil man hier nicht nur schnell was ein- und ausschaltet, sondern Schaltvorgänge plant und hinterlegt.


@PCMor: Wunderbar. Es ist echt ein Problem, dass es so viele Servereinstellungen gibt und diese eben jeder anders einstehen hat. Aber deine Lösung hilft jetzt sicher anderen, die das gleiche Problem haben.


@alle: Bin leider nicht wirklich weitergekommen mit dem Script, da der Webspace, wo ich ihn hochgeladen hatte, seinen Downloadbereich dicht macht und ich heute Nachmittag einen neuen Platz suchen musste und einrichten und alles erstmal doppelt pflegen und so weiter und so fort... :)
 
Zuletzt bearbeitet:
SmartHome Update auf Version 4.02.4755

Neue Funktionen:
  • Fehlerkorrektur: Anzeige Wochentag in smarthomeautoui.php
  • Umzug auf neuen Web- und Downloadbereich.

Update mit grünem Update-Button im WebGUI starten
 
Super Sache das, genau danach hab ich gesucht. Vielen Dank.
Was mir auffiel: in der "smarthomeautoui.php" werden Termine nicht überprüft,
smarthomeautoui.jpg

müßte doch per PHP möglich sein, den Wochentag automatisch zu ermitteln und einzutragen.
 
Was mir auffiel: in der "smarthomeautoui.php" werden Termine nicht überprüft,
Anhang anzeigen 78761
müßte doch per PHP möglich sein, den Wochentag automatisch zu ermitteln und einzutragen.
Wenn ein komplettes Datum angegeben ist, dann sollte der Wochentag auf "jeden" gestellt werden. Das Schaltscript später ersetzt dann den * durch den aktuellen Wochentag und wenn das Datum erreicht ist, wird korrekt geschaltet. Dass ich nicht prüfe hat den Grund, um die Schaltvorgänge flexibel zu halten. Für jede Ziffer kann ein * als Platzhalter stehen und wie will man dann einen Tag ermitteln?

Kurz zum Konzept: Bei einem Schaltzeitpunkt wird die Eingabe **.**.**** mit dem jeweilgen aktuellen Datum maskiert. Daraus würde heute z. B. der 08.11.2014 werden. Es würde geschaltet werden. Hier könnte man auch einen Wochentag dazu ermitteln, doch wozu? Es wäre unnötig.
Bei 01.**.**** heute der 01.11.2014 und damit nicht für heute zum Schalten. Dafür aber an jedem kommenden 1. eines Monats.
Bei *5.**.2014 würde für heute der 05.11.2014 rauskommen. Auch ohne heute zu Schalten. Dafür aber am 15.11.2014, 25.11.2014, 05.12.2014, 15.12.2014 und 25.12.2014.
Die Wochentagswahl bietet damit die Möglichkeit mit Datumsangabe **.12.**** und Wochentagswahl "Sonntag" jeden Sonntag im Dezember zu schalten.

Daher bei einem festen Datum den Wochentag nachträglich ermitteln und Fallprüfungen einzubauen, die die Möglichkeiten einschränken, ist im Prinzip unnötig. Da möchte ich es lieber flexibel und mit Eigenverantwortung für korrekte Schaltzeitpunkte. Mit dieser "Überprüferei" entmündigt die Fritzbox-FW ohnehin die Benutzer genug. Da bin ich kein Freund davon, alles dem Benutzer vorschreiben zu wollen.

Außerdem bastle ich zur Zeit an Logikverknüpfungen von Schaltereignissen... mal sehen, was da noch bei herauskommt. :)


Nachtrag: Nur nochmal zur Erklärung mit PHP und HTML-Formularen: PHP ist serverbasiert. Es bekommt die Benutzereingaben bei Selbstaufruf nur über das $_POST Array zurückgeliefert und kann keine Änderungen während des Ausfüllens des Formulars - wie etwa JavaScript - vornehmen, welches browserseitig arbeitet. Es ist ein gehöriger Aufwand nötig, durch Selbstaufruf des Scripts und Auswertung des $_POST Arrays hier Prüfroutinen einzubauen.
 
Zuletzt bearbeitet:
@alle:

Sorry für die Unannehmlichkeiten mit dem Webspaceumzug und der dadurch so kurzfristig resultierenden neuen Version (Schon wieder ein Update). Es ist leider schwer, kostenlosen und werbefreien Platz selbst für so kleine Dateigrößen zu bekommen, wie es die SmartHome-Scripte darstellen und der außerdem Zip-Dateien im Webspace erlaubt. Ich hoffe, dieser wird "uns" eine Weile erhalten bleiben.

Der vorherige Webspace wird von mir in einigen Tagen als Download- und Verlinkmöglichkeit im Post #1 entfernt. Wer danach mit seinem Script mit dem Web- oder Update-Button im Nirvana landet, der kann sich das Updatescript von der neuen Homepage (im Post #1 aufgeführt) herunterladen und in das Verzeichnis seines Servers schieben und damit das dortige smarthomeupdate.php überschreiben.

Danach muss dieses im Browser wie folgt aufgerufen werden: smarthomeupdate?update=erzwingen

Dadurch werden nach dem Update die neuen Linkverbindungen in die smarthome.conf geschrieben und Web- bzw. Updatebutton funktionieren wieder wie gewohnt. Wer bereits die Version 4.02.4755 installiert hat, hat bereits die neuen Links in der smarthome.conf.

Leider bin ich mit der Weiterentwicklung nicht wirklich weiter gekommen, da ich mich erstmal darum kümmern musste, dass es weiterhin einen Ein-Klick-Button-Update geben wird. Außerdem wollte ich mich nicht ununterbrochen mit SmartHome beschäftigen, sonst träume ich nur noch von Schaltsteckdosen. :mad:

Zumindest habe ich für die Version 5.00 schon einige Ideen der Umsetzung von logikverknüpften Schaltvorgängen, aber dafür muss ich zunächst die beiden smarthomeauto-Scripte fit machen und ein wenig umschreiben. Das wird allerdings nicht von heute auf morgen sein (eher Richtung übermorgen ;) )

Mal eine Aufstellung:

Zu verknüpfen gilt es (die Schaltvorgänge existieren ja bereits):
  • wenn Zeitpunkt (auch astronomischer Zeitpunkt) eintritt, dann schalte
  • wenn Schaltzustand eintritt, dann schalte
  • wenn Temperatur eintritt, dann schalte
  • wenn Verbrauch eintritt, dann schalte

dazu käme
  1. wenn nichts passiert, dann schalte (eine Art Verknüpfungsdummy)
  2. wenn nach x Minuten (Pause) Zustand erreicht, dann schalte
  3. wenn ... was fehlt noch? Was wäre denkbar?

Bitte posten, wenn euch was einfällt. Ich versuche dann mögliche Szenarien mit diese Bausteinen nachzubauen und kann dann feststellen, ob noch Bausteine fehlen.
 
Zuletzt bearbeitet:
Danke für die umfangreiche Erklärung, das mit der umfangreichen Maskierungs-Möglichkeiten, war mir so nicht in den Sinn gekommen.
Oder hattest Du das vorher schon irgendwo dokumentiert und ich hab es überlesen?
Und nochmals besten Dank für die Mühe.
 
@eDonkey: Keine Ursache. Irgendwo in den "tausenden" von Posts steht was darüber (Post #9, Post #20 und jetzt auch Post #187), aber ist leicht zu überlesen. Wenn ich irgendwie dazu komme, bastle ich noch eine Bedienungsanleitung auf den Download-Webspace, wo man so etwas leichter finden und nachschlagen kann. Da ich die beiden Automations-Scripte ja jetzt noch umbauen werde, verschiebe ich die Bedienungsanleitung auch auf die Version 5.00, wenn feststeht, was die Scripte letztendlich können werden. ;)
 
Eine Möglichkeit die smarthomeautoui.php per Oberfläche aufzurufen kommt noch?
Ich - ähem - hab den Linkbutton zum AutomationsUI in der Einstellungenseite für die nächste Version 4.03 eingebaut, denn es sind ja auch Einstellungen. Dann klickt auch keiner versehentlich drauf. :)
 
Nochmal vielen Dank an @JL3

funktioniert alles bestens.
muss jetzt noch Steckdosen kaufen gehen.
AVM müßte dir doch für jede verkaufte Steckdose Provision zahlen:gruebel:

Hab jetzt aber noch eine andere Idee, Frage!
Da ich bei meiner Hausautomation von Anfang andere Sachen zum schalten versucht habe,
ist unter anderem noch eine Edimax SP-1101 Schaltsteckdose, welche per W-Lan schaltet, vorhanden.

Diese kann ich entweder von Windows CMD mit:

curl -d @off.xml http://admin:[email protected]:10000/smartplug.cgi -o "output.txt"

curl -d @on.xml http://admin:[email protected]:10000/smartplug.cgi

curl -d @status_powerstate.xml http://admin:[email protected]:10000/smartplug.cgi -o "ps.txt"

oder mit FritzBox Telnet mit:

/var/media/ftp/Generic-Flash-Disk-01/apache-1341/htdocs/curl -d @off.xml http://admin:[email protected]:10000/smartplug.cgi -o "output.txt"


Frage:
könnte ich diese Schaltbefehle in eine HTML-Seite oder PHP-Script einbauen.
Meine Idee, wenn sowas ginge eine extra PHP-Seite für Edimax.
Will dich aber nicht zuviel von Deinem Smarthome Projekt ablenken.
 
Nochmal vielen Dank an @JL3
Keine Ursache. :)
funktioniert alles bestens.
muss jetzt noch Steckdosen kaufen gehen.
AVM müßte dir doch für jede verkaufte Steckdose Provision zahlen:gruebel:
Wäre schön, aber mir würde es schon reichen, wenn ich von der AVM-Support-Crew wenigstens mal ernst genommen werden würde, wenn ich Fehler in deren LUA-Scripten melde. Ich korrigiere es dann zwar bei meiner Fritzbox, muss es aber nach jedem Update der Firmware wieder machen. Habe denen die reparierten Dateien sogar schon hin gemailt, aber das interessiert da keinen. Naja, das ist ein anderes Thema. ;)
Hab jetzt aber noch eine andere Idee, Frage!
Da ich bei meiner Hausautomation von Anfang andere Sachen zum schalten versucht habe,
ist unter anderem noch eine Edimax SP-1101 Schaltsteckdose, welche per W-Lan schaltet, vorhanden.

Diese kann ich entweder von Windows CMD mit:

curl -d @off.xml http://admin:[email protected]:10000/smartplug.cgi -o "output.txt"

curl -d @on.xml http://admin:[email protected]:10000/smartplug.cgi

curl -d @status_powerstate.xml http://admin:[email protected]:10000/smartplug.cgi -o "ps.txt"

oder mit FritzBox Telnet mit:

/var/media/ftp/Generic-Flash-Disk-01/apache-1341/htdocs/curl -d @off.xml http://admin:[email protected]:10000/smartplug.cgi -o "output.txt"


Frage:
könnte ich diese Schaltbefehle in eine HTML-Seite oder PHP-Script einbauen.
Meine Idee, wenn sowas ginge eine extra PHP-Seite für Edimax.
Will dich aber nicht zuviel von Deinem Smarthome Projekt ablenken.
So etwas wäre im Prinzip kein Problem. Meldet der curl über die -o angegebene Datei dann seinen Status zurück? Der Inhalt und dessen Aufbau wäre interessant. Dann könnte man den per PHP-Script direkt auswerten. Ich überlege gerade, ob ich in Zukunft solche "Fremdschaltobjekte" nicht auch in die smarthome.php mit integrieren könnte. Gibt es per curl auch eine Abfragemöglichkeit aller Geräte? Der Inhalt von on.xml, off.xml und status_powerstate.xml wäre auch interessant. Was muss darin übergeben werden? Die Anmeldung ist wohl eine mitgeschickte Anmeldung und könnte man per PHP-Script aus einer conf-Datei lesen. IP und Port könnten auch dort für jedes Gerät hinterlegt werden.
 
Richtig, bei -o Parameter wird Ergebnis zurückgemeldet.

Normalerweise wird das mit dem Programm AutoHotkey geschaltet, es erscheint dann in der Taskleiste ein Icon welches man zum schalten anklicken kann.

ich hänge mal die dazu gehöhrigen Dateien mit dran.
edimax_sp1101w_toggler.ahk
PHP:
#SingleInstance force
#Persistent

/*
Zur Ansteuerung der Edimax SP-1101W Funk-WLAN-Schaltsteckdose, ein/aus mit Flip/Flop wenn auf das
Trayicon geklickt wird
Die Komm. mit dem Smartplung erfolgt über CURL via IP, da werden XML-Steuerdateien mitgeschickt bzw.
das Gerätefeedback kommt auch per XML über CURL zurück. Es sind 3 XML-Steuerdateien


Alle 10 Sec wird der Status des SP-1101W gecheckt - er kann ja auch manuell geschalten werden - wenn er eine Flanke Aus-Ein hat, dann wird das Ding
nach einer definierten Timeout-Zeit (z.B. 30 min) ausgeschalten

*/

/* CURL-Commands
curl -d @off.xml http://admin:[email protected]:10000/smartplug.cgi -o "test.txt"
curl -d @on.xml http://admin:[email protected]:10000/smartplug.cgi
curl -d @status_powerstate.xml http://admin:[email protected]:10000/smartplug.cgi -o "ps.txt"

smartplug_off.xml
smartplug_on.xml
smartplug_powerstate.xml
*/

/* Response auf einen Schaltvorgang
<?xml version="1.0" encoding="UTF8"?><SMARTPLUG id="edimax"><CMD id="setup">OK</CMD></SMARTPLUG>
*/

/* Response auf die Statusanfrage
<?xml version="1.0" encoding="UTF8"?><SMARTPLUG id="edimax"><CMD id="get"><Device.System.Power.State>OFF</Device.System.Power.State></CMD></SMARTPLUG>
*/

; damit fangen wir die Clicks auf das Trayicon ab
OnMessage(0x404, "AHK_NOTIFYICON") ; WM_USER + 4 ; die Funktion "AHK.." wird aufgerufen wenn die Message "0x404" ausgelöst wird

; ein schönes Icon anlegen
ico_aus:="stecker_rot.ico"
ico_ein:="stecker_gruen1.ico"
Menu, tray, Icon, %ico_ein%


; Trayicon
Menu, Tray, NoStandard
menu, tray, tip, Info
Menu, tray, add, Exit, raus
menu, tray, click, 1


; ein paar Definitionen ,,, dann mal zu ändern
global smartplug_ip:="192.168.178.27"
global smartplug_user:="admin"
global smartplug_pass:="1234"
global outputdatei:="smartplug_output.txt"
timeout:=1000 * 60 * 30 ; Angabe in Millisekunden, danach wird automatisch abgeschalten!, 30 min

; ist der Smartplug überhaupt erreichbar via IP ?? -- wenn NEIN dann raus!!!
if not(ping_alive(smartplug_ip))
{
	msgbox, Die IP-Adresse: %smartplug_ip%  des Smartplug ist NICHT erreichbar
	ExitApp
}
	


; der Status wird laufend aktualisiert
; diese Routine sorgt alle 10 sec dafür, dass der Status aktualisiert wird.
settimer, label_status, % 1000 * 10 ; alle 10 sec


; beim Start auch gleich mal den Status holen
gosub label_status
return


;; ############################################################
;; Auswertung der Clicks auf das Trayicon
;; ############################################################

; macht die Auswertung der OnMessage-Aufrufe auf das Trayicon
; die Funktion "AHK_NOTIFYICON" wird von OnMessage (ganz oben) aufgerufen
; die verschiedenen WM-Codes sind hier http://*******/tsnPA definiert

AHK_NOTIFYICON(wParam, lParam)
{
	Global click ; definiert die variable CLICK als globale Variable

	if (lParam = 0x200) ; WM_MOUSEOVE
	{
		;GoSub,TrayiconInfofenster
		;Menu, Tray, Tip, %A_Now%
		text:="Smartplug: " smartplug_ip " --> " statusle	
		Menu, Tray, Tip, %text%
		Return 0
	}


	If lParam = 0x201 ; WM_LBUTTONUP
	{
		click = 1
		SetTimer, trayicon_clickcheck, -250 ; der Timer wird nur 1x aufgerufen
		Return 0 
	}
	Else If lParam = 0x203 ; WM_LBUTTONDBLCLK	
	{
		click = 2
		Return 0
	}
}

trayicon_clickcheck: ; Auswertung der OnMessage-Aufrufe bei einem Click auf das TrayIcon des Programms

If click = 1   ; einfacher Click auf das Trayicon
{
	;Msgbox 1
	gosub label_status ; status aktualisieren
}

Else If click = 2  ; doppelter Click auf das Trayicon
{
	;Msgbox 2
	gosub label_toggle ; den Smartplug umschalten
}
Return



;; ############################################################
;; Labels die angesprungen werden
;; ############################################################

; diese Labels werden angesprungen bei Clicks auf das Trayicon

; das Trayicon wird je nach Status umgestellt
label_status:
	if (smartplug_status() = "ON")
	{
		Menu, tray, Icon, %ico_ein%		
		global statusle:="EIN"
	}
	else
	{
		Menu, tray, Icon, %ico_aus%		
		global statusle:="AUS"
	}
	if (statusle = "EIN" and status_vorher = "AUS") ; vorher
	{
		trigger_ausein:=1
	}
	else
		trigger_ausein:=0

	if (statusle = "AUS" and status_vorher = "EIN") ; vorher
	{
		trigger_einaus:=1
	}
	else
		trigger_einaus:=0
	
	if trigger_ausein ; automatischen Ausschalttimer Starten, es ist ja immer noch ein, Aus-Ein-Flanke
	{
		settimer, offtimer1, % timeout
	}
	
	if trigger_einaus ; Ausschalttimer rücksetzen, es wurde ja bereits manuell bzw. von wem anderen ausgeschalten, Ein-Aus-Flanke
		settimer, offtimer1, Off
	
	status_vorher:=statusle
return

; dieses Label wird vom Ausschalttimer angesprungen, automatisch ausschalten nach Zeit
offtimer1:
	settimer, offtimer1, Off ; Timer schaltet sich selbst ab, er soll ja nur 1x laufen
	;msgbox, abgelaufen
	status1:=smartplug_off() ; ausschalten
return


; der Schaltzustand des Smartplug wird getoggled, wenn Ein, dann aus und vice-versa
label_toggle:
	; wir toggeln....
	done:=0
	temp_status:=smartplug_status()
	if (temp_status = "ON")
	{
		done:=1
		status1:=smartplug_off()
	}

	temp_status:=smartplug_status()
	if (temp_status = "OFF") and (done = 0)
	{
		done:=1
		status1:=smartplug_on()
	}

	if (smartplug_status() = "ON")
	{
		Menu, tray, Icon, %ico_ein%		
	}
	else
	{
		Menu, tray, Icon, %ico_aus%		
	}
	
return

raus:
	ExitApp
 return
 
 
;; ############################################################
;; Funktionen
;; ############################################################

; Kommunikation mit dem Smartplug
; liefert ein "OK", wenns klappt
smartplug_on() ; wenn die IP nicht erreichbar, dann kommt hier "Mist", dh. kein OK zurück!
{
	global
	befehlsdatei:="smartplug_on.xml"
	caller:="curl -d @" befehlsdatei " http://" smartplug_user ":" smartplug_pass "@" smartplug_ip ":10000/smartplug.cgi -o " outputdatei
	shellstring:=comspec " /c " . caller
	runwait, %shellstring%, ,hide useerrorlevel
	return check_output_ok(outputdatei)
}

; liefert ein "OK", wenns klappt
smartplug_off() ; wenn die IP nicht erreichbar, dann kommt hier "mist", dh. kein OK zurück!
{
	global
	befehlsdatei:="smartplug_off.xml"
	caller:="curl -d @" befehlsdatei " http://" smartplug_user ":" smartplug_pass "@" smartplug_ip ":10000/smartplug.cgi -o " outputdatei
	shellstring:=comspec " /c " . caller
	runwait, %shellstring%, ,hide useerrorlevel
	return check_output_ok(outputdatei)
}

; liefert ein "ON" oder ein "OFF" als Status des Smartplug
smartplug_status()
{
	global
	befehlsdatei:="smartplug_powerstate.xml"
	caller:="curl -d @" befehlsdatei " http://" smartplug_user ":" smartplug_pass "@" smartplug_ip ":10000/smartplug.cgi -o " outputdatei
	shellstring:=comspec " /c " . caller
	runwait, %shellstring%, ,hide useerrorlevel
	return check_output_on_off(outputdatei)
}

; holt das Ergebnis aus der CURL-Rückgabedatei nach einer Komm. mit dem Smartplug wegen dem Status
check_output_on_off(datei)
{
	global
	;FileRead, Contents, C:\Address List.txt
	daten:=""
	Fileread, daten, %datei%
	pos_vor:=instr(daten, "<Device.System.Power.State>", 1)+strlen("<Device.System.Power.State>")
	pos_nach:=instr(daten, "</Device.System.Power.State>", 1)
	ergebnis:=trim(substr(daten,pos_vor, pos_nach-pos_vor))
	return ergebnis
}

; holt das Ergebnis aus der CURL-Rückgabedatei nach einer Komm. mit dem Smartplug wenn ON oder OFF gesendet wurde
check_output_ok(datei)
{
	;FileRead, Contents, C:\Address List.txt
	daten:=""
	Fileread, daten, %datei%
	pos_vor:=instr(daten, "<CMD id=" chr(34) "setup" chr(34)">", 1)+strlen("<CMD id=" chr(34) "setup" chr(34)">")
	pos_nach:=instr(daten, "</CMD></SMARTPLUG>", 1)
	ergebnis:=trim(substr(daten,pos_vor, pos_nach-pos_vor))
	return ergebnis
}


; die Funktion gibt "0" zurück, wenn der Host nicht errichbar ist, ansonsten "1"
; ein einfaches PING
; z.B. istderda:=ping_alive("10.0.0.19")
ping_alive(computer)
{
	strComputer := "."
	objWMIService := ComObjGet("winmgmts:{impersonationLevel=impersonate}!\\" . strComputer . "\root\cimv2")
	selectstring:="Select * From Win32_PingStatus where Address = '" . computer . "'" 
	;colPings := objWMIService.ExecQuery("Select * From Win32_PingStatus where Address = '10.0.0.148'")._NewEnum
	colpings:=objwmiservice.execquery(selectstring)._NewEnum

	While colPings[objStatus]
	{
		If (objStatus.StatusCode="" or objStatus.StatusCode<>0)
			back:=0
		Else
			back:=1
	}
	return back
}
on.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<SMARTPLUG id="edimax"><CMD id="setup"><Device.System.Power.State>ON</Device.System.Power.State></CMD></SMARTPLUG>
off.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<SMARTPLUG id="edimax"><CMD id="setup"><Device.System.Power.State>OFF</Device.System.Power.State></CMD></SMARTPLUG>
powerstate.xml
Code:
<?xml version="1.0" encoding="UTF8"?>
<SMARTPLUG id="edimax">
<CMD id="get"><Device.System.Power.State></Device.System.Power.State>
</CMD></SMARTPLUG>
Ergebnis von ausschalten mit Parameter -o
Code:
<?xml version="1.0" encoding="UTF8"?><SMARTPLUG id="edimax"><CMD id="setup">OK</CMD></SMARTPLUG>

Die .ahk Datei weis ich nicht was das für ein Code ist, der Rest ist XML
 
@ws65:
AHK ist das hier http://www.autohotkey.com/docs/Scripts.htm

Eine von vielen Scriptsprachen. Man kann das aber auch in ein PHP-Script basteln. Das schaue ich mir bei Gelegenheit mal genauer an. In der AHK-Datei scheint alles drin zu sein, um das in PHP umsetzen zu können.

Hab mal schnell was zum Schalten per Browser als PHP-Script zurechtgefummelt:

edimax.php
Code:
<?php
/*

Browserlink zum Einschalten: edimax.php?schalte=an
Browserlink zum Ausschalten: edimax.php?schalte=aus
Kennwort eintragen und dieses Script als edimax.php speichern.

*/
$user="admin";
$password="HierDasKennwort";
$ip="192.168.178.27:10000";

$an='/var/media/ftp/Generic-Flash-Disk-01/apache-1341/htdocs/curl -d @on.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi';
$aus='/var/media/ftp/Generic-Flash-Disk-01/apache-1341/htdocs/curl -d @off.xml http://'.$user.':'.$password.'@'.$ip.'/smartplug.cgi -o "output.txt"';

if ($_GET["schalte"]=="an") {
	$output=shell_exec($an);
	echo "an";
}
if ($_GET["schalte"]=="aus") {
	$output=shell_exec($aus);
	echo "aus";
}
?>

Kann man dann in einer HTML-Datei als Link eintragen oder in einer anderen PHP-Datei als Schaltaufruf verwenden. Ist jetzt für den Webserver auf deiner Fritzbox gescriptet.
 
Meine beiden am WE bestellten dect 200 sind heute schon geliefert worden, Amazon ist echt der Knaller ... laufen wie zu erwarten einwandfrei. Eine soll die Flächenheizung im Kinderzimmer steuern, dazu die Temp funktionen und die andere ist experimentell bei mir hier am Rechnerplatz, die steuert im Sommer die Lüfter unter dem Wechselrichter, im Winter kann ich jetzt damit rumspielen ...
 
irgend was mach ich sicher wieder verkehrt!

wenn ich die edimax.php aufrufe erhalte ich ein leeres Browserfenster und es tut sich nichts.

Passwort geändert.

hab noch mal mit Telnet versucht, ist mir aufgefallen vor on.xml und off.xml muss ich da auch den komlettenPfad angeben.
und es wird die Datei bei Parameter -o nicht erstellt, keine Rechte zum schreiben.

gut, hab jetzt den Befehl direkt vom Root aufgerufen, müsste ich wahrscheinlich erst in das Verzeichnis htdocs wechseln.
 
@ws65: Jp, da musst du entsprechend auch im PHP-Script die Pfade noch davor setzen. Hab das jetzt nur von deinen Angaben zusammengebastelt. Kann auch sein, dass dem Web-User noch Rechte zum Ausführen fehlen.

@HarryHase: Ja, das geht immer recht fix. Eine "Spielsteckdose" habe ich auch direkt beim PC. Saß aber trotzdem schonmal bei einem groben Scriptfehler plötzlich im Dunkeln. :lol:

Okay, die neue Version 4.03.4759 ist da. Dazu ein komplettes Web mit Infos. Das muss ich aber noch erweitern, wenn die 5.00 irgendwann kommt. Hier gehts zum Web von SmartHome. Hoffe mal, das ist so ok.

Schon Ideen zu Post #188?
 
Zuletzt bearbeitet:
SmartHome Web in "Betrieb" genommen und die Informationen von Post #1 komplett dorthin verlagert. Der Pflegeaufwand hat sich dadurch verringert.
 
Edimax funktioniert!

wusste doch, das ich wieder was falsch gemach habe, Parameter Übergabe vergessen:mad:

Aufruf aus meinem selbst gemachten WebMenü mit "edimax.php?schalte=an"

apache-Menü.JPG
 

Zurzeit aktive Besucher

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.