Einbindung des NETIO-230A in IP-Symcon
Das Konzept:
- jeder der 4 Ports (=geschalteter 230V-Ausgang) soll aus IPS heraus schaltbar sein
- jeder Status jedes Ports soll überwacht und in IPS angezeigt werden, unabhängig davon durch welche Instanz (z.B. manuell direkt am Gerät) der jeweilige Port geschaltet wurde
Die Umsetzung:
ich habe für das NETIO eine eigene Kategorie angelegt, so kann ich bei Bedarf das Gerät später an eine beliebige Stelle innerhalb des Kategorie-Baums verschieben. Für die Status-Anzeige im Webfrontend habe ich eine weitere Kategorie an anderer Stelle des Kategorie-Baums angelegt innerhalb derer sich 5 Links befinden: 1x für den Ping-Status der Box selbst und 4x für den Schaltzustand der 4 Ports der NETIO-Box.
Für den jeweiligen Schaltvorgang habe ich 1 Script für „On“ und ein Script für „Off“ für jeden Port angelegt.
Für jeden Port gibt es weiterhin eine Variable (Typ: Boolean, der Einfachheit halber nach der Portnummer bezeichnet) über die sich der Schaltzustand des jeweiligen auslesen lässt.
Weiterhin gibt es ein Ereignis-gesteuertes Script, welches zyklisch alle 60 Sekunden den Status der NETIO-Ports an der Box abfragt, die Rückgabewerte werden dann in die jeweils zum Port gehörige Variable geschrieben („0“ oder „1“). Um nun nicht in allen 8 Schall-Scripts jedesmal IP-Adresse, Username und Userpasswort der Box manuell hinterlegen zu müssen habe ich dafür ebenfalls dedizierte Variablen innerhalb der Kategorie „NETIO“ hinterlegt. So muss muss man evtl. Änderungen nur an einer Stelle pflegen.
Die Funktion
jeder Port wird über sein zugehöriges Script ein– oder ausgeschaltet. Wichtig: entgegen zu den im IPS-Forum geposteten Scripts (Link siehe unten) schalten meine Scripts nur, sie schreiben keinen Status in die Variablen! Jedes Ein– oder Aus-Script ruft anschließend das „Abfrage Portstatus„-Script auf, dieses liest den Status aller 4 Ports aus und schreibt diese in die Variablen für alle 4 Ports. Unabhängig davon wird das „Abfrage Portstatus„-Script ereignisgesteuert alle 60 Sekunden aufgerufen und verrichtet seinen Job wie oben beschrieben.
Die Scripts:
Das Einschalt-Script:
Sind die Variablen für IP-Adresse, Username und Userpasswort angelegt müssen deren ID’s noch im Einschalt-Script gepflegt werden. Für jeden Port wird ein dediziertes Einschalt-Script erstellt, der jeweilige zu schaltende Port wird einmalig über die Zeichenfolge „xxxx“ in Zeile 13 definiert (Bedeutungen sind in der NETIO-Anleitung zu finden)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<? $IP = GetValue(49869 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230ANETIO KonfigDatenNETIO IP-Adress]*/); $Username = GetValue(35911 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230ANETIO KonfigDatenNetIO Username]*/); $Password = GetValue(56732 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230ANETIO KonfigDatenNetIO Password]*/); $loginremote = "http://$IP/tgi/control.tgi?login=p:".$Username.":".$Password; $schaltremote = "http://$IP/tgi/control.tgi?p=uuu1"; $logoutremote = "http://$IP/tgi/control.tgi?quit=quit"; $content = Sys_GetURLContent($loginremote); $content = Sys_GetURLContent($schaltremote); $content = Sys_GetURLContent($logoutremote); IPS_RunScript(56204 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230AAbfrage Portstatus]*/); ?> |
Das Ausschalt-Script:
Gleiche Konfiguration und Bedingungen wie unter „Das Einschalt-Script“ beschrieben, Script unterscheidet sich ausschliesslich in Zeile 13 in der zu übergebenden Schaltkommando-Zeichenfolge
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<? $IP = GetValue(49869 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230ANETIO KonfigDatenNETIO IP-Adress]*/);; $Username = GetValue(35911 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230ANETIO KonfigDatenNetIO Username]*/);; $Password = GetValue(56732 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230ANETIO KonfigDatenNetIO Password]*/);; $loginremote = "http://$IP/tgi/control.tgi?login=p:".$Username.":".$Password; $schaltremote = "http://$IP/tgi/control.tgi?p=uuu0"; $logoutremote = "http://$IP/tgi/control.tgi?quit=quit"; $content = Sys_GetURLContent($loginremote); $content = Sys_GetURLContent($schaltremote); $content = Sys_GetURLContent($logoutremote); IPS_RunScript(56204 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230AAbfrage Portstatus]*/); ?> |
Statusabfrage
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<? //Konfigurationsdaten in dediziert dafür angelegten Variablen ablegen, //anschliessend die ID's der Variablen hier eintragen: $IP = GetValue(49869 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230ANETIO KonfigDatenNETIO IP-Adress]*/); $Username = GetValue(35911 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230ANETIO KonfigDatenNetIO Username]*/); $Password = GetValue(56732 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230ANETIO KonfigDatenNetIO Password]*/); //Statusabfrage des NETIO-230A: $loginremote = "http://".$IP."/tgi/control.tgi?login=p:".$Username.":".$Password; $Statusabfrage = "http://".$IP."/tgi/control.tgi?p=l"; $logoutremote = "http://".$IP."/tgi/control.tgi?quit=quit"; $content0 = Sys_GetURLContent($loginremote); $Portstatus = Sys_GetURLContent($Statusabfrage); $content3 = Sys_GetURLContent($logoutremote);+ //Schreiben der ausgelesenen Statuswerte in die jeweilige - pro Port angelegte Variable (die jeweiligen Variablen-ID's // hier eintragen: SetValue(31211 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230ANETIO Port1]*/, substr($Portstatus,6,1)); SetValue(49150 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230ANETIO Port2]*/, substr($Portstatus,8,1)); SetValue(38388 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230ANETIO Port3]*/, substr($Portstatus,10,1)); SetValue(21425 /*[HaussteuerungSensoren_AktorenServerraumNetIO-230ANETIO Port4]*/, substr($Portstatus,12,1)); ?> |
Da dies mein aller erster Gehversuch mit PHP ist bitte ich um Nachsicht (falls ´das Ein oder Andere etwas „schräg“ aussieht) , bin aber für jedes Feedback dankbar. Ich wills ja schliesslich lernen :)
Dieser Artikel ist auch hier im IPS-Forum veröffentlicht: Link