Homematic Adapter und Geräte anzeigen

Mit diesem Script werden die vorhandenen Geräte mit Adresse, Status und Namen angezeigt.

Die im Anhang befindliche Datei in den Ordner scripts kopieren. Im Script die Adresse angeben wo der Bidcos-Servive läuft.

<?
if ($IPS_SENDER == "WebFront") return;

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

$client = new xmlrpc_client("Homeserver:2001"); // Adresse anpassen

//Ab hier nichts mehr ändern
$object = IPS_GetObject($IPS_SELF);
$parentID = $object['ParentID'];

//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, 900);
}

$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, "Information");
    IPS_SetVariableCustomProfile($adresse, "~String");
    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, "Information");
        IPS_SetVariableCustomProfile($connect, "Status");
    }
    SetValue($connect, $result[$i]['CONNECTED']);

   $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, "Information");
        IPS_SetVariableCustomProfile($default, "Default");
    }
    SetValue($default, $result[$i]['DEFAULT']);

}

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;
}
?>

xmlrpc.rar (28.6 KB)

Hallo Rainer,
Wäre diese Info nicht gepinnt im HM Bereich auch ganz gut aufgeboben ?

Gruss
B71

Bei mir wird alles erstellt, aber es steht als inaktiv und offline, alles grün .

:confused:

Geh mal in die Profile, Status und Default. Verändern -> Editieren -> OK.
Jetzt sollte die Anzeige stimmen.

??? das ja auch komisch … nix geändert und dann stimmts danach … :o
In Ips Aktiv und Online alles grün,
Nur im Webfront ists noch falsch da steht Inaktiv und Offline…schön grün hinterlegt auch nach update

F5 hilft. :slight_smile:

bei mir nicht :frowning:
ka ich hab 2 neue Profile erstellt, nu gehts … weiß der Geier

Wer das Script schon laufen hat, bitte noch mal kopieren, hatte noch eine Abfrage vergessen.
Es muss nur ausgetauscht werden, sonst nichts.

Habe versucht das Script zum Laufen zu bringen. Jedoch kommt nur eine Meldung, daß das Script als fehlerhaft markiert wurde. Es ist aber keine Fehlermeldung angezeigt. Kann es daran liegen, daß ich keine CCU habe?

Edit: Hat sich erledigt. Hatte die IP des Lan-Adapters eingestellt und nicht die IP des Servers.

Läuft prima.

Vielen Dank

Hier mal die Liste. Adresse anpassen und ausführen. Sollten neue Geräte hinzugekommen sein, kann man diese einfach über „Auswerten“ einlesen.

Es wird die Datei aus dem ersten Post benötigt! wer diese noch nicht installiert hat.

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

$client = new xmlrpc_client("Homeserver:2001"); // Adresse anpassen

//Ab hier nichts mehr ändern
$object = IPS_GetObject($IPS_SELF);
$parentID = $object['ParentID'];

//Installer
if($IPS_SENDER == "Execute")
{
    IPS_SetHidden($IPS_SELF, false);
   IPS_SetName($IPS_SELF, "Auswertung");
   IPS_SetIcon($IPS_SELF, "Script");
   IPS_SetPosition($IPS_SELF, 1);
   $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_SetIcon($IPS_SELF, "Information");
      IPS_SetName($instanceID, "Homematic Geräte Liste");
      }
}

$list = CreateVariableByName($parentID, "Geräte Liste", 3, "Information", "~HTMLBox", 2);

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

$str = "<table width='100%' border='0' align='center'>";
$str .= "<colgroup><col width='50'><col width='50'><col width='60'><col width='130'><col width='100'><col width='20'><col width='25'></colgroup>";

$str .= "<tr bgcolor=#505050><td><b>Adresse<br>Unteradressen</b></td><td align='center'><b>Typ</b></td><td align='center'><b>AES Aktiv</b></td><td align='center'><b>zugeordnetes Interface</b></td><td align='center'><b>übergeordnetes Gerät</b></td><td align='center'><b>Version</b></td><td align='center'><b>Fw</b></td></tr>";

for($i=0; $i <count($result); $i++)
{
    if(strpos($result[$i]['ADDRESS'], ":") === false)
    {
       $str .= "<tr bgcolor=#404040><td>".$result[$i]['ADDRESS']."</td>";
    }
    else
    {
       $str .= "<tr><td bgcolor=#C08800>".$result[$i]['ADDRESS']."</td>";
    }
     if(substr($result[$i]['TYPE'], 0, 3) == "HM-")
    {
        $str .= "<td align='center'>".$result[$i]['TYPE']."</td>";
        $str .= "<td></td>";
    }
    else
    {
       $str .= "<td bgcolor=#C08800 align='center'>".$result[$i]['TYPE']."</td>";
    }
    
   if(isset($result[$i]['AES_ACTIVE']))
    {
       if($result[$i]['AES_ACTIVE'] == 0)
       {
          $result[$i]['AES_ACTIVE'] = "Nein";
        }
        else
        {
          $result[$i]['AES_ACTIVE'] = "Ja";
        }
        $str .= "<td bgcolor=#C08800 align='center'>".$result[$i]['AES_ACTIVE']."</td>";
        $str .= "<td bgcolor=#C08800></td>";
    }
    if(isset($result[$i]['INTERFACE']))
    {
        $str .= "<td align='center'>".$result[$i]['INTERFACE']."</td>";
        $str .= "<td></td>";
    }
    if(isset($result[$i]['PARENT_TYPE']))
    {
        $str .= "<td bgcolor=#C08800 align='center'>".$result[$i]['PARENT_TYPE']."</td>";
    }
    if(strpos($result[$i]['ADDRESS'], ":") === false)
    {
       $str .= "<td align='center'>".$result[$i]['VERSION']."</td>";
    }
    else
    {
       $str .= "<td align='center' bgcolor=#C08800>".$result[$i]['VERSION']."</td>";
       $str .= "<td bgcolor=#C08800></td>";
    }
    if(isset($result[$i]['FIRMWARE']))
    {
       $str .= "<td align='center'>".$result[$i]['FIRMWARE']."</td></tr>";
    }
}
$str .= "</tr></table>";
SetValue($list, $str);

function CreateVariableByName($id, $name, $type, $icon, $profil, $pos)
{
  global $IPS_SELF;
  $vid = @IPS_GetVariableIDByName($name, $id);
  if($vid === false)
  {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
      IPS_SetPosition($vid, $pos);
        IPS_SetIcon($vid, $icon);
        IPS_SetVariableCustomProfile($vid, $profil);
      IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
  }
  return $vid;
}
?>

hallo…

wollte mir gerade dein Script installieren…
habe beim $client die Adresse der CCU eingegeben, wie beim 1. Script, welches auch funktioniert…

allerdings bekomme ich hier:
Fatal error: Call to a member function kindOf() on a non-object in C:\IP-Symcon\scripts\xmlrpc.inc on line 3289

Hallo Christian,

da ich keine CCU habe, kann ich da leider nichts zusagen.

hallo… schade… naja, vl. findet sich was g

mit dem Port : 2002 funktioniert das script…
nur mit 2001 nicht… wobei ich den port ja in einem anderen script auch schon verwende… also kanns ja an firewall und so nicht liegen…

naja, wenn ich mal mehr zeit hab g
die fehlermeldung kommt mir ja auch ein bisschen bekannt vor hm

auch mit der Tabelle und den richtigen Werten. Port 2002 ist in der CCU für interne Geräte.

ja… da kommen power und sabotage…

aber ich bin schon auf was draufgekommen… ich hab mir mit:
$send = $client->send($abfrage);
print_r($send);

die variable $send ausgeben lassen und da kommt ein xml-error…
also die zeile mit der xml ist 14460 zeichen lang und hört einfach auf.
demnach ~> xml nicht richtig geschlossen ~> kein objekt ~> darum die fehlermeldung Call to a member function kindOf() on a non-object .

sind so jetzt meine spontanen vermutungen…

also wirds wohl an der CCU liegen

nur so zum verständnis,

1: ich hab die datei in den scriptordner kopiert. (vorher entpackt)

2: Kategorie „Homematic Status“ erstellt.

3: Script in der Kategorie erstellt und IP Adresse vom bidcos server angepaßt.

Nu hab ich ein script , das wenn ich im WF starte nur einmal grün aufleuchtet.

Probiert habe ich bereits eine Stringvariable mit dem Script zu verbinden.
Aber auch dieses Textfeld im WF bleibt leer…

Ich mach bestimmt gerade wieder etwas grundsätzliches falsch, oder ?

LG
Sascha

stringvariable?

Klick mal im Script auf ausführen, das wird alles automatisch angelegt.

Das Script kannst Du ausblenden.

Für die Liste nimm das hier, es ist komfortabler.

oh…das wars natürlich :slight_smile:

jetzt wird mein LAN Adapter angezeigt…

Muß ich nun noch das script für die liste aller homematic geräte (ein paar posts obendrüber)
in die kategorie packen ?

LG
Sascha

siehe Link obendrüber!!!

Hier hast auch noch eine Mailmeldung wenn einer ausfällt. :slight_smile:

<?
$adapter1 = GetValue(51510 /*[Homematic\Homematic Interfaces\Lan-Adapter Obergeschoss: Status]*/);
$adapter2 = GetValue(11391 /*[Homematic\Homematic Interfaces\Lan-Adapter Erdgeschoss: Status]*/);

if(!$adapter1)
{
    SMTP_SendMail(22895 /*[MailServer]*/, "Lanadapter Obergeschoss", "Offline!");
}
if(!$adapter2)
{
    SMTP_SendMail(22895 /*[MailServer]*/, "Lanadapter Erdgeschoss", "Offline!");
}
?>