private void Run()
        {
            while (!_cancelationToken.IsCancellationRequested)
            {
                _logger.Info("Sending telemetry");
                _metricRecorder.CountEvent(DeconzToMqttIdentifier.SendInterval());
                try
                {
                    foreach (var repository in _repositories)
                    {
                        foreach (var item in repository.GetAllDeconzItems())
                        {
                            try
                            {
                                var msg = new DeconzItemTelemetryMqttMessage
                                {
                                    Content = repository.Serialize(item),
                                    Entity  = item
                                };
                                _mqttClient.SendMessage(msg);
                            }
                            catch (Exception ex)
                            {
                                _logger.Error(ex, "Sending of message for sensor {0} failed", item.Name);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.Error(ex, "Error in telemetry processing occurred");
                }

                Thread.Sleep(TimeSpan.FromSeconds(60));
            }

            _task = null;
        }
Beispiel #2
0
        public void SendMessage(MqttMessage message)
        {
            _metricRecorder.CountEvent(DeconzToMqttIdentifier.SendMessage());
            lock (_sendLock)
            {
                if (!_client.IsConnected)
                {
                    _logger.Warn("MQTT Client not connected. Try reconnect");
                    if (_client != null)
                    {
                        _client.Dispose();
                    }
                    _client = null;

                    Connect();
                }

                var visitor          = new MqttMessageBuilderVisitor();
                var messageConverted = message.Accept(visitor);

                _metricRecorder.Measure(DeconzToMqttIdentifier.MessageSize(), messageConverted.Payload.Length);
                _client.PublishAsync(messageConverted, _cancelationToken.Token).Wait();
            }
        }