[Modul] IPS-ZWMonitor

Hallo,

ich bin gerade dabei ein Modul zu schreiben, mit dem es möglich ist sein Z-Wave Netzwerk etwas zu überwachen.
Bis jetzt habe ich die Verknüpfung der verschiedenen Nodes visuell dargestellt.

Das Modul wird in verschiedene Untermodule (zur Zeit gibt es nur die Visualisierung) unterteilt:

IPS-ZWMonitorSplitter
Hier wird die Grundkonfiguration eingetragen. Es müssen Z-Wave Gateway und der Z-Wave Konfigurator hinterlegt werden.

IPS-ZWMonitorVisu
Das Modul zeigt die Visualisierung des Z-Wave Routings.
Mit einem Doppelklick auf einen Node, sieht man direkt mit welchem Nodes dieser Knoten verbunden ist, hält man etwas länger mit der Maus auf einen Node, sieht man den Namen.
Hier kann in der Konfiguration noch ein Timer eingestellt werden, wie oft die Visualisierung neu abgefragt werden soll.

Installation:

Git URL unter Module eintragen:

https://github.com/Schnittcher/IPS-ZWMonitor.git

Bekannte Probleme:

Zur Zeit wird noch die JavaScript Datei über das Internet abgefragt, diese muss noch im Modul hinterlegt werden.

Grüße,
Kai

25.04.2017: V0.2 online

[ul]
[li] Batteriebetriebene Geräte können in der Visu ein- bzw. ausgeblendet werden
[/li][/ul]
27.04.2017: V0.3 online

[ul]
[li] Neues Modul: IPS-ZWNodeTest
[/li][li] Mit diesem Modul können, die unterschiedlichen Knotenpunkte durchgehend getestet werden (Timer kann in der Konfiguration angepasst werden).
[/li][/ul]

Bei mir kommt leider dieser Fehler

paresy

Hallo paresy,

sorry, Fehler sollte behoben sein.

Grüße,
Kai

Moin,
ich habe das Modul auch gerade mal bei Schwiegereltern installiert. IPS läuft auf einem Raspberry.
Bei mir bleibt die Visu aber leer. Es wird mir nicht angezeigt. Habe den Intervall mal auf 60 Sekunden gesetzt,
denoch keine Netzwerkübersicht.
Liegt das an Java in Verbindung mit dem Raspberry?

Gruß,
Peter

Hallo,

nein, das ist nur JavaScript, das wird zur Zeit aber noch aus dem Internet geladen, also wenn du keine Internetverbindung haben solltest, dann kann es nicht geladen werden. Siehst du denn Fehler im Log?

Grüße,
Kai

Moin Kai,
keine Fehlermeldung, Internetverbindung vorhanden, da ich über den Connect-Dienst auf den Raspberry zugreife.
Es wird einfach nix angezeigt bei mir.
Gruß,
Peter

Moin Peter,

aber der Splitter ist mit Konfiguration vorhanden?

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

So, nun gehts. Eben ein Update von symcon gemacht… dann hatte ich plötzlich eine 2. Splitterinstanz.
Diese gelöscht, die alte in die Instanz eingetragen und siehe da, ich hab ne Grafik!

Bildschirmfoto 2017-04-23 um 18.38.32.png

Wow, perfekt verknüpft, mach mal einen Doppelklick auf einen Node und schau mal ob das bei dir funktioniert.

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

Ach wie geil ist das denn?! Cool… hatte vorhin nur die Mouse-Over Funktion gesehen.
Sehr, sehr geiles Modul!!

1000 Dank für Teilen…

Gruß,
Peter

Hi Kai,

cooles Module, Danke.
Bei mir hat es auch 2mal die Splitterinstanz angelegt. -> eine gelöscht.
Bei mir sieht die Visu leider wie folgt aus (wobei mein Netz aus mehr als einem 1/4 Note besteht :confused:)
Mesh.jpg
Gruß
hardlog

Hallo hardlog,

das passiert wenn die Verknüpfungen anscheinend im Script zum darstellen nicht passen, kannst du mir mal den Inhalt der Variable zukommen lassen?

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

Klar:

<!DOCTYPE html>
     <meta charset="utf-8">
     <style>

     .links line {
       stroke: #999;
       stroke-opacity: 0.6;
     }

     .nodes circle {
       stroke: #fff;
       stroke-width: 1.5px;
     }

     </style>
     <svg width="960" height="600"></svg>
     <script src="https://d3js.org/d3.v4.min.js"></script>
     <script>var myjson ='{\"nodes\":[{\"id\":\"Node 4\",\"name\":\"Z-Wave Switch Mediawand ganz rechts (NodeID 004)\",\"group\":1},{\"id\":\"Node 19\",\"name\":\"Z-Wave Switch (NodeID 019) Fake TV +\",\"group\":1},{\"id\":\"Node 2\",\"name\":\"Z-Wave Binary Sensor  Fibaro Motion (NodeID 002)\",\"group\":1},{\"id\":\"Node 10\",\"name\":\"Z-Wave Switch (NodeID 010) Zwischenstecker 2 Spot\",\"group\":1},{\"id\":\"Node 12\",\"name\":\"Z-Wave Switch (NodeID 012) SteckdoseTerasse Ost\",\"group\":1},{\"id\":\"Node 5\",\"name\":\"Z-Wave Switch (NodeID 005) Stehlampe links\",\"group\":1},{\"id\":\"Node 3\",\"name\":\"Z-Wave Dimmer (NodeID 003)\",\"group\":1}],\"links\":[{\"source\":\"Node 4\",\"target\":\"Node 2\",\"value\":1},{\"source\":\"Node 4\",\"target\":\"Node 3\",\"value\":1},{\"source\":\"Node 4\",\"target\":\"Node 5\",\"value\":1},{\"source\":\"Node 4\",\"target\":\"Node 6\",\"value\":1},{\"source\":\"Node 4\",\"target\":\"Node 10\",\"value\":1},{\"source\":\"Node 4\",\"target\":\"Node 12\",\"value\":1},{\"source\":\"Node 4\",\"target\":\"Node 19\",\"value\":1},{\"source\":\"Node 19\",\"target\":\"Node 3\",\"value\":1},{\"source\":\"Node 19\",\"target\":\"Node 4\",\"value\":1},{\"source\":\"Node 19\",\"target\":\"Node 5\",\"value\":1},{\"source\":\"Node 19\",\"target\":\"Node 6\",\"value\":1},{\"source\":\"Node 19\",\"target\":\"Node 10\",\"value\":1},{\"source\":\"Node 19\",\"target\":\"Node 12\",\"value\":1},{\"source\":\"Node 2\",\"target\":\"Node 4\",\"value\":1},{\"source\":\"Node 2\",\"target\":\"Node 5\",\"value\":1},{\"source\":\"Node 2\",\"target\":\"Node 6\",\"value\":1},{\"source\":\"Node 2\",\"target\":\"Node 12\",\"value\":1},{\"source\":\"Node 10\",\"target\":\"Node 3\",\"value\":1},{\"source\":\"Node 10\",\"target\":\"Node 4\",\"value\":1},{\"source\":\"Node 10\",\"target\":\"Node 5\",\"value\":1},{\"source\":\"Node 10\",\"target\":\"Node 12\",\"value\":1},{\"source\":\"Node 10\",\"target\":\"Node 19\",\"value\":1},{\"source\":\"Node 12\",\"target\":\"Node 2\",\"value\":1},{\"source\":\"Node 12\",\"target\":\"Node 3\",\"value\":1},{\"source\":\"Node 12\",\"target\":\"Node 4\",\"value\":1},{\"source\":\"Node 12\",\"target\":\"Node 5\",\"value\":1},{\"source\":\"Node 12\",\"target\":\"Node 6\",\"value\":1},{\"source\":\"Node 12\",\"target\":\"Node 10\",\"value\":1},{\"source\":\"Node 12\",\"target\":\"Node 19\",\"value\":1},{\"source\":\"Node 5\",\"target\":\"Node 2\",\"value\":1},{\"source\":\"Node 5\",\"target\":\"Node 3\",\"value\":1},{\"source\":\"Node 5\",\"target\":\"Node 4\",\"value\":1},{\"source\":\"Node 5\",\"target\":\"Node 6\",\"value\":1},{\"source\":\"Node 5\",\"target\":\"Node 10\",\"value\":1},{\"source\":\"Node 5\",\"target\":\"Node 12\",\"value\":1},{\"source\":\"Node 5\",\"target\":\"Node 19\",\"value\":1},{\"source\":\"Node 3\",\"target\":\"Node 4\",\"value\":1},{\"source\":\"Node 3\",\"target\":\"Node 5\",\"value\":1},{\"source\":\"Node 3\",\"target\":\"Node 6\",\"value\":1},{\"source\":\"Node 3\",\"target\":\"Node 10\",\"value\":1},{\"source\":\"Node 3\",\"target\":\"Node 12\",\"value\":1},{\"source\":\"Node 3\",\"target\":\"Node 19\",\"value\":1}]}';var svg = d3.select("svg"),
         width = +svg.attr("width"),
         height = +svg.attr("height");

     var color = d3.scaleOrdinal(d3.schemeCategory20);

     var simulation = d3.forceSimulation()
         .force("link", d3.forceLink().distance(80).id(function(d) { return d.id; }))
         .force("charge", d3.forceManyBody())
         .force("center", d3.forceCenter(width / 2, height / 2));

     var graph = JSON.parse(myjson);

         var link = svg.append("g")
           .attr("class", "links")
         .selectAll("line")
         .data(graph.links)
         .enter().append("line")
           .attr("stroke-width", function(d) { return Math.sqrt(d.value); });

       var node = svg.append("g")
           .attr("class", "nodes")
         .selectAll("circle")
         .data(graph.nodes)
         .enter().append("circle")
           .attr("r", 5)
           .attr("fill", function(d) { return color(d.group); })
           .call(d3.drag()
               .on("start", dragstarted)
               .on("drag", dragged)
               .on("end", dragended))
           .on("dblclick", connectedNodes);

       node.append("title")
           .text(function(d) { return d.name; });

       simulation
           .nodes(graph.nodes)
           .on("tick", ticked);

       simulation.force("link")
           .links(graph.links);

       function ticked() {
         link
             .attr("x1", function(d) { return d.source.x; })
             .attr("y1", function(d) { return d.source.y; })
             .attr("x2", function(d) { return d.target.x; })
             .attr("y2", function(d) { return d.target.y; });

         node
             .attr("cx", function(d) { return d.x; })
             .attr("cy", function(d) { return d.y; });
       }

     function dragstarted(d) {
       if (!d3.event.active) simulation.alphaTarget(0.3).restart();
       d.fx = d.x;
       d.fy = d.y;
     }

     function dragged(d) {
       d.fx = d3.event.x;
       d.fy = d3.event.y;
     }

     function dragended(d) {
       if (!d3.event.active) simulation.alphaTarget(0);
       d.fx = null;
       d.fy = null;
     }

     //Toggle stores whether the highlighting is on
     var toggle = 0;
     //Create an array logging what is connected to what
     var linkedByIndex = {};
     for (i = 0; i < graph.nodes.length; i++) {
         linkedByIndex[i + "," + i] = 1;
     };
     graph.links.forEach(function (d) {
         linkedByIndex[d.source.index + "," + d.target.index] = 1;
     });
     //This function looks up whether a pair are neighbours
     function neighboring(a, b) {
         return linkedByIndex[a.index + "," + b.index];
     }
     function connectedNodes() {
         if (toggle == 0) {
             //Reduce the opacity of all but the neighbouring nodes
             d = d3.select(this).node().__data__;
             node.style("opacity", function (o) {
                 return neighboring(d, o) | neighboring(o, d) ? 1 : 0.1;
             });
             link.style("opacity", function (o) {
                 return d.index==o.source.index | d.index==o.target.index ? 1 : 0.1;
             });
             //Reduce the op
             toggle = 1;
         } else {
             //Put them back to opacity=1
             node.style("opacity", 1);
             link.style("opacity", 1);
             toggle = 0;
         }
     }
     </script>

hardlog

Wow
Funktioniert einwandfrei, danke!! :cool:

Hallo KaiS,

bei mir sieht es genau so aus wie beim hardlog.

Oben Links 1/4 Punkt.

IPS 4.2 auf Ubuntu

Gruß

Bei dir scheint Node 6 in der Liste zu fehlen. Was ist das für ein Gerät?
Es wird versucht die Geräte, die Node 6 in der Routing Liste haben mit diesem Gerät in der Visu zu verknüpfen, aber es wird nicht angelegt in der Visu.

@sewo, sowas wird es bei dir auch sein, könnte ich ebenfalls prüfen, wenn du mir den Inhalt der Variable zukommen lässt.

Grüße,
Kai

Hi Kai,

Bei dir scheint Node 6 in der Liste zu fehlen. Was ist das für ein Gerät?
Es wird versucht die Geräte, die Node 6 in der Routing Liste haben mit diesem Gerät in der Visu zu verknüpfen, aber es wird nicht angelegt in der Visu.

Note 6 ist ein Switch mit 2 Untergeräten.
NOtes.JPG

Hardlog

Interessant die NodeID ist aber 1! Und die NodeID 1 wird in der Visu ignoriert.
Warum hat der Switch die NodeID 1?

Grüße,
Kai

Gesendet von iPhone mit Tapatalk

Gute Frage,

würde fast behaupten, das es nicht schon immer so war?!

hardlog