Mesh Konfiguration auslesen

Vielen Dank @jeep für deine Infos!
Werde mal etwas rumexperimentieren :wink:

Kurze Zwichenfrage:

Gibt es ein Script mit dem ich alle ID’s auflisten kann mit dem Namen?
Verliere etwas die Übersicht welches Gerät zu welcher ID gehört. Speziell
heute morgen hat es mir oben angezeigt das was mit der ID 405 nicht stimmt,
bis ich jetzt rausgefunden habe welches Modul das ist…

Hi,

das passt jetzt nicht zum Mesh Thema, aber probier mal das. Vielleicht hilft es Dir dass nächste mal beim suchen.

--[[
--]]

-- Copyleft  2018  {jeep}
-- Szene auf manuell starten setzen
local Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span"))
end

alldevices = api.get('/devices/?enabled=true&isPlugin=false');

function checkDevIDs() 
  for id=1, #alldevices do
      if tonumber(alldevices[id].parentId) == 1 then 
         Debug('cyan','Master ID: ' ..alldevices[id].id  )
      else 
         print('ID: ' ..alldevices[id].id ..' - '..alldevices[id].name )
      end
  end    
end
 

checkDevIDs()

Hi Jeep,

vielen Dank :slight_smile:

/André

Hallo zusammen,
mal ein kleines update zum Mesh-Script. Keine großen Änderungen aber die Zusammenfassung am Ende zeigt jetzt die Anzahl der Geräte mit der Anzahl der hops.

Beispiel:
[DEBUG] 15:34:58: Direkte routen, [1] zum HC2: 54
[DEBUG] 15:34:58: Routen über 1 hop, zum HC2 : 13
[DEBUG] 15:34:58: Routen über 2 hops zum HC2 : 6
[DEBUG] 15:34:58: Routen über 3 hops zum HC2 : 2
[DEBUG] 15:34:58: Routen über 4 hops zum HC2 : 1
[DEBUG] 15:34:58: -------------------------------
[DEBUG] 15:34:58: Devices ohne Nachbarn [] : 7
[DEBUG] 15:34:58: Devices ohne routen [] : 8

 --[[
%% properties
--]]
 
-- File    : RoutingInfo.lua
-- Version : 0.1.4  {07.01.2019}
-- nach einer Vorlage aus dem Fibaro Forum (thanks @tinmann)
-- Build on FW 4.510 {08-2018 } Ändy, Gerhard, Jeep
-- 
-- Abkürzung : working route respose time = WRRT
 
local Debug = function ( color, message )
  fibaro:debug(string.format('<%s style="font-family:Courier New;font-size:12px;color:%s;">%s', "span", color, message, "span"))
end
 
local function getSNamebyID(sectionID)
  --fibaro:debug (sectionID)
      if tonumber(sectionID) > 0 then
        local section = api.get("/sections/" .. tostring(sectionID))
        return string.sub(tostring(section.name),1, 10)
     end
   return 'No section'  
end
 
local function getSectionNameByDeviceID(DevID)
  	if DevID == nil then 
    	return 'nil'
    else
		local sectionID = fibaro:getSectionID(DevID)
    	if sectionID == nil then
      		return 'nil'
      	else
  			return getSNamebyID(sectionID)
      	end
    end
end

local function countc(s,c)
  local _,n = s:gsub(c,"")
  if (n==1) then r1h = r1h +1 
     elseif n==2 then r2h = r2h +1
     elseif n==3 then r3h = r3h +1 
     elseif n==4 then r4h = r4h +1 
  end
end
 
local filter = '/devices/?enabled=true&isPlugin=false'
local allDevices = api.get(filter)
local html = true
local output = ''
if (html == false) then d = true 
  elseif ( html == true) then d = false;Debug('cyan','Daten werden im HTML Format ausgegeben - Bitte warten...')   
end
local nn,r,nr=0,0,0
r1h,r2h,r3h,r4h=0,0,0,0
local n=1 --nur Geräte mit parentId = 1
for id = 1, #allDevices do
  if (allDevices[id].parentId == 1 )  then
     local mDevID = allDevices[id].id
     if mDevID ~= nil then
        local name = fibaro:getName(mDevID+1) 
        if name == nil then 
           name = "No Name"
        end 
    
        if(tonumber(allDevices[id+1].roomID) == 0) then
          room = 'No room';
        else
          room = fibaro:getRoomNameByDeviceID(allDevices[id+1].id)
        end
   
        local section = getSectionNameByDeviceID(mDevID+1)
        if section == nil then
           section = "No Name"
        end 

       -- api.post('/devices/'.. mDevID ..'/action/getNeighborList') 
        thisDev = "Neighbours of device " .. mDevID ..') '..name ..' (' .. room .. '|' .. section .. ') : ' .. fibaro:getValue(mDevID, "neighborList")
        if thisDev:find("%p[%p]") then 
           Debug('red','Device '.. name..'('..mDevID..')'.. ' hat keine Nachbarn')
           nn = nn + 1 
        end 
        if html then output = "<pre>"..output..thisDev.."</pre>" end
        if d then Debug('withe', thisDev) end
 
        local lwr = fibaro:getValue(mDevID, "lastWorkingRoute")      
        thisDevRoute = "Last working route used by device " .. mDevID .. " : " .. lwr
        if thisDevRoute:find("%p[%p]") then 
           Debug('orange', 'Device ' ..name..'('..mDevID..')'.. ' hat keine Routen') 
           nr = nr +1
        end    
        if string.len(lwr) == 3 then r = r +1 
           else
           countc(lwr,',')
        end
        if html then output = "<pre>"..output..thisDevRoute.."</pre>" end  
        if d then Debug('withe', thisDevRoute) end
  
        thisDevTimeStamp = tonumber(fibaro:getValue(mDevID, "lastWorkingRouteResponseTimestamp"))  
        thisDevLWRRTime  = "Last WRRT for device ".. mDevID .. ': '.. (os.date("%X  - %d %b. %y", thisDevTimeStamp ))
        if html then output = "<pre>"..output..thisDevLWRRTime.."</pre>"..n..'-- <br />' end
        --if d then Debug('yellow', thisDevLWRRTime) end
        
        if d then Debug('cyan', n..'--') end
        n =n+1 
        fibaro:sleep(100)  
     end
  end
end --for
 
Debug('cyan', output) 
Debug('green',"Direkte routen, [1] zum HC2: "..r)
Debug('green',"Routen über 1 hop, zum HC2 : "..r1h)
Debug('green',"Routen über 2 hops zum HC2 : "..r2h)
Debug('green',"Routen über 3 hops zum HC2 : "..r3h)
Debug('green',"Routen über 4 hops zum HC2 : "..r4h)
Debug('white',"-------------------------------")
Debug('red',  "Devices ohne Nachbarn [] : "..nn)
Debug('orange',"Devices ohne routen [] : "..nr)

Danke @jeep für diese Erweiterung.
Konnte damit herausfinden dass ich 43 Devices ohne Nachbarn und 15 ohne Routen hab, sind das bei euch auch so viele ??
Weiters würde ich gerne rausfinden welches Device 4 Hops brauch, kann ich das irgendwie aus dem Debug entnehmen??


[DEBUG] 10:36:31: Direkte routen, [1] zum HC2: 31
[DEBUG] 10:36:31: Routen über 1 hop, zum HC2 : 18
[DEBUG] 10:36:31: Routen über 2 hops zum HC2 : 9
[DEBUG] 10:36:31: Routen über 3 hops zum HC2 : 0
[DEBUG] 10:36:31: Routen über 4 hops zum HC2 : 1
[DEBUG] 10:36:31: -------------------------------
[DEBUG] 10:36:31: Devices ohne Nachbarn [] : 43
[DEBUG] 10:36:31: Devices ohne routen [] : 15

@pblacky, das ist enorm viel, warte mal einen Tag ob es sich bessert. Eventuell hat das mit Deinem letzten update zu tun.
Leider sieht man (noch) nicht sofort welche devices 4 hops brauchen, aber wenn Du die Debug-ausgabe genau anschaust müsstest
Du das an irgendeiner “Last working route” erkennen. Sieht dann ungefähr so aus: Last working route used by device 268 : [1,255,135,171,165]
Da sollten außer der 1 noch 4 andere IDs in der Zeile stehen.

Danke @jeep, für deine Hilfe!
Da sich nach einigen Tagen nichts an der Anzahl der 43 Devices ohne Nachbarn geändert hat, habe ich mal vor ca. 5 Tagen eine Mesh Netzwerkrekonfiguration für das gesamte MESH Netzwerk gemacht.
Es hat sich bis heute trotzdem nichts daran geändert, dass von knapp 80 Geräten 43 keine Nachbarn finden, sehr komisch…
Hab ich eventuell bei den Einstellungen etwas falsch.
Was bedeutet z.B. Netzknoten als inaktiv markieren (siehe Anhang)

2019-01-12-Settings.jpg

@jeep, danke fürs Update. Läuft.

@pblacky, hier zum Vergleich meine Statistik:
[DEBUG] 09:18:15: Direkte routen, [1] zum HC2: 24
[DEBUG] 09:18:15: Routen über 1 hop, zum HC2 : 9
[DEBUG] 09:18:15: Routen über 2 hops zum HC2 : 5
[DEBUG] 09:18:15: Routen über 3 hops zum HC2 : 0
[DEBUG] 09:18:15: Routen über 4 hops zum HC2 : 0
[DEBUG] 09:18:15: -------------------------------
[DEBUG] 09:18:15: Devices ohne Nachbarn [] : 0
[DEBUG] 09:18:15: Devices ohne routen [] : 0

Schon merkwürdig bei Dir.
Ich denke “tote Netzwerkknoten als inaktiv markieren” bedeutet, dass die Geräte in der Oberfläche als tot (rotes “X”) angezeigt werden, wenn diese nicht erreichbar sind.
Eine grafische Lösung wird im Fibaro Forum angeboten. Nicht ganz unkompliziert einzurichten (geht aber auch ohne RPI usw), jedoch schön anzuschauen und übersichtlich. Damit ist es einfach so ein Gerät zu finden. Suche mal nach “Yet Another lastWorkingRoute visualiser”.

Ich bin übrigens immer davon ausgegangen, dass das Datum von der WRRT den Zeitpunkt der Ermittlung dieses Wertes durch das HC darstellt. Nach dem Update, welches bewirkt, dass kein automatisches Remesh angestoßen wird, bleibt dieser Wert unverändert. Das bedeutet wohl, dass das Datum lediglich den Zeitpunkt des Remesh darstellt.

Ich habe mir das “Yet Another lastWorkingRoute visualiser” zusammengesucht. Die Anleitung im Fibaro Forum ist an einigen STellen sehr komplex mit PHP Installation beschrieben.
Glaube allerdings einen EINFACHEN Weg gefunden zu haben.
1.) Man lädt sich die im Forenbeitrag verlinkte “index.html” herunter

2.) Man holt sich die beiden Dateien mit Eingabe von
http://192.168.1.12/api/rooms (IP-anpassen!!)
http://192.168.1.12/api/devices (IP-anpassen!!)
und speichert sie dort ab, wo auch das Index File liegt.

3.) Auf dem Dateipfad sollte danach eine “devices.json” und eine “rooms.json” gespeichert sein

4.) Anschliessend einfach die index.html starten und ca. 1 Min warten…

Vielleicht mag das ja wer nachprobieren, bei mir hat es funktioniert.

@pblacky, konntest Du dein Devices damit finden? Hast Du die Anzahl der Hops verringern können?

Ich hab übrigens einen PHP Server installiert, den ich bei Bedarf über ein kleines Batch-Programm starte und dann die entsprechende HTML-Seite aufrufe. Damit gelingt die Darstellung innerhalb einer Sekunde. Man muss halt sich im Klaren sein, dass man seine Zugangsdaten hinterlegen muss.

Was mich etwas beschäftigt, ist dass das Datum der Routen seit dem Update unverändert bleibt. Ist das so richtig? Ich dachte immer, das Z-Wave Netz reagiert variabel und gestaltet sich auch alleine um. Andererseits warum sollte man dann eine Mesh Netzwerk Rekonfiguration anstoßen? Kann mir hier jemand auf die Sprünge helfen?

@pblacky, konntest Du dein Device damit finden? Hast Du die Anzahl der Hops verringern können?

Ich hab übrigens einen PHP Server installiert, den ich bei Bedarf über ein kleines Batch-Programm starte und dann die entsprechende HTML Seite aufrufe. Damit gelingt die Darstellung innerhalb einer Sekunde. Man muss halt sich im Klaren sein, dass man seine Zugangsdaten hinterlegen muss.

Was mich etwas beschäftigt, ist dass das Datum der Routen seit dem Update unverändert bleibt. Ist das so richtig? Ich dachte immer, das Z-Wave Netz reagiert variabel und gestaltet sich auch alleine um. Andererseits warum sollte man dann eine Mesh Netzwerk Rekonfiguration anstoßen? Kann mir hier jemand auf die Sprünge helfen?

Sorry wegen Mehrfachposts. Bekam keine Rückmeldung über korrekte Übertragung.

Hi Ändy,

das habe ich auch schon festgestellt, ist jetzt alles sehr statisch. Vermutlich hat Fibaro nach den vielen Beschwerden den Fehler in die andere Richtung produziert.
Ich habe gerade bei zwei Geräten eine manuelle reconfig angestoßen. Das hat funktioniert, also die “Last WRRT” hat sich geändert.
Leider hat niemand von uns vorher solche Erfahrungen dokumentiert. Aber ich bin schon der Meinung dass es jetzt nach 10 Tagen doch zu statisch ist.

Hi @Ändy
Danke der Nachfrage!
Habe seit einiger das RoutingInfo.lua (0.1.4) fast täglich im Einsatz und damit folgende Erfahrungen zu berichten:
Habe vor ca. eine Woche das gesamte Mesh Netzwerk reconfiguriert und dadurch haben sie die HOPS verändert.
Habe seither KEINE Geräte mit mehr als 3 Hops mehr und nur EIN Gerät mit 3 Hops, das finde ich super!

Die Devices ohne Nachbarn sind immer noch 43, was mich sehr nachdenklich macht!
Entweder gibt es da im Skript noch ein Problem, oder ich habe irgendeine Konfiguration übersehen!?
Würde mal einige weitere Erfahrungen von euch interessieren.
Hat irgendwer außer mir d"Devices ohne Nachbarn" mit dem Skript gefunden??

Auch das „Yet Another lastWorkingRoute visualiser“ funktioniert gut, wie ich es oben beschrieben hab.
Da bin ich jetzt auf der Suche nach einer Möglichkeit die Grafik aus dem HTML irgendwie abzuspeichern und mir mal mehrere Versionen zu erstellen um Veränderungen sehen zu können!

@pblacky, Windows 7 oder höher? Nimm doch das snipping tool von windows. Oder wenn der Rechner nicht komplett runtergefahren wird einfach die Tabs im Browser stehen lassen.

Ich glaube nicht dass es am Script liegt. Ich denke eher dass die Information vom HC2 selbst nicht ermittelt werden konnte. Die Daten stehen ja so auch in …/api/devices.

Vermutlich liest das HC nur bei einer Reconfiguration mit und gelangt so an die Infos. Evtl kann da auch was schief gehen und das Feld oder die Information bleibt leer. Das würde aber auch bedeuten, dass wir, wie schon mal vermutet, nur ein Abbild von irgendwann sehen und den augenblicklichen Stand gar kennen.

Leider alles nur reine Vermutung.

Hi ihr Lieben,
Hab mich jetzt mal auf die Suche nach einer Erklärung für die “fehlenden Nachbarn” gemacht.
Dabei hab ich eine Seite gefunden, wo es ebenfalls Skripte gibt, die das Mesh Netzwerk auslesen.
https://www.intelligentes-haus.de/tutorials/fibaro-tutorials/fibaro-home-center-2-mesh-netzwerk-analysieren
Mit dem Skript von dort, habe ich die Devices abgefragt, die mir “ohne Nachbarn” angezeigt wurden und festgestellt, dass sie DOCH Nachbarn haben!

Kann nicht beurteilen welche Skripte was genau machen, dazu fehlen mir die LUA Kenntnisse!
Aber vielleicht hilft es ja jemandem hier :wink:

Mir ist gerade was zu dem “Nachbarn” Thema eingefallen:

Ich habe einige Geräte (ca. 5-8 Stück) die ich in der HC2 angelernt, habe, aber derzeit nicht brauche. Diese liegen ohne Batterie in einer Lade!
Meist sind es Fernbedienungen, Plugs oder Türkontakte.
Ich habe diese Geräte in der HC2 nicht deaktiviert!
Kann es sein, dass benachbarte Geräte damit ein Problem haben?

Werde mal diese Geräte alle deaktivieren und nachsehen, obe sich was ändert!

Habe alle Geräte die nicht verwendet werden auf inaktiv gesetzt und danach das Mesh Netzwerk in der HC2 neu erstellt.
Trotzden 42 Geräte ohne Nachbarn!
Das wars also nicht …

Hi @pblacky
wenn Du weiterhin auf der Suche bist kannst Du mal prüfen ob es sich um Devices handelt, die die Ids nicht in zusammenhängender Reihenfolge haben. Ich mein da gab es ein Problem. Kannst z.B. mit dem HC Toolkit machen. Da gibt es eine schöne übersichtliche Liste. Weiß nur grad nicht wo und wie.