Da ich mehrere OpenWRT-Access-Points betreibe und keinen Router, habe ich Dein Skript so angepasst, dass ein INSTALL_Skript die Dummy-Instanz und alle Variablen selbst anlegt… man ist ja bequem. Für Access-Points muss das Ganze auch etwas in eine andere Richtung gehen, z.B. gibt es bei mir die eth0 Schnittstelle nicht, sondern einen „Switch“ auf dem mehrere VLANs ankommen. Aber dieser Stand ist bestimmt schon mal interessant, wenn man einen OpenWRT-Router verwendet
Das Ganze ist noch nicht ganz rund…
-
die entsprechende Zuweisung von Variablen-Profilen fehlt noch
-
das Anlegen fehlender Variablen-Profile (hier ein Beispiel aus einem anderen INSTALL_Skript)
// eigenes Profil anlegen, dafür das vorhandene löschen
if (IPS_VariableProfileExists("AVR_VOLUME"))
IPS_DeleteVariableProfile("AVR_VOLUME");
IPS_CreateVariableProfile ("AVR_VOLUME", 1 );
IPS_SetVariableProfileText ("AVR_VOLUME", "", "%" );
IPS_SetVariableProfileValues ("AVR_VOLUME", 40, 161 , 1 );
IPS_SetVariableProfileIcon("AVR_VOLUME", "Speaker");
-
ein Auslöser (vermutlich Zeitlich) fehlt noch (hier ein Beispiel aus einem anderen INSTALL_Skript)
// timer der das script zykisch aufruft für power in abfrage
$ID_EVENT = IPS_CreateEvent (1);
IPS_SetEventCyclic($ID_EVENT, 2, 1, 0, 0, 2, 5); //Jeden Tag jede 5 Minuten
IPS_SetParent($ID_EVENT, $ID_PIONEER_SCRIPT);
IPS_SetEventActive($ID_EVENT, true); // Aktivert Ereignis
Installationshinweise:
0.) Skript wurde in IPS 7.2 erstellt
1.) Leeres Skript erzeugen (Name z.B. „OpenWRT_Install“)
2.) Skript an den Ort (Kategorie,…) verschieben, in dem die Objekte eingebaut werden sollen
3.) Inhalt für INSTALL-Skript einfügen und CONFIG-Werte im Skript an anpassen
4.) Install-Skript ausführen
5.) Leeres Skript im Bereich der Variablen erzeugen (Name z.B. „OpenWRT“)
6.) Inhalt für OpenWRT einfügen
7.) Einen Auslöser für das OpenWRT-Skript ergänzen
→ Fertig
PHP-Skript: OPENWRT_INSTALL
<?php
################### CONFIG-START ###################
define ('ID_WebFront', "41040"); // WebFront-ID
define ('NAME_DEVICE',"mr-191-ap55"); // Gerätebenennung
define ('IP_DEVICE',"10.0.0.191"); // IP-Adresse
################### CONFIG-ENDE ###################
if (ID_WebFront=="" or NAME_DEVICE=="" or IP_DEVICE=="") {echo("CONFIG-Daten unvollständig!"); return;}
$ParentID=IPS_GetParent($_IPS['SELF']);
// dummy instanz erstellen
$ID_INSTANZ= IPS_CREATEINSTANCE("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
IPS_SetParent($ID_INSTANZ, $ParentID);
IPS_SETName($ID_INSTANZ, NAME_DEVICE);
// Variablen anlegen
// Funktion zum erstellen eines Variablen
//
// Parameter:
// VarNAME = Name wie die Variable im Objektbaum heissen soll
// VarTyp = Typ der Variablen (0=Boolean, 1=Integer, 2=Float, 3=String)
// Icon = Icon für Variable, wenn nicht aus Profil
// ParentID = Objekt ID unter der das Script untergehangen wird
// Profil = Name des Profils
// ScriptID = Aktionsskript ID
// Position = Reihenfolge im Objektbaum
// Hidden = Variable unsichtbar (true|false)
//function CreateVarByName($Position, $VarNAME, $VarTyp, $Icon, $ParentID, $Profil, $ScriptID, $Hidden)
$VarID_Laufzeit=CreateVarByName( 2,"Laufzeit", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_Auslastung=CreateVarByName( 4,"Auslastung", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_Speicher_gesamt=CreateVarByName( 6,"Speicher gesamt", 2,null,$ID_INSTANZ,null, null,false);
$VarID_Speicher_frei=CreateVarByName( 8,"Speicher frei", 2,null,$ID_INSTANZ,null, null,false);
$VarID_Speicher_belegt=CreateVarByName( 10,"Speicher belegt", 2,null,$ID_INSTANZ,null, null,false);
$VarID_Hostname=CreateVarByName( 12,"Hostname", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_Kernel=CreateVarByName( 14,"Kernel", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_Distribution=CreateVarByName( 16,"Distribution", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_Version=CreateVarByName( 18,"Version", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_Revision=CreateVarByName( 20,"Revision", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_LANName=CreateVarByName( 22,"LANName", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_LANUp=CreateVarByName( 24,"LANUp", 0,null,$ID_INSTANZ,null, null,false);
$VarID_LANIP=CreateVarByName( 26,"LANIP", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_LANMAC=CreateVarByName( 28,"LANMAC", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_LANRX=CreateVarByName( 30,"LANRX", 2,null,$ID_INSTANZ,null, null,false);
$VarID_LANRX_aktuell=CreateVarByName( 32,"LANRX aktuell", 2,null,$ID_INSTANZ,null, null,false);
$VarID_LANTX=CreateVarByName( 34,"LANTX", 2,null,$ID_INSTANZ,null, null,false);
$VarID_LANTX_aktuell=CreateVarByName( 36,"LANTX aktuell", 2,null,$ID_INSTANZ,null, null,false);
$VarID_LANSpeed=CreateVarByName( 38,"LANSpeed", 2,null,$ID_INSTANZ,null, null,false);
$VarID_LANDuplex=CreateVarByName( 40,"LANDuplex", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_WANName=CreateVarByName( 42,"WANName", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_WANUP=CreateVarByName( 44,"WANUP", 0,null,$ID_INSTANZ,null, null,false);
$VarID_WANIP=CreateVarByName( 46,"WANIP", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_WANMAC=CreateVarByName( 48,"WANMAC", 3,null,$ID_INSTANZ,"~String", null,false);
$VarID_WANRX=CreateVarByName( 50,"WANRX", 2,null,$ID_INSTANZ,null, null,false);
$VarID_WANRX_aktuell=CreateVarByName( 52,"WANRX aktuell", 2,null,$ID_INSTANZ,null, null,false);
$VarID_WANTX=CreateVarByName( 54,"WANTX", 2,null,$ID_INSTANZ,null, null,false);
$VarID_WANTX_aktuell=CreateVarByName( 56,"WANTX aktuell", 2,null,$ID_INSTANZ,null, null,false);
$VarID_WANSpeed=CreateVarByName( 58,"WANSpeed", 2,null,$ID_INSTANZ,null, null,false);
$VarID_WANDuplex=CreateVarByName( 60,"WANDuplex", 3,null,$ID_INSTANZ,"~String", null,false);
// Script mit Variablen-Definitionen für das Haupt-Skript anlegen
$SText="<?\r";
$SText.="// Erzeugt von INSTALL_SCRIPT\r";
$SText.="// Variablen-Definitionen für das Haupt-Skript\r";
$SText.="\r";
$SText.="define ('IP_DEVICE', '".IP_DEVICE."');\r";
$SText.="define ('ID_Laufzeit', ".$VarID_Laufzeit.");\r";
$SText.="define ('ID_Auslastung', ".$VarID_Auslastung.");\r";
$SText.="define ('ID_Speicher_gesamt', ".$VarID_Speicher_gesamt.");\r";
$SText.="define ('ID_Speicher_frei', ".$VarID_Speicher_frei.");\r";
$SText.="define ('ID_Speicher_belegt', ".$VarID_Speicher_belegt.");\r";
$SText.="define ('ID_Hostname', ".$VarID_Hostname.");\r";
$SText.="define ('ID_Kernel', ".$VarID_Kernel.");\r";
$SText.="define ('ID_Distribution', ".$VarID_Distribution.");\r";
$SText.="define ('ID_Version', ".$VarID_Version.");\r";
$SText.="define ('ID_Revision', ".$VarID_Revision.");\r";
$SText.="define ('ID_LANName', ".$VarID_LANName.");\r";
$SText.="define ('ID_LANUp', ".$VarID_LANUp.");\r";
$SText.="define ('ID_LANIP', ".$VarID_LANIP.");\r";
$SText.="define ('ID_LANMAC', ".$VarID_LANMAC.");\r";
$SText.="define ('ID_LANRX', ".$VarID_LANRX.");\r";
$SText.="define ('ID_LANRX_aktuell', ".$VarID_LANRX_aktuell.");\r";
$SText.="define ('ID_LANTX', ".$VarID_LANTX.");\r";
$SText.="define ('ID_LANTX_aktuell', ".$VarID_LANTX_aktuell.");\r";
$SText.="define ('ID_LANSpeed', ".$VarID_LANSpeed.");\r";
$SText.="define ('ID_LANDuplex', ".$VarID_LANDuplex.");\r";
$SText.="define ('ID_WANName', ".$VarID_WANName.");\r";
$SText.="define ('ID_WANUP', ".$VarID_WANUP.");\r";
$SText.="define ('ID_WANIP', ".$VarID_WANIP.");\r";
$SText.="define ('ID_WANMAC', ".$VarID_WANMAC.");\r";
$SText.="define ('ID_WANRX', ".$VarID_WANRX.");\r";
$SText.="define ('ID_WANRX_aktuell', ".$VarID_WANRX_aktuell.");\r";
$SText.="define ('ID_WANTX', ".$VarID_WANTX.");\r";
$SText.="define ('ID_WANTX_aktuell', ".$VarID_WANTX_aktuell.");\r";
$SText.="define ('ID_WANSpeed', ".$VarID_WANSpeed.");\r";
$SText.="define ('ID_WANDuplex', ".$VarID_WANDuplex.");\r";
$SText.="\r";
$SText.="?>\r";
$ID_OPENWRT_SCRIPT_VARS= CreateScriptByName(NAME_DEVICE."_Vars", $ID_INSTANZ, $SText);
// Funktion zum erstellen eines Variablen
//
// Parameter:
// VarNAME = Name wie die Variable im Objektbaum heissen soll
// VarTyp = Typ der Variablen (0=Boolean, 1=Integer, 2=Float, 3=String)
// Icon = Icon für Variable, wenn nicht aus Profil
// ParentID = Objekt ID unter der das Script untergehangen wird
// Profil = Name des Profils
// ScriptID = Aktionsskript ID
// Position = Reihenfolge im Objektbaum
// Hidden = Variable unsichtbar (true|false)
function CreateVarByName($Position, $VarNAME, $VarTyp, $Icon, $ParentID, $Profil, $ScriptID, $Hidden)
{
global $IPS_SELF;
$VarID = @IPS_GetVariableIDByName($VarNAME, $ParentID);
if ($VarID == 0){
$VarID = IPS_CreateVariable($VarTyp);
IPS_SetName($VarID, $VarNAME);
IPS_SetParent($VarID, $ParentID);
IPS_SetVariableCustomProfile($VarID, $Profil);
IPS_SetVariableCustomAction($VarID, $ScriptID);
IPS_SetPosition($VarID, $Position);
IPS_SetIcon($VarID, $Icon);
IPS_SetHidden($VarID, $Hidden);
}
return $VarID;
}
// Funktion zum erstellen eines Scripts
//
// Parameter:
// ScriptNAME = Name wie das Script im Objektbaum heissen soll
// ParentID = Objekt ID unter der das Script untergehangen wird
// ScriptTEXT = Inhalt der Scriptdatei
function CreateScriptByName($ScriptNAME, $ParentID, $ScriptTEXT)
{
global $IPS_SELF;
$ScriptID = @IPS_GetScriptIDByName($ScriptNAME, $ParentID);
if ($ScriptID == 0){
$ScriptID = IPS_CreateScript(0);
IPS_SetName($ScriptID, $ScriptNAME);
IPS_SetParent($ScriptID, $ParentID);
IPS_SetInfo($ScriptID, "This script was created by: #$IPS_SELF#");
IPS_SetScriptContent($ScriptID, $ScriptTEXT);
IPS_SetHidden($ScriptID, true);
IPS_SetPosition($ScriptID, 98);
}
return $ScriptID;
}
PHP-Sktipt: OpenWRT
<?php
$ID_INSTANZ=IPS_GetParent($_IPS['SELF']);
$NAME_INSTANZ=IPS_GetName($ID_INSTANZ);
echo $NAME_INSTANZ;
$ID_OPENWRT_SCRIPT_VARS= IPS_GetScriptIDByName($NAME_INSTANZ."_Vars", $ID_INSTANZ);
echo $ID_OPENWRT_SCRIPT_VARS;
include(IPS_GetScriptFile($ID_OPENWRT_SCRIPT_VARS));
$erg=array();
$user="root"; //Benutzername, bei mir root
$password=""; //das Passwort
$sessionid="";
function openwrtlogon($user,$password)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://10.0.0.191/ubus');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"jsonrpc": "2.0",
"id": 1,
"method": "call",
"params": [
"00000000000000000000000000000000",
"session",
"login", {
"username": "'.$user.'",
"password": "'.$password.'"
}
]
}');
$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
return json_decode($result,true)["result"][1]["ubus_rpc_session"];
}
function openwrtcall($sessionid,$path,$procedure,$parameter="")
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://10.0.0.191/ubus');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{
"jsonrpc": "2.0",
"id": 2,
"method": "call",
"params": [ "'.$sessionid.'",
"'.$path.'",
"'.$procedure.'",{'.$parameter.'} ]
}');
$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
return $result;
curl_close($ch);
}
//logon
$sessionid=openwrtlogon($user,$password);
//Systeminformationen
$erg=json_decode(openwrtcall($sessionid,"system","info"),true);
$laufzeit=$erg["result"][1]["uptime"]; /*in Sekunden */
setvalue(ID_Laufzeit,sprintf('%dT %dStd %dMin %dSek',
$laufzeit / 86400,
$laufzeit / 3600 % 24,
$laufzeit / 60 % 60,
$laufzeit % 60,
));
setvalue(ID_Auslastung,$erg["result"][1]["load"][0]."/".$erg["result"][1]["load"][1]."/".$erg["result"][1]["load"][2]);
setvalue(ID_Speicher_gesamt,$erg["result"][1]["memory"]["total"]/1000000);
setvalue(ID_Speicher_frei,$speicherfrei=$erg["result"][1]["memory"]["free"]/1000000);
setvalue(ID_Speicher_belegt,getvalue(ID_Speicher_gesamt)-getvalue(ID_Speicher_frei));
//Hardwareinformationen
$erg=json_decode(openwrtcall($sessionid,"system","board"),true);
setvalue(ID_Kernel,$erg["result"][1]["kernel"]);
setvalue(ID_Hostname,$erg["result"][1]["hostname"]);
setvalue(ID_Distribution,$erg["result"][1]["release"]["distribution"]);
setvalue(ID_Version,$erg["result"][1]["release"]["version"]);
setvalue(ID_Revision,$erg["result"][1]["release"]["revision"]);
/*
//Daten vom DHCP Server - wird derzeit nicht verwendet
$erg=json_decode(openwrtcall($sessionid,"luci-rpc","getDHCPLeases"),true);
//Übersicht der Netzwerkschnittstellen
$erg=json_decode(openwrtcall($sessionid,"network.interface","dump"),true);
*/
//Werte der Netzwerkkarten
$rx=0;
$erg=json_decode(openwrtcall($sessionid,"luci-rpc","getNetworkDevices"),true);
//var_dump($erg);
setvalue(ID_LANName,$erg["result"][1]["eth0"]["name"]);
setvalue(ID_LANUp,$erg["result"][1]["eth0"]["up"]);
setvalue(ID_LANIP,$erg["result"][1]["eth0"]["ipaddrs"][0]["address"]);
setvalue(ID_LANMAC,$erg["result"][1]["eth0"]["mac"]);
$rx=$erg["result"][1]["eth0"]["stats"]["rx_bytes"]/1000000;
setvalue(ID_LANRX_aktuell,$rx-getvalue(ID_LANRX));
setvalue(ID_LANRX,$rx);
$rx=0;
setvalue(ID_LANTX_aktuell,$erg["result"][1]["eth0"]["stats"]["tx_bytes"]/1000000-getvalue(ID_LANTX));
setvalue(ID_LANTX,$erg["result"][1]["eth0"]["stats"]["tx_bytes"]/1000000);
setvalue(ID_LANSpeed,$erg["result"][1]["eth0"]["link"]["speed"]);
setvalue(ID_LANDuplex,$erg["result"][1]["eth0"]["link"]["duplex"]);
setvalue(ID_WANName,$erg["result"][1]["eth1"]["name"]);
setvalue(ID_WANUP,$erg["result"][1]["eth1"]["up"]);
setvalue(ID_WANIP,$erg["result"][1]["eth1"]["ipaddrs"][0]["address"]);
setvalue(ID_WANMAC,$erg["result"][1]["eth1"]["mac"]);
$rx=$erg["result"][1]["eth1"]["stats"]["rx_bytes"]/1000000;
setvalue(ID_WANRX_aktuell,$rx-getvalue(ID_WANRX));
setvalue(ID_WANRX,$rx);
$rx=0;
setvalue(ID_WANTX_aktuell,$erg["result"][1]["eth1"]["stats"]["tx_bytes"]/1000000-getvalue(ID_WANTX));
setvalue(ID_WANTX,$erg["result"][1]["eth1"]["stats"]["tx_bytes"]/1000000);
setvalue(ID_WANSpeed,$erg["result"][1]["eth1"]["link"]["speed"]);
setvalue(ID_WANDuplex,$erg["result"][1]["eth1"]["link"]["duplex"]);
PHP-Skript: Variablen-Definitionen (wird automatisch erzeugt und sieht dann wie folgt aus…nur mit anderen IDs)
<?
// Erzeugt von INSTALL_SCRIPT
// Variablen-Definitionen für das Haupt-Skript
define ('IP_DEVICE', '10.0.0.191');
define ('ID_Laufzeit', 50164);
define ('ID_Auslastung', 18801);
define ('ID_Speicher_gesamt', 32537);
define ('ID_Speicher_frei', 44953);
define ('ID_Speicher_belegt', 51109);
define ('ID_Hostname', 50074);
define ('ID_Kernel', 40529);
define ('ID_Distribution', 18806);
define ('ID_Version', 13617);
define ('ID_Revision', 16389);
define ('ID_LANName', 46169);
define ('ID_LANUp', 26013);
define ('ID_LANIP', 43910);
define ('ID_LANMAC', 30705);
define ('ID_LANRX', 25221);
define ('ID_LANRX_aktuell', 27297);
define ('ID_LANTX', 52165);
define ('ID_LANTX_aktuell', 46673);
define ('ID_LANSpeed', 46485);
define ('ID_LANDuplex', 19557);
define ('ID_WANName', 50302);
define ('ID_WANUP', 55711);
define ('ID_WANIP', 29091);
define ('ID_WANMAC', 52608);
define ('ID_WANRX', 47610);
define ('ID_WANRX_aktuell', 20233);
define ('ID_WANTX', 51908);
define ('ID_WANTX_aktuell', 25025);
define ('ID_WANSpeed', 33084);
define ('ID_WANDuplex', 12262);
?>