Exemple #1
0
        public async Task <IActionResult> pcs_localremote(int siteid, int deviceindex, ushort localremote)
        {
            if (IsControlOk(siteid) == false)
            {
                return(BadRequest());
            }
            ModbusControlModel model = CreateModel <ModbusControlModel>(siteid, 0, deviceindex);

            if (localremote == 0)
            {
                model.commandcode = ModbusCommandCodes.LOCAL_MODE;
            }
            else
            {
                model.commandcode = ModbusCommandCodes.REMOTE_MODE;
            }
            string topic = $"hubbub/{siteid}/{0}/{deviceindex}/control";

            JObject obj = JObject.FromObject(model);
            await mqttPusher.PushAsync(obj, topic, 2);

            //if(model.LocalRemote == true)
            //{
            //    await Task.Delay(3);
            //    model = CreateModel<PcsControlModel>(siteid, 0, deviceindex);
            //}
            return(Ok());
        }
Exemple #2
0
        private MqttApplicationMessage ConvertControlMessage(ModbusControlModel model)
        {
            DUT_MQTT_MANUALCOMMAND mc = new DUT_MQTT_MANUALCOMMAND();

            mc.Header           = new DUT_MQTT_COMMON_HEADER();
            mc.Header.Quality   = 1;
            mc.Header.Category  = PmsCategoryTypes.MANUALCOMMAND;
            mc.Header.PmsIndex  = 1;
            mc.Header.Timestamp = DateTime.Now.ToFileTime();
            mc.SequenceNumber   = 1;
            mc.Device           = 2;
            mc.SetUpFlag        = 1;
            mc.UserName         = model.userid;
            //mc.ReferenceValue = Convert.ToUInt32(model.commandvalue.Value);
            mc.Command = ParseCommandCode(model.commandcode, mc.ReferenceValue);
            if (model.commandvalue.HasValue)
            {
                mc.ReferenceValue = Convert.ToUInt32(Math.Abs(model.commandvalue.Value));
            }
            mc.DeviceIndex = (uint)model.deviceindex;

            string topic = Environment.GetEnvironmentVariable(ENV_PMS_CONTROL_TOPIC);

            byte[] packet = PacketParser.SturctToByte(mc);
            return(new MqttApplicationMessageBuilder().
                   WithExactlyOnceQoS().WithTopic(topic).WithPayload(packet).Build());
        }
Exemple #3
0
        public async Task PublishAsync(CancellationToken token, int PcsNo, ushort Address, params ushort[] values)
        {
            ModbusControlModel model = new ModbusControlModel();

            model.StartAddress = Address;
            model.WriteValues  = values;
            string message = JsonConvert.SerializeObject(model);

            this.DeviceIndex = PcsNo;
            _logger.LogInformation($"[제어명령] TopicName:{GetMqttPublishTopicName()} PCS 대상: {PcsNo} 제어주소: {Address} 명령값: {string.Join(" ", values)}");
            await base.PublishMessageAsync(message, token);
        }
Exemple #4
0
        public async Task <IActionResult> pcs_automode(int siteid, int deviceindex)
        {
            if (IsControlOk(siteid) == false)
            {
                return(BadRequest());
            }
            ModbusControlModel model = CreateModel <ModbusControlModel>(siteid, 0, deviceindex);

            model.commandcode = ModbusCommandCodes.AUTO_MODE;
            string topic = $"hubbub/{siteid}/{0}/{deviceindex}/control";

            JObject obj = JObject.FromObject(model);
            await mqttPusher.PushAsync(obj, topic, 2);

            return(Ok());
        }
Exemple #5
0
 protected override async Task OnApplicationMessageReceived(string ClientId, string Topic, string ContentType, uint QosLevel, byte[] payload)
 {
     try
     {
         string             msg   = Encoding.UTF8.GetString(payload);
         ModbusControlModel model = JsonConvert.DeserializeObject <ModbusControlModel>(msg);
         globalStorage.ControlModelQueues.Enqueue(model);
         var logger = NLog.LogManager.GetLogger("control_logger");
         logger.Info($"[{model.userid}] [DeviceIndex:{model.deviceindex}] {model.commandcode} REF:{model.commandvalue}");
     }
     catch (Exception ex)
     {
         logger.LogError(ex, ex.Message);
     }
     //throw new NotImplementedException();
 }
Exemple #6
0
        public async Task <IActionResult> pcs_soclower(int siteid, int deviceindex, float soclower)
        {
            if (IsControlOk(siteid) == false)
            {
                return(BadRequest());
            }
            ModbusControlModel model = CreateModel <ModbusControlModel>(siteid, 0, deviceindex);

            model.commandcode  = ModbusCommandCodes.LIMIT_SOC_MIN;
            model.commandvalue = soclower;
            string topic = $"hubbub/{siteid}/{0}/{deviceindex}/control";

            JObject obj = JObject.FromObject(model);
            await mqttPusher.PushAsync(obj, topic, 2);

            return(Ok());
        }
Exemple #7
0
        protected override async Task OnApplicationMessageReceived(string ClientId, string Topic, string ContentType, uint QosLevel, byte[] payload)
        {
            try
            {
                if (Topic.StartsWith("site"))
                {
                    DUT_MQTT_COMMON_HEADER header = PacketParser.ByteToStruct <DUT_MQTT_COMMON_HEADER>(payload);
                    switch (header.Category)
                    {
                    case PmsCategoryTypes.ESS:
                        DUT_MQTT_ESS ess = PacketParser.ByteToStruct <DUT_MQTT_ESS>(payload);
                        ModelConverter.DataProcessing(ess, _queues);
                        ModelConverter.EventProcessing(this, ess);
                        break;

                    case PmsCategoryTypes.TEMPERATUREANDHUMIDITY:
                        DUT_MQTT_TEMPHUMIDITY temp = PacketParser.ByteToStruct <DUT_MQTT_TEMPHUMIDITY>(payload);
                        ModelConverter.DataProcessing(temp, _queues);
                        break;
                    }
                }
                else if (Topic.EndsWith("control"))
                {
                    string                 msg      = Encoding.UTF8.GetString(payload);
                    ModbusControlModel     model    = JsonConvert.DeserializeObject <ModbusControlModel>(msg);
                    MqttApplicationMessage mqtt_msg = ConvertControlMessage(model);
                    await MqttClient.PublishAsync(mqtt_msg);

                    var logger = NLog.LogManager.GetLogger("control_logger");
                    logger.Info($"[{model.userid}] [DeviceIndex:{model.deviceindex}] {model.commandcode} REF:{model.commandvalue}");
                }

                //if(ModelConverter.TryConvertPcs(ess, DateTime.Now, out MqttApplicationMessage[] pcs_messages,
                //    out MqttApplicationMessage[] bat_messages))
                //{

                //}
            }
            catch (Exception ex)
            {
                logger.LogError(ex, ex.Message);
            }
            //throw new NotImplementedException();
        }
        protected override async Task OnMessageReceivedAsync(MqttApplicationMessageReceivedEventArgs e)
        {
            byte[] packet = e.ApplicationMessage.Payload;
            string txt    = Encoding.UTF8.GetString(packet);

            try
            {
                ModbusControlModel data = JsonConvert.DeserializeObject <ModbusControlModel>(txt);
                bool IsSuccess          = await modbusFactory.WriteMultipleRegistersAsync(CancelToken, data.StartAddress, data.WriteValues);

                if (IsSuccess)
                {
                    logger.Info($"Control Success -> {txt}");
                }
                else
                {
                    logger.Warn($"Control Failed -> {txt}");
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex, ex.Message);
            }
        }