Mesh Konfiguration auslesen

Hi @Ändy,

Danke für den Tipp, hab ich mir angesehen!
Geht unter “get Devices”, dann sieht man links die IDs (siehe Screenshot)

Devices, die keine Nachbarn melden haben in den meisten Fällen sowohl vorher als auch nachher eine direkte ID als Nachbarn.
Deshalb hab ich in denn Tools mal etwas rumgestöbert und folgendes festgestellt:
ALLE Devices ohne Nachbarn sind mit der Parent ID “1” verbunden!! Das ist doch die HC2 (Zentrale) oder?

Kann es sein dass hier im Skript ein Missverständnis beim Debugging aufgetreten ist?
Wenn ein Gerät direkt mit der Zentrale verbunden ist, dann BRAUCHT es ja eigentlich keine Nachbarn oder??

Ich habe ja eigentlich wenig Probleme, außer dass meine Geräte manchmal langsam reagieren wenn ich viele auf einmal abschalte.
Daher ist meine Suche darauf begründet, dass es bei sonst niemandem als bei mir so viele Gräte ohne Nachbarn gibt.
Vielleicht ist das ja sogar gut :wink:

2019-01-31-Get-Devices.jpg

@pblacky,
ich bin immer noch ein wenig ratlos, weil es gibt laut Deinem API Auszug nur 15 Geräte ohne Nachbarn und routen. Das sind meist Fernbedienungen, Wandschalter, alte Gen3 Türkontakte, etc. Das kann auch normal sein. Warum aber zum Beispiel der Dimmer mit der ID 36, der 66 NAchbarn hat als Gerät ohne NAchbarn angezeigt wird ist mir noch unklar.
Erlärung:
> ALLE Devices ohne Nachbarn sind mit der Parent ID „1“ verbunden!! Das ist doch die HC2 (Zentrale) oder?
Nein, alle Geräte deren parentID = 1 ist, ist das physikalische Gerät gemeint. Das ist also nicht die Zentrale. Die hat DeviceID = 1 und parentID = 0.

>Wenn ein Gerät direkt mit der Zentrale verbunden ist, dann BRAUCHT es ja eigentlich keine Nachbarn oder??
Kann man so nicht sagen, das ist so im Mesh Protokoll vorgesehen das nahe beieinander liegende Geräte auch miteinander kommunizieren können. Fällt ein Nachbar aus Weiß das Gerät über welches andere es die Pakete routen soll. Wenn es die Zentrale auch sieht braucht es keine hops über andere Geräte.

>Vielleicht ist das ja sogar gut :wink:
Nein das wäre nicht so gut, es ist aber so dass das Script nur bei Dir 40 Geräte ohne Nachbern anzeigt, aber es in der Relität nur 15 davon gibt.

Was ich aber noch nicht verstehe, wieso diese Fehlanzeige nur bei Dir auftritt. Da bin ich noch am suchen. Vielleicht kann ich es reproduzieren.
Danke Dir noch mal für die Bereitstellung der json und jpeg Dateien.

Hi pblacky,
habe gerade festgestellt das mir Dein voriger Beitrag entgangen war.
Wenn Du Geräte includiert lässt und in der Schublade steckst, musst Du auf jedem Fall das Master device disablen. Sonst
wird es vom HC2 eventuell gepollt. So was kann schon manchmal zu Verzögerungen führen. Außerdem werden diese Geräte dann
im Script angezeigt und die Werte stimmem dann keineswegs.

Danke für den Hinweis @jeep!
Habe vor 3 Tagen ALLE Geräte in der HC2 deaktiviert, die derzeit nicht eingebaut sind.
Und zwar sowohl die Haupt IDs als auch ALLE Unter Ids!
Danach das Mesh Netzwerk der Anlage rekonfiguriert!

Heute das Skript nochmal laufen lassen und wieder 42 Geräte ohne Nachbarn!
Die deaktivierten Geräte tauchen in der Liste allerdings NICHT auf!
Mein Zwave Netzwerk kommt mir jetzt etwas schneller vor, das hat es jedenfalls gebracht :wink:

Bei der Gelegenheit eine Frage: Was bedeutet der Menüpunkt ÜBER dem Mesh Netzwerk rekonfig ? (siehe Markierung im Anhang)
Dort steht “Z-Wave zurücksetzen”, was genau passiert nach dem “löschen” in der Beschreibung.
Wir das Netzwerk danach wieder aufgebaut, oder ist dann alles WEG?

2019-02-01-15_35_33-Home-Center-2.jpg

@pblacky,
>Wir das Netzwerk danach wieder aufgebaut, oder ist dann alles WEG?
Da ist dann wirklich alles weg. Der zwave Chip bekommt dann eine neue HomeID und keines der Geräte könnte sich mehr mit dem Controller verbinden. Also besser nicht probieren.

Das mit dem 42 Geräten ohne Nachbarn bereitet mir noch schlaflose Nächte, habe aber noch keine Idee. ;-(

Hi @jeep,

Ich bin sehr dankbar für deine tolle Unterstzützung, aber BITTE, schlaflose Nächte soll es keine geben :wink:
Meine HC2 funktioniert seit dem Update auf 4.530 wieder relativ stabil und darüber bin ich sehr froh.

Manchmal gibt es halt Kleinigkeiten die sich nicht gleich offenbaren. Das macht es ja so spannend!
Habe jetzt mal alle Mesh test skripte wieder stillgelegt und bin jederzeit bereit für neue Experimente …

Mir fehlt seit neuestem ein Gerät in der Liste und das äußert sich sehr seltsam

[DEBUG] 11:35:58: 41–
[DEBUG] 11:35:58: Neighbours of device 747) HausTür : [1,305,323,325,328,331,372,381,513,425,430,473,497,504,614,619,710,717,739]
[DEBUG] 11:35:58: Last working route used by device 747 : [1,323]
[DEBUG] 11:35:58: 42–
[DEBUG] 11:35:59: Neighbours of device 751) Bad Dach : [372,614,619,717,739]
[DEBUG] 11:35:59: Last working route used by device 751 : [1]
[DEBUG] 11:35:59: 43–
[DEBUG] 11:35:59: Neighbours of device 776) Steckedose1 : [1,114,305,323,325,328,331,372,381,513,425,464,614,619,739,774,778]
[DEBUG] 11:35:59: Last working route used by device 776 : [1]
[DEBUG] 11:35:59: 45–
[DEBUG] 11:36:00: Neighbours of device 778) GarderobeLicht : [323,372,381,430,473,614,619,717,739,776]
[DEBUG] 11:36:00: Last working route used by device 778 : [1,464,473]
[DEBUG] 11:36:00: 46–
[DEBUG] 11:36:00:

Die parentID ist 774 es sollte bzw. ist Gerät Nr. 44. Es wir auch mitgezählt nur es findet keine Ausgabe statt. Das ist die dazu passende api abfrage:

{“id”:774,“name”:“GangSchloss”,“roomID”:0,“type”:“com.fibaro.zwaveDevice”,“baseType”:“com.fibaro.device”,“enabled”:true,“visible”:false,“isPlugin”:false,“parentId”:1,“remoteGatewayId”:0,“interfaces”:[“battery”,“zwave”,“zwaveAssociation”,“zwaveConfiguration”,“zwaveSecurity”,“zwaveSlaveRouting”],“properties”:{“associations”:"[{“endPointId”:0,“groups”:[{“groupInfo”:{“commands”:[{“command”:“Battery Report”,“commandClass”:“Command Class Battery”},{“command”:“Door Lock Operation Report”,“commandClass”:“Command Class Door Lock”},{“command”:“Device Reset Locally Notification”,“commandClass”:“Command Class Device Reset Locally”},{“command”:“Notification Report”,“commandClass”:“Command Class Notification”}],“name”:“Lifeline”,“profile”:“General: Lifeline”},“id”:1,“singleChannel”:{“max”:1,“set”:[1],“view”:[1]}}]}]",“batteryLevel”:“92”,“batteryLowNotification”:“true”,“categories”:"[“other”]",“configured”:true,“dead”:“false”,“deadReason”:"",“defInterval”:“0”,“deviceControlType”:“0”,“deviceIcon”:“28”,“deviceSpecificData”:“xxxxxxxxxx”,“deviceSpecificIdType”:“Serial Number”,“deviceState”:“Configured”,“emailNotificationID”:“0”,“emailNotificationType”:“0”,“endPointId”:“0”,“lastWorkingRoute”:"[1]",“lastWorkingRouteRequestStatus”:“ok”,“lastWorkingRouteRequestTimestamp”:“0”,“lastWorkingRouteResponseTimestamp”:“1571165913”,“log”:"",“logTemp”:"",“manufacturer”:"",“markAsDead”:“true”,“maxInterval”:“0”,“minInterval”:“0”,“model”:"",“neighborList”:"[1,323,328,372,425,473,739]",“neighborListRequestStatus”:“ok”,“neighborListRequestTimestamp”:“1571166246”,“neighborListResponseTimestamp”:“1571304567”,“nodeId”:“102”,“parameters”:[{“id”:1,“lastReportedValue”:0,“lastSetValue”:0,“size”:1,“value”:0},{“id”:2,“lastReportedValue”:5,“lastSetValue”:5,“size”:4,“value”:5},{“id”:3,“lastReportedValue”:0,“lastSetValue”:0,“size”:1,“value”:0},{“id”:4,“lastReportedValue”:0,“lastSetValue”:0,“size”:4,“value”:0},{“id”:5,“lastReportedValue”:0,“lastSetValue”:0,“size”:1,“value”:0},{“id”:6,“lastReportedValue”:0,“lastSetValue”:0,“size”:4,“value”:0}],“parametersTemplate”:“853”,“pollingTimeSec”:0,“productInfo”:“1,14,0,9,0,1,1,2”,“pushNotificationID”:“0”,“pushNotificationType”:“0”,“remoteGatewayId”:“0”,“saveLogs”:“true”,“securitySchemes”:"[]",“serialNumber”:“xxxxxxxxxxx,“smsNotificationID”:“0”,“smsNotificationType”:“0”,“stepInterval”:“0”,“useTemplate”:“true”,“userDescription”:”",“zwaveCompany”:“Poly-control”,“zwaveInfo”:“3,4,61”,“zwaveSoftwareVersion”:"{}",“zwaveVersion”:“1.2”},“actions”:{“getLastWorkingRoute”:0,“getNeighborList”:0,“getParameter”:1,“reconfigure”:0,“requestNodeNeighborUpdate”:0,“setInterval”:1,“setParameter”:2},“created”:1571152070,“modified”:1571152070,“sortOrder”:271}

@sven_gomann,
Hier ist die HC3-Version. Die Szene sollte immer noch manuell gestartet werden. In den Declarations reicht ein {}
Wenn jemand Zeit und Lust hat kann er weiter daran basteln. HTML Ausgabe gibt es nicht mehr.


-- File    : RoutingInfo.lua
-- Version : 0.1.6 -  {20.10.2020}
-- nach einer Vorlage aus dem Fibaro Forum (thanks @tinmann)
-- Converted for HC3  Buid by Ä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:20px;color:%s;">%s', "span", color, message, "span"))
--end 
local function printf(...) fibaro.debug(tag, string.format(...)) end
rtag = "RoutingInfo"
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 = 0 
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
return n
end

local filter = '/devices/?enabled=true&isPlugin=false'
local allDevices = api.get(filter)
local html = false
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=0 --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 
      n= n+1
     -- api.post('/devices/'.. mDevID ..'/action/getNeighborList') 
     thisDev = "Neighbours of device " .. mDevID ..') '..name ..' (' .. room .. '|' .. section .. ') : ' .. json.encode(fibaro.getValue(mDevID, "neighborList"))
      if thisDev:find("%p[%p]") then 
         print('Device '.. name..'('..mDevID..')'.. ' hat keine Nachbarn')
         nn = nn + 1 
      end 
      if html then output = "<pre>"..output..thisDev.."</pre>" end
      if d then print(thisDev) end

      local lwr = json.encode(fibaro.getValue(mDevID, "lastWorkingRoute"))      
      thisDevRoute = "Last working route used by device " .. mDevID .. " : " .. lwr
      if thisDevRoute:find("%p[%p]") then 
         print('Device ' ..name..'('..mDevID..')'.. ' hat keine Routen') 
         nr = nr +1
      end    
      if string.len(lwr) == 3 then 
         r = r +1 
         hops = " "
      else
         hops=countc(lwr,',')
      end
      if (hops == nil or hops==0) then hops = " " end
      if html then output = "<pre>"..output..thisDevRoute..' - hops: '..hops.."</pre>" end  
      if d then print( thisDevRoute.." - hops: "..hops) 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 html then output = output..thisDevLWRRTime..n..'-- <br />' end
      if d then print( thisDevLWRRTime) end
      
      if d then print( n..'--') end
      --n =n+1 
      print ('--------------------------------------')
      fibaro.sleep(100)  
   end
end
end --for
fibaro.trace("SCENE3", 'Ausgabe vom '..os.date('%d.%m.%Y')..' über '..n.. ' devices.')
printf("Direkte routen, [1] zum HC2: "..r)
printf("Routen über 1 hop, zum HC2 : "..r1h)
printf("Routen über 2 hops zum HC2 : "..r2h)
printf("Routen über 3 hops zum HC2 : "..r3h)
printf("Routen über 4 hops zum HC2 : "..r4h)
printf("-------------------------------")
printf("Devices ohne Nachbarn [] : "..nn)
printf("Devices ohne routen [] : "..nr)

Tippe oder füge den Code hier ein
2 „Gefällt mir“

Mein Beitrag muss mindestens 20 Zeichen sein.

DANKE :clap: