Fibaro Home Center 2 – Mesh Netzwerk analysieren
In diesem Tutorial erfährst Du, wie Du Dein Mesh Netzwerk ganz einfach mit dem Home Center 2 analysieren kannst. Dafür haben wir zwei LUA Szenen erstellt.
Heute zeigen wir Dir, wie Du mit unserer LUA Szene Dein Z-Wave Mesh Netzwerk analysieren kannst. Dies ist nur mit dem Home Center 2 und dem neuen Softwareupdate 4.510 möglich.
Das Home Center Lite kann hierfür aktuell leider nicht genutzt werden. Zum einen steht das Update auf 4.510 noch nicht zur Verfügung und zum anderen sind dort keine LUA Szenen umsetzbar.
Doch was kann ein Z-Wave Mesh Netzwerk überhaupt?
Kann sich ein Gerät beispielsweise nicht direkt mit dem Fibaro Home Center verbinden, da der Empfang zu schlecht ist, wird das Signal über andere Geräte weitergeleitet.
Wichtig ist, zu wissen, dass Weiterleitungen nicht über batteriebetriebene Geräte wie Fenstersensoren weitergeleitet werden. Diese können zwar selbst ein Signal senden, und das Mesh Netzwerk nutzen. Sie vergrößern dieses aber nicht. Das Mesh Netzwerk wird nur durch Strom betriebene Komponenten wie Single Switch, Dimmer 2, Wall Plugs etc. erweitert. Auch wichtig: Das Signal kann maximal über 4 Geräte springen (Hops).
LUA Szene anlegen
Für den weiteren Verlauf benötigst Du folgende LUA Szene, die Du im Home Center anlegst:
--[[ %% properties %% events %% globals scene_mesh_id --]] --[[ Diese Lua Scene zeigt Euch Mesh Statistiken zu einem bestimmten Gerät Welche Route nimmt das Funksignal, welche Nachbarn hat das Gerät und vieles mehr! Nutzung ist erst ab Fibaro HC2 Software Version 4.510 möglich Script von Nico Bode https://www.intelligentes-haus.de/ Anleitung inkl. Video: https://www.intelligentes-haus.de/tutorials/fibaro-tutorials/fibaro-home-center-2-mesh-netzwerk-analysieren/ Zur Nutzung einfach device_id = und dann die Zahl durch die Geräte ID ersetzen. --]] if ( fibaro:getSourceTriggerType() == 'other' ) then device_id = 788; else device_id = fibaro:getGlobal('scene_mesh_id'); end show_neighbours = false; -- Zeigt Nachbargeräte mit an show_route = true; -- Zeigt letzte Mesh Route show_sub_devices = false; -- Zeigt Untergeordnete Geräte show_status = false; -- Zeigt Statistik device_update = false; -- Holt neue Nachbar Infos von Gerät ip_fibaro_api ='127.0.0.1:11111'; if(device_update == true) then fibaro:debug('Sende Update an Gerät') api.post('/devices/'..device_id..'/action/requestNodeNeighborUpdate'); fibaro:sleep(10000) end function room_name(id) id = tonumber(id); if(id == 0) then return 'nicht zugeordnet'; else return fibaro:getRoomName(id); end end function room_name_by_device(id) id = tonumber(id); local room_id = fibaro:getRoomID(id); if(name == 0) then return 'nicht zugeordnet'; else return room_name(room_id); end end DEBUG = function ( color, message ) fibaro:debug(string.format('<%s style="color:%s;">%s', "span", color, message, "span")) end request_url = 'http://'..ip_fibaro_api..'/api/devices/'..device_id..''; local http = net.HTTPClient(); http:request((request_url), { options = { method = 'GET', headers = {} }, success = function(response) if response.status == 200 then local result_json = json.decode(response.data); if(tonumber(result_json['parentId']) ~= 1 ) then DEBUG('red',''..device_id..' ist ungültig bitte trage die vom Hauptgerät ein: ID '..result_json['parentId']..'') else DEBUG('orange','Abfrage für device Name: '..result_json['name']..' (ID: '..result_json['id']..') Raum: '..room_name(result_json['roomID'])..'') if(show_sub_devices == true) then -- Lade Unter Devices local http_sub = net.HTTPClient(); http_sub:request(('http://'..ip_fibaro_api..'/api/devices/?parentId='..device_id..''), { options = { method = 'GET', headers = {} }, success = function(response_sub) if response_sub.status == 200 then local result_json_sub = json.decode(response_sub.data); for key, value in pairs(result_json_sub) do DEBUG('green','Sub '..key..' Name: '..value['name']..' (ID: '..value['id']..') Raum: '..room_name(value['roomID'])..'') end else fibaro:debug(request_url); DEBUG('red','Es ist ein HTTP Fehler aufgetreten: '..response.status..''); fibaro:debug(response.data) end end, error = function(err) DEBUG('red',request_url); fibaro:debug('[ERROR] ' .. err); end }); end if(show_route == true) then if(result_json['properties']['lastWorkingRoute'] == '[]') then DEBUG('red','Letzte Route steht nicht zur Verfügung Status ist '..result_json['properties']['neighborListRequestStatus']..''); else DEBUG('white','Alle Hops:'); message_last_hops = ''; for key, value in pairs(json.decode(result_json['properties']['lastWorkingRoute'])) do DEBUG('green','Hop über ID: '..value..' Name: '..fibaro:getName(value)..' Raum: '..room_name_by_device(value)..''); end end end if(show_neighbours == true) then DEBUG('white','Alle Nachbarn:'); message_neighbours = ''; for key, value in pairs(json.decode(result_json['properties']['neighborList'])) do if(value == 690) then else DEBUG('green',''..key..': ID: '..value..' Name: '..fibaro:getName(value)..' Raum: '..room_name_by_device(value)..''); end end end if(show_status == true) then DEBUG('white','Nachbar Status: '..result_json['properties']['neighborListRequestStatus']..' Letzte Anfrage: '..os.date('%X %x',result_json['properties']['neighborListRequestTimestamp'])..' Letzte Anwtort: '..os.date('%X %x',result_json['properties']['neighborListResponseTimestamp'])..' ') DEBUG('white','Letzte Route Status: '..result_json['properties']['lastWorkingRouteRequestStatus']..' Letzte Anfrage: '..os.date('%X %x',result_json['properties']['lastWorkingRouteRequestTimestamp'])..' Letzte Anwtort: '..os.date('%X %x',result_json['properties']['lastWorkingRouteResponseTimestamp'])..' ') end end else DEBUG('red',request_url); DEBUG('red','Es ist ein HTTP Fehler aufgetreten: '..response.status..''); DEBUG('red',response.data) end end, error = function(err) DEBUG('red',request_url); DEBUG('red','[ERROR] ' .. err); end });
Dort muss nur Deine Device ID angegeben werden. Dabei muss stets das übergeordnete Modul analysiert werden.
Nach dem Speichern kannst Du die Szene einfach mit einem Klick auf “Start” starten. Im Debug Fenster siehst Du dann die Informationen zu diesem Gerät.
Über die Config-Variablen kannst Du noch einstellen, welche Werte im Debug Fenster angezeigt werden sollen:
- show_neighbours = false/true; — Zeigt Nachbargeräte im Debug Fenster mit an
- show_route = true/false; — Zeigt letzte verfügbare Mesh Route des Geräts
- show_sub_devices = false/true; — Zeigt untergeordnete Geräte
- show_status = false/true; — Zeigt Statistik von der letzten funktionierenden Route, die geschickt wurde.
- device_update = false/true; — Holt neue Infos direkt vom Gerät
Einen Raum über Mesh Netzwerk analysieren
Über eine weitere LUA Szene kann man auch einen ganzen Raum analysieren. Dafür benötigen wir zunächst eine globale Variable mit dem Namen “scene_mesh_id”. Diese kannst Du in Deinem Home Center über “Steuerungen” – “Variablensteuerung” anlegen. Anschließend kannst Du eine zweite Szene anlegen:
--[[ %% properties %% events %% globals --]] room_id = 8; test_mode = false; ip_fibaro_api ='127.0.0.1:11111'; fibaro:debug('Start'); request_url = 'http://'..ip_fibaro_api..'/api/devices/?roomID='..room_id..''; local http = net.HTTPClient(); http:request((request_url), { options = { method = 'GET', headers = {} }, success = function(response) if response.status == 200 then local result_json = json.decode(response.data); for key, value in pairs(result_json) do if(tonumber(value['parentId']) == 1 ) then fibaro:debug('Abfrage für '..key..' Name: '..value['name']..' (ID: '..value['id']..') Raum ID: '..value['roomID']..''); if(test_mode == false) then fibaro:setGlobal('scene_mesh_id',tonumber(value['id'])); fibaro:sleep(10000); end end end else fibaro:debug(request_url); fibaro:debug('Es ist ein HTTP Fehler aufgetreten: '..response.status..''); fibaro:debug(response.data) end end, error = function(err) fibaro:debug(request_url); fibaro:debug('[ERROR] ' .. err); end });
Dort muss noch die ID des zu analysierenden Raumes eingetragen werden. Über “test_mode” (der Status kann auf “true” geändert werden) kann man sich zunächst eine theoretische Analyse anzeigen lassen und diese vor dem tatsächlichen Start kontrollieren. Anschließend kann man alles speichern und die Analyse starten. Der “test_mode” muss dann natürlich wieder auf “false” stehen.
Innherhalb unserer Mesh-Analyse (erste Szene) wird die Raumanalyse nun auch angezeigt. Eine Ausgabe findet dabei alle 10 Sekunden statt.
Die Darstellung der Analyse ist nun sehr übersichtlich einsehbar und dargestellt, auch die Bedienung ist sehr einfach. Sollten trotzdem noch Fragen auftauchen, teile uns diese gerne mit! In unserem Forum kannst Du Dich jederzeit mit uns und der Community zu diesem Thema (Mesh Netzwerk Analyse) austauschen.
Hi Nico,
danke für die gute anschauliche Anleitung zum Mesh Netzwerk analyse.
Ich habe eine Frage. Ich habe relativ viele strombetriebene Aktoren. Ich dachte immer das das Funksignal nicht sehr weit kommt. Dank Deines Skriptes habe ich gesehen, dass fast alle Module direkt mit dem HC2 kommunizieren. Ic habe 2 Fibaro RollerShutter die Empfangsprobleme machen. Ich denke die Netzabdeckung ist gegeben, da in direkter Nähe ein anderes Modul ist, er es aber nicht kennt. Mit dem Versuch die Nachbarliste zu aktualisieren kommt immer eine Fehlermeldung. Woran kann das liegen?
Hallo Nico,
Habe dein Skript gerade mit einem Qubino SmartMeter ausprobiert, das sich nicht Updaten lässt obwohl es nur über einen HOP mit meinem HC2 verbunden ist.
Nach dem 33. Nachbarn kommt eine Fehlermekdung:
[DEBUG] 13:45:55: Sende Update an Gerät
[DEBUG] 13:46:05: Abfrage für device Name: Qubino.488 (ID: 488) Raum: Keller
[DEBUG] 13:46:05: Alle Hops:
[DEBUG] 13:46:05: Hop über ID: 1 Name: zwave Raum: nicht zugeordnet
[DEBUG] 13:46:05: Alle Nachbarn:
[DEBUG] 13:46:06: 1: ID: 356 Name: Fibaro RolShutt.356 Raum: Wohnz.
…. 32 weitere Nachbarn …..
[DEBUG] 13:46:06: 33: ID: 408 Name: Remotec ZXT-120.408 Raum: Vorz.OG
[DEBUG] 13:46:06: 2019-11-06 13:46:06.390851 [ fatal] LUA error: /opt/fibaro/scenes/267.lua:148: Assertion failed: Expected number
Hast du einen Tipp??