Hallo Freunde
hab hier ein kleines Script für euch welches von allen zWave Nodes die Routingtabelle ausleist und im WF darstellt.
Sortiert ist die Ausgabe nach Anzahl der Nachbarnodes.
So sollte es bei zickenden Nodes leichter sein rauszufinden über welche Nachbarn die überhaupt erreichbar sind.
Zu beachten ist allerdings das IPS offensichtlich alle Nachbarn auflisted, auch solche welche nicht routingfähig sind den aktiven Node nur benützen um ihre eigenen Telegramme abzusetzen.
$KnownDevices=ZW_GetKnownDevices(30164 /*[Z-Wave Configurator]*/);
$DeviceInfo = array();
$RoutingList = array();
/* Instance Name hinzufügen und Sub Device entfernen */
foreach($KnownDevices as $key=>$Device) {
$KnownDevices[$key]['InstanceName']= IPS_GetName($Device['InstanceID']);
if ($KnownDevices[$key]['NodeSubID'] >0) unset ($KnownDevices[$key]);
}
/* Array mit Index = NodeID bauen */
$DeviceNames = array();
foreach($KnownDevices as $key=>$Device) {
$NodeID = $Device['NodeID'];
$DeviceNames[$NodeID]['InstanceName'] = IPS_GetName($Device['InstanceID']);
}
/* Routing Liste hinzufügen */
foreach($KnownDevices as $key=>$Device) {
if ($Device['InstanceID'] <> 0) {
$RoutingList = (ZW_RequestRoutingList($Device['InstanceID']));
sort($RoutingList);
$List = "";
$RouteCount = 0;
foreach ($RoutingList as $Route) {
$List = $List.$DeviceNames[$Route]['InstanceName'].", ";
$RouteCount++;
}
$KnownDevices[$key]['RoutingList'] = $List;
$KnownDevices[$key]['RouteCount'] = $RouteCount;
}
}
/* Controler rauslöschen */
foreach($KnownDevices as $key=>$Device) {
if ($KnownDevices[$key]['InstanceID'] == 0) unset ($KnownDevices[$key]);
}
/* Ausgabe bauen, Index ist anzahl der Routes */
$OutputList = array();
foreach($KnownDevices as $key=>$Device) {
$Index = $Device['RouteCount'];
$OutputList[$Index]['NodeID'] = $Device['NodeID'];
$OutputList[$Index]['InstanceName'] = $Device['InstanceName'];
$OutputList[$Index]['RoutingList'] = $Device['RoutingList'];
}
/* Nach Anzahl der routes sortieren */
ksort($OutputList);
//print_r ($OutputList);
// print_r ($KnownDevices);
$Nodes ="";
$Routes ="";
$Count ="";
$html ='<style>
div.table {
display: table;
border-collapse:collapse;
}
div.tr {
display:table-row;
}
div.th {
display:table-cell;
border:thin solid grey;
padding:5px;
padding-left:1em;
font-weight: bold;
}
div.td {
display:table-cell;
border:thin solid grey;
padding:5px;
padding-left:1em;
font-size: small;
}
</style>
';
$html.='<div class="table">';
$html.='<div class="tr">';
$html.='<div class="th">Node</div>';
$html.='<div class="th">Anzahl d. Nachbarn</div>';
$html.='<div class="th">in Reichweite befindliche Nachbarnodes</div>';
$html.='</div>';
foreach($OutputList as $key=>$Device) {
$Nodes = $Nodes.$OutputList[$key]['InstanceName']."
";
$Count = $Count.$key."
";
$Routes = $Routes.$OutputList[$key]['RoutingList']."
";
$html.='<div class="tr">';
$html.='<div class="td">'.$OutputList[$key]['InstanceName'].'</div>';
$html.='<div class="td">'.$key.'</div>';
$html.='<div class="td">'.$OutputList[$key]['RoutingList'].'</div>';
$html.='</div>';
}
$html.= '</div>';
SetValue(44662 /*[gemeinsame Objekte\Z-Wave\FindRoutes\Table]*/,$html);
?>