pequenos ajustes na instancia geral OperacaoEmAndamento

This commit is contained in:
Diego Freitas 2026-06-29 09:36:15 -03:00
parent afc3f41b5f
commit 1e82065e91
4 changed files with 126 additions and 86 deletions

View File

@ -12,6 +12,8 @@ namespace AgroBase.Models
{ {
public class LivoxModel public class LivoxModel
{ {
public DateTime Momento { get; set; }
public long timestamp { get; set; } public long timestamp { get; set; }
public bool conectado { get; set; } public bool conectado { get; set; }
public bool executando { get; set; } public bool executando { get; set; }
@ -31,6 +33,7 @@ namespace AgroBase.Models
{ {
return new LivoxModel() return new LivoxModel()
{ {
Momento = Momento,
timestamp = timestamp, timestamp = timestamp,
conectado = conectado, conectado = conectado,
executando = executando, executando = executando,

View File

@ -270,6 +270,8 @@ namespace AgroBase.Models.Modules
{ {
return new ModuloIMUModel return new ModuloIMUModel
{ {
Momento = Momento,
valido = valido, valido = valido,
modo = modo, modo = modo,

View File

@ -61,39 +61,11 @@ namespace AgroBase.Models
public OperacaoSensoriamentoConjuntoModel Sensoriamento { get; set; } = new OperacaoSensoriamentoConjuntoModel(); public OperacaoSensoriamentoConjuntoModel Sensoriamento { get; set; } = new OperacaoSensoriamentoConjuntoModel();
public Form frmOperacao { get; set; } public Form frmOperacao { get; set; }
#region STATUS DE CONTEXTO
//public StatusOperacao StatusAtual { get; private set; } = StatusOperacao.NaoIniciado;
//public StatusOperacao StatusAnterior { get; private set; } = StatusOperacao.NaoIniciado;
//public bool Emergencia { get; set; } = false;
//public bool Pausa { get; set; } = false;
//public bool OperacaoLiberada { get; private set; } = false;
//public bool OperacaoConfigurada { get; private set; } = false;
//public string ErroOperacaoLiberada { get; set; }
//public DateTime TempoAguardando { get; private set; } = DateTime.Now;
//public double TempoAguardandoSegs => (TempoAguardando.AddSeconds(TempoIniciarOperacao) - DateTime.Now).TotalSeconds;
//public bool Iniciado { get; set; }
//public bool Finalizando { get; set; } = false;
//public bool Calibrando { get; set; } = false;
//public DateTime DataInicio { get; set; } = DateTime.MinValue;
//public DateTime DataFim { get; set; } = DateTime.MinValue;
//public double TempoDecorridoSegs
//{
// get
// {
// return (StatusAtual == StatusOperacao.Parametrizando ? 0 : ((Variaveis.OperacaoEmAndamento.DataFim != DateTime.MinValue ? Variaveis.OperacaoEmAndamento.DataFim : DateTime.Now) - Variaveis.OperacaoEmAndamento.DataInicio).TotalSeconds);
// }
//}
#endregion
public bool Treinando { get; set; } = false; public bool Treinando { get; set; } = false;
public bool Simulando { get; set; } = false; public bool Simulando { get; set; } = false;
public double SimulacaoAnguloControle { get; set; } = 0; public double SimulacaoAnguloControle { get; set; } = 0;
public double SimulacaoRpmControle { get; set; } = 0; public double SimulacaoRpmControle { get; set; } = 0;
//public Dictionary<T_Code, Dictionary<string, bool>> ModsCalibragem { get; set; } = new Dictionary<T_Code, Dictionary<string, bool>>();
//public List<OperacaoModulosMandatoriosModel> ModulosMandatorios { get; set; } = new List<OperacaoModulosMandatoriosModel>();
//public List<OperacaoParametrosMandatoriosModel> ParametrosMandatorios { get; set; } = new List<OperacaoParametrosMandatoriosModel>();
public int TempoIniciarOperacao { get; set; } = 10; public int TempoIniciarOperacao { get; set; } = 10;
public string ID { get; set; } public string ID { get; set; }
public double tmrLogsInterval public double tmrLogsInterval
@ -233,8 +205,10 @@ namespace AgroBase.Models
if (Parametros.Modo == null) return (false, new List<string>()); if (Parametros.Modo == null) return (false, new List<string>());
CarregarParametrosOperacaoPadrao((ModoOperacao)Parametros.Modo, true); CarregarParametrosOperacaoPadrao((ModoOperacao)Parametros.Modo, true);
op = Variaveis.OperacaoEmAndamento;
op.Parametros = Parametros; op.Parametros = Parametros;
op.DefinirComponentesEmUso();
op.Descricao = Parametros.Descricao; op.Descricao = Parametros.Descricao;
op.OprPath = opr_path; op.OprPath = opr_path;
@ -955,44 +929,55 @@ namespace AgroBase.Models
p.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Npc, Mandatorio = true, Utilizar = true }); p.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Npc, Mandatorio = true, Utilizar = true });
p.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Can, Mandatorio = true, Utilizar = true }); p.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Can, Mandatorio = true, Utilizar = true });
p.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Bat, Mandatorio = true, Utilizar = true }); p.ModulosMandatorios.Add(new OperacaoModulosMandatoriosModel() { Dispositivo = T_Code.Bat, Mandatorio = true, Utilizar = true });
p.ModulosMandatorios.ForEach(m => m.ComponentesEmUso = op?.PreencherComponentesEmUso(m.Dispositivo));
if (isagrobase) if (isagrobase)
{ {
op.Parametros = p; op.Parametros = p;
Variaveis.OperacaoEmAndamento = op;
p.ModulosMandatorios.ForEach(m => m.ComponentesEmUso = op?.PreencherComponentesEmUso(m.Dispositivo));
op.DefinirComponentesEmUso(); op.DefinirComponentesEmUso();
RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false)); RedisService.AtualizarCampos(CtxKey.DadosOperacao, ("configurado", false));
op.Sensoriamento.AtualizarDados(); op.Sensoriamento.AtualizarDados();
Variaveis.OperacaoEmAndamento = op;
} }
else
{
p.ModulosMandatorios.ForEach(m => m.ComponentesEmUso = op?.PreencherComponentesEmUso(m.Dispositivo));
}
return p; return p;
} }
private Dictionary<string, (bool, bool)> PreencherComponentesEmUso(T_Code Modulo) private Dictionary<string, (bool, bool)> PreencherComponentesEmUso(T_Code Modulo)
{ {
var op = Variaveis.OperacaoEmAndamento; var op = this;
Dictionary<string, (bool, bool)> d = new Dictionary<string, (bool, bool)>(); Dictionary<string, (bool, bool)> d = new Dictionary<string, (bool, bool)>();
switch (Modulo) switch (Modulo)
{ {
case T_Code.Mov: case T_Code.Mov:
op.DispMvd?.Dados?.Modulos?.ForEach(m => d.Add(m.MovMotor.Mod_ID, (true, m.MovMotor.Comandar))); if (op.DispMvd != null)
op.DispMvd?.Dados?.Modulos?.ForEach(m => d.Add(m.MovMotor.Mod_ID, (true, m.MovMotor.Comandar)));
break; break;
case T_Code.Dir: case T_Code.Dir:
op.DispMvd?.Dados?.Modulos?.ForEach(m => d.Add(m.DirMotor.Mod_ID, (true, m.DirMotor.Comandar))); if (op.DispMvd != null)
op.DispMvd?.Dados?.Modulos?.ForEach(m => d.Add(m.DirMotor.Mod_ID, (true, m.DirMotor.Comandar)));
break; break;
case T_Code.Atu: case T_Code.Atu:
op.DispAtu?.Dados?.Sensores?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir))); if (op.DispAtu != null)
op.DispAtu?.Dados?.BombasPressurizadoras?.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar))); {
op.DispAtu?.Dados?.BicosPulverizadores?.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar))); op.DispAtu?.Dados?.Sensores?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir)));
op.DispAtu?.Dados?.BombasPressurizadoras?.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar)));
op.DispAtu?.Dados?.BicosPulverizadores?.ForEach(b => d.Add(b.ID, (b.Mandatorio, b.Comandar)));
}
break; break;
case T_Code.Sen: case T_Code.Sen:
op.DispSen?.Dados?.Sensores?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir))); if (op.DispSen != null)
op.DispSen?.Dados?.Sinaleiros?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar))); {
op.DispSen?.Dados?.Servos?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar))); op.DispSen?.Dados?.Sensores?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Aferir)));
op.DispSen?.Dados?.Reles?.ForEach(r => d.Add(r.ID, (r.Mandatorio, r.Controlar))); op.DispSen?.Dados?.Sinaleiros?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar)));
op.DispSen?.Dados?.Servos?.ForEach(s => d.Add(s.ID, (s.Mandatorio, s.Controlar)));
op.DispSen?.Dados?.Reles?.ForEach(r => d.Add(r.ID, (r.Mandatorio, r.Controlar)));
}
break; break;
} }
return d; return d;
@ -1000,14 +985,15 @@ namespace AgroBase.Models
private void DefinirComponentesEmUso() private void DefinirComponentesEmUso()
{ {
var op = Variaveis.OperacaoEmAndamento; var op = this;
op.Parametros.ModulosMandatorios?.ForEach(m => op.Parametros.ModulosMandatorios?.ForEach(m =>
{ {
var comp = m.ComponentesEmUso ?? new Dictionary<string, (bool, bool)>();
switch (m.Dispositivo) switch (m.Dispositivo)
{ {
case T_Code.Mov: case T_Code.Mov:
foreach (var c in m.ComponentesEmUso) foreach (var c in comp)
{ {
var d = op.DispMvd?.Dados?.Modulos?.FirstOrDefault(x => x?.MovMotor?.Mod_ID == c.Key)?.MovMotor; var d = op.DispMvd?.Dados?.Modulos?.FirstOrDefault(x => x?.MovMotor?.Mod_ID == c.Key)?.MovMotor;
if (d != null) if (d != null)
@ -1015,7 +1001,7 @@ namespace AgroBase.Models
} }
break; break;
case T_Code.Dir: case T_Code.Dir:
foreach (var c in m.ComponentesEmUso) foreach (var c in comp)
{ {
var d = op.DispMvd?.Dados?.Modulos?.FirstOrDefault(x => x?.DirMotor?.Mod_ID == c.Key)?.DirMotor; var d = op.DispMvd?.Dados?.Modulos?.FirstOrDefault(x => x?.DirMotor?.Mod_ID == c.Key)?.DirMotor;
if (d != null) if (d != null)
@ -1024,7 +1010,7 @@ namespace AgroBase.Models
break; break;
case T_Code.Atu: case T_Code.Atu:
var da = op.DispAtu?.Dados; var da = op.DispAtu?.Dados;
foreach (var c in m.ComponentesEmUso) foreach (var c in comp)
{ {
var s = da?.Sensores?.FirstOrDefault(x => x.ID == c.Key); var s = da?.Sensores?.FirstOrDefault(x => x.ID == c.Key);
if (s != null) if (s != null)
@ -1051,7 +1037,7 @@ namespace AgroBase.Models
break; break;
case T_Code.Sen: case T_Code.Sen:
var ds = op.DispSen?.Dados; var ds = op.DispSen?.Dados;
foreach (var c in m.ComponentesEmUso) foreach (var c in comp)
{ {
var s = ds?.Sensores?.FirstOrDefault(x => x.ID == c.Key); var s = ds?.Sensores?.FirstOrDefault(x => x.ID == c.Key);
if (s != null) if (s != null)
@ -1091,9 +1077,8 @@ namespace AgroBase.Models
{ {
if (Parametros.Modo == null) return (false, new List<string>()); if (Parametros.Modo == null) return (false, new List<string>());
var op = Variaveis.OperacaoEmAndamento;
CarregarParametrosOperacaoPadrao((ModoOperacao)Parametros.Modo, true); CarregarParametrosOperacaoPadrao((ModoOperacao)Parametros.Modo, true);
var op = Variaveis.OperacaoEmAndamento;
op.Descricao = Parametros.Descricao; op.Descricao = Parametros.Descricao;
op.OprPath = $"Base ({VariaveisEquipamento.Parametros.base_ip})"; op.OprPath = $"Base ({VariaveisEquipamento.Parametros.base_ip})";
@ -1110,6 +1095,8 @@ namespace AgroBase.Models
p.ModulosMandatorios = Parametros.ModulosMandatorios; p.ModulosMandatorios = Parametros.ModulosMandatorios;
p.ParametrosMandatorios = Parametros.ParametrosMandatorios; p.ParametrosMandatorios = Parametros.ParametrosMandatorios;
op.DefinirComponentesEmUso();
List<string> ruasSelecionadas = Parametros.RuasPercorrer ?? new List<string>(); List<string> ruasSelecionadas = Parametros.RuasPercorrer ?? new List<string>();
if (Parametros.Mapa != null) if (Parametros.Mapa != null)
{ {
@ -1243,8 +1230,30 @@ namespace AgroBase.Models
if (op.Sensoriamento.Operacao.Calibrando) return; if (op.Sensoriamento.Operacao.Calibrando) return;
var modsCalibragem = op.Sensoriamento.Operacao.ModsCalibragem; var modsCalibragem = op.Sensoriamento.Operacao.ModsCalibragem;
if (modsCalibragem == null)
{
modsCalibragem = new Dictionary<T_Code, Dictionary<string, bool>>();
op.Sensoriamento.Operacao.ModsCalibragem = modsCalibragem;
}
if (!modsCalibragem.ContainsKey(T_Code.Mov))
modsCalibragem[T_Code.Mov] = new Dictionary<string, bool>();
if (!modsCalibragem.ContainsKey(T_Code.Dir))
modsCalibragem[T_Code.Dir] = new Dictionary<string, bool>();
if (!modsCalibragem.ContainsKey(T_Code.Atu))
modsCalibragem[T_Code.Atu] = new Dictionary<string, bool>();
bool modsCalibrados =
modsCalibragem != null &&
modsCalibragem.Any() &&
modsCalibragem.All(x =>
x.Value != null &&
x.Value.Values.Count > 0 &&
x.Value.Values.All(y => y == true)
);
bool modsCalibrados = modsCalibragem.All(x => x.Value.Values.Count > 0 && x.Value.Values.All(y => y == true));
if (!forcar && modsCalibrados) if (!forcar && modsCalibrados)
{ {
op.Sensoriamento.InserirLog(T_Code.Mod, StatusModulo.Operante, 100, "Todos os módulos já foram calibrados anteriormente, não irá calibrar novamente."); op.Sensoriamento.InserirLog(T_Code.Mod, StatusModulo.Operante, 100, "Todos os módulos já foram calibrados anteriormente, não irá calibrar novamente.");
@ -2827,27 +2836,6 @@ namespace AgroBase.Models
); );
} }
private void SalvarLog<T>(string Arquivo, T Objeto, bool Fim)
{
var Caminho = Variaveis.CaminhoOperacoes + Variaveis.OperacaoEmAndamento.ID;
if (!Directory.Exists(Caminho))
{
Directory.CreateDirectory(Caminho);
}
Caminho += "/" + Arquivo + ".json";
string jsonLog = JsonConvert.SerializeObject(Objeto, Formatting.None);
if (!File.Exists(Caminho))
{
File.WriteAllText(Caminho, "[" + jsonLog);
}
else
{
File.AppendAllText(Caminho, "," + jsonLog + (Fim ? "]" : ""));
}
}
private void SalvarLogCameraSolo() private void SalvarLogCameraSolo()
{ {
var cameras = CameraWorkerService.CamerasSolo.ToList(); var cameras = CameraWorkerService.CamerasSolo.ToList();
@ -3146,6 +3134,7 @@ namespace AgroBase.Models
public class OperacaoControleModel public class OperacaoControleModel
{ {
public DateTime Momento { get; set; }
public double Angulo { get; set; } public double Angulo { get; set; }
public int heartbeat { get; set; } = 1; public int heartbeat { get; set; } = 1;
public DateTime ticks_sem_resposta { get; set; } = DateTime.MinValue; public DateTime ticks_sem_resposta { get; set; } = DateTime.MinValue;
@ -3257,23 +3246,37 @@ namespace AgroBase.Models
public OperacaoControleModel Clone() public OperacaoControleModel Clone()
{ {
return new OperacaoControleModel() var clone = new OperacaoControleModel()
{ {
Momento = Momento,
Angulo = Angulo, Angulo = Angulo,
PercentualVelocidadeSP = PercentualVelocidadeSP, PercentualVelocidadeSP = PercentualVelocidadeSP,
_tipoMovimento = _tipoMovimento,
TipoMovimento = TipoMovimento,
TiposControle = new List<OperacaoControleTipoModel>(TiposControle),
SimulacaoMPC = new List<MPCSimulacaoModel>(SimulacaoMPC),
AlturaBarra = AlturaBarra, AlturaBarra = AlturaBarra,
heartbeat = heartbeat, heartbeat = heartbeat,
ticks_sem_resposta = ticks_sem_resposta, ticks_sem_resposta = ticks_sem_resposta,
Latencia = Latencia, Latencia = Latencia,
EmFreio = EmFreio, EmFreio = EmFreio,
ErroLateral = ErroLateral, ErroLateral = ErroLateral,
TiposControle = TiposControle?.Select(x => new OperacaoControleTipoModel()
{
Tipo = x.Tipo,
DelayEnvioComandoBase = x.DelayEnvioComandoBase,
DelayEnvioComando = x.DelayEnvioComando,
DelayEnvioComandoExtra = x.DelayEnvioComandoExtra,
UltimoComando = x.UltimoComando,
Comandos = new List<string>(x.Comandos ?? new List<string>()),
DirecaoAtual = x.DirecaoAtual,
UltimaDirecao = x.UltimaDirecao
}).ToList() ?? new List<OperacaoControleTipoModel>(),
SimulacaoMPC = new List<MPCSimulacaoModel>(SimulacaoMPC ?? new List<MPCSimulacaoModel>()),
DebugCustoMpc = new Dictionary<string, ManagerWorkerMessageResponseDebugCustoModel>(DebugCustoMpc ?? new Dictionary<string, ManagerWorkerMessageResponseDebugCustoModel>()), DebugCustoMpc = new Dictionary<string, ManagerWorkerMessageResponseDebugCustoModel>(DebugCustoMpc ?? new Dictionary<string, ManagerWorkerMessageResponseDebugCustoModel>()),
Motivos = new List<string>(Motivos ?? new List<string>()) Motivos = new List<string>(Motivos ?? new List<string>())
}; };
clone._tipoMovimento = _tipoMovimento;
return clone;
} }
} }
@ -3356,6 +3359,18 @@ namespace AgroBase.Models
var op = Variaveis.OperacaoEmAndamento; var op = Variaveis.OperacaoEmAndamento;
op.Controle.Motivos = RedisService.GetField<List<string>>(CtxKey.DadosControle, "motivos", new List<string>()); op.Controle.Motivos = RedisService.GetField<List<string>>(CtxKey.DadosControle, "motivos", new List<string>());
double tempoDecorridoSeg = 0;
if (Operacao.DataInicio != DateTime.MinValue)
{
DateTime fim =
Operacao.DataFim != DateTime.MinValue
? Operacao.DataFim
: agora;
tempoDecorridoSeg = Math.Max(0, (fim - Operacao.DataInicio).TotalSeconds);
}
var operacaoAtualizada = new OperacaoSensoriamentoLogModel() var operacaoAtualizada = new OperacaoSensoriamentoLogModel()
{ {
Momento = agora, Momento = agora,
@ -3370,7 +3385,7 @@ namespace AgroBase.Models
Finalizando = Operacao.Finalizando, Finalizando = Operacao.Finalizando,
DataInicio = Operacao.DataInicio, DataInicio = Operacao.DataInicio,
DataFim = Operacao.DataFim, DataFim = Operacao.DataFim,
TempoDecorridoSeg = Operacao.TempoDecorridoSeg, TempoDecorridoSeg = tempoDecorridoSeg,
TipoCanAtivo = CanManager.TipoServico, TipoCanAtivo = CanManager.TipoServico,
OperacaoLiberada = RedisService.GetField(CtxKey.DadosOperacao, "liberado", false), OperacaoLiberada = RedisService.GetField(CtxKey.DadosOperacao, "liberado", false),
@ -4292,24 +4307,40 @@ namespace AgroBase.Models
public ModuloIMUModel IMU { get; set; } = new ModuloIMUModel(); public ModuloIMUModel IMU { get; set; } = new ModuloIMUModel();
public void AtualizarImu(DateTime agora) public void AtualizarImu(DateTime agora)
{ {
string imu = RedisService.Get(RedisService.ModKey(T_Code.Imu)) ?? ""; try
var sIMU = JsonConvert.DeserializeObject<ModuloIMUModel>(imu); {
sIMU.Momento = agora; string imu = RedisService.Get(RedisService.ModKey(T_Code.Imu)) ?? "";
IMU = sIMU; var sIMU = JsonConvert.DeserializeObject<ModuloIMUModel>(imu) ?? new ModuloIMUModel();
sIMU.Momento = agora;
IMU = sIMU;
}
catch
{
IMU = new ModuloIMUModel()
{
Momento = agora
};
}
} }
// Gps // Gps
public GPSModel Gps { get; set; } = new GPSModel(); public GPSModel Gps { get; set; } = new GPSModel();
public void AtualizarGps(DateTime agora) public void AtualizarGps(DateTime agora)
{ {
Gps = GPSService.GetSnapshot(); Gps = GPSService.GetSnapshot() ?? new GPSModel();
Gps.Momento = agora;
if (VariaveisOperacao.PosicaoBase != null)
VariaveisOperacao.PosicaoBase.Momento = agora;
} }
// Lvx // Lvx
public LivoxModel LivoxLidar { get; set; } = new LivoxModel(); public LivoxModel LivoxLidar { get; set; } = new LivoxModel();
public void AtualizarLivox(DateTime agora) public void AtualizarLivox(DateTime agora)
{ {
LivoxLidar = LivoxManagerProcess.DadosLeitura?.Clone(); LivoxLidar = LivoxManagerProcess.DadosLeitura?.Clone() ?? new LivoxModel();
LivoxLidar.Momento = agora;
} }
// Bat // Bat
@ -4526,7 +4557,8 @@ namespace AgroBase.Models
var dadosVisualWorker = OperadorVisual?.Clone(); var dadosVisualWorker = OperadorVisual?.Clone();
var dadosHealthWorker = OperadorSaude?.Clone(); var dadosHealthWorker = OperadorSaude?.Clone();
var dadosLivox = LivoxLidar?.Clone(); var dadosLivox = LivoxLidar?.Clone();
var dadosCooler = _Cooler?.GetResumo(); var dadosCooler = _Cooler?.GetResumo(agora);
op.Controle.Momento = agora;
OperacaoSensoriamentoConjuntoModel dadosAtualizados = new OperacaoSensoriamentoConjuntoModel() OperacaoSensoriamentoConjuntoModel dadosAtualizados = new OperacaoSensoriamentoConjuntoModel()
{ {

View File

@ -163,10 +163,11 @@ namespace AgroBase.Services
} }
} }
public CoolerControlDataModel GetResumo() public CoolerControlDataModel GetResumo(DateTime agora)
{ {
return new CoolerControlDataModel() return new CoolerControlDataModel()
{ {
Momento = agora,
Modo = ModoAtual, Modo = ModoAtual,
UltimaMudanca = UltimaMudancaModo, UltimaMudanca = UltimaMudancaModo,
TemperaturaLigar = TempOn, TemperaturaLigar = TempOn,
@ -191,6 +192,7 @@ namespace AgroBase.Services
public class CoolerControlDataModel public class CoolerControlDataModel
{ {
public DateTime Momento { get; set; }
public CoolerMode Modo { get; set; } public CoolerMode Modo { get; set; }
public DateTime UltimaMudanca { get; set; } public DateTime UltimaMudanca { get; set; }
public double TemperaturaLigar { get; set; } public double TemperaturaLigar { get; set; }
@ -206,6 +208,7 @@ namespace AgroBase.Services
{ {
return new CoolerControlDataModel() return new CoolerControlDataModel()
{ {
Momento = Momento,
Modo = Modo, Modo = Modo,
UltimaMudanca = UltimaMudanca, UltimaMudanca = UltimaMudanca,
TemperaturaLigar = TemperaturaLigar, TemperaturaLigar = TemperaturaLigar,