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.
