Пример #1
0
        internal MQTTClient(IMQTTService mqttService, ITopicFilter [] topicFilters)
        {
            _mqttService  = mqttService as MQTTService;
            _topicFilters = topicFilters;

            var factory = new MqttFactory();

            _mqttClient = factory.CreateMqttClient();
        }
Пример #2
0
        public async Task SetupPlayer()
        {
            client  = new MQTTService();
            sClient = new SongClient("https://iot2.busk.cf");
            await client.SetupClient(12393, "broker.busk.cf", "piezo", "piezopass", "PiezoPlayer");

            await client.Subscribe("Song/#");

            await client.Subscribe("Track/#");

            await client.Subscribe("test/#"); //REMOVE FOR PROD

            Subscribe(client.GetMessageStream());
            PopulateSpeakerGPIOPorts();
            s = sClient.GetNextSong(100);
        }
Пример #3
0
 public MqttServiceEventListener(MQTTService mqttService)
 {
     _mqttService = mqttService;
     
     // add event handlers
 }
Пример #4
0
        static async Task Start()
        {
            var mqttService = new MQTTService();

            var mqttClientOptions = new Options
            {
                Uri = new Uri("mqtt://test.mosquitto.org:1883"),
                //UseTls = true,
                //IgnoreCertificateChainErrors = true,
                //IgnoreCertificateRevocationErrors = true,
                //AllowUntrustedCertificates = true,

                //Uri = new Uri("ws://broker.mqttdashboard.com:8000/mqtt"),
                //Server = "broker.mqttdashboard.com",
                ////Port = 1883,
                //Port = 8000,
                //Url = "broker.mqttdashboard.com",
                //Path = "mqtt",
                ConnectionType = ConnectionType.Tcp,
                //ConnectionType = ConnectionType.WebSocket
            };

            var topic1 = new TopicFilter
            {
                QualityOfServiceLevel = QoSLevel.ExactlyOnce,
                //Topic = "PP/#"
                Topic = "/#"
            };

            var topic2 = new TopicFilter
            {
                QualityOfServiceLevel = QoSLevel.AtLeastOnce,
                //Topic = "EFM/#"
                Topic = "MQTTClientRx/Test"
            };

            ITopicFilter[] topicFilters =
            {
                topic1,
                //topic2
            };

            var MQTTService = mqttService.CreateObservableMQTTService(mqttClientOptions, topicFilters);

            _disp1 = MQTTService.observableMessage.Subscribe(
                msg =>
            {
                if (msg.Topic.Contains("EFM"))
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Blue;
                }

                Console.WriteLine($"{Encoding.UTF8.GetString(msg.Payload)}, " +
                                  $"{msg.QualityOfServiceLevel.ToString()}, " +
                                  $"Retain: {msg.Retain}, " +
                                  $"Topic: {msg.Topic}");
            },
                ex =>
            {
                Console.WriteLine($"{ex.Message} : inner {ex.InnerException.Message}");
            },
                () =>
            {
                Console.WriteLine("Completed...");
            });

            await Task.Delay(TimeSpan.FromSeconds(5));

            var newMessage = new MQTTMessage
            {
                Payload = Encoding.UTF8.GetBytes("Hello MQTT EO"),
                QualityOfServiceLevel = QoSLevel.ExactlyOnce,
                Retain = false,
                Topic  = "MQTTClientRx/Test"
            };

            await MQTTService.client.PublishAsync(newMessage);

            _disp2 = MQTTService.observableMessage.Subscribe(
                msg =>
            {
                if (msg.Topic.Contains("EFM"))
                {
                    Console.ForegroundColor = ConsoleColor.Cyan;
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                }

                Console.WriteLine($"{Encoding.UTF8.GetString(msg.Payload)}, " +
                                  $"{msg.QualityOfServiceLevel.ToString()}, " +
                                  $"Retain: {msg.Retain}, " +
                                  $"Topic: {msg.Topic}");
            },
                ex =>
            {
                Console.WriteLine($"{ex.Message} : inner {ex.InnerException.Message}");
            },
                () =>
            {
                Console.WriteLine("Completed...");
            });

            await Task.Delay(TimeSpan.FromSeconds(2));

            await MQTTService.client.UnsubscribeAsync(new[] { topic2 });

            await Task.Delay(TimeSpan.FromSeconds(5));

            //await MQTTService.client.UnsubscribeAsync(new [] {topic1});

            //await Task.Delay(TimeSpan.FromSeconds(2));



            //await MQTTService.client.SubscribeAsync(new[] { topic2 });


            await Task.Delay(TimeSpan.FromSeconds(2));

            _disp2.Dispose();

            await Task.Delay(TimeSpan.FromSeconds(2));

            _disp1.Dispose();

            await Task.Delay(TimeSpan.FromSeconds(30));

            //var topic2a = new TopicFilter
            //{
            //    QualityOfServiceLevel = QoSLevel.ExactlyOnce,
            //    Topic = "EFM/#"
            //};
            //Console.ForegroundColor = ConsoleColor.DarkBlue;
            //await MQTTService.client.UnsubscribeAsync(new[] { topic2 });
            //await MQTTService.client.SubscribeAsync(new[] { topic2a });
        }
Пример #5
0
        static async Task Start()
        {
            var mqttService = new MQTTService();

            var mqttClientOptions = new Options
            {
                // uri sera o endereço do service ACM broker
                Uri = new Uri("mqtt://localhost:1883"),
                // ClientId é o token de conexão do usuário
                ClientId = "s3sHXqoqdQdKV19nRePsVCVjiyWHAXza2M8s8HU8TCUgrATTV29zHC192Tlne5Ef",
                // Server = "broker.mqttdashboard.com",
                // Port = 1883,
                // Port = 8000,
                // Url = "broker.mqttdashboard.com",
                // Path = "mqtt",
                ConnectionType = ConnectionType.Tcp,
                // ConnectionType = ConnectionType.WebSocket
            };

            var topic1 = new TopicFilter
            {
                QualityOfServiceLevel = QoSLevel.ExactlyOnce,
                // O tópico permitido é o padrão "user/" + id do usuário do token.
                Topic = "user/5a0de046f47ed1037289edc8"
            };

            ITopicFilter[] topicFilters =
            {
                topic1,
            };

            var MQTTService = mqttService.CreateObservableMQTTService(mqttClientOptions, topicFilters);

            _disp1 = MQTTService.observableMessage.Subscribe(
                msg =>
            {
                if (msg.Topic.Contains("EFM"))
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Blue;
                }

                Console.WriteLine($"{Encoding.UTF8.GetString(msg.Payload)}, " +
                                  $"{msg.QualityOfServiceLevel.ToString()}, " +
                                  $"Retain: {msg.Retain}, " +
                                  $"Topic: {msg.Topic}");
            },
                ex =>
            {
                Console.WriteLine($"{ex.Message} : inner {ex.InnerException.Message}");
            },
                () =>
            {
                Console.WriteLine("Completed...");
            });

            await Task.Delay(TimeSpan.FromSeconds(5));

            // não é permitido o envio de mensagens para o broker.
            // var newMessage = new MQTTMessage
            // {
            //     Payload = Encoding.UTF8.GetBytes("Hello MQTT EO"),
            //     QualityOfServiceLevel = QoSLevel.ExactlyOnce,
            //     Retain = false,
            //     Topic = "MQTTClientRx/Test"
            // };
        }
Пример #6
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.activity_test_condition);

            condition           = FindViewById <RelativeLayout>(Resource.Id.test_condition);
            TextConditionCenter = FindViewById <TextView>(Resource.Id.TextConditionCenter);

            ContainerFold   = FindViewById <Button>(Resource.Id.ContainerFold);
            ContainerOff    = FindViewById <Button>(Resource.Id.ContainerOff);
            ContainerUnfold = FindViewById <Button>(Resource.Id.ContainerUnfold);
            ContainerOpen   = FindViewById <Button>(Resource.Id.ContainerOpen);
            ContainerClose  = FindViewById <Button>(Resource.Id.ContainerClose);

            btn_save_status_container = FindViewById <Button>(Resource.Id.btn_save_parameters);
            box_lay_fold          = FindViewById <ImageView>(Resource.Id.box_lay_fold);
            s_situation_container = FindViewById <Spinner>(Resource.Id.s_situation);

            origin_topic = StaticBox.Imitators[StaticBox.DeviceId];

            var client_data = new MQTTClient()
            {
                ClientId = "ESP32AndroidImitatorClient",
                Password = mqttPassword,
                Port     = mqttPort,
                Server   = mqttServer,
                UserName = mqttUserName
            };

            mQTT = new MQTTService(client_data, this);

            GetInfoAboutBox();
            //StaticBox.Sensors["Местоположение контейнера"] = "На автомобиле";
            s_situation_container.ItemSelected += new EventHandler <AdapterView.ItemSelectedEventArgs>(Spinner_ItemSelected);
            var adapter = ArrayAdapter.CreateFromResource(this, Resource.Array.a_situation_loaded_container, Android.Resource.Layout.SimpleSpinnerItem);

            adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
            s_situation_container.Adapter = adapter;

            btn_save_status_container.Click += async delegate
            {
                try
                {
                    //StaticBox.Sensors["Состояние контейнера"] = (s_open_close_container.Text == "сложен") ? "0" : "1";
                    //StaticBox.Sensors["Состояние дверей"] = (s_lock_unlock_door.Text == "закрыта") ? "0" : "1";


                    var o_data = await ContainerService.EditBox();

                    if (o_data.Status == "1")
                    {
                        Toast.MakeText(this, o_data.Message, ToastLength.Long).Show();
                        GetInfoAboutBox();
                    }
                    else
                    {
                        GetInfoAboutBox();
                        StaticBox.CameraOpenOrNo = 1;
                        Intent authActivity = new Intent(this, typeof(Auth.SensorsDataActivity));
                        StartActivity(authActivity);
                    }
                }
                catch (Exception ex)
                {
                    Toast.MakeText(this, "" + ex.Message, ToastLength.Long).Show();
                }
            };

            ContainerFold.Click += delegate(object select, EventArgs eventArgs)
            {
                SetBtnBackground("fold");
                StaticBox.Sensors["Состояние контейнера"] = "0";
                mQTT.PublishBoxState(origin_topic, "2");
            };
            //остановка
            ContainerOff.Click += delegate(object select, EventArgs eventArgs)
            {
                SetBtnBackground("off");
                StaticBox.Sensors["Состояние контейнера"] = "2";
                mQTT.PublishBoxState(origin_topic, "0");
            };
            //разложить
            ContainerUnfold.Click += delegate(object select, EventArgs eventArgs)
            {
                SetBtnBackground("unfold");
                StaticBox.Sensors["Состояние контейнера"] = "1";
                mQTT.PublishBoxState(origin_topic, "1");
            };

            //изменение состояния дверей
            ContainerOpen.Click += async delegate
            {
                try
                {
                    StaticBox.Sensors["Состояние дверей"] = "1";
                    SetBtnBackground("open");
                }
                catch (Exception ex)
                {
                    Toast.MakeText(this, "" + ex.Message, ToastLength.Long).Show();
                }
            };

            //изменение состояния дверей
            ContainerClose.Click += async delegate
            {
                try
                {
                    StaticBox.Sensors["Состояние дверей"] = "0";
                    SetBtnBackground("close");
                }
                catch (Exception ex)
                {
                    Toast.MakeText(this, "" + ex.Message, ToastLength.Long).Show();
                }
            };

            //изменение состояния дверей
            //btn_lock_unlock_door.Click += async delegate
            //{
            //    try
            //    {
            //        if (s_lock_unlock_door.Text == "закрыта")
            //        {
            //            s_lock_unlock_door.Text = "открыта";
            //            box_lay_fold.SetImageResource(Resource.Drawable.open_door);
            //        }
            //        else if (s_lock_unlock_door.Text == "открыта" && s_open_close_container.Text == "разложен")
            //        {
            //            s_lock_unlock_door.Text = "закрыта";
            //            box_lay_fold.SetImageResource(Resource.Drawable.close_door);
            //        }
            //        else if (s_open_close_container.Text == "сложен" && s_lock_unlock_door.Text == "открыта")
            //        {
            //            Android.App.AlertDialog.Builder alert = new Android.App.AlertDialog.Builder(this);
            //            alert.SetTitle("Внимание !");
            //            alert.SetMessage("Невозможно изменить состояние дверей.");
            //            alert.SetPositiveButton("Закрыть", (senderAlert, args) => {
            //                Toast.MakeText(this, "Предупреждение было закрыто!", ToastLength.Short).Show();
            //            });
            //            Dialog dialog = alert.Create();
            //            dialog.Show();
            //        }
            //        else if (s_open_close_container.Text == null && s_lock_unlock_door.Text == null)
            //        {
            //            Android.App.AlertDialog.Builder alert = new Android.App.AlertDialog.Builder(this);
            //            alert.SetTitle("Внимание !");
            //            alert.SetMessage("Невозможно изменить состояние дверей и контейнера.");
            //            alert.SetPositiveButton("Закрыть", (senderAlert, args) => {
            //                Toast.MakeText(this, "Предупреждение было закрыто!", ToastLength.Short).Show();
            //            });
            //            Dialog dialog = alert.Create();
            //            dialog.Show();
            //        }
            //        else
            //        {
            //            Android.App.AlertDialog.Builder alert = new Android.App.AlertDialog.Builder(this);
            //            alert.SetTitle("Внимание !");
            //            alert.SetMessage("Невозможно изменить состояние дверей.");
            //            alert.SetPositiveButton("Закрыть", (senderAlert, args) => {
            //                Toast.MakeText(this, "Предупреждение было закрыто!", ToastLength.Short).Show();
            //            });
            //            Dialog dialog = alert.Create();
            //            dialog.Show();
            //        }
            //    }
            //    catch (Exception ex)
            //    {
            //        Toast.MakeText(this, "" + ex.Message, ToastLength.Long).Show();
            //    }
            //};
        }