Verbindungsstatus vom Funk-LAN-Gateway in IPS überwachen ?

Hallo allerseits!

Kennt jemand eine Möglichkeit, wie man den Verbindungsstatus vom Funk-LAN-Gateway in IPS überwachen kann? Entweder über die Webseite irgendwie auslesen oder noch besser über SSH auslesen?

Dieser ist manuell über die HomeMatic CCU2 Weboberfläche unter „Einstellungen > Systemsteuerung > LAN Gateway“ im Feld „Status“ abzulesen. Aber das geht doch sicher irgendwie mit einem Skript!? :slight_smile:

Danke im Voraus und Grüße,
Chris

LÖSUNG >> http://www.ip-symcon.de/forum/threads/27329-Verbindungsstatus-vom-Funk-LAN-Gateway-in-IPS-überwachen?p=251269#post251269

Ja, das geht. Bevor ich den Thread hier im Forum suche aus dem das hier her habe poste ich es ganz einfach:


<?

if ($_IPS['SENDER'] == "WebFront") return;

include IPS_GetKernelDir()."scripts\\xmlrpc.inc";

$CCUIP = GetValue(11459 /*[Haustechnik\IP-Adressen\CCU]*/);
$client = new xmlrpc_client($CCUIP.":2001"); // Adresse anpassen

//Ab hier nichts mehr ändern
$object = IPS_GetObject($_IPS['SELF']);
$parentID = $object['ParentID'];
$alarm = "";
$zaehlerID = 18746 /*[Haustechnik\Homematic Devices\Zentralen\Statuszaehler]*/;

//Installer
if ($_IPS['SENDER'] == "Execute")
{
  IPS_SetHidden($_IPS['SELF'], true);
  IPS_SetName($_IPS['SELF'], "Auswertung");
  $parentObject = IPS_GetObject($parentID);
  if ($parentObject['ObjectType'] !== 1)
  {
      $instanceID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
      IPS_SetParent($instanceID, $parentID);
      $parentID = $instanceID;
      IPS_SetParent($_IPS['SELF'], $parentID);
      IPS_SetName($instanceID, "Homematic Interfaces");
  }
  IPS_SetScriptTimer($_IPS['SELF'], 120);
}

$abfrage = new xmlrpcmsg("listBidcosInterfaces");
$send = $client->send($abfrage);
$result = php_xmlrpc_decode($send->value());

for($i=0; $i <count($result); $i++)
{
    $adresse = CreateVariableByName($parentID, $result[$i]['DESCRIPTION'].": Adresse", 3);
    IPS_SetIcon($adresse, "Info-48");
    IPS_SetVariableCustomProfile($adresse, "~String");
    if (GetValue($adresse) <> $result[$i]['ADDRESS']) SetValue($adresse, $result[$i]['ADDRESS']);

    $connect = CreateVariableByName($parentID, $result[$i]['DESCRIPTION'].": Status", 0);
    if(!IPS_VariableProfileExists("Status"))
    {
        IPS_CreateVariableProfile("Status", 0);
        IPS_SetVariableProfileAssociation("Status", 1, "Online", "");
        IPS_SetVariableProfileAssociation("Status", 0, "Offline", "");
    }
    $action = IPS_GetVariable($connect);
    if($action['VariableCustomAction'] == 0)
    {
        IPS_SetVariableCustomAction($connect, $_IPS['SELF']);
        IPS_SetIcon($connect, "ampel_gelb");
        IPS_SetVariableCustomProfile($connect, "Status");
    }
    if (GetValue($connect) <> $result[$i]['CONNECTED']) SetValue($connect, $result[$i]['CONNECTED']);
    if ($result[$i]['CONNECTED'] == 1)
    {
		  $alarm = $alarm.$result[$i]['DESCRIPTION']." - ONLINE
";
		  SetValue($zaehlerID, 0);
	 }
	 else
	 {
		  $alarm = $alarm.$result[$i]['DESCRIPTION']." - OFFLINE
";
		  SetValue($zaehlerID, GetValue($zaehlerID) + 1);
	 }

   $default = CreateVariableByName($parentID, $result[$i]['DESCRIPTION'].": Default", 0);
    if(!IPS_VariableProfileExists("Default"))
    {
        IPS_CreateVariableProfile("Default", 0);
        IPS_SetVariableProfileAssociation("Default", 1, "Aktiv", "");
        IPS_SetVariableProfileAssociation("Default", 0, "Inaktiv", "");
    }
    $action = IPS_GetVariable($default);
    if($action['VariableCustomAction'] == 0)
    {
        IPS_SetVariableCustomAction($default, $_IPS['SELF']);
        IPS_SetIcon($default, "Ok-32");
        IPS_SetVariableCustomProfile($default, "Default");
    }
    if (GetValue($default) <> $result[$i]['DEFAULT']) SetValue($default, $result[$i]['DEFAULT']);

}

if (GetValue($zaehlerID) <> 0)
{
   include('ProwlPHP.php');
	$Betreff   = "LAN-Adapter Status kritisch!";
	$Nachricht = $alarm."
";

	$array = array(
	   "Betreff" => $Betreff,
	   "Nachrichtentext" => $Nachricht.date("d.m.Y",time())." / ".date("H:i",time())." Uhr.",
	   "NachrichtentextUTF8" => utf8_encode($Nachricht.date("d.m.Y",time())." / ".date("H:i",time())." Uhr."),
	   "application" => "IP-Symcon",
	   "priority" => 1,
	   );

	IPS_RunScriptEx(18090 /*[Email und Termine\Email Versand IP-Symcon]*/, $array); // Email versenden
	IPS_RunScriptEx(56778 /*[Skripte allgemein\Prowl Pushdienst\Prowl Ausgangsmodul]*/, $array); // Prowl versenden
}

function CreateVariableByName($id, $name, $type)
{
  //global $_IPS['SELF'];
  $vid = @IPS_GetVariableIDByName($name, $id);
  if($vid === false)
  {
        $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
      IPS_SetInfo($vid, "this variable was created by script #".$_IPS['SELF']);
  }
  return $vid;
}
?>

Nachtrag: Funktioniert nicht mit dem RF-GateWay im CCU2-Design sondern nur mit den runden LAN-Adaptern.

Danke kronos!

Leider habe ich den neuen Funk-LAN-Gateway im CCU2 Design :frowning:

Hat da vlt. auch jemand so eine schöne Lösung?

Danke und Grüße,
Chris

Eine fertige Lösung nicht, aber man könnte auf der CCU2 die Status-Datei prüfen:

Diese liegt unter „/var/status“ und heißt „<Seriennummer_des_GWs>.connstat“ und hat im Normalbetrieb den Inhalt „NO_ERROR“.
Nur als Ansatz …

EDIT: hatte bisher noch nicht getestet wann und wie die sich ändert - müsste man mal ausprobieren.

Beste Grüße
/Jens

Nur die Frage warum die neuen nicht bei listBidcosInterfaces auftaucht… könnte man ja noch mal mit dem binrpc Testtool schauen was da so passiert. Ich habe nur keines der neuen GW, würde mich aber schon interessieren.
Michael

DANKE JENS!

Genau das ist die Lösung :slight_smile:

Wenn das neue Funk-LAN-Gateway nicht verbunden ist, dann steht da statt „NO_ERROR“ das drinne >> „NOT_CONNECTED“ :slight_smile:

Jetzt brauch ich das nur noch über SSH mit „cat /var/status/KEQ*******.connstat“ auslesen und schon habe ich den Status :slight_smile:

Grüße,
Chris

Falls jemand das auch machen möchte…funktioniert wirklich gut und ein nicht verbundenes Gateway wird binnen Sekunden erkannt :cool:

<?
// Quelle für SSH: http://phpseclib.sourceforge.net/
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');  
include 'Net/SSH2.php';

$Benutzer = GetValue(36437 /*[Skripte & Variablen\HomeMatic\CCU2 Einstellungen\CCU2-SSH_Benutzername]*/);
$Passwort = GetValue(50331 /*[Skripte & Variablen\HomeMatic\CCU2 Einstellungen\CCU2-SSH_Passwort]*/);
$IP = GetValue(27086 /*[Skripte & Variablen\HomeMatic\CCU2 Einstellungen\CCU2_IP]*/);
$FunkLANgateway_STATUS = 46523 /*[Skripte & Variablen\HomeMatic\Funk-LAN-Gateway überwachen\Status]*/ ;


$ssh = new Net_SSH2($IP);
if (!$ssh->login($Benutzer, $Passwort)) {
    return('Login Failed');
}
// In der nächsten Zeile müsst ihr die Seriennummer eures Gateways eintragen
$status = $ssh->exec('cat /var/status/KEQ*******.connstat|grep "NO_ERROR"|grep -v grep|wc -l');

if ($status == 1) {
	SetValue($FunkLANgateway_STATUS, true);  // OK
}
else {
   SetValue($FunkLANgateway_STATUS, false);  // NOT_CONNECTED oder sonstiges
}
?>

Cool! :cool:

Rein instinktiv hätte ich auf „NO_ERROR“ ge-grep’ed und das IF gedreht, da man ja nicht weiß, was eq3 da evtl. noch an Zuständen reinschreiben könnte.

Ich schau mal ob ich das Skript identifizieren kann, dass den Status erzeugt - dann wissen wir’s genau :wink:

Beste Grüße
/Jens

Hmmm…is was dran, an sich wollte ich das genau so, weil man ja die sonstigen möglichen Zustände nicht kennt…ich hab irgendwie falsch rum gedacht :smiley: …Kopf heut nix fit…

Wäre cool, wenn du da noch was rausfinden könntest :slight_smile:

Grüße,
Chris

Ist wie die Heunadel im Steckhaufen … ich find’s nicht!? :mad: Der Status kommt aber höchstwahrscheinlich nicht aus einem Script.

Im laufenden Betrieb hatte ich bisher äußerst selten (keine?) Probleme mit den GWs. Hin und wieder kam es vor, dass sich beim Reboot der CCU2 ein GW nicht wieder verbunden hat. Seitdem ich „AutoIP“ direkt im GW deaktiviert habe ist das bis jetzt nicht mehr vorgekommen.

Beste Grüße
/Jens