Mesh Konfiguration auslesen HC3

Guten Morgen
Schaut mal die Information habe ich aus dem Fibaro-Forum von einem bekommen.

Reconfigure mesh network - Home Center 3 - Smart Home Forum by FIBARO

„So there is probably only action left through the Installer account. If you are a install yourself and have undergone certification training for Fibaro products in the past, you can ask your supplier (trainer) to start the Installer account process. It will take a while for Fibaro to verify the validity of the request.
The installer can perform reconfiguration of the mesh site and more.“

Meine Antwort darauf (Natürlich in Englisch):
"
Das ist jetzt ein Aprilscherz oder ?
Da bekomme ich ja sofort einen Dicken Hals.
Woher hast du diese Information ?
In einem Anderen Forum hat einer auch einen HC3 auch die Beta und kann diese Funktion benutzen.
Wenn das was du schreibst wahr ist (Ich glaube dir !) dann ist das der Gipfel der Frechheit.
Jetzt könnte ich lange schimpfen aber das wird ja keinen Interessieren.
Wir hier Alle sind für Fibaro die Betatester und helfen Ihnen die Kiste ans laufen zu bekommen und die Reglementieren?
So jetzt habe ich genug schlechte Laune für Heute.
Einen Schönnen Sonntag gewünscht !
Frank
"
Nur so als Info !
Ich versuche das jetzt erst mal mit LUA zu bewerkstelligen mal sehen ob der HC3 das kann.
Das wahr ein Tipp von einem Gerhard aus dem „Du weist schon wen ich meine Forum“.
fibaro:call(1,‚requestNodeNeighborUpdate‘,1)

Euch natürlich auch einen Schönnen Sonntag gewünscht.
Gruss Frank

Nachtrag.

So das habe ich mal ausprobiert mit dem fibaro.call.
So wahr nichts zu erkennen das es nicht funktioniert hat.
Keine Fehlermeldung oder sonst was.
Aber auch in der Routingtabelle die bei „Mesk Konfiguration auslese“ ausgegeben wird änderte sich nichts egal was ich auch neu gebaut hatte.
Dann bekam ich dieses hier im Forum „Ja du weist schon wen ich meine“ schaut mal :

Guten Morgen Gerhard

Schau mal hier.

Mesh Konfiguration auslesen HC3 - Fibaro Forum / Fibaro (HC3) LUA Scripts - siio – Community

Daher weis ich das.

Daher habe ich auch eine Vorstellung davon warum ab und an mal einige Device spinnen.

Wahnsinn das Ding existiert noch. Der Gerhard im Header bin ich, deswegen kann ich die sagen, dass der Table den wir hier auswerten nicht sehr aktuell ist. Wenn du ein Gerät neu platzierst kann es bis 5 Tage dauern bevor das in der Tabelle auftaucht. Das Meshnetz selbst ist da viel schneller. Also die „Dokumentation“ in der Tabelle hängt dem tatsächlichen Routing hinterher. Wann und wie das passiert haben wir nicht herausbekommen. Das Verhalten kann jetzt beim HC3 natürlich anders sein.
"
Eine Interessante Info.
Ich werde mal sehen was in den Nächsten Tagen mit meinem ID801 passiert ob sich da etwas ändert.
Aufgeschrieben habe ich mir das routing mal.

Gruss Frank

Beim HC2 gab es mal das Problem das die das Routing fast stündlich aktualisiert haben. Wurde in einer späteren Beta behoben.
Meines Wissens wurde dass dann auf ca. 3:00 Uhr Nachts gemacht. Irgendwann es es sich dann ganz beruhigt.
Wann das HC3 es macht weiß ich noch nicht.
Ich habe vorhin eine Mesh reconfig angestoßen und jetzt ist bei mir das WRRT Datum aktuell.

Ich weiß nicht ob das hilft, aber Du kannst als Installer auch „support@fibaro.com“ eintragen. Und danach wieder entfernen. Wenn dir das zu risiko-behaftet ist kann ich Dir auch meinen Installer Account geben.

EDIT. Batterie Devices müssen aufgeweckt werden wenn man das Reconfig angestoßen hat.
.

Mach einmal ein lokales Backup. Danach solltest Du die Geräte auswählen können.

Das was dieser Martin_n im Fibaro Forum gesagt hat, ist natürlich unqualifizierter Bullshit. Wie du es selbst gesagt hast geht es bei anderen auch und außerdem man kann nicht den eigenen Installer im eigenen Home Center eintragen.

@mgerhard
@jeep

Beides hat nicht funktioniert Alles Beides einmal mit und einmal ohne Neustart kein Erfolg.
:face_with_head_bandage:

Gruss Frank

Nachtrag

Ich habe grade das Programm noch mal laufen lassen und siehe da, da hat sich was verändert und zwar Gravierend viel !

Was habe ich gemacht !
Ich habe folgenden Befehl für jeden Teilnehmer mit hops : 4 gemacht
fibaro.call(1,„requestNodeNeighborUpdate“,319)
Danach hatte ich sofort (einige minuten später) das das Programm laufen lassen und nix verändert.
Kleine Fahrradtour gemacht >40km !
Danach wahr das Komplette mesh neu aufgebaut und zwar mit dem Datum und der Uhrzeit von meinem LUA Prorammstart.
Also ist es so wie der Gerhard geschrieben hatte das dauert lange bis die Tabelle neu aufgebaut ist.
Jetzt habe ich von meinen 6 hops : 4 Kandidaten nur noch einen übrig.
Darauf muss man aber auch erst mal kommen.
Danke für die Hilfe, jetzt schauen wir mal ob mein Problem behoben ist.
Gruss Frank

PS die Fahrradtour wahr die Lösung ! :rofl:

Aber in den Menue-Punkt komme ich immer noch nicht. Wenigstens mit LUA geht es.

Das habe ich im Fibaro Forum dazu gefunden von einem User Namens „robmac“ aus England.

[ Hinzugefügt*: 2014-06-03, 14:19* ]

Von dem, was ich verstehen kann, gibt es drei Versionen des Anrufs, aber da es keine Dokumentation gibt…

a) fibaro:call(1,‚requestNodeNeighborUpdate‘,1) --updates alle Knoten im Netzwerk

b) fibaro:call(1,‚requestNodeNeighborUpdate‘,anode) --updates anode im netzwerk

c) fibaro:call(anode,‚requestNodeNeighborUpdate‘) --updates anode im Netzwerk

wobei Anode die ID eines beliebigen Knotens ist.

Ich neige dazu, a) selten und b) zu verwenden, wenn ein Knoten nicht funktioniert. Wenn das nicht behoben wird, gehe ich zurück zu a).

so einfach ausgedrückt

Ich benutze:

a) wenn ich einen Knoten verschoben habe und weiß, dass er alle Knoten wiederentdecken muss, um ihn zu finden

b) wenn sich ein Knoten nicht verhält, sondern a) verwendet, wenn dies nicht

aber ich dachte, c) würde auch funktionieren, aber möglicherweise nicht?

Es wird in Aktionen gegen Knoten aus der API aufgeführt, aber richtige Dokumente würden helfen.

(Übersetzt aus dem Englischen mit Google).

Beim HC3 habe ich das so aufgerufen (Neuer Syntax)
fibaro.call(1,„requestNodeNeighborUpdate“,319)

Zusatz :

Es kann sein das wenn man einzelne Geräte Updatet das es ein wenig dauern kann.
Ich habe ja das ganze Mesh neu aufgebaut und es hat keine 1/2 Std gedauert bis die Tabelle aktuelle Zeiten hatte. (Bis auf 2 Batteriedevices die ich nicht aufgeweckt habe.) Sieht also so aus als ob das HC3 flotter auf ein ganzes Mesh update reagiert.

So war es vor dem update:
image

Und so nach dem Update:
image

1 „Gefällt mir“

Guten Morgen @jeep

Das die Info von Martin_n nicht richtig wahr, da währe ich etwas vorsichtig.
Schau mal was er jetzt geschrieben hat, er scheint da schon mehr Infos zu haben als am Anfang zu erkennen wahr.
Reconfigure mesh network - Home Center 3 - Smart Home Forum by FIBARO
Es gibt eine Installer APP, was die alles genau beinhaltet ?
Wie so vieles hier ist das zurückhalten von Informationen Seitens Fibaro und einigen Systemhäusern schon signifikant.
Uns für Dumm zu verkaufen und herablassend scheint Methode zu haben.
Bei uns saht man dazu „Pfründe sichern“ (das werden aber nicht alle verstehen).
Eine direkte Übersetzung ist sicherlich "Wissen für sich behalten um damit wo anders oder Später mal zu glänzen, Sicherlich etwas Bösswillig übersetzt.
Nicht das du das Falsch verstehst ich meine Damit nicht dich.

Gruss Frank

Guten Morgen @Berges01,

was mich an der Info von Martin_n gewaltig gestört hat ist seine Aussage (So hab ich sie verstanden) das es jetzt nur noch diese eine Möglichkeit über das Installer-Konto gibt. Für mich las sich das so als wollte er dich zur Installerschulung animieren.
Aber,

  1. Das ist ein Fehlfunktion des HC3 (darum ist support kontaktieren das einzig richtige gewesen)
  2. Die Installer App kann nur immer ein Gerät aktualisieren (habe keinen anderen Menüpunkt bei mir gefunden.)
  3. Das wäre also das Gleiche was Du mit dem LUA-Befehl bewerkstelligt hast.
  4. Für private Nutzer kann ich diese „Schulung“ nicht empfehlen. (Ist mehr oder weniger eine Verkaufsveranstaltung.)

Aber für jemand der mehrere Kunden hat, hat die App auch Vorteile.
Z.B. Ich konnte bei einem Kunden kein Update auf die 4.600 machen, immer drehender Kreis. trotz diverser Neustarts und vor Ort. In meiner Verzweiflung habe ich mal in der App auf Update geklickt und es hat funktioniert.
Was ich schon oft gemacht habe, nachdem Kunden angerufen hatten, das ihr Home Center nicht mehr funktioniert, Einfach die Dienste neu gestartet und alles war wieder OK. Hat mir schon einige Wege gespart.

Und gerade sehe ich das auch tinman dir geantwortet hat und das gleiche gesagt hat was wir ja schon wissen, dass es ein Problem mit dem HC3 ist.


Ja ich habe mittlerweile auch Andere Infos zu dieser APP bekommen.
Das ist nicht unbedingt ersichtlich was das für eine App ist und wofür diese Gut ist.

Hier der Link

Na ja ob der mir was bringt glaube ich nicht.
Eine Anständige Doku wo man nachlesen kann und oder Nachschlagen kann, nebst Suchfunktion währe nicht schlecht.
Wenn Fibaro eine Wicki für den HC3 nebst Programmierung hätte und nicht nur einige Textfile und ein Forum wo engagierte User Infos für andere User geben.
Für die Alten Hasen die vom HC2 kommen ist das alles kalter Kaffee aber Neulinge stehen da vor einem Berg von Problemen und müssen sich alles mühsam auf einem oder mehreren Foren raussuchen, das Fustriert.
Teilweise kann man nicht mal erkennen ist das nun für den HC2 oder für den HC3.
Ist das kompatibel oder nicht, was muss da verändert werden wenn man von dem einen auf den Anderen Szenen kopieren möchte usw.
Mittlerweile habe ich mich ja schon einiger maßen eingearbeitet aber noch immer ist viel Lernstoff vorhanden.
Mal sehen was der Support mir schreibt und ob die eine Lösung haben.
Gruss Frank

Hm, da ich mich schon seit 6 Jahren mit HC(2) beschäftige bin ich wohl ein alter Hase. Aber für mich ist es um so frustrierender dass Sachen die beim HC2 funktioniert haben, auf dem HC3 nicht oder nur mit Aufwand wieder funktionieren und einige Sachen gehen gar nicht mehr, so das ich die große Umstellung von HC2 auf HC3 erst mal auf Eis gelegt habe.
Meine Regierung würde mich rausschmeißen, war so schon sauer wieder so viel Geld für etwas was nicht funktioniert auszugeben.
Ich bin also genau so frustriert wie Du und habe eigentlich kein großes Vertrauen mehr zu Fibaro.
Aber ich hoffe das es vielleicht doch noch was wird. Seit Fibaro von Nice geschluckt worden ist, ist es nicht besser geworden.
Also was soll ich sonst noch sagen außer „Kopf hoch, das wird schon wieder“

Hallo, bin ein absoluter Neuling auf Fibaro. Würde mich interessieren, wie ich dieses Script in die HC3 hineinbekomme.

Hi, so wie jedes andere LUA File, copy und paste.
Auf Szenen gehen, Szene hinzufügen, LUA-Szene , Name vergeben und die Version 0.1.8 von hier reinkopieren. Speichern, Fertig.

Das ist für die Neulinge etwas schwierig, die sind gewöhnt das alles mit der Maus funktioniert (rechte und linke Maustaste).
Bei einigen Sachen und Eingaben fiunktioniert das mit der Maus aber nicht.
Die Alten tastenkombinationen funktionieren aber fast immer.
strg-c strg-v werden oft vergessen oder sind teilweise unbekannt.
Tastenkombinationen in Windows (microsoft.com)
Das ist mir jetzt Hier und auch in anderen Foren aufgefallen.
Gruss Frank

Unter Windows hat es funktioniert, danke. Ich hatte zuvor den Browser des IPAD benutzt, hier hat die Funktion Copy/Paste nicht ausgelöst.
Ich weiß nun, das ich für diese Aktionen einen PC nutzen sollte.

Danke für die Hilfe
Norbert

Hallo Norbert

Auch mit einem Android Tablett kannst du kopieren und einfügen.
Das geht bestimmt auch mit einem IPAD nur leider kenne ich Apple-Produkte nicht und kann damit nicht umgehen.
Sorry da habe ich nicht richtig gelesen.
Gruss Frank

Muss mal ein kleines Update nachschieben, da ich einiges am Script geändert habe.

  1. Bei zu vielen Nachbarn wird die Zeile in der Debug-Console umbrochen was dann sehr unschön aussieht.
    Deshalb habe ich die Zeile der Nachbarn auf ca. 100. Zeichen gekürzt.
  2. Wer vom HC2 zum HC3 gewechselt ist und die automatische Migration der Module gemacht hat, hat zwangsweise keine laufenden IDs bei den Device-childs. Dadurch kann das Script die Sections nicht mehr auslesen und bleibt mit einem LUA- Fehler hängen.
    Aus diesem Grund gibt es jetzt die Variable „checksection“. Wird sie auf false gesetzt, ignoriert das Script die Section und macht weiter.
    Da ich bei mir alle Geräte einzeln ex- und im HC3 includiert habe gibt es bei mir nur absteigende IDs ohne Löcher.
    Somit kann ich das Script nicht so ändern, das ich es im Fehlerfall mit einem protected call weiterlaufen lassen kann.
    Eigentlich ist die Zusammenfassung am Ende das wichtigste.

-- File    : RoutingInfo.lua
-- Version : 0.1.9 -  {06.04.2021}
-- Copyleft: {jwi} 
-- Abkürzung : working route respose time = WRRT
-- 
-- Please note the local variables, "html" and "checksection". 
-- 
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 = false
local checksection = false --if False no section is displayed
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
        if checksection then
           thisDev = "Neighbours of device " .. mDevID ..') '..name ..' (' .. room .. '|' .. section .. ') : ' .. json.encode(fibaro.getValue(mDevID, "neighborList"))
        else
           thisDev = "Neighbours of device " .. mDevID ..') '..name ..' (' .. room .. ') : ' .. json.encode(fibaro.getValue(mDevID, "neighborList"))
        end
        if thisDev:find("%p[%p]") then 
           print('Device '.. name..'('..mDevID..')'.. ' hat keine Nachbarn')
           nn = nn + 1 
         else 
            thisDev=string.sub(thisDev,1,150).."</br>"
            if html then thisDev = "<br>"..thisDev end  
        end 
        if html then output = '<font size="2"><font color="yellow">'..output..thisDev.."</font>" 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 = '<font size="2"><font color="yellow">'..output..thisDevRoute..' - hops: '..hops.."</font></br>" 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 = '<font size="2"><font color="yellow">'..output..thisDevLWRRTime.."</font> </br>" ..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)

Ich habe jetzt alle meine Geräte und Szenen vom HC2 nach HC3 migriert. Bei fast 100 devices habe ich jetzt festgestellt das die html Ausgabe des Scripts, vermutlich wegen Umlauten und/oder Sonderzeichen in den Namen nicht immer optimal aussieht. Deshalb habe ich html per default auf false gestellt.
Die Anzahl der hops in der Ausgabe wird jetzt wie in der Zusammenfassung mit der gleichen Farbe hinterlegt. Erleichtert das Auffinden der Geräte.
Noch eine Besonderheit - setzt man local html = nil , erhält die Ausgabe nur die Zusammenfassung.


-- File    : RoutingInfo.lua
-- Version : 0.2.1 -  {30.04.2021}
-- Copyleft: {jwi} 
-- Abkürzung : working route respose time = WRRT
-- 
-- Please note the local variables, "html" and "checksection". 
-- 
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 
       return '<font color="yellow">'..n..'</font>'
     elseif n==2 then r2h = r2h +1
       return '<font color="orange">'..n..'</font>'
     elseif n==3 then r3h = r3h +1 
       return '<font color="red">'..n..'</font>'
     elseif n==4 then r4h = r4h +1 
  end
  return '<font color="darkred">'..n..'</font>'
end
 
local filter = '/devices/?enabled=true&isPlugin=false'
local allDevices = api.get(filter)
local html = false --Kann true, false oder nil sein, nil = nur Zusammnfassung
local checksection = false --if False no section is displayed
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...</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
        if checksection then
           thisDev = "Neighbours of device " .. mDevID ..') '..name ..' (' .. room .. '|' .. section .. ') : ' .. json.encode(fibaro.getValue(mDevID, "neighborList"))
        else
           thisDev = "Neighbours of device " .. mDevID ..') '..name ..' (' .. room .. ') : ' .. json.encode(fibaro.getValue(mDevID, "neighborList"))
        end
        if thisDev:find("%p[%p]") then 
           print('Device '.. name..'('..mDevID..')'.. ' hat keine Nachbarn')
           nn = nn + 1 
         else 
            thisDev=string.sub(thisDev,1,150).."</br>"
            if html then thisDev = "<br>"..thisDev  end   
        end 
        if html then output = '<font size="2"><font color="yellow">'..output..thisDev.."</font>" 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 = '<font size="2"><font color="yellow">'..output..thisDevRoute..' - hops: '..hops.."</font></br>" 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 = '<font size="2"><font color="yellow">'..output..thisDevLWRRTime.."</font> </br>" ..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)