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.
- 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. - 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)