[Info] SensorAndSwitch: Pseudoscript für schaltbare Steckdose ALLNET3075

fred_feuerstein

Neuer User
Mitglied seit
11 Okt 2005
Beiträge
54
Punkte für Reaktionen
0
Punkte
6
************
EDIT: lauffähiges Pseudoscript ist im Beitrag Nr. 6 und eine aktualisierte Version incl. Symbolgrafik in Beitrag Nr. 7
************



Ich habe neben den FritzDect 200 und Powerline 546E Steckdosen auch eine ALLNET3075. Die hat keinen Tempsensor und keine Energiemessung, kann aber per LAN (Webinterface) geschaltet werden. Es gibt auch eine kleine Mini-API:


Steuerung von Anwendungssoftware aus:

Durch einfache HTTP-GET-Requests kann man direkt die Schaltfunktionen auslösen:

Einschalten ALL3075 und ALL3076:
Code:
http://IP-Adresse/r?r=0&s=1
Ausschalten ALL3075 und ALL3076:
Code:
http://IP-Adresse/r?r=0&s=0

Den aktuellen Schaltstatus bekommt man über eine XML-Ausgabe:
Code:
http://IP-Adresse/xml

Rückgabe xml (Steckdose an):

Code:
<xml><data><devicename>ALLNET3075</devicename>
<n0>Teststeckdose</n0><ip0_0>192</ip0_0><ip0_1>168</ip0_1><ip0_2>123</ip0_2><ip0_3>101</ip0_3><tz0>0</tz0><rz0>2</rz0><bz0>300</bz0><t0>1</t0>
<nv0>1</nv0>
<sys>2350</sys><fastti>115114</fastti><kstatus>0</kstatus><mem>1603</mem><fw>1.51</fw><dev>ALL3075</dev>
</data></xml>

Rückgabe xml (Steckdose aus):

Code:
<xml><data><devicename>ALLNET3075</devicename>
<n0>Teststeckdose</n0><ip0_0>192</ip0_0><ip0_1>168</ip0_1><ip0_2>123</ip0_2><ip0_3>101</ip0_3><tz0>0</tz0><rz0>2</rz0><bz0>300</bz0><t0>0</t0>
<nv0>0</nv0>
<sys>2429</sys><fastti>118988</fastti><kstatus>0</kstatus><mem>1603</mem><fw>1.51</fw><dev>ALL3075</dev>
</data></xml>

Unterschied der Rückgabe an/aus ist also:
Code:
<t0>1</t0>
<nv0>1</nv0>

bzw.
Code:
<t0>0</t0>
<nv0>0</nv0>


So, und nun meine Frage. Wie funktioniert das nun mit einem Pseudoskript ähnlich Edimax?! Ich habe mir das Edimax angeschaut, aber meine Programmierkenntnisse gehen gegen Null. Es wäre ganz toll, wenn jemand der Pseudoskript-Profis ;) helfen könnte.

Diese Steuerung könnte man dann für alle Steckdose von ALLNET nutzen. Es gibt auch Dimmbare Steckdosen, die man per Befehl dann entsprechend dimmen kann.
 
Zuletzt bearbeitet:
Ich schau es mir an, kann aber im Moment nicht, weil ich das Web gerade ergänze und sas 1.50 in Arbeit habe. Kann also etwas dauern. Vielleicht kann einer der anderen vorher schon mal draufschaun. :)

Die Dinger sind richtig teuer... grad bei Amazon geschaut. Was ist an denen besser als an den Edimax?
 
Zuletzt bearbeitet:
Die hab ich schon vor Jahren gekauft, da gab es keine edimax, fritzdect und andere. Keine Ahnung warum die immer noch so teuer sind. War damals eine notschaltung für einen Server ;)
 
Teilerfolg bisher!

Ich habe auf der Raspi Console (putty) mal ein wenig ausprobiert bzgl. der Schaltung der Steckdose:

Eingeschaltet wird sie dort bspw. mit:
Code:
curl -G http://USER:PASSWORT@IP-Adresse/r?r=0&s=1

Ausschalten geht mit:
Code:
curl -G http://USER:PASSWORT@IP-Adresse/r?r=0&s=0

Um den Status auszulesen kann man mit:
Code:
curl -o allnetstatus.txt http://USER:PASSWORT@IP-Adresse/xml
die XML Ausgabe speichern.

In der Ausgabe (siehe oben) müsste dann auf:
<t0>1</t0> => eingeschaltet
<t0>0</t0> => ausgeschaltet
geprüft werden um den Schaltzustand zu ermitteln.

Nun habe ich als Vorlage das Edimax Skript genommen und es funktioniert einiges aber noch nicht alles.
So sieht es aktuell aus:

Code:
<?php 

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch Automation Pro                                    |
		|   Pseudo-Schalter-Script                                            |
		|   ===============================================================   |
		|   -> Schalter                                                       |
		|      Allnet 3075 / 3076 Schaltsteckdosen können mit diesem Script   |
		|      eingebunden werden.                                            |
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
 
	# ----------------------------------------------------------------------- #
	# Diese Variablen müssen gegebenenfalls angepasst werden:                 #
	# *******************************************************                 #
	$user="user";                     # Benutzer                               #
	$password="pw";          # Kennwort                               #
	$ip="192.168.123.101";           # IP-Adresse der Allnet                  #
	# ----------------------------------------------------------------------- #

	$an='curl -G http://'.$user.':'.$password.'@'.$ip.'/r?r=0&s=1';
	$aus='curl -G http://'.$user.':'.$password.'@'.$ip.'/r?r=0&s=0';
	$state='curl -o statusallnet.txt http://'.$user.':'.$password.'@'.$ip.'/xml';

	$Status="S##E##";
	if ($_GET["info"]=="status") {
		$output=shell_exec($state);
		$xml="#".file_get_contents('statusallnet.txt');
		unlink('statusallnet.txt');
		if (strpos($xml,"<t0>1</t0>")) {
			$Status="S#1#";
		}
		if (strpos($xml,"<t0>0</t0>")) {
			$Status="S#0#";
		}
	}
	if ($_GET["schalter"]=="1") {
		$output=shell_exec($an);
		$Status="S#1#";
	}
	if ($_GET["schalter"]=="0") {
		$output=shell_exec($aus);
		$Status="S#0#";
	}
	echo $Status;

?>

Was funktioniert:
- Status wird korrekt angezeigt
- wenn Steckdose aus, kann sie eingeschaltet werden.

Was funktioniert NICHT:
- das Ausschalten der Steckdose funktioniert nicht. Es wird beim Klick der Button rot aber nach dem nächsten Update von SAS ist der Button wieder grün und die Dose nach wie vor an.

Weiterer Wunsch:
- wie kann man andere Statusdaten der Steckdose noch anzeigen lassen: Vor allem den Namen der Steckdose, statt "Allnet" oder eben zusätzlich weiter rechts. Die Info ist ja auch in der xml-Ausgabe enthalten.

allnet1.PNG

Bin also weiterhin dankbar für Unterstützung.
 
Zuletzt bearbeitet:
weiterer Erfolg:

Es funktioniert nun: Status, Ausschalten, Einschalten ! :)

Bleibt nur noch der Wunsch mit dem Auslesen und Anzeigen des Steckdosen-Namens aus den XML Daten.


So sieht es nun (fertig) aus:
Code:
<?php 

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch Automation Pro                                    |
		|   Pseudo-Schalter-Script                                            |
		|   ===============================================================   |
		|   -> Schalter                                                       |
		|      Allnet 3075 / 3076 Schaltsteckdosen können mit diesem Script   |
		|      eingebunden werden.                                            |
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
 
	# ----------------------------------------------------------------------- #
	# Diese Variablen müssen gegebenenfalls angepasst werden:                 #
	# *******************************************************                 #
	$user="user";                     # Benutzer                               #
	$password="pw";          # Kennwort                               #
	$ip="192.168.123.101";           # IP-Adresse der Allnet                  #
	# ----------------------------------------------------------------------- #

	$an='curl -G http://'.$user.':'.$password.'@'.$ip.'/r?r=0&s=1';
	$aus='curl -G "http://'.$user.':'.$password.'@'.$ip.'/r?r=0&s=0"';
	$state='curl -o statusallnet.txt http://'.$user.':'.$password.'@'.$ip.'/xml';

	$Status="S##E##";
	if ($_GET["info"]=="status") {
		$output=shell_exec($state);
		$xml="#".file_get_contents('statusallnet.txt');
		unlink('statusallnet.txt');
		if (strpos($xml,"<t0>1</t0>")) {
			$Status="S#1#";
		}
		if (strpos($xml,"<t0>0</t0>")) {
			$Status="S#0#";
		}
	}
	if ($_GET["schalter"]=="1") {
		$output=shell_exec($an);
		$Status="S#1#";
	}
	if ($_GET["schalter"]=="0") {
		$output=shell_exec($aus);
		$Status="S#0#";
	}
	echo $Status;

?>


Könnte also bei Bedarf in dieser Form schon in die Rubrik: SASHELPER / speziellehardware hinzugefügt werden.



Wie gesagt, wenn mir jetzt noch jemand bei der Anzeige des Steckdosen Namens helfen könnte, wäre super!

Also, wie kann man aus dem XML den Part
Code:
<n0>Teststeckdose</n0>
so extrahieren, dass als Ergebnis
Code:
Teststeckdose
übrig bleibt und das dann in der Anzeige auf der rechten Seite plazieren?! Oder alternativ statt des "Pseudoskript"-Names (in meinem Fall pseudoallnet.php => also "Allnet").
 
Zuletzt bearbeitet:
FERTIG !! :D

habs hinbekommen.

Fertiges Pseudoskript:

PHP:
<?php 

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch Automation Pro                                    |
		|   Pseudo-Schalter-Script                                            |
		|   ===============================================================   |
		|   -> Schalter                                                       |
		|      Allnet 3075 / 3076 Schaltsteckdosen können mit diesem Script   |
		|      eingebunden werden.                                            |
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
 
	# ----------------------------------------------------------------------- #
	# Diese Variablen müssen gegebenenfalls angepasst werden:                 #
	# *******************************************************                 #
	$user="user";                     # Benutzer                               #
	$password="passwort";          # Kennwort                               #
	$ip="192.168.123.101";           # IP-Adresse der Allnet                  #
	# ----------------------------------------------------------------------- #

	$an='curl -G http://'.$user.':'.$password.'@'.$ip.'/r?r=0&s=1';
	$aus='curl -G "http://'.$user.':'.$password.'@'.$ip.'/r?r=0&s=0"';
	$state='curl -o statusallnet.txt http://'.$user.':'.$password.'@'.$ip.'/xml';

	$Status="S##E##";
	if ($_GET["info"]=="status") {
		$output=shell_exec($state);
		$xml="#".file_get_contents('statusallnet.txt');
    $device=explode('<devicename>', $xml);
    $device=explode('</devicename>', $device[1]);
    $name=explode('<n0>', $xml);
    $name=explode('</n0>', $name[1]);
    $fw=explode('<fw>', $xml);
    $fw=explode('</fw>', $fw[1]);
    $dev=explode('<dev>', $xml);
    $dev=explode('</dev>', $dev[1]);
		unlink('statusallnet.txt');
		if (strpos($xml,"<nv0>1</nv0>")) {
			$Status="S#1#";
		}
		if (strpos($xml,"<nv0>0</nv0>")) {
			$Status="S#0#";
		}
	}
	if ($_GET["schalter"]=="1") {
		$output=shell_exec($an);
		$Status="S#1#";
	}
	if ($_GET["schalter"]=="0") {
		$output=shell_exec($aus);
		$Status="S#0#";
	}
 	 echo $Status;
   echo "P#<div style='position:relative;top:-5px'>".$name[0].", ".$device[0]."</div><br><div style='position:relative;top:-15px;font-size:9px;'>Gerät: ".$dev[0].", FW: ".$fw[0].", IP: ".$ip."</div>*html#";
		   
?>

So sieht es nun aus:
allnet2.PNG


@JL3: Das Skript kannst Du gerne zu den Beispielskripten "spezielle Hardware" hinzufügen :)
 
Nochmal ein Update:

Nun wird noch ein kleines Icon der Steckdose angezeigt:
allnet3.PNG



Hier das Icon dazu:
pseudoallnet.png

und hier das aktuelle Skript:
PHP:
<?php 

	/*
		+---------------------------------------------------------------------+
		|                                                                     |
		|   SensorAndSwitch Automation Pro                                    |
		|   Pseudo-Schalter-Script                                            |
		|   ===============================================================   |
		|   -> Schalter                                                       |
		|      Allnet 3075 / 3076 Schaltsteckdosen können mit diesem Script   |
		|      eingebunden werden.                                            |
		|                                                                     |
		+---------------------------------------------------------------------+
	*/
 
	# ----------------------------------------------------------------------- #
	# Diese Variablen müssen gegebenenfalls angepasst werden:                 #
	# *******************************************************                 #
	$user="user";                     # Benutzer                               #
	$password="passwort";          # Kennwort                               #
	$ip="192.168.123.101";           # IP-Adresse der Allnet                  #
	# ----------------------------------------------------------------------- #

	$an='curl -G http://'.$user.':'.$password.'@'.$ip.'/r?r=0&s=1';
	$aus='curl -G "http://'.$user.':'.$password.'@'.$ip.'/r?r=0&s=0"';
	$state='curl -o statusallnet.txt http://'.$user.':'.$password.'@'.$ip.'/xml';

	$Status="S##E##";
	if ($_GET["info"]=="status") {
		$output=shell_exec($state);
		$xml="#".file_get_contents('statusallnet.txt');
    $device=explode('<devicename>', $xml);
    $device=explode('</devicename>', $device[1]);
    $name=explode('<n0>', $xml);
    $name=explode('</n0>', $name[1]);
    $fw=explode('<fw>', $xml);
    $fw=explode('</fw>', $fw[1]);
    $dev=explode('<dev>', $xml);
    $dev=explode('</dev>', $dev[1]);
		unlink('statusallnet.txt');
    $symbol='<img src="pseudoallnet.png">';
		if (strpos($xml,"<nv0>1</nv0>")) {
			$Status="S#1#";
		}
		if (strpos($xml,"<nv0>0</nv0>")) {
			$Status="S#0#";
		}
	}
	if ($_GET["schalter"]=="1") {
		$output=shell_exec($an);
		$Status="S#1#";
	}
	if ($_GET["schalter"]=="0") {
		$output=shell_exec($aus);
		$Status="S#0#";
	}
 	 echo $Status;
   echo "P#<div style='position:relative;top:-5px'>".$name[0].", ".$device[0]."</div><br><div style='position:relative;top:-15px;font-size:9px;'>Gerät: ".$dev[0].", FW: ".$fw[0].", IP: ".$ip."</div><div style='font-size:14px;text-align:left;width:310px;position:relative;top:-52px;'>".$symbol."</div>*html#";
		   
?>
 
Jep, mache ich :)
 
hm. JL3, seit der 2.20 Version von SAS klappt das mit dem Skript nicht mehr. Wird nicht mehr als Schalter erkannt.
Kannst Du mal draufschauen? Vielleicht findest Du den Fehler.

//edit: hat sich erledigt. Problem lag am lokalen Netzwerk. Alles wieder gut.
 
Zuletzt bearbeitet:
Okay. Wenns wieder läuft. :)
 

Neueste Beiträge

Statistik des Forums

Themen
244,858
Beiträge
2,219,637
Mitglieder
371,571
Neuestes Mitglied
FritzFunk
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.