Fibaro TutorialsTutorials

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:

Mesh Analyse Ergebnis

  1. show_neighbours = false/true;  — Zeigt Nachbargeräte im Debug Fenster mit an
  2. show_route = true/false; — Zeigt letzte verfügbare Mesh Route des Geräts
  3. show_sub_devices = false/true; — Zeigt untergeordnete Geräte
  4. show_status = false/true;  — Zeigt Statistik von der letzten funktionierenden Route, die geschickt wurde.
  5. 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.

Mesh Analyse Ergebnis

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.

Ralf

Im Jahre 2018 habe ich ein Haus gebaut und versuche, nach und nach smarte Produkte ins Haus zu integrieren. Ich freue mich, Euch die Smart Home Welt näherzubringen und gemeinsam mit Euch zu lernen.

Ähnliche Artikel

2 Kommentare

  1. 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?

  2. 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??

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Schaltfläche "Zurück zum Anfang"