Comandos de Controel
Ativar aquecedor fa 10 01 01 b0 55 fb FA 10 01 02 00 00 20 FB Desativar aquecedor fa 10 01 03 31 94 fb FA 10 01 04 00 00 0A FB
Ativar desumidificador fa 10 01 05 b1 96 fb FA 10 01 06 00 00 1C FB Desativar desumidificador fa 10 01 07 30 57 fb FA 10 01 08 00 00 25 FB
Ativar ventilação fa 10 01 09 b1 93 fb FA 10 01 0A 00 00 06 FB Desativar ventilação fa 10 01 0b 30 52 fb FA 10 01 0C 00 00 0F FB
Ativar alarme fa 10 00 0d b1 c0 fb Desativar alarme fa 10 00 0f 30 01 fb
Alterar endereço do dispsoitivo fa 10 00 59 10 11 f8 1c fb Resposta de alteração FA 10 11 69 01 BB 71 FB
fa 10 11 59 10 00 3d 2c fb
Monitoramento: 1005 Controel: 1001 10 00 59 10 01 f9 d0 Leitura sensores fa 10 01 54 70 6a fb fa 10 02 54 70 9a fb fa 10 03 54 71 0a fb Comando controle fa 20 03 01 b1 3a fb
Implementação do Sistema:
public class GraficoTemperatura
{
public GraficoTemperatura()
{ }
private Graphics superficieDesenho;
private Bitmap imagemGrafico;
private int largura = 640;
private int altura = 480;
private float escalaX = 50;
private float escalaY = 50;
private float intervaloY = 20;
private float baseY = 0;
private float suavizacao = 0.5f;
private string titulo = "Monitoramento de Ambiente";
private string unidade = "Valores";
private string rotuloX = "Período";
private string rotuloY = "Medições";
private string[] categorias = new string[] { "Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez" };
private int[] dados = new int[] { 32, 12, 32, 43, 54, 35, 35, 42, 63, 35, 35, 67 };
public Bitmap GerarImagem()
{
PrepararGrafico();
RenderizarConteudo(ref superficieDesenho);
return imagemGrafico;
}
private void PrepararGrafico()
{
imagemGrafico = new Bitmap(largura, altura);
superficieDesenho = Graphics.FromImage(imagemGrafico);
superficieDesenho.DrawRectangle(new Pen(Color.Black, 1), 0, 0, largura, altura);
superficieDesenho.FillRectangle(new SolidBrush(Color.White), 1, 1, largura - 2, altura - 2);
superficieDesenho.DrawLine(new Pen(Color.Black, 1), 100, altura - 100, largura - 75, altura - 100);
superficieDesenho.DrawLine(new Pen(Color.Black, 1), 100, altura - 100, 100, 75);
ConfigurarEixos(ref superficieDesenho);
DefinirEscalaX(ref superficieDesenho);
DefinirEscalaY(ref superficieDesenho);
AdicionarTitulo(ref superficieDesenho);
}
private void RenderizarConteudo(ref Graphics canvas)
{
if (categorias.Length == dados.Length)
{
PointF[] pontos = new PointF[categorias.Length];
float posYBase = (altura - 100) + baseY;
float fatorY = (escalaY / 50) * (50 / intervaloY);
for (int i = 0; i < categorias.Length; i++)
{
float posX = escalaX * i + 100;
float posY = posYBase - dados[i] * fatorY;
pontos[i] = new PointF(posX, posY);
}
canvas.DrawCurve(new Pen(Color.Red, 1), pontos, suavizacao);
}
else
{
canvas.DrawString("Erro: Quantidade de categorias e dados divergem",
new Font("Arial", 10), new SolidBrush(Color.Red), new Point(150, altura / 2));
}
}
}
Gráfico``` public class Principal : Form { private SerialPort portaSerial; private System.Timers.Timer temporizador;
public Principal()
{
InicializarComponentes();
}
private void Principal_Carregamento(object sender, EventArgs e)
{
VerificarRegistro();
IniciarMonitoramento();
temporizador = new System.Timers.Timer();
temporizador.Interval = 20000;
temporizador.Elapsed += Temporizador_Evento;
temporizador.Start();
}
private void IniciarMonitoramento()
{
portaSerial = new SerialPort();
portaSerial.Open();
portaSerial.DataReceived += DadosRecebidos;
}
private void DadosRecebidos(object sender, SerialDataReceivedEventArgs e)
{
byte[] buffer = new byte[portaSerial.BytesToRead];
portaSerial.Read(buffer, 0, buffer.Length);
ProcessarLeituras(buffer);
}
private void ProcessarLeituras(byte[] dados)
{
string hexDados = BitConverter.ToString(dados).Replace("-", "");
if (hexDados.Length == 38)
{
string[] partes = hexDados.Split(' ');
string codigoSensor = partes[1] + partes[2];
double temperatura = ConverterHexDecimal(partes[5]);
double umidade = ConverterHexDecimal(partes[6]);
AtualizarInterface(codigoSensor, temperatura, umidade);
VerificarAlertas(temperatura, umidade);
}
}
private void VerificarAlertas(double temp, double umid)
{
if (temp > 40 || umid > 80)
{
MostrarAlerta($"Alerta: Temperatura {temp}°C, Umidade {umid}%");
}
}
}
Monitoramento```
public class Configuracao : Form
{
public Configuracao()
{
InicializarComponentes();
}
private void AlternarInicializacaoSistema(object sender, EventArgs e)
{
string caminhoApp = Application.ExecutablePath;
RegistryKey registro = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true);
if (registro.GetValue("MonitorArmazem") == null)
{
registro.SetValue("MonitorArmazem", caminhoApp);
}
else
{
registro.DeleteValue("MonitorArmazem");
}
}
}
Configuração