Mesh Konfiguration auslesen HC3

Da wir jetzt eine HC3-LUA Kategorie haben stelle ich es mal hier ein.
So nebenbei habe ich die html-Ausgabe wieder aktiviert. (Kann man aber auf „false“ setzen.)


-- File    : RoutingInfo.lua
-- Version : 0.1.7 -  {20.02.2021}
-- 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
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 = 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=0 --nur Geräte mit parentId = 1
-- Ab hier Ausgabe
if html then 
   print('<font size="2"><font color="green">---------------Starte Ausgabe---------------------</font>' )
 else 
   print("----------------Starte Ausgabe---------------------")  
end  
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>"..'<font size="2"><font color="yellow">'..output..thisDev.."</font> </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>"..'<font size="2"><font color="yellow">'..output..thisDevRoute..' - hops: '..hops.."</font></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>"..'<font size="2"><font color="yellow">'..output..thisDevLWRRTime.."</font> </pre>"..n..'-- <br />' end
        if d then print( thisDevLWRRTime) end
        
        if d then print( n..'--') end
        --n =n+1 
        if d then print ('--------------------------------------') end
        fibaro.sleep(100)  
     end
  end
end --for
print(output)
fibaro.trace("SCENE"..sceneId, '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)

1 „Gefällt mir“

Da kommt eine Fehlermeldung :
:


Fehlt da was oder ist nicht richtig übertragen vom HC2 zum HC3 ?
Gruss Frank

Oh, wieder eine dieser schrägen Fibaro Fehlermeldungen. Kannst Du mal versuchen html auf false setzen, fürchte aber das bringt. nichts. Welche FW hast?

Etwas besser aber nicht komplett mit HTML = false

Brouser :
Microsoft Edge ist auf dem neuesten Stand.
Version 88.0.705.68 (Offizielles Build) (64-Bit)


Firmwahre : 5.061.36 (beta)

Denke dass es nicht MS Edge ist, ich benutze nur Chrome und FF, beide funktionieren.
Versuch mal nach Zeile 82 das einzufügen „print ('Device ID: '…mDevID)“
Vielleicht spuckt es die nächste Device ID die den Fehler verursacht aus.
Dann könnte man weiter forschen.

EDIT: Die erste Zeile deines Screenhots dürfte nicht grün sein bei html=false. das verstehe ich nicht.

Die erste Zeile ist ja auch nicht Grün !
Schau auf den Timestamp das wahr der Test vorher.
Melde mich Morgen muss erst einen Laptop reparieren.

OK, hab gedacht das ist ein neuer Screenshot, hab nur auf die Farben geschaut, hätte wohl vergrößern sollen.

Also ich tippe das der Fehler von der nächst größeren ID hinter 47 kommt.

Den 52 mag er nicht.


Warum muss ich Morgen mal sehen.
Gute Nacht

Hallo @jeep
Schau :


Zwischen 78 und 83 liegt das Problem wo weis ich aber noch nicht da ich nicht sonderlich viel Zeit habe.
Gruss Frank

Glaube ich jetzt nicht. Ich habe leider nur 19 Devices und die laufen fehlerfrei durch. Schätze dass bei Dir irgend eine Eigenschaft fehlt. (Swagger ist dein Freund)
Ich warte lieber bis sich jemand mit mehr Devices sich gemeldet hat. @macschimmi vielleicht?
Aber kann schon sein das ich dann noch eine Ausnahme einpflegen muss.

ich habe das selbe Problem

Ich teste es mal :stuck_out_tongue_winking_eye:

@sven_gomann @jeep

Ich habe den Schlimmen Finger.

Hier kommt der Fehler her !

Hier Fehlt eine ID !

Daher kommt der Fehler !
Hatte ich grade bei noch einem Device das habe ich Excludiert und wieder neu Includiert siehe da das wahr wieder in der Reigenfolge.
Master ID und Kinder ID müssen hintereinander sein und nichts darf fehlen.

Da muss beim Anlernen was schief gegangen sein !
Da scheint der HC3 noch ein Problem zu haben wie so viele Andere Probleme auch ! :face_vomiting:

Mal sehen ist eine Sisyphos Arbeit SCH…

Das reicht für Heute jetzt gucke ich den Zürich Krimi und gehe in die Flohkiste.

Gruss Frank

Bekomme auch nen Fehler:
[18.02.2021] [20:04:52] [ERROR] [SCENE215]: /opt/fibaro/lua_engine/lua/engine/fibaro_sdk.lua:200: Assertion failed: Expected number
html muss false sein, sonst kommt nichts

@Berges01,
so was ähnliches habe ich mir gedacht. Ich könnte das Programm eventuell so umschreiben das es die ohne ID überspringt. Dann geht aber das Geschrei los, „das Programm findet nicht alle Geräte“.
Also sind wir Frank dankbar das er ex- und includiert hat. So ist die Datenbank wieder sauber und Folgefehler werden vermieden.
.

Wenn alles durchläuft kann man HTML auf true setzen.
Sieht dann so aus:

Morgen werde ich die Anderen Geräte alle Neu Anlernen ich habe noch 2 auf die Schnelle gefunden.
Der Fehler liegt nicht im „Mesh“ Programm sondern im HC3 der hat den Fehler und den auch erzeugt.
Ich hatte gedacht der „homee“ währe eine Montagsproduktion aber der HC3 ist schlimmer.
Dem „homee“ fehlte es an Funktionen und an einer Hochsprache dem HC3 fehlt es an Funktionen und an Sicherer Funktion das ist schlimmer.
Eine saubere Datenbank ist wichtiger als eine mesh Analyse…
Besser währe es den Fehler anzuzeigen und einen Fehlerhinweis zu geben bebst Ratschlag zu deren Beseitigung.
Wenn das einer benutzt der nicht so Akribisch sucht und Analysiert kommt der in´s schwitzen.

Ach ja du untersuchst mit einem HC3 Programm eine Routingtabelle vom HC2 ? :rofl:
HiHi Freudsche Fehlleistung. :smirk:
Da sind noch andere Überbleibsel vom HC2 drin die zwar mit dem HC3 funktionieren aber nicht mehr dem Neuen Syntax entsprechen.
Wer meldet den Fehler den Jungs von Fibaro ?
Ich habe denen schon mehrere Fehler gemeldet die haben mich sicher auf die „Persona non grata“ Liste gesetzt.
So nun eine Gute Nacht !
Frank

Guten Morgen

So nach dem ich noch 3 Stück gefunden habe läuft es jetzt.

Guckst du hier :smirk:

DANKE

Sieht so aus als wenn alles OK währe und ich mich nicht sorgen muss.

Gruß Frank

Ja, sieht OK aus, aber ein wenig sorgen solltest Du Dir doch machen. Ich stelle hier die neue bereinigte Version rein. Schau mal auf die letzte bunte Ausgabezeile, dann weißt Du was ich meine. Obwohl routen nie statisch bleiben, morgen kann es auch anders aussehen, lohnt sich da ein genaueren Blick…
Schade das Du so schnell warst mit dem excludieren, hätte das gerne analysiert. Eventuell hätten wir eine Meldung ausgeben können und ohne fehlerhafte Geräte fortsetzen. Trotzdem vielen Dank für Deine Mühe. Aber vielleicht könnte mir jemand das json encodiert schicken. Ich könnte wenn ich viel Zeit habe das mit dem ZeroBrainStudio analysieren.

Ich hatte auch schon solche devices die ich mehrere Male includieren musste. Fibaro wird da nichts machen, die werden höchstens sagen versuch die Inclusion in der Nähe des Gateways.


-- File    : RoutingInfo.lua
-- Version : 0.1.8 -  {20.02.2021}
-- 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
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 = true
local output = ''
if (html == false) then d = true 
  elseif ( html == true) then d = false;
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
-- Ab hier Ausgabe
if html then 
   print('<font size="2"><font color="green">---------------Starte Ausgabe---------------------</font>' )
    printf('<font color="cyan">Daten werden im HTML Format ausgegeben - Bitte warten...')
 else 
   print("----------------Starte Ausgabe---------------------")  
end  
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>"..'<font size="2"><font color="yellow">'..output..thisDev.."</font> </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>"..'<font size="2"><font color="yellow">'..output..thisDevRoute..' - hops: '..hops.."</font></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>"..'<font size="2"><font color="yellow">'..output..thisDevLWRRTime.."</font> </pre>"..n..'-- <br />' end
        if d then print( thisDevLWRRTime) end
        
        if d then print( n..'--') end
        --n =n+1 
        if d then print ('--------------------------------------') end
        fibaro.sleep(100)  
     end
  end
end --for
print(output)
fibaro.trace("SCENE"..sceneId, 'Ausgabe vom '..os.date('%d.%m.%Y')..' über '..n.. ' devices.')
printf('<font color="green">Direkte routen, [1] zum HC3: '..r)
printf('<font color="yellow">Routen über 1 hop, zum HC3: '..r1h)
printf('<font color="orange">Routen über 2 hops zum HC3: '..r2h)
printf('<font color="red">Routen über 3 hops zum HC3: '..r3h)
printf('<font color="darkred">Routen über 4 hops zum HC3: '..r4h)
printf("-------------------------------")
printf("Devices ohne Nachbarn [] : "..nn)
printf("Devices ohne routen [] : "..nr)

Danke für die Info.
Ja ich weis was du meinst mit den Infos „hops : 4“.
Die Device habe ich mir angesehen das sind die Die ich direkt am HC3 angelernt habe.
Ich habe eine „Weiche-Neukonfiguration“ durchgeführt es ändert aber nichts an der Routing Tabelle es bleiben 4 und das ist eine Kuriose Sache das geht runter in den Keller, rauf in´s Dachgeschoss und wieder ins Erdgeschoss.
Wie bekommt man das neu hin ?
Dieses hier ist nicht anwählbar.


Gruss Frank