public static void StartNodesEngine()
        {
            if (Boolean.Parse(configuration["Develop:GenerateNodesJsListFileOnStart"]))
            {
                GenerateNodesJsListFile();
            }

            nodesEngine = new NodesEngine(nodesDb, nodesDataDb);
            nodesEngine.SetUpdateInterval(nodesEngineConfig.UpdateInterval);
            nodesEngine.OnLogEngineInfo  += logs.AddNodesEngineInfo;
            nodesEngine.OnLogEngineError += logs.AddNodesEngineError;
            nodesEngine.OnLogNodeInfo    += logs.AddNodeInfo;
            nodesEngine.OnLogNodeError   += logs.AddNodeError;

            if (gateway != null && nodesEngine != null)
            {
                mySensorsNodesEngine = new MySensorsNodesEngine(gateway, nodesEngine);
            }
            else
            {
                mySensorsNodesEngine = null;
            }

            uiNodesEngine = new UiNodesEngine(nodesEngine);

            if (!nodesEngineConfig.Enable)
            {
                return;
            }

            logs.AddSystemInfo("Starting nodes engine... ");
            nodesEngine.Start();

            logs.AddSystemInfo("Nodes engine started.");
        }
        public static void ConnectToGateway()
        {
            mySensorsNodesEngine = null;

            if (gatewayConfig.SerialGateway.Enable)
            {
                gatewayConnectionPort = new SerialConnectionPort(
                    gatewayConfig.SerialGateway.SerialPortName,
                    gatewayConfig.SerialGateway.Boudrate);
            }
            else if (gatewayConfig.EthernetGateway.Enable)
            {
                gatewayConnectionPort = new EthernetConnectionPort(
                    gatewayConfig.EthernetGateway.GatewayIP,
                    gatewayConfig.EthernetGateway.GatewayPort);
            }
            else
            {
                return;
            }

            //connecting to gateway
            logs.AddSystemInfo("Connecting to gateway...");

            gateway = new Gateway(gatewayConnectionPort, mySensorsDb, mySensorsMessagesDb);

            gateway.enableAutoAssignId = gatewayConfig.EnableAutoAssignId;
            gateway.IsMetricUnit       = () => gatewayConfig.IsMetric;

            gateway.OnLogDecodedMessage      += logs.AddGatewayDecodedMessage;
            gateway.OnLogMessage             += logs.AddGatewayMessage;
            gateway.OnLogInfo                += logs.AddGatewayInfo;
            gateway.OnLogError               += logs.AddGatewayError;
            gateway.endlessConnectionAttempts = true;
            gateway.OnConnected              += GatewayConnected;
            gateway.OnDisconnected           += GatewayDisconnected;

            gateway.Connect().Wait();

            if (gateway != null && nodesEngine != null)
            {
                mySensorsNodesEngine = new MySensorsNodesEngine(gateway, nodesEngine);
            }

            if (gateway != null && gateway.IsConnected())
            {
                logs.AddSystemInfo("Gateway connected.");
            }
            else
            {
                logs.AddSystemInfo("Gateway is not connected.");
            }
        }
        public static void DisconnectGateway()
        {
            if (gateway == null)
            {
                return;
            }

            if (gateway.GetGatewayState() != GatewayState.Disconnected)
            {
                gateway.Disconnect();
            }

            gateway = null;
            mySensorsNodesEngine = null;
        }