예제 #1
0
        static void Main(string[] args)
        {
            inputSimulator = new InputSimulator();
            var boxes = SerialPortDetector.GetSerialPortBoxes();

            Console.WriteLine("Ready");

            foreach (var box in boxes)
            {
                box.OnButtonChange += Box_OnButtonChange;
            }

            Console.ReadLine();
            foreach (var box in boxes)
            {
                box.Stop();
            }
        }
        public SerialPort GetSerialPort()
        {
            SerialPort port = null;

            if (String.IsNullOrEmpty(SerialPortName))
            {
                Console.WriteLine("Serial port not specified. Detecting.");
                var detector = new SerialPortDetector();
                port           = detector.Detect();
                SerialPortName = port.PortName;
            }
            else
            {
                Console.WriteLine("Serial port specified");
                port = new SerialPort(SerialPortName, SerialBaudRate);
            }
            return(port);
        }
예제 #3
0
        public static void Main(string[] args)
        {
            var arguments = new Arguments(args);

            IsVerbose = arguments.Contains("v");
            var userId         = GetConfigValue(arguments, "UserId");
            var pass           = GetConfigValue(arguments, "Password");
            var host           = GetConfigValue(arguments, "Host");
            var deviceName     = GetConfigValue(arguments, "DeviceName");
            var serialPortName = GetConfigValue(arguments, "SerialPort");
            var serialBaudRate = Convert.ToInt32(GetConfigValue(arguments, "SerialBaudRate"));
            var topicPrefix    = "/" + userId;
            var useTopicPrefix = Convert.ToBoolean(ConfigurationSettings.AppSettings["UseTopicPrefix"]);

            SerialPort port = null;

            if (String.IsNullOrEmpty(serialPortName))
            {
                Console.WriteLine("Serial port not specified. Detecting.");
                var detector = new SerialPortDetector();
                port           = detector.Detect();
                serialPortName = port.PortName;
            }
            else
            {
                Console.WriteLine("Serial port specified");
                port = new SerialPort(serialPortName, serialBaudRate);
            }

            Console.WriteLine("Device name: " + GetConfigValue(arguments, "DeviceName"));
            Console.WriteLine("Port name: " + serialPortName);

            var deviceTopic = "/" + deviceName;

            if (useTopicPrefix)
            {
                deviceTopic = topicPrefix + deviceTopic;
            }

            Console.WriteLine(deviceTopic + "/[Key]");

            if (port == null)
            {
                Console.WriteLine("Error: Device port not found.");
            }
            else
            {
                Console.WriteLine("Serial port: " + port.PortName);

                Client = new SerialClient(port);

                try {
                    Client.Open();

                    Console.WriteLine(Client.Read());

                    var isRunning = true;

                    var mqttClient = new MqttClient(host);

                    var clientId = Guid.NewGuid().ToString();

                    mqttClient.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
                    mqttClient.Connect(clientId, userId, pass);


                    var subscribeTopics = GetSubscribeTopics(arguments);
                    foreach (var topic in subscribeTopics)
                    {
                        mqttClient.Subscribe(new string[] { topic }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });
                    }


                    while (isRunning)
                    {
                        var output = "";

                        /*while (!output.Contains(";;"))
                         * {
                         * //	Thread.Sleep(1);
                         *      output += Client.Read ();
                         * }*/

                        //Console.WriteLine("----- Serial output");
                        //Console.WriteLine(output);
                        //Console.WriteLine("-----");

                        var topics = new List <string>();

                        //Publish (arguments, mqttClient, output, topics);

                        //Thread.Sleep(10);
                    }

                    Client.Close();
                } catch (IOException ex) {
                    Console.WriteLine("Error: Please ensure device is connected to port '" + serialPortName + "' and not already in use.\n\n" + ex.Message);
                }
            }
        }
예제 #4
0
        public void Run()
        {
            DevicesDirectory = Path.GetFullPath(DevicesDirectory);

            Console.WriteLine("Devices directory:");
            Console.WriteLine(DevicesDirectory);

            Console.WriteLine("Device Name: " + DeviceName);
            Console.WriteLine("MQTT Host: " + MqttHost);
            Console.WriteLine("MQTT Username: "******"MQTT Port: " + MqttPort);

            LoadDeviceList();

            SerialPort port = null;

            if (String.IsNullOrEmpty(SerialPortName))
            {
                Console.WriteLine("Serial port not specified. Detecting.");
                var detector = new SerialPortDetector();
                port           = detector.Detect();
                SerialPortName = port.PortName;
            }
            else
            {
                Console.WriteLine("Serial port specified");
                port = new SerialPort(SerialPortName, SerialBaudRate);
            }

            Console.WriteLine("Device name: " + DeviceName);
            Console.WriteLine("Serial port name: " + SerialPortName);

            if (port == null)
            {
                Console.WriteLine("Error: Device port not found.");
            }
            else
            {
                Console.WriteLine("Serial port: " + port.PortName);

                Client = new SerialClient(port);

                EnsurePortIsOpen();

                SetupMQTT();

                // Wait until the first line arrives
                Client.ReadLine();

                var isRunning = true;
                while (isRunning)
                {
                    try {
                        RunLoop();

                        Thread.Sleep(10);
                    } catch (Exception ex) {
                        Console.WriteLine("An error occurred:");
                        Console.WriteLine(ex.ToString());
                        Console.WriteLine();
                        Console.WriteLine("Waiting for 30 seconds then retrying");

                        SendErrorEmail(ex, DeviceName, SmtpServer, EmailAddress);

                        Thread.Sleep(30 * 1000);

                        Run();
                    }
                }
            }
        }