ajustes no fluxo de movimentacao autonoma
This commit is contained in:
parent
72a0eb823d
commit
7ae31a4950
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -3,20 +3,34 @@
|
|||
"WorkspaceRootPath": "C:\\ZendionINC\\agrobot_base\\AgroBase\\",
|
||||
"Documents": [
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\frma05config.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\frma05config.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
"AbsoluteMoniker": "D:0:0:{00000000-0000-0000-0000-000000000000}|\u003CSolution\u003E|AgroBase||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\models\\operacoes\\operacaomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\operacoes\\operacaomodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\services\\wifiservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\wifiservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\services\\serialservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\serialservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\services\\pythonservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\pythonservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\services\\kinectservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\kinectservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\services\\ethernetservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\services\\ethernetservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\models\\variaveis.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\variaveis.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\forms\\frmethernet.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\forms\\frmethernet.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\models\\asynctasktimermodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
|
||||
"RelativeMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|solutionrelative:agrobase\\models\\asynctasktimermodel.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
|
||||
},
|
||||
{
|
||||
"AbsoluteMoniker": "D:0:0:{C54B41C0-1D21-4E3E-949E-0F86BBC86A33}|AgroBase\\AgroBase.csproj|c:\\zendioninc\\agrobot_base\\agrobase\\agrobase\\||{B270807C-D8C6-49EB-8EBE-8E8D566637A1}|5e9a8ac2-4f34-4521-858f-4c248ba31532"
|
||||
}
|
||||
],
|
||||
"DocumentGroupContainers": [
|
||||
|
|
@ -26,58 +40,96 @@
|
|||
"DocumentGroups": [
|
||||
{
|
||||
"DockedWidth": 200,
|
||||
"SelectedChildIndex": 2,
|
||||
"SelectedChildIndex": 0,
|
||||
"Children": [
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 2,
|
||||
"Title": "SerialService.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\SerialService.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Services\\SerialService.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\SerialService.cs",
|
||||
"RelativeToolTip": "AgroBase\\Services\\SerialService.cs",
|
||||
"ViewState": "AQIAAAAAAAAAAAAAAAAAALUAAAA9AAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-12-11T16:45:47.67Z",
|
||||
"DocumentIndex": 0,
|
||||
"Title": "AgroBase",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\AgroBase.csproj",
|
||||
"RelativeDocumentMoniker": "AgroBase\\AgroBase.csproj",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\AgroBase.csproj",
|
||||
"RelativeToolTip": "AgroBase\\AgroBase.csproj",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001001|",
|
||||
"WhenOpened": "2024-12-12T21:57:11.22Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 1,
|
||||
"Title": "OperacaoModel.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
|
||||
"RelativeToolTip": "AgroBase\\Models\\Operacoes\\OperacaoModel.cs",
|
||||
"ViewState": "AQIAAAAAAAAAAAAAAAAAAKkLAAAAAAAA",
|
||||
"Title": "WifiService.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\WifiService.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Services\\WifiService.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\WifiService.cs",
|
||||
"RelativeToolTip": "AgroBase\\Services\\WifiService.cs",
|
||||
"ViewState": "AQIAABEAAAAAAAAAAAAowHUAAAAAAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-12-11T15:36:21.874Z",
|
||||
"WhenOpened": "2024-12-12T21:52:34.025Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 0,
|
||||
"Title": "frmA05Config.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmA05Config.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Forms\\frmA05Config.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmA05Config.cs",
|
||||
"RelativeToolTip": "AgroBase\\Forms\\frmA05Config.cs",
|
||||
"ViewState": "AQIAAAAAAAAAAAAAAAAAAHoAAAAJAAAA",
|
||||
"DocumentIndex": 2,
|
||||
"Title": "PythonService.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\PythonService.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Services\\PythonService.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\PythonService.cs",
|
||||
"RelativeToolTip": "AgroBase\\Services\\PythonService.cs",
|
||||
"ViewState": "AQIAACwAAAAAAAAAAIA9wG4AAAA5AAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-12-11T15:19:41.774Z",
|
||||
"WhenOpened": "2024-12-12T21:51:36.505Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 5,
|
||||
"Title": "frmEthernet.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmEthernet.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Forms\\frmEthernet.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Forms\\frmEthernet.cs",
|
||||
"RelativeToolTip": "AgroBase\\Forms\\frmEthernet.cs",
|
||||
"ViewState": "AQIAACAAAAAAAAAAAAAnwEEAAAA7AAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-12-12T21:49:57.208Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 3,
|
||||
"Title": "KinectService.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\KinectService.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Services\\KinectService.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\KinectService.cs",
|
||||
"RelativeToolTip": "AgroBase\\Services\\KinectService.cs",
|
||||
"ViewState": "AQIAAA8AAAAAAAAAAAAAAAAAAAAAAAAA",
|
||||
"Title": "EthernetService.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\EthernetService.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Services\\EthernetService.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Services\\EthernetService.cs",
|
||||
"RelativeToolTip": "AgroBase\\Services\\EthernetService.cs",
|
||||
"ViewState": "AQIAAGkBAAAAAAAAAADgv/kBAAAPAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-12-11T15:19:26.121Z",
|
||||
"WhenOpened": "2024-12-12T21:30:59.607Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 4,
|
||||
"Title": "Variaveis.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Variaveis.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Models\\Variaveis.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\Variaveis.cs",
|
||||
"RelativeToolTip": "AgroBase\\Models\\Variaveis.cs",
|
||||
"ViewState": "AQIAALMCAAAAAAAAAAASwGoDAAAbAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-12-12T21:12:48.82Z",
|
||||
"EditorCaption": ""
|
||||
},
|
||||
{
|
||||
"$type": "Document",
|
||||
"DocumentIndex": 6,
|
||||
"Title": "AsyncTaskTimerModel.cs",
|
||||
"DocumentMoniker": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\AsyncTaskTimerModel.cs",
|
||||
"RelativeDocumentMoniker": "AgroBase\\Models\\AsyncTaskTimerModel.cs",
|
||||
"ToolTip": "C:\\ZendionINC\\agrobot_base\\AgroBase\\AgroBase\\Models\\AsyncTaskTimerModel.cs",
|
||||
"RelativeToolTip": "AgroBase\\Models\\AsyncTaskTimerModel.cs",
|
||||
"ViewState": "AQIAAEkAAAAAAAAAAAAiwA4BAAAJAAAA",
|
||||
"Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
|
||||
"WhenOpened": "2024-12-12T16:20:53.336Z",
|
||||
"EditorCaption": ""
|
||||
}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -59,6 +59,9 @@ namespace AgroBase.Forms.IHM
|
|||
tmrLeitura?.Dispose();
|
||||
tmrLeitura = new AsyncTaskTimerModel("tmrLeitura", tmrLeitura_Tick, 500, this);
|
||||
tmrLeitura.Start();
|
||||
|
||||
tkbAnguloDirecional.Minimum = 0;
|
||||
tkbAnguloDirecional.Maximum = Convert.ToInt32(Variaveis.OperacaoEmAndamento.Controle.Angulo_Max);
|
||||
}
|
||||
|
||||
private void frmDialogoMapa_FormClosing(object sender, FormClosingEventArgs e)
|
||||
|
|
@ -138,7 +141,7 @@ namespace AgroBase.Forms.IHM
|
|||
{
|
||||
cmbModoControle.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.Controle.TipoMovimento;
|
||||
|
||||
double Percentual = (Variaveis.OperacaoEmAndamento.Controle.RPM_SP / VariaveisEquipamento.RPM_Max_Roda) * 100.0;
|
||||
double Percentual = ((double)Variaveis.OperacaoEmAndamento.Controle.RPM_SP / (double)VariaveisEquipamento.RPM_Max_Roda) * 100.0;
|
||||
tkbVelocidade.Value = Convert.ToInt32(Percentual);
|
||||
|
||||
tkbAnguloDirecional.Value = Math.Abs(Convert.ToInt32(Variaveis.OperacaoEmAndamento.Controle.Angulo));
|
||||
|
|
@ -150,7 +153,7 @@ namespace AgroBase.Forms.IHM
|
|||
try
|
||||
{
|
||||
double angulo = Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloCarro;
|
||||
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, -90);
|
||||
FuncoesGlobais.DesenharInclinacao((Panel)sender, e, (float)angulo, 90, (float)Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloRua);
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
|
@ -189,8 +192,6 @@ namespace AgroBase.Forms.IHM
|
|||
|
||||
cmbModoControle.SelectedIndex = (int)Variaveis.OperacaoEmAndamento.Controle.TipoMovimento;
|
||||
|
||||
tkbAnguloDirecional.Minimum = 0;
|
||||
tkbAnguloDirecional.Maximum = Convert.ToInt32(Variaveis.OperacaoEmAndamento.Controle.Angulo_Max);
|
||||
FuncoesGlobais.PreencheValorTrackBar(tkbAnguloDirecional, Variaveis.OperacaoEmAndamento.Controle.Angulo);
|
||||
|
||||
FuncoesGlobais.PreencheValorTrackBar(tkbVelocidade, Variaveis.OperacaoEmAndamento.Controle.PercentualVelocidadeSP);
|
||||
|
|
|
|||
|
|
@ -54,15 +54,18 @@ namespace AgroBase.Forms
|
|||
string gateway = txtGateway.Text;
|
||||
string subnetMask = txtSubmask.Text;
|
||||
|
||||
// Aqui substituímos "Ethernet" pelo nome correto da interface que o PC está usando
|
||||
if (chbIpFixo.Checked)
|
||||
Task.Run(async () =>
|
||||
{
|
||||
EthernetService.DefinirIpFixo(_Interface, ipNovo, subnetMask, gateway, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
EthernetService.DefinirIpDinamico(_Interface, true);
|
||||
}
|
||||
// Aqui substituímos "Ethernet" pelo nome correto da interface que o PC está usando
|
||||
if (chbIpFixo.Checked)
|
||||
{
|
||||
await EthernetService.DefinirIpFixo(_Interface, ipNovo, subnetMask, gateway, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
await EthernetService.DefinirIpDinamico(_Interface, true);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void chbIpFixo_CheckedChanged(object sender, EventArgs e)
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ namespace AgroBase.Forms
|
|||
Velocidade = GPSService.UltimaLeitura.Velocidade,
|
||||
Orientacao = GPSService.UltimaLeitura.Orientacao
|
||||
};
|
||||
Trajetoria[Trajetoria.Count].Add(leitura);
|
||||
Trajetoria[Trajetoria.Count - 1].Add(leitura);
|
||||
|
||||
File.WriteAllText(Variaveis.CaminhoLogsDispositivos + "GPS/" + LogID + ".json", JsonConvert.SerializeObject(Trajetoria, Formatting.None), Encoding.UTF8);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@ namespace AgroBase.Forms
|
|||
public static frmIHM frmIHM = new frmIHM()
|
||||
{
|
||||
FormBorderStyle = FormBorderStyle.None,
|
||||
WindowState = FormWindowState.Maximized,
|
||||
TopMost = true
|
||||
//WindowState = FormWindowState.Maximized,
|
||||
//TopMost = true
|
||||
};
|
||||
|
||||
public frmInstancial()
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
private void InitializeComponent()
|
||||
{
|
||||
this.pnlOpcoes = new System.Windows.Forms.Panel();
|
||||
this.chbAutomatico = new System.Windows.Forms.CheckBox();
|
||||
this.lblTempoEstimado = new System.Windows.Forms.Label();
|
||||
this.lblStatusOperacao = new System.Windows.Forms.Label();
|
||||
this.lblDistanciaLateral = new System.Windows.Forms.Label();
|
||||
|
|
@ -80,7 +81,6 @@
|
|||
this.lblAproximando = new System.Windows.Forms.Label();
|
||||
this.lblDistProx = new System.Windows.Forms.Label();
|
||||
this.lblDistAnt = new System.Windows.Forms.Label();
|
||||
this.chbAutomatico = new System.Windows.Forms.CheckBox();
|
||||
this.pnlOpcoes.SuspendLayout();
|
||||
this.gpbSonar.SuspendLayout();
|
||||
this.gpbGPS.SuspendLayout();
|
||||
|
|
@ -110,6 +110,18 @@
|
|||
this.pnlOpcoes.Size = new System.Drawing.Size(1379, 100);
|
||||
this.pnlOpcoes.TabIndex = 0;
|
||||
//
|
||||
// chbAutomatico
|
||||
//
|
||||
this.chbAutomatico.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.chbAutomatico.AutoSize = true;
|
||||
this.chbAutomatico.Location = new System.Drawing.Point(1231, 72);
|
||||
this.chbAutomatico.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.chbAutomatico.Name = "chbAutomatico";
|
||||
this.chbAutomatico.Size = new System.Drawing.Size(137, 17);
|
||||
this.chbAutomatico.TabIndex = 30;
|
||||
this.chbAutomatico.Text = "Atualização Automática";
|
||||
this.chbAutomatico.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// lblTempoEstimado
|
||||
//
|
||||
this.lblTempoEstimado.AutoSize = true;
|
||||
|
|
@ -481,7 +493,7 @@
|
|||
this.txtLongitude.Name = "txtLongitude";
|
||||
this.txtLongitude.Size = new System.Drawing.Size(135, 20);
|
||||
this.txtLongitude.TabIndex = 15;
|
||||
this.txtLongitude.Text = "-47,1956147249173";
|
||||
this.txtLongitude.Text = "-47,3815481565223";
|
||||
this.txtLongitude.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// txtLatitude
|
||||
|
|
@ -491,7 +503,7 @@
|
|||
this.txtLatitude.Name = "txtLatitude";
|
||||
this.txtLatitude.Size = new System.Drawing.Size(135, 20);
|
||||
this.txtLatitude.TabIndex = 14;
|
||||
this.txtLatitude.Text = "-22,0787517060124";
|
||||
this.txtLatitude.Text = "-22,2131153491009";
|
||||
this.txtLatitude.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
|
||||
//
|
||||
// btnIniciarGPS
|
||||
|
|
@ -687,18 +699,6 @@
|
|||
this.lblDistAnt.TabIndex = 24;
|
||||
this.lblDistAnt.Text = "Distância Ponto Anterior: 0,00 m";
|
||||
//
|
||||
// chbAutomatico
|
||||
//
|
||||
this.chbAutomatico.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.chbAutomatico.AutoSize = true;
|
||||
this.chbAutomatico.Location = new System.Drawing.Point(1231, 72);
|
||||
this.chbAutomatico.Margin = new System.Windows.Forms.Padding(2);
|
||||
this.chbAutomatico.Name = "chbAutomatico";
|
||||
this.chbAutomatico.Size = new System.Drawing.Size(137, 17);
|
||||
this.chbAutomatico.TabIndex = 30;
|
||||
this.chbAutomatico.Text = "Atualização Automática";
|
||||
this.chbAutomatico.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// frmSimulacaoMapaGPS
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
|
|
|
|||
|
|
@ -138,12 +138,15 @@ namespace AgroBase.Forms
|
|||
Latitude = GPSService.UltimaLeitura.Latitude,
|
||||
};
|
||||
|
||||
GPSService.UltimaLeitura = new GPSModel()
|
||||
if (!GPSService.Iniciado || (txtLongitude.Text != "" && txtLatitude.Text != ""))
|
||||
{
|
||||
DataHora = DateTime.Now,
|
||||
Longitude = double.Parse(txtLongitude.Text.Replace(".", ",")),
|
||||
Latitude = double.Parse(txtLatitude.Text.Replace(".", ",")),
|
||||
};
|
||||
GPSService.UltimaLeitura = new GPSModel()
|
||||
{
|
||||
DataHora = DateTime.Now,
|
||||
Longitude = double.Parse(txtLongitude.Text.Replace(".", ",")),
|
||||
Latitude = double.Parse(txtLatitude.Text.Replace(".", ",")),
|
||||
};
|
||||
}
|
||||
|
||||
GPSService.AtualizarCoordenadasGPS();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -239,7 +239,7 @@ namespace AgroBase.Models
|
|||
// Garante que o intervalo é respeitado entre execuções
|
||||
await Task.Delay(_interval, cancellationToken);
|
||||
_Ticking = false;
|
||||
_ticks++;
|
||||
//_ticks++;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -278,6 +278,7 @@ namespace AgroBase.Models
|
|||
{
|
||||
get
|
||||
{
|
||||
double anguloCaminho = 0;
|
||||
try
|
||||
{
|
||||
lock (TrajetoriaDinamica_Lock)
|
||||
|
|
@ -289,7 +290,7 @@ namespace AgroBase.Models
|
|||
|
||||
if ((idx + 1) >= TrajetoriaDinamica.Count())
|
||||
{
|
||||
return 0;
|
||||
return anguloCaminho;
|
||||
}
|
||||
|
||||
double angulo = GPSService.CalcularOrientacao(TrajetoriaDinamica[idx], TrajetoriaDinamica[idx + 1]);
|
||||
|
|
@ -298,18 +299,20 @@ namespace AgroBase.Models
|
|||
angulo = GPSService.CalcularOrientacao(TrajetoriaDinamica[idx + 1], TrajetoriaDinamica[idx + 2]);
|
||||
}
|
||||
|
||||
return (!(angulo >= 0 || angulo <= 0)) ? 0 : angulo;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
anguloCaminho = (!(angulo >= 0 || angulo <= 0)) ? 0 : angulo;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
return 0;
|
||||
anguloCaminho = 0;
|
||||
}
|
||||
finally
|
||||
{
|
||||
Variaveis.OperacaoEmAndamento.Sensoriamento.AnguloRua = anguloCaminho;
|
||||
}
|
||||
|
||||
return anguloCaminho;
|
||||
}
|
||||
}
|
||||
public double AnguloRuaAtual
|
||||
|
|
|
|||
|
|
@ -47,11 +47,11 @@ namespace AgroBase.Models.Operacoes
|
|||
|
||||
|
||||
// Calcule o erro lateral baseado nas distâncias entre as ruas do mapa atraves do GPS
|
||||
double erroLateral = statusCarroRua == StatusCarroMapa.CaminhandoRua ? Variaveis.OperacaoEmAndamento.Mapa.DistanciaEsquerda - Variaveis.OperacaoEmAndamento.Mapa.DistanciaDireita : 0;
|
||||
double erroLateral = statusCarroRua == StatusCarroMapa.CaminhandoRua && false ? Variaveis.OperacaoEmAndamento.Mapa.DistanciaEsquerda - Variaveis.OperacaoEmAndamento.Mapa.DistanciaDireita : 0;
|
||||
|
||||
double erroUltrassom = UltrasonicA05Helper.CalcularErroUltrassons();
|
||||
|
||||
double erroCombinado = CalcularErroCombinado(erroLateral, erroOrientacao, erroUltrassom, anguloCarro, statusCarroRua);
|
||||
double erroCombinado = CalcularErroCombinado(erroLateral, erroOrientacao, erroUltrassom, anguloCarro, anguloRua, statusCarroRua);
|
||||
|
||||
|
||||
|
||||
|
|
@ -130,7 +130,7 @@ namespace AgroBase.Models.Operacoes
|
|||
return erroCombinado;
|
||||
}
|
||||
|
||||
private double CalcularErroCombinado(double erroLateral, double erroOrientacao, double erroUltrassons, double anguloCarro, StatusCarroMapa statusCarroRua)
|
||||
private double CalcularErroCombinado(double erroLateral, double erroOrientacao, double erroUltrassons, double anguloCarro, double anguloRua, StatusCarroMapa statusCarroRua)
|
||||
{
|
||||
bool carroDentroRua = StatusDentroRua.Contains(statusCarroRua);
|
||||
|
||||
|
|
@ -151,7 +151,8 @@ namespace AgroBase.Models.Operacoes
|
|||
(erroPosicaoLateral * PesoLateralDentroRua) +
|
||||
(erroUltrassons * PesoUltrassons);
|
||||
|
||||
Direcao direcaoVirar = erroCombinado < anguloCarro ? Direcao.Esquerda : Direcao.Direita;
|
||||
//Direcao direcaoVirar = erroCombinado < anguloCarro ? Direcao.Esquerda : Direcao.Direita;
|
||||
Direcao direcaoVirar = CalcularDirecaoParaVirar(anguloCarro, anguloRua);
|
||||
double erroComparar = erroCombinado < 0 ? -erroCombinado : erroCombinado;
|
||||
|
||||
// Aplica correções extras quando o erro é significativo e comparável com a distância à borda da rua
|
||||
|
|
@ -170,6 +171,27 @@ namespace AgroBase.Models.Operacoes
|
|||
return erroCombinado;
|
||||
}
|
||||
|
||||
public static Direcao CalcularDirecaoParaVirar(double anguloCarro, double anguloRua)
|
||||
{
|
||||
// Normaliza os ângulos para o intervalo [0, 360)
|
||||
anguloCarro = ((anguloCarro % 360) + 360) % 360;
|
||||
anguloRua = ((anguloRua % 360) + 360) % 360;
|
||||
|
||||
// Calcula a diferença angular nos dois sentidos
|
||||
double diferencaHorario = (anguloRua - anguloCarro + 360) % 360;
|
||||
double diferencaAntihorario = (anguloCarro - anguloRua + 360) % 360;
|
||||
|
||||
// Determina a direção com a menor distância
|
||||
if (diferencaHorario <= diferencaAntihorario)
|
||||
{
|
||||
return Direcao.Direita; // Virar no sentido horário
|
||||
}
|
||||
else
|
||||
{
|
||||
return Direcao.Esquerda; // Virar no sentido antihorário
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void DefinirTipoMovimento(StatusCarroMapa statusCarro)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1272,7 +1272,6 @@ namespace AgroBase.Models
|
|||
{
|
||||
if (_Controle.Angulo < 0)
|
||||
{
|
||||
_Controle.Angulo *= -1;
|
||||
if (_ControleAnterior.Angulo < _Controle.Angulo)
|
||||
{
|
||||
_Controle.Direcao = Direcao.Parado;
|
||||
|
|
|
|||
|
|
@ -15,21 +15,25 @@ namespace AgroBase.Models
|
|||
public double LimiteSaida { get; set; } = 100.0; // Define o limite máximo para a saída do PID
|
||||
public double LimiteSomaErro { get; set; } = 50.0; // Define o limite para a soma do erro (wind-up)
|
||||
|
||||
public void Atualizar(double valorAtual)
|
||||
public void Atualizar(double valorAtual, double setPoint = 0)
|
||||
{
|
||||
SetPoint = setPoint;
|
||||
ValorAtual = valorAtual;
|
||||
double erro = SetPoint - ValorAtual;
|
||||
|
||||
// Atualiza a soma do erro com limitação para prevenir wind-up
|
||||
somaErro = Math.Max(Math.Min(somaErro + erro, LimiteSomaErro), -LimiteSomaErro);
|
||||
if (erro != erroAnterior)
|
||||
{
|
||||
// Atualiza a soma do erro com limitação para prevenir wind-up
|
||||
somaErro = Math.Max(Math.Min(somaErro + erro, LimiteSomaErro), -LimiteSomaErro);
|
||||
|
||||
double deltaErro = erro - erroAnterior;
|
||||
double saidaTemp = (Kp * erro) + (Ki * somaErro) + (Kd * deltaErro);
|
||||
double deltaErro = erro - erroAnterior;
|
||||
double saidaTemp = (Kp * erro) + (Ki * somaErro) + (Kd * deltaErro);
|
||||
|
||||
// Limita a saída do PID
|
||||
Saida = Math.Max(Math.Min(saidaTemp, LimiteSaida), -LimiteSaida);
|
||||
// Limita a saída do PID
|
||||
Saida = Math.Max(Math.Min(saidaTemp, LimiteSaida), -LimiteSaida);
|
||||
|
||||
erroAnterior = erro;
|
||||
erroAnterior = erro;
|
||||
}
|
||||
}
|
||||
|
||||
public void Resetar()
|
||||
|
|
|
|||
|
|
@ -429,7 +429,7 @@ namespace AgroBase.Models
|
|||
return bmp;
|
||||
}
|
||||
|
||||
public static void DesenharInclinacao(Panel pnlBussola, PaintEventArgs e, float anguloInclinacao, float anguloSub)
|
||||
public static void DesenharInclinacao(Panel pnlBussola, PaintEventArgs e, float anguloInclinacao, float anguloSub, float? anguloOpcional = null)
|
||||
{
|
||||
if (!(anguloInclinacao >= 0 || anguloInclinacao <= 0))
|
||||
{
|
||||
|
|
@ -443,7 +443,7 @@ namespace AgroBase.Models
|
|||
//g.DrawEllipse(Pens.Black, centro.X - diameter / 2, centro.Y - diameter / 2, diameter, diameter);
|
||||
|
||||
// Escreve o ângulo no centro do círculo
|
||||
string anguloTexto = $"{anguloInclinacao.ToString("0")}°";
|
||||
string anguloTexto = (anguloOpcional.HasValue ? "C: " : "") + $"{anguloInclinacao.ToString("0.0")}°";
|
||||
Font fonteAngulo = new Font("Arial", 7); // Ajuste o tamanho da fonte conforme necessário
|
||||
SizeF textSize = e.Graphics.MeasureString(anguloTexto, fonteAngulo);
|
||||
|
||||
|
|
@ -484,6 +484,38 @@ namespace AgroBase.Models
|
|||
g.DrawLine(pen, pontoCentral, pontoFinal);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Desenhar a segunda seta se o ângulo opcional for fornecido
|
||||
if (anguloOpcional.HasValue)
|
||||
{
|
||||
// Escreve o ângulo no centro do círculo
|
||||
string anguloTexto2 = $"R: {anguloOpcional.Value.ToString("0.0")}°";
|
||||
SizeF textSize2 = e.Graphics.MeasureString(anguloTexto2, fonteAngulo);
|
||||
|
||||
// Calcula a posição para o texto ser centralizado no círculo
|
||||
float textX2 = pnlBussola.Width - textSize2.Width;
|
||||
float textY2 = 0;
|
||||
|
||||
// Desenha o texto no Graphics do painel
|
||||
g.DrawString(anguloTexto2, fonteAngulo, Brushes.Blue, textX2, textY2);
|
||||
|
||||
float anguloOpcionalRadianos = (anguloOpcional.Value - anguloSub) * (float)(Math.PI / 180.0);
|
||||
|
||||
PointF pontoFinalOpcional = new PointF(
|
||||
pontoCentral.X + comprimentoLinha * (float)Math.Cos(anguloOpcionalRadianos),
|
||||
pontoCentral.Y + comprimentoLinha * (float)Math.Sin(anguloOpcionalRadianos)
|
||||
);
|
||||
|
||||
using (AdjustableArrowCap bigArrow = new AdjustableArrowCap(4, 4))
|
||||
{
|
||||
using (Pen pen = new Pen(Color.Blue, 2))
|
||||
{
|
||||
pen.CustomEndCap = bigArrow;
|
||||
g.DrawLine(pen, pontoCentral, pontoFinalOpcional);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static string ConverterSegundosParaHHmmss(int totalSeconds)
|
||||
|
|
@ -751,31 +783,49 @@ namespace AgroBase.Models
|
|||
return imagemSemBordas;
|
||||
}
|
||||
|
||||
|
||||
public static async Task ExecutarMetodoComVerificacaoCrossThreadAsync(Control controle, Func<Task> acao)
|
||||
{
|
||||
if (controle.InvokeRequired)
|
||||
{
|
||||
TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
|
||||
var tcs = new TaskCompletionSource<object>();
|
||||
|
||||
controle.BeginInvoke(new Action(async () =>
|
||||
try
|
||||
{
|
||||
try
|
||||
controle.BeginInvoke(new Action(async () =>
|
||||
{
|
||||
await acao();
|
||||
tcs.SetResult(null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
tcs.SetException(ex);
|
||||
}
|
||||
}));
|
||||
try
|
||||
{
|
||||
await acao();
|
||||
if (!tcs.Task.IsCompleted) // Evitar race conditions
|
||||
tcs.TrySetResult(null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (!tcs.Task.IsCompleted) // Evitar race conditions
|
||||
tcs.TrySetException(ex);
|
||||
}
|
||||
}));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (!tcs.Task.IsCompleted) // Garante que o estado do TCS é atualizado corretamente
|
||||
tcs.TrySetException(ex);
|
||||
}
|
||||
|
||||
await tcs.Task;
|
||||
await tcs.Task; // Aguarda a conclusão da ação
|
||||
}
|
||||
else
|
||||
{
|
||||
await acao();
|
||||
try
|
||||
{
|
||||
await acao();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Log de exceção opcional, se necessário
|
||||
Console.WriteLine($"Erro ao executar ação no thread UI: {ex.Message}");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -361,7 +361,7 @@ namespace AgroBase.Comum
|
|||
btnPinout.Click -= btnPinout_Click;
|
||||
btnPinout.Click += btnPinout_Click;
|
||||
|
||||
tmrLogsDispositivo = new AsyncTaskTimerModel("tmrLogsDispositivo", tmrLogsDispositivo_Tick, 1000);
|
||||
tmrLogsDispositivo = new AsyncTaskTimerModel("tmrLogsDispositivo_" + Dispositivo.ToString(), tmrLogsDispositivo_Tick, 1000);
|
||||
tmrLogsDispositivo.Start();
|
||||
|
||||
gpbItem.Controls.Add(lblPorta);
|
||||
|
|
|
|||
|
|
@ -115,13 +115,13 @@ public class EthernetService
|
|||
// Método para enviar dados ao dispositivo via Ethernet
|
||||
public async Task<bool> SendDataAsync(byte[] data)
|
||||
{
|
||||
if (IsConnected && _networkStream.CanWrite)
|
||||
if (IsConnected && (_networkStream?.CanWrite ?? false))
|
||||
{
|
||||
try
|
||||
{
|
||||
await FlushBufferAsync(); // Limpa o buffer antes de enviar
|
||||
await _networkStream.WriteAsync(data, 0, data.Length);
|
||||
await _networkStream.FlushAsync();
|
||||
await _networkStream?.WriteAsync(data, 0, data.Length);
|
||||
await _networkStream?.FlushAsync();
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
@ -142,7 +142,7 @@ public class EthernetService
|
|||
var buffer = new byte[expectedLength];
|
||||
try
|
||||
{
|
||||
var readTask = _networkStream.ReadAsync(buffer, 0, expectedLength); // Tarefa de leitura sem o token
|
||||
var readTask = _networkStream?.ReadAsync(buffer, 0, expectedLength); // Tarefa de leitura sem o token
|
||||
|
||||
// Cria uma tarefa de delay que representa o timeout
|
||||
if (await Task.WhenAny(readTask, Task.Delay(timeoutMilliseconds)) == readTask)
|
||||
|
|
@ -166,7 +166,7 @@ public class EthernetService
|
|||
}
|
||||
finally
|
||||
{
|
||||
await _networkStream.FlushAsync();
|
||||
await _networkStream?.FlushAsync();
|
||||
await FlushBufferAsync();
|
||||
}
|
||||
}
|
||||
|
|
@ -270,12 +270,12 @@ public class EthernetService
|
|||
{
|
||||
try
|
||||
{
|
||||
if (_networkStream.DataAvailable) // Verifica se há dados pendentes no buffer
|
||||
if (_networkStream?.DataAvailable ?? false) // Verifica se há dados pendentes no buffer
|
||||
{
|
||||
var tempBuffer = new byte[1024]; // Buffer temporário para leitura
|
||||
while (_networkStream.DataAvailable)
|
||||
while (_networkStream?.DataAvailable ?? false)
|
||||
{
|
||||
await _networkStream.ReadAsync(tempBuffer, 0, tempBuffer.Length);
|
||||
await _networkStream?.ReadAsync(tempBuffer, 0, tempBuffer.Length);
|
||||
}
|
||||
//Console.WriteLine("Buffer limpo.");
|
||||
}
|
||||
|
|
@ -440,7 +440,7 @@ public class EthernetService
|
|||
return "Nenhuma interface de rede ativa encontrada";
|
||||
}
|
||||
|
||||
public static void DefinirIpDinamico(string interfaceName, bool response)
|
||||
public static async Task DefinirIpDinamico(string interfaceName, bool response)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
|
@ -449,8 +449,8 @@ public class EthernetService
|
|||
// Define o DNS para DHCP
|
||||
string comandoDns = $"interface ip set dns \"{interfaceName}\" dhcp";
|
||||
|
||||
ExecutarComandoNetsh(comandoIp);
|
||||
ExecutarComandoNetsh(comandoDns);
|
||||
await ExecutarComandoNetshAsync(comandoIp);
|
||||
await ExecutarComandoNetshAsync(comandoDns);
|
||||
|
||||
if (response)
|
||||
{
|
||||
|
|
@ -466,17 +466,17 @@ public class EthernetService
|
|||
}
|
||||
}
|
||||
|
||||
public static void DefinirIpFixo(string nomeInterface, string ipAddress, string subnetMask, string gateway, bool response)
|
||||
public static async Task DefinirIpFixo(string nomeInterface, string ipAddress, string subnetMask, string gateway, bool response)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Define o IP fixo na interface de rede
|
||||
string comandoIp = $"interface ip set address name=\"{nomeInterface}\" static {ipAddress} {subnetMask} {gateway}";
|
||||
ExecutarComandoNetsh(comandoIp);
|
||||
await ExecutarComandoNetshAsync(comandoIp);
|
||||
|
||||
// Configura o DNS para automático (caso desejado)
|
||||
string comandoDns = $"interface ip set dns name=\"{nomeInterface}\" source=static addr=8.8.4.4 register=primary";
|
||||
ExecutarComandoNetsh(comandoDns);
|
||||
await ExecutarComandoNetshAsync(comandoDns);
|
||||
|
||||
if (response)
|
||||
{
|
||||
|
|
@ -507,6 +507,25 @@ public class EthernetService
|
|||
return output;
|
||||
}
|
||||
|
||||
private static async Task<string> ExecutarComandoNetshAsync(string comando)
|
||||
{
|
||||
using (Process process = new Process())
|
||||
{
|
||||
process.StartInfo.FileName = "netsh";
|
||||
process.StartInfo.Arguments = comando;
|
||||
process.StartInfo.RedirectStandardOutput = true;
|
||||
process.StartInfo.UseShellExecute = false;
|
||||
process.StartInfo.CreateNoWindow = true;
|
||||
|
||||
process.Start();
|
||||
|
||||
string output = await process.StandardOutput.ReadToEndAsync();
|
||||
await Task.Run(() => process.WaitForExit());
|
||||
|
||||
return output;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static async Task ScanSubnetAsync(string subnet)
|
||||
{
|
||||
|
|
@ -550,14 +569,17 @@ public class EthernetService
|
|||
string ip = Variaveis.IP_Host;
|
||||
string submask = ObterSubnetMaskAtual(_Interface);
|
||||
|
||||
if (fixo)
|
||||
Task.Run(async () =>
|
||||
{
|
||||
DefinirIpFixo(_Interface, ip, submask, gateway, response);
|
||||
}
|
||||
else
|
||||
{
|
||||
DefinirIpDinamico(_Interface, response);
|
||||
}
|
||||
if (fixo)
|
||||
{
|
||||
await DefinirIpFixo(_Interface, ip, submask, gateway, response);
|
||||
}
|
||||
else
|
||||
{
|
||||
await DefinirIpDinamico(_Interface, response);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -591,12 +591,6 @@ namespace AgroBase.Services
|
|||
return;
|
||||
}
|
||||
|
||||
DefinirAnguloCarroGPS();
|
||||
|
||||
int ID = Convert.ToInt32(Variaveis.ConexaoLoRa.parametros.address);
|
||||
double angulo = ((Variaveis.OperacaoEmAndamento.Sensoriamento?.AnguloCarro ?? 0) - 180);
|
||||
EnviarCoordenadasParaMapa(UltimaLeitura.Latitude, UltimaLeitura.Longitude, angulo, Variaveis.OperacaoEmAndamento.Iniciado, ID);
|
||||
|
||||
if (VariaveisOperacao.PosicaoBase != null)
|
||||
{
|
||||
byte enderecoBase = Variaveis.OperacaoEmAndamento.DispSen.Dados.LoRaParametrosBase.address;
|
||||
|
|
@ -635,6 +629,13 @@ namespace AgroBase.Services
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
DefinirAnguloCarroGPS();
|
||||
|
||||
int ID = Convert.ToInt32(Variaveis.ConexaoLoRa.parametros.address);
|
||||
double angulo = ((Variaveis.OperacaoEmAndamento.Sensoriamento?.AnguloCarro ?? 0) - 180);
|
||||
EnviarCoordenadasParaMapa(UltimaLeitura.Latitude, UltimaLeitura.Longitude, angulo, Variaveis.OperacaoEmAndamento.Iniciado, ID);
|
||||
|
||||
}
|
||||
|
||||
public static void EnviarCoordenadasParaMapa(double Latitude, double Longitude, double Orientacao, bool EmFoco, int ID)
|
||||
|
|
@ -740,6 +741,14 @@ namespace AgroBase.Services
|
|||
Variaveis.OperacaoEmAndamento.GPSTrajetoriaRua[Indice].Count > PontosConsiderarAngulo ?
|
||||
Variaveis.OperacaoEmAndamento.GPSTrajetoriaRua[Indice].OrderByDescending(x => x.DataHora).Take(PontosConsiderarAngulo).ToList() :
|
||||
Variaveis.OperacaoEmAndamento.GPSTrajetoriaRua[Indice].OrderByDescending(x => x.DataHora).ToList();
|
||||
if (Variaveis.OperacaoEmAndamento.GPSTrajetoriaRua.Count() > Indice && Variaveis.OperacaoEmAndamento.GPSTrajetoriaRua[Indice].Count == 1 && Indice > 0)
|
||||
{
|
||||
Pontos = new List<GPSModel>()
|
||||
{
|
||||
Variaveis.OperacaoEmAndamento.GPSTrajetoriaRua[Indice - 1][Variaveis.OperacaoEmAndamento.GPSTrajetoriaRua[Indice - 1].Count - 1],
|
||||
Variaveis.OperacaoEmAndamento.GPSTrajetoriaRua[Indice][0]
|
||||
};
|
||||
}
|
||||
Pontos = Pontos.OrderBy(x => x.DataHora).ToList();
|
||||
for (int i = 0; i < Pontos.Count() - 1; i++)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ namespace AgroBase.Services
|
|||
MapasVariaveisModel.TopicoCoordenadasGPS,
|
||||
MapasVariaveisModel.TopicoSelecaoRuasMapa,
|
||||
MapasVariaveisModel.TopicoTrajetoriaDinamica,
|
||||
caminhoArquivo.Split('.')[1] == "json" ? "1" : "0"
|
||||
extensao == ".json" ? "1" : "0"
|
||||
});
|
||||
|
||||
MapaUrl = new Uri(CaminhoSaida + NomeArquivoMapa).AbsoluteUri;
|
||||
|
|
@ -107,15 +107,16 @@ namespace AgroBase.Services
|
|||
features = new List<MapaFeatureModel>()
|
||||
};
|
||||
|
||||
foreach (var rua in Trajetoria)
|
||||
for (int i = 0; i < Trajetoria.Count; i++)
|
||||
{
|
||||
var rua = Trajetoria[i];
|
||||
double length = GPSService.DistanciaDoTrecho(rua);
|
||||
featureCollection.features.Add(new MapaFeatureModel()
|
||||
{
|
||||
type = "Feature",
|
||||
properties = new MapaFeaturePropertiesModel()
|
||||
{
|
||||
Id = id.ToString(),
|
||||
Id = (i + 1).ToString(),
|
||||
Name = name,
|
||||
Length = length,
|
||||
Dist1 = dist1,
|
||||
|
|
@ -129,7 +130,7 @@ namespace AgroBase.Services
|
|||
});
|
||||
|
||||
// Adicionando coordenadas aos recursos
|
||||
var coordinates = featureCollection.features[0].geometry.coordinates;
|
||||
var coordinates = featureCollection.features[i].geometry.coordinates;
|
||||
foreach (var gpsModel in rua)
|
||||
{
|
||||
var coordinate = new List<double> { gpsModel.Longitude, gpsModel.Latitude };
|
||||
|
|
|
|||
|
|
@ -186,7 +186,7 @@ namespace AgroBase.Services
|
|||
return;
|
||||
}
|
||||
|
||||
//VarreduraEmAndamento = true;
|
||||
VarreduraEmAndamento = true;
|
||||
|
||||
try
|
||||
{
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
|
@ -15460,3 +15460,538 @@ Parameter name: source
|
|||
11/12/2024 16:31:33:955 - Endereço 35 (192.168.105.11): Dados recebidos de um endereço inválido: [251 35 61 250]
|
||||
11/12/2024 16:31:33:955 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
|
||||
11/12/2024 16:32:42:300 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=False, Parametro=13
|
||||
12/12/2024 14:10:17:855 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 14:18:00:151 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
|
||||
12/12/2024 14:18:04:321 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 14:21:35:564 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=False, Parametro=33
|
||||
12/12/2024 14:21:37:405 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=False, Parametro=33
|
||||
12/12/2024 14:21:37:437 - Endereço 0 (192.168.105.11): Dados recebidos de um endereço inválido: [0 0 0 49]
|
||||
12/12/2024 14:21:37:437 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 14:24:13:393 - Endereço 191 (192.168.105.11): Dados recebidos de um endereço inválido: [187 191 160 159 245 2 47]
|
||||
12/12/2024 14:24:13:393 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 14:24:17:462 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 14:29:39:446 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:39:493 - Endereço 2 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:39:572 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:39:650 - Endereço 2 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:41:352 - Endereço 2 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:41:509 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:41:641 - Endereço 4 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:41:729 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:42:060 - Endereço 4 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:43:258 - Endereço 4 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:43:305 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:44:179 - Endereço 1 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:44:226 - Endereço 1 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:44:258 - Endereço 1 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:45:122 - Endereço 1 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:45:201 - Endereço 1 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:45:265 - Endereço 3 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:45:361 - Endereço 3 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:45:409 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:45:457 - Endereço 2 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:45:548 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:45:629 - Endereço 2 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:46:634 - Endereço 2 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:46:728 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:46:791 - Endereço 4 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:46:885 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:46:951 - Endereço 4 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:47:418 - Endereço 4 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:47:528 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:48:128 - Endereço 1 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:48:207 - Endereço 1 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:48:238 - Endereço 1 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:49:133 - Endereço 1 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:49:212 - Endereço 1 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:49:255 - Endereço 3 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:49:384 - Endereço 3 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:49:431 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:49:479 - Endereço 2 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:49:541 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:49:573 - Endereço 2 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:50:619 - Endereço 2 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:50:667 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:50:713 - Endereço 4 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:50:761 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:50:808 - Endereço 4 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:51:388 - Endereço 4 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:51:458 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:52:143 - Endereço 1 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:52:221 - Endereço 1 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:52:260 - Endereço 1 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:53:140 - Endereço 1 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:53:218 - Endereço 1 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:53:281 - Endereço 3 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:53:457 - Endereço 3 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:53:511 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:53:555 - Endereço 2 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:53:677 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:53:744 - Endereço 2 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:54:643 - Endereço 2 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:54:692 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:54:723 - Endereço 4 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:29:54:786 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:29:54:833 - Endereço 4 (192.168.105.11): Erro ao enviar dados para o dispositivo via Ethernet
|
||||
12/12/2024 14:31:56:816 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 14:32:29:154 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 14:32:35:301 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
|
||||
12/12/2024 14:32:41:209 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 14:38:37:958 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:38:40:635 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:51:47:179 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=False, Parametro=33
|
||||
12/12/2024 14:51:48:221 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=False, Parametro=33
|
||||
12/12/2024 14:51:48:330 - Endereço 0 (192.168.105.11): Dados recebidos de um endereço inválido: [0 0 0 47]
|
||||
12/12/2024 14:51:48:330 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 14:56:01:837 - Endereço 1 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:56:05:776 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 14:59:08:973 - Endereço 212 (192.168.105.11): Dados recebidos de um endereço inválido: [251 212 169]
|
||||
12/12/2024 14:59:08:973 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=False, Parametro=13
|
||||
12/12/2024 14:59:08:994 - Endereço 245 (192.168.105.11): Dados recebidos de um endereço inválido: [4 245 2 246]
|
||||
12/12/2024 14:59:08:994 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=False, Parametro=13
|
||||
12/12/2024 14:59:10:835 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=False, Parametro=13
|
||||
12/12/2024 14:59:25:122 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
|
||||
12/12/2024 15:02:55:467 - Endereço 1 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:49:13:771 - Endereço 139 (192.168.105.11): Dados recebidos de um endereço inválido: [251 139 127 169]
|
||||
12/12/2024 16:49:13:780 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
|
||||
12/12/2024 16:51:11:925 - Endereço 191 (192.168.105.11): Dados recebidos de um endereço inválido: [251 191 253 138 32 27 77]
|
||||
12/12/2024 16:51:11:925 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 16:51:14:658 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 16:51:58:571 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:00:759 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:01:658 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:02:558 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:05:299 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:08:141 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:08:235 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:08:329 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:08:407 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:08:454 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:08:533 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:08:627 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:08:721 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:08:784 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:08:878 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:08:941 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:09:082 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:09:192 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:09:333 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:09:412 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:09:510 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:09:584 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:09:678 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:09:757 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:09:836 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:09:914 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:10:011 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:10:086 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:10:180 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:10:290 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:10:384 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:10:478 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:10:557 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:10:698 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:10:839 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:10:886 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:10:980 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:11:090 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:11:200 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:11:342 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:11:483 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:11:561 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:11:672 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:11:751 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:11:830 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:11:940 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:12:002 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:12:096 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:12:159 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:12:238 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:12:300 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:12:378 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:12:488 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:12:582 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:12:661 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:12:740 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:12:849 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:12:991 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:13:100 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:13:195 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:13:289 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:13:367 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:13:430 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:13:524 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:13:602 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:13:665 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:13:728 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:13:791 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:13:885 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:13:979 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:14:073 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:14:136 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:14:199 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:14:277 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:14:371 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:14:450 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:14:521 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:14:575 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:14:654 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:14:733 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:14:779 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:14:874 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:14:937 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:15:022 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:15:122 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:15:187 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:15:297 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:15:391 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:15:501 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:15:611 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:15:658 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:15:736 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:15:862 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:15:941 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:16:024 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:16:113 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:16:176 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:16:254 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:16:349 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:16:427 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:16:505 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:16:584 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:16:663 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:16:742 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:16:884 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:16:994 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:17:088 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:17:182 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:17:261 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:17:339 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:17:433 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:17:527 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:17:627 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:17:699 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:17:762 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:17:841 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:17:888 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:17:951 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:029 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:107 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:155 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:228 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:280 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:359 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:437 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:484 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:578 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:657 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:704 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:798 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:876 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:930 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:18:986 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:033 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:112 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:159 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:221 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:269 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:363 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:431 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:473 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:536 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:598 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:645 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:708 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:755 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:834 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:881 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:943 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:19:990 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:085 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:163 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:226 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:273 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:336 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:414 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:477 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:524 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:602 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:680 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:743 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:834 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:900 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:20:963 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:041 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:104 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:182 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:234 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:308 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:355 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:402 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:449 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:512 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:590 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:669 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:747 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:810 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:872 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:21:951 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:014 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:108 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:155 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:202 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:249 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:343 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:421 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:469 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:537 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:625 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:673 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:751 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:837 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:892 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:22:955 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:038 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:112 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:175 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:238 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:316 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:395 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:458 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:520 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:599 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:662 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:708 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:803 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:866 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:23:928 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:24:022 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:24:101 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:24:195 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:24:258 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:24:352 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:24:430 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:24:509 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:24:587 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:24:741 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:24:823 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:24:885 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:24:948 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:24:995 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:25:074 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:25:168 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:25:247 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:25:342 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:25:419 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:25:513 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:25:576 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:25:686 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:25:796 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:25:905 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:26:000 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:26:094 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:26:172 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:26:251 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:26:345 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:26:423 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:26:501 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:26:580 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:26:737 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:26:815 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:26:925 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:26:988 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:27:099 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:27:161 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:27:272 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:27:368 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:27:463 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:27:574 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:27:653 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:27:763 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:27:857 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:27:935 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:27:982 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:28:048 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:28:108 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:28:218 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:28:265 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:28:406 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:28:485 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:28:563 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:28:641 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:28:704 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:28:862 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:28:972 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:29:081 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:29:191 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:29:254 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:29:379 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:29:520 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:29:678 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:29:751 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:29:834 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:29:913 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:29:991 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:30:086 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:30:152 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:30:211 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:30:353 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:30:446 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:30:493 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:30:619 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:30:697 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:30:760 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:30:838 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:30:979 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:31:074 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:31:155 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:31:231 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:31:310 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:31:357 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:31:420 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:31:514 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:31:608 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:31:656 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:31:756 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:31:859 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:31:969 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:32:063 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:32:141 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:32:204 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:32:329 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:32:439 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:32:502 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:32:612 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:32:706 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:32:757 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:32:816 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:32:879 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:32:934 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:32:989 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:33:084 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:33:193 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:33:258 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:33:319 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:33:382 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:33:444 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:33:523 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:33:617 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:33:695 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:33:821 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:33:978 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:34:088 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:34:166 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:34:261 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:34:386 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:34:496 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:34:590 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:34:684 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:34:794 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:34:857 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:34:920 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:35:030 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:35:139 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:35:202 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:35:296 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:35:422 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:35:563 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:35:642 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:35:736 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:35:799 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:35:865 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:35:987 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:36:081 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:36:143 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:36:206 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:36:285 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:36:366 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:36:426 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:36:473 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:36:583 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:36:647 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:36:758 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:36:836 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:36:930 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:37:088 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:37:197 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:37:307 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:37:417 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:37:542 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:37:621 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:37:747 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:52:37:873 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:57:40:096 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=False, Parametro=13
|
||||
12/12/2024 16:57:40:096 - Endereço 3 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:112 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=False, Parametro=13
|
||||
12/12/2024 16:57:40:112 - Endereço 4 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:127 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=False, Parametro=13
|
||||
12/12/2024 16:57:40:127 - Endereço 4 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:159 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=False, Parametro=13
|
||||
12/12/2024 16:57:40:159 - Endereço 1 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:174 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 16:57:40:174 - Endereço 1 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:221 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 16:57:40:221 - Endereço 1 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:285 - Endereço 1 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:300 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
|
||||
12/12/2024 16:57:40:300 - Endereço 1 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:363 - Endereço 1 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:378 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
|
||||
12/12/2024 16:57:40:378 - Endereço 3 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:410 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 16:57:40:410 - Endereço 3 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:441 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 16:57:40:441 - Endereço 3 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:504 - Endereço 3 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:529 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
|
||||
12/12/2024 16:57:40:529 - Endereço 3 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:583 - Endereço 3 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:599 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
|
||||
12/12/2024 16:57:40:599 - Endereço 2 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:630 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 16:57:40:630 - Endereço 2 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:678 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 16:57:40:678 - Endereço 2 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:741 - Endereço 2 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:820 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:57:40:820 - Endereço 4 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:914 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:57:40:914 - Endereço 4 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:40:977 - Endereço 4 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 16:57:41:040 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 16:57:44:212 - Endereço 2 (192.168.105.11): Conexão Ethernet não está definida ou não está conectada
|
||||
12/12/2024 17:10:09:131 - Endereço 1 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:10:09:225 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:10:10:747 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:10:10:823 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:10:10:951 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:10:11:023 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:10:12:158 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:10:12:326 - Endereço 1 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:11:45:314 - Endereço 209 (192.168.105.11): Dados recebidos de um endereço inválido: [251 209 2 246 1 0 48]
|
||||
12/12/2024 17:11:45:314 - Endereço 2 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 17:11:46:280 - Endereço 244 (192.168.105.11): Dados recebidos de um endereço inválido: [251 244]
|
||||
12/12/2024 17:11:46:280 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=46
|
||||
12/12/2024 17:13:11:542 - Endereço 1 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:13:11:595 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:14:18:960 - Endereço 3 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:14:19:040 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:14:19:247 - Endereço 2 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:14:19:327 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:14:19:640 - Endereço 4 (192.168.105.11): Erro ao enviar comando: Referência de objeto não definida para uma instância de um objeto.
|
||||
12/12/2024 17:14:55:217 - Endereço 245 (192.168.105.11): Dados recebidos de um endereço inválido: [3 245 2 245]
|
||||
12/12/2024 17:14:55:217 - Endereço 3 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 17:29:48:460 - Endereço 255 (192.168.105.11): Dados recebidos de um endereço inválido: [80 255]
|
||||
12/12/2024 17:29:48:586 - Endereço 4 (192.168.105.11): Timeout ao receber resposta. GET=False, Parametro=13
|
||||
12/12/2024 17:29:48:602 - Endereço 251 (192.168.105.11): Dados recebidos de um endereço inválido: [251 251 4 245 2 246 128 47]
|
||||
12/12/2024 17:29:48:602 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 17:29:50:438 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 17:32:53:302 - Endereço 1 (192.168.105.11): Erro ao enviar comando: O índice estava fora dos limites da matriz.
|
||||
12/12/2024 17:33:05:324 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 17:33:07:382 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 17:33:17:032 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 17:33:19:042 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 17:33:23:057 - Endereço 245 (192.168.105.11): Dados recebidos de um endereço inválido: [4 245 2 246]
|
||||
12/12/2024 17:33:23:057 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 17:33:25:003 - Endereço 1 (192.168.105.11): Timeout ao receber resposta. GET=True, Parametro=1
|
||||
12/12/2024 17:33:29:168 - Endereço 1 (192.168.105.11): Erro ao enviar comando: O índice estava fora dos limites da matriz.
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"Id":"1517","Name":"Projeto","Length":79.155642202986542,"Dist1":0.0,"Dist2":0.0},"geometry":{"id":null,"type":"LineString","coordinates":[[-47.381513166666664,-22.213679],[-47.381501666666665,-22.2136855],[-47.381491333333337,-22.213692833333333],[-47.381484666666665,-22.213698166666667],[-47.381481666666666,-22.213699833333333],[-47.381481166666667,-22.2136995],[-47.381477333333336,-22.213695666666666],[-47.381470833333331,-22.2136885],[-47.381464666666666,-22.2136795],[-47.3814595,-22.213669333333332],[-47.381454166666664,-22.213659833333335],[-47.381449,-22.213650333333334],[-47.381442833333331,-22.213640666666667],[-47.381437,-22.2136315],[-47.381431166666665,-22.213622166666667],[-47.381425833333331,-22.213612166666667],[-47.381420333333331,-22.2136015],[-47.381414333333332,-22.2135915],[-47.381408666666665,-22.213581333333334],[-47.381402666666666,-22.213571666666667],[-47.381396333333335,-22.213562],[-47.381391166666667,-22.213552166666666],[-47.381384833333335,-22.2135415],[-47.38137833333333,-22.213531166666666],[-47.381372,-22.2135225],[-47.3813655,-22.213513166666665],[-47.381358333333331,-22.213503666666668],[-47.381351,-22.213494333333333],[-47.381344166666665,-22.213485666666667],[-47.381337333333335,-22.213476],[-47.381331,-22.213465833333334],[-47.38132516666667,-22.213455333333332],[-47.381318666666665,-22.213445],[-47.3813125,-22.213434833333334],[-47.381305,-22.213425],[-47.3812975,-22.213415],[-47.381290166666666,-22.2134045],[-47.381284,-22.213394],[-47.381277166666663,-22.2133835],[-47.381271166666664,-22.213373166666667],[-47.381265,-22.213363333333334],[-47.381257833333336,-22.213354166666665],[-47.381250333333334,-22.213345666666665],[-47.381245333333332,-22.213336666666667],[-47.38124366666667,-22.213326666666667],[-47.381246,-22.213314833333332],[-47.3812515,-22.213303833333335],[-47.381257833333336,-22.213293333333333],[-47.381263333333337,-22.213282666666668],[-47.381268333333331,-22.213272],[-47.381273166666666,-22.213261833333334],[-47.381278333333334,-22.213252],[-47.381285666666663,-22.213243333333335],[-47.381294166666663,-22.213234833333335],[-47.381302333333331,-22.213226166666665],[-47.381310333333332,-22.213217],[-47.381318666666665,-22.213207833333332],[-47.381327333333331,-22.213199666666668],[-47.38133633333333,-22.213190833333332],[-47.381346,-22.2131815],[-47.381355333333332,-22.213172],[-47.381364833333336,-22.213162333333333],[-47.381373833333335,-22.213152333333333],[-47.3813835,-22.213143],[-47.381392666666663,-22.213134333333333]]}}]}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -1 +1 @@
|
|||
{"tmrRegistrador":{"_uiControl":null,"State":2,"IsRunning":false,"IsStopped":true,"IsCreated":false,"Interval":1000,"StackTrace":"AtuadorModel.IniciarRegistrador","Id":"tmrRegistrador_Atu","Ticks":386,"TimeTick":"00:00:00"},"Modulo_ID":"Atu","IP":"192.168.100.13","RequisitarDados":true,"Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":1.05,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B02","Posicao":2,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B03","Posicao":3,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B04","Posicao":4,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0}],"BombasPressurizadoras":[{"ID":"BOMBA","ComandoAtuar":false,"Componente":325,"LeituraEstado":false,"Comandar":true,"Testando":false,"Funcoes":[14,35,36,37,5],"LeituraPotencia":0.0,"LeituraPressaoSP":0.0,"LeituraPressao":0.0,"Leitura":null,"Inicializado":false}],"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":23,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":true,"DelayAmostragem":300,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[],"UnidadeMedida":"mL/s","LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":true,"DelayAmostragem":1000,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","LimiteMaximo":50.0,"LimiteMinimo":5.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[["Vmin","000.00"],["Vmax","004.50"],["Pmax","174.04"]],"UnidadeMedida":"psi","LimiteMaximo":120.0,"LimiteMinimo":60.0}],"BombaPressurizadora":{"ID":"BOMBA","ComandoAtuar":false,"Componente":325,"LeituraEstado":false,"Comandar":true,"Testando":false,"Funcoes":[14,35,36,37,5],"LeituraPotencia":0.0,"LeituraPressaoSP":0.0,"LeituraPressao":0.0,"Leitura":null,"Inicializado":false},"ScriptDeteccaoErvas":"weed_detector-1_0.py","DadosLeitura":{"Momento":"0001-01-01T00:00:00","Conectado":false,"Mod_ID":null,"QualidadeWifi":0,"LatenciaLoop":0,"BicosPulverizadores":[],"BombasPressurizadoras":[],"SensoresFluxo":[],"SensoresMassa":[],"SensoresPressao":[]},"_MassaRef":0.8,"_MassaLeituraRef":40876.37,"_MassaLeituraExtra":1895800.0,"MassaReservatorio":0.0,"VolumeReservatorio":0.0,"PercentualReservatorio":0.0,"VolumeVazaoAferido":0.0,"_FluxoMlRef":102.0,"_FluxoPulsoRef":80.0,"VazaoFluxoMLpSInstantanea":0.0,"VazaoFluxoMLpSMedia":0.0,"VolumeVazaoML":0.0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0,"_PressaoVmin":0.0,"_PressaoVmax":4.5,"_PressaoMax":174.045,"PressaoLinha":0.0,"PressaoLinhaCalc":0.0}
|
||||
{"tmrRegistrador":{"_uiControl":null,"State":2,"IsRunning":false,"IsStopped":true,"IsCreated":false,"Interval":1000,"StackTrace":"AtuadorModel.IniciarRegistrador","Id":"tmrRegistrador_Atu","Ticks":0,"TimeTick":"00:00:00"},"Modulo_ID":"Atu","IP":"192.168.100.13","RequisitarDados":true,"Conectado":false,"QuantidadeBicos":4,"DensidadeHerbicida":1.05,"BicosPulverizadores":[{"ID":"B01","Posicao":1,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B02","Posicao":2,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B03","Posicao":3,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0},{"ID":"B04","Posicao":4,"Componente":422,"AtuacaoNivelAlto":true,"ComandoAtuar":false,"Comandar":true,"Testando":false,"Funcoes":[21],"LeituraStatusBico":false,"MediaNivelFluxo":0.0,"Leitura":null,"Inicializado":false,"Atuacoes":0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0}],"BombasPressurizadoras":[{"ID":"BOMBA","ComandoAtuar":false,"Componente":325,"LeituraEstado":false,"Comandar":true,"Testando":false,"Funcoes":[14,35,36,37,5],"LeituraPotencia":0.0,"LeituraPressaoSP":0.0,"LeituraPressao":0.0,"Leitura":null,"Inicializado":false}],"Sensores":[{"LogGrafico":[],"ID":"FLXLN","Prioridade":23,"Descricao":"Fluxo na linha principal","Componente":198,"Aferir":true,"DelayAmostragem":300,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[25],"Parametros":[],"UnidadeMedida":"mL/s","LimiteMaximo":0.0,"LimiteMinimo":0.0},{"LogGrafico":[],"ID":"MASRS","Prioridade":3,"Descricao":"Massa do reservatório de herbicida","Componente":532,"Aferir":true,"DelayAmostragem":1000,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[22,23],"Parametros":[],"UnidadeMedida":"Kg","LimiteMaximo":50.0,"LimiteMinimo":5.0},{"LogGrafico":[],"ID":"PRSLN","Prioridade":3,"Descricao":"Pressão na linha principal","Componente":333,"Aferir":true,"DelayAmostragem":1000,"Leitura":null,"Inicializado":false,"Testando":false,"Funcoes":[24],"Parametros":[["Vmin","000.00"],["Vmax","004.50"],["Pmax","174.04"]],"UnidadeMedida":"psi","LimiteMaximo":120.0,"LimiteMinimo":60.0}],"BombaPressurizadora":{"ID":"BOMBA","ComandoAtuar":false,"Componente":325,"LeituraEstado":false,"Comandar":true,"Testando":false,"Funcoes":[14,35,36,37,5],"LeituraPotencia":0.0,"LeituraPressaoSP":0.0,"LeituraPressao":0.0,"Leitura":null,"Inicializado":false},"ScriptDeteccaoErvas":"weed_detector-1_0.py","DadosLeitura":{"Momento":"0001-01-01T00:00:00","Conectado":false,"Mod_ID":null,"QualidadeWifi":0,"LatenciaLoop":0,"BicosPulverizadores":[],"BombasPressurizadoras":[],"SensoresFluxo":[],"SensoresMassa":[],"SensoresPressao":[]},"_MassaRef":0.8,"_MassaLeituraRef":40876.37,"_MassaLeituraExtra":1895800.0,"MassaReservatorio":0.0,"VolumeReservatorio":0.0,"PercentualReservatorio":0.0,"VolumeVazaoAferido":0.0,"_FluxoMlRef":102.0,"_FluxoPulsoRef":80.0,"VazaoFluxoMLpSInstantanea":0.0,"VazaoFluxoMLpSMedia":0.0,"VolumeVazaoML":0.0,"InicioAtuacao":"0001-01-01T00:00:00","TempoAtuado":0.0,"_PressaoVmin":0.0,"_PressaoVmax":4.5,"_PressaoMax":174.045,"PressaoLinha":0.0,"PressaoLinhaCalc":0.0}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -11,21 +11,21 @@
|
|||
|
||||
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
|
||||
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
|
||||
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.js"></script>
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.css"/>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"/>
|
||||
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/all.min.css"/>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
|
||||
<script src="folium/leaflet.js"></script>
|
||||
<script src="folium/jquery-3.7.1.min.js"></script>
|
||||
<script src="folium/bootstrap.bundle.min.js"></script>
|
||||
<script src="folium/leaflet.awesome-markers.js"></script>
|
||||
<link rel="stylesheet" href="folium/leaflet.css"/>
|
||||
<link rel="stylesheet" href="folium/bootstrap.min.css"/>
|
||||
<link rel="stylesheet" href="folium/bootstrap.min.css"/>
|
||||
<link rel="stylesheet" href="folium/all.min.css"/>
|
||||
<link rel="stylesheet" href="folium/leaflet.awesome-markers.css"/>
|
||||
<link rel="stylesheet" href="folium/leaflet.awesome.rotate.min.css"/>
|
||||
|
||||
<meta name="viewport" content="width=device-width,
|
||||
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
<style>
|
||||
#map_5f4fd292c4d69c95c75af1d5a9f8d951 {
|
||||
#map_a363af6677d6ad9f6a3adf9cb8c2a801 {
|
||||
position: relative;
|
||||
width: 100.0%;
|
||||
height: 100.0%;
|
||||
|
|
@ -39,14 +39,14 @@
|
|||
<body>
|
||||
|
||||
|
||||
<div class="folium-map" id="map_5f4fd292c4d69c95c75af1d5a9f8d951" ></div>
|
||||
<div class="folium-map" id="map_a363af6677d6ad9f6a3adf9cb8c2a801" ></div>
|
||||
|
||||
</body>
|
||||
<script>
|
||||
|
||||
|
||||
var map_5f4fd292c4d69c95c75af1d5a9f8d951 = L.map(
|
||||
"map_5f4fd292c4d69c95c75af1d5a9f8d951",
|
||||
var map_a363af6677d6ad9f6a3adf9cb8c2a801 = L.map(
|
||||
"map_a363af6677d6ad9f6a3adf9cb8c2a801",
|
||||
{
|
||||
center: [0.0, 0.0],
|
||||
crs: L.CRS.EPSG3857,
|
||||
|
|
@ -78,7 +78,7 @@
|
|||
}
|
||||
trajeto_json_add({"features": []});
|
||||
|
||||
trajeto_json.addTo(map_5f4fd292c4d69c95c75af1d5a9f8d951);
|
||||
trajeto_json.addTo(map_a363af6677d6ad9f6a3adf9cb8c2a801);
|
||||
|
||||
function adicionarGeometria(novaGeometria) {
|
||||
trajeto_json.addData(novaGeometria);
|
||||
|
|
@ -136,7 +136,7 @@
|
|||
|
||||
var marcadorDinamico = L.marker([0, 0], {
|
||||
icon: customIcon
|
||||
}).addTo(map_5f4fd292c4d69c95c75af1d5a9f8d951);
|
||||
}).addTo(map_a363af6677d6ad9f6a3adf9cb8c2a801);
|
||||
|
||||
// Conectar ao broker MQTT
|
||||
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
|
||||
|
|
@ -174,7 +174,7 @@
|
|||
marcadorDinamico.setRotationAngle(angulo);
|
||||
|
||||
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
|
||||
map_5f4fd292c4d69c95c75af1d5a9f8d951.setView(novaPosicao, map_5f4fd292c4d69c95c75af1d5a9f8d951.getZoom());
|
||||
map_a363af6677d6ad9f6a3adf9cb8c2a801.setView(novaPosicao, map_a363af6677d6ad9f6a3adf9cb8c2a801.getZoom());
|
||||
});
|
||||
|
||||
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,205 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
|
||||
<script>
|
||||
L_NO_TOUCH = false;
|
||||
L_DISABLE_3D = false;
|
||||
</script>
|
||||
|
||||
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
|
||||
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
|
||||
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.js"></script>
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.css"/>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"/>
|
||||
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/all.min.css"/>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
|
||||
|
||||
<meta name="viewport" content="width=device-width,
|
||||
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
<style>
|
||||
#map_9ab876a6ef8733158bc39237c9c2e2b1 {
|
||||
position: relative;
|
||||
width: 100.0%;
|
||||
height: 100.0%;
|
||||
left: 0.0%;
|
||||
top: 0.0%;
|
||||
}
|
||||
.leaflet-container { font-size: 1rem; }
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<div class="folium-map" id="map_9ab876a6ef8733158bc39237c9c2e2b1" ></div>
|
||||
|
||||
</body>
|
||||
<script>
|
||||
|
||||
|
||||
var map_9ab876a6ef8733158bc39237c9c2e2b1 = L.map(
|
||||
"map_9ab876a6ef8733158bc39237c9c2e2b1",
|
||||
{
|
||||
center: [0.0, 0.0],
|
||||
crs: L.CRS.EPSG3857,
|
||||
zoom: 12,
|
||||
zoomControl: true,
|
||||
preferCanvas: false,
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<script>
|
||||
function trajeto_json_onEachFeature(feature, layer) {
|
||||
layer.on({
|
||||
});
|
||||
};
|
||||
var trajeto_json = L.geoJson(null, {
|
||||
onEachFeature: trajeto_json_onEachFeature,
|
||||
style: function(feature) {
|
||||
return {color: 'red'};
|
||||
}
|
||||
}
|
||||
);
|
||||
function trajeto_json_add (data) {
|
||||
trajeto_json.addData(data);
|
||||
}
|
||||
trajeto_json_add({"features": []});
|
||||
|
||||
trajeto_json.addTo(map_9ab876a6ef8733158bc39237c9c2e2b1);
|
||||
|
||||
function adicionarGeometria(novaGeometria) {
|
||||
trajeto_json.addData(novaGeometria);
|
||||
}
|
||||
|
||||
function saoCoordenadasIguais(coord1, coord2, tolerancia) {
|
||||
return Math.abs(coord1[0] - coord2[0]) < tolerancia && Math.abs(coord1[1] - coord2[1]) < tolerancia;
|
||||
}
|
||||
|
||||
function adicionarCoordenada(idGeometria, novaCoordenada) {
|
||||
var feature = trajeto_json.toGeoJSON().features.find(f => f.id === idGeometria);
|
||||
if (feature) {
|
||||
var ultima = [0.0,0.0];
|
||||
if (feature.geometry.coordinates.length > 0) {
|
||||
ultima = feature.geometry.coordinates[feature.geometry.coordinates.length - 1];
|
||||
}
|
||||
if (!saoCoordenadasIguais(ultima, novaCoordenada, 0.000001)) {
|
||||
feature.geometry.coordinates.push(novaCoordenada);
|
||||
var ft = feature;
|
||||
trajeto_json.clearLayers();
|
||||
trajeto_json.addData(ft);
|
||||
}
|
||||
|
||||
} else {
|
||||
console.log("Feature com ID " + idGeometria + " não encontrada.");
|
||||
}
|
||||
}
|
||||
|
||||
adicionarGeometria({
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "LineString",
|
||||
"coordinates": []
|
||||
},
|
||||
"properties": {"Dist1": 0.0, "Dist2": 0.0, "Id": 1517, "Length": 21.724783283, "Name": "Projeto"},
|
||||
"id": "Tj"
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<script src="folium/mqtt.min.js"></script>
|
||||
<script src="folium/leaflet.rotatedMarker.js"></script>
|
||||
<script>
|
||||
let posicaoAtual = {
|
||||
lat: 0,
|
||||
long: 0
|
||||
};
|
||||
|
||||
var customIcon = L.icon({
|
||||
iconUrl: 'folium/images/position_marker.png',
|
||||
iconSize: [32, 32],
|
||||
iconAnchor: [16, 16],
|
||||
popupAnchor: [0, -16]
|
||||
});
|
||||
|
||||
var marcadorDinamico = L.marker([0, 0], {
|
||||
icon: customIcon
|
||||
}).addTo(map_9ab876a6ef8733158bc39237c9c2e2b1);
|
||||
|
||||
// Conectar ao broker MQTT
|
||||
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
|
||||
|
||||
// Quando conectado, inscreva-se no tópico desejado
|
||||
client.on('connect', function () {
|
||||
console.log('Conectado ao broker MQTT');
|
||||
|
||||
// Inscrever-se no tópico
|
||||
client.subscribe('coordenadas_gps', function (err) {
|
||||
if (!err) {
|
||||
console.log("Inscrição bem-sucedida no tópico");
|
||||
} else {
|
||||
console.error("Falha na inscrição do tópico", err);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Lidar com mensagens recebidas para o tópico inscrito
|
||||
client.on('message', function (topic, message) {
|
||||
// A mensagem é um Buffer, converta para string ou objeto conforme necessário
|
||||
//console.log(`Mensagem recebida no tópico '${topic}': ${message.toString()}`);
|
||||
var dados = JSON.parse(message);
|
||||
var novaLatitude = dados.latitude;
|
||||
var novaLongitude = dados.longitude;
|
||||
var novaPosicao = [novaLatitude, novaLongitude];
|
||||
marcadorDinamico.setLatLng(novaPosicao);
|
||||
|
||||
var angulo = dados.orientacao;
|
||||
|
||||
posicaoAtual.lat = novaPosicao[0];
|
||||
posicaoAtual.long = novaPosicao[1];
|
||||
|
||||
// Rotacionar o marcador para o angulo calculado
|
||||
marcadorDinamico.setRotationAngle(angulo);
|
||||
|
||||
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
|
||||
map_9ab876a6ef8733158bc39237c9c2e2b1.setView(novaPosicao, map_9ab876a6ef8733158bc39237c9c2e2b1.getZoom());
|
||||
});
|
||||
|
||||
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {
|
||||
// Converter latitudes e longitudes de graus para radianos
|
||||
const latA = P1latitude * (Math.PI / 180.0);
|
||||
const lonA = P1longitude * (Math.PI / 180.0);
|
||||
const latB = P2latitude * (Math.PI / 180.0);
|
||||
const lonB = P2longitude * (Math.PI / 180.0);
|
||||
|
||||
// Calcular a diferença de longitude
|
||||
const deltaLon = lonB - lonA;
|
||||
|
||||
// Calcular a direção
|
||||
const y = Math.sin(deltaLon) * Math.cos(latB);
|
||||
const x = Math.cos(latA) * Math.sin(latB) - Math.sin(latA) * Math.cos(latB) * Math.cos(deltaLon);
|
||||
const direcaoRadianos = Math.atan2(y, x);
|
||||
|
||||
// Converter a direção de radianos para graus
|
||||
let direcaoGraus = direcaoRadianos * (180.0 / Math.PI);
|
||||
|
||||
// Normalizar a direção para que esteja no intervalo de 0 a 360 graus
|
||||
direcaoGraus = (direcaoGraus + 360) % 360;
|
||||
|
||||
return direcaoGraus;
|
||||
}
|
||||
|
||||
</script>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,214 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
|
||||
|
||||
<script>
|
||||
L_NO_TOUCH = false;
|
||||
L_DISABLE_3D = false;
|
||||
</script>
|
||||
|
||||
<style>html, body {width: 100%;height: 100%;margin: 0;padding: 0;}</style>
|
||||
<style>#map {position:absolute;top:0;bottom:0;right:0;left:0;}</style>
|
||||
<script src="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.js"></script>
|
||||
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.css"/>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"/>
|
||||
<link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/all.min.css"/>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>
|
||||
|
||||
<meta name="viewport" content="width=device-width,
|
||||
initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||
<style>
|
||||
#map_2c6f7962906ac812aae604c2131a913d {
|
||||
position: relative;
|
||||
width: 100.0%;
|
||||
height: 100.0%;
|
||||
left: 0.0%;
|
||||
top: 0.0%;
|
||||
}
|
||||
.leaflet-container { font-size: 1rem; }
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<div class="folium-map" id="map_2c6f7962906ac812aae604c2131a913d" ></div>
|
||||
|
||||
</body>
|
||||
<script>
|
||||
|
||||
|
||||
var map_2c6f7962906ac812aae604c2131a913d = L.map(
|
||||
"map_2c6f7962906ac812aae604c2131a913d",
|
||||
{
|
||||
center: [0.0, 0.0],
|
||||
crs: L.CRS.EPSG3857,
|
||||
zoom: 12,
|
||||
zoomControl: true,
|
||||
preferCanvas: false,
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var tile_layer_0ef1e546cf5f2e1a85eaef04975a0819 = L.tileLayer(
|
||||
"https://tile.openstreetmap.org/{z}/{x}/{y}.png",
|
||||
{"attribution": "\u0026copy; \u003ca href=\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}
|
||||
);
|
||||
|
||||
|
||||
tile_layer_0ef1e546cf5f2e1a85eaef04975a0819.addTo(map_2c6f7962906ac812aae604c2131a913d);
|
||||
|
||||
</script>
|
||||
|
||||
<script>
|
||||
function trajeto_json_onEachFeature(feature, layer) {
|
||||
layer.on({
|
||||
});
|
||||
};
|
||||
var trajeto_json = L.geoJson(null, {
|
||||
onEachFeature: trajeto_json_onEachFeature,
|
||||
style: function(feature) {
|
||||
return {color: 'red'};
|
||||
}
|
||||
}
|
||||
);
|
||||
function trajeto_json_add (data) {
|
||||
trajeto_json.addData(data);
|
||||
}
|
||||
trajeto_json_add({"features": []});
|
||||
|
||||
trajeto_json.addTo(map_2c6f7962906ac812aae604c2131a913d);
|
||||
|
||||
function adicionarGeometria(novaGeometria) {
|
||||
trajeto_json.addData(novaGeometria);
|
||||
}
|
||||
|
||||
function saoCoordenadasIguais(coord1, coord2, tolerancia) {
|
||||
return Math.abs(coord1[0] - coord2[0]) < tolerancia && Math.abs(coord1[1] - coord2[1]) < tolerancia;
|
||||
}
|
||||
|
||||
function adicionarCoordenada(idGeometria, novaCoordenada) {
|
||||
var feature = trajeto_json.toGeoJSON().features.find(f => f.id === idGeometria);
|
||||
if (feature) {
|
||||
var ultima = [0.0,0.0];
|
||||
if (feature.geometry.coordinates.length > 0) {
|
||||
ultima = feature.geometry.coordinates[feature.geometry.coordinates.length - 1];
|
||||
}
|
||||
if (!saoCoordenadasIguais(ultima, novaCoordenada, 0.000001)) {
|
||||
feature.geometry.coordinates.push(novaCoordenada);
|
||||
var ft = feature;
|
||||
trajeto_json.clearLayers();
|
||||
trajeto_json.addData(ft);
|
||||
}
|
||||
|
||||
} else {
|
||||
console.log("Feature com ID " + idGeometria + " não encontrada.");
|
||||
}
|
||||
}
|
||||
|
||||
adicionarGeometria({
|
||||
"type": "Feature",
|
||||
"geometry": {
|
||||
"type": "LineString",
|
||||
"coordinates": []
|
||||
},
|
||||
"properties": {"Dist1": 0.0, "Dist2": 0.0, "Id": 1517, "Length": 21.724783283, "Name": "Projeto"},
|
||||
"id": "Tj"
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<script src="folium/mqtt.min.js"></script>
|
||||
<script src="folium/leaflet.rotatedMarker.js"></script>
|
||||
<script>
|
||||
let posicaoAtual = {
|
||||
lat: 0,
|
||||
long: 0
|
||||
};
|
||||
|
||||
var customIcon = L.icon({
|
||||
iconUrl: 'folium/images/position_marker.png',
|
||||
iconSize: [32, 32],
|
||||
iconAnchor: [16, 16],
|
||||
popupAnchor: [0, -16]
|
||||
});
|
||||
|
||||
var marcadorDinamico = L.marker([0, 0], {
|
||||
icon: customIcon
|
||||
}).addTo(map_2c6f7962906ac812aae604c2131a913d);
|
||||
|
||||
// Conectar ao broker MQTT
|
||||
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
|
||||
|
||||
// Quando conectado, inscreva-se no tópico desejado
|
||||
client.on('connect', function () {
|
||||
console.log('Conectado ao broker MQTT');
|
||||
|
||||
// Inscrever-se no tópico
|
||||
client.subscribe('coordenadas_gps', function (err) {
|
||||
if (!err) {
|
||||
console.log("Inscrição bem-sucedida no tópico");
|
||||
} else {
|
||||
console.error("Falha na inscrição do tópico", err);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Lidar com mensagens recebidas para o tópico inscrito
|
||||
client.on('message', function (topic, message) {
|
||||
// A mensagem é um Buffer, converta para string ou objeto conforme necessário
|
||||
//console.log(`Mensagem recebida no tópico '${topic}': ${message.toString()}`);
|
||||
var dados = JSON.parse(message);
|
||||
var novaLatitude = dados.latitude;
|
||||
var novaLongitude = dados.longitude;
|
||||
var novaPosicao = [novaLatitude, novaLongitude];
|
||||
marcadorDinamico.setLatLng(novaPosicao);
|
||||
|
||||
var angulo = dados.orientacao;
|
||||
|
||||
posicaoAtual.lat = novaPosicao[0];
|
||||
posicaoAtual.long = novaPosicao[1];
|
||||
|
||||
// Rotacionar o marcador para o angulo calculado
|
||||
marcadorDinamico.setRotationAngle(angulo);
|
||||
|
||||
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
|
||||
map_2c6f7962906ac812aae604c2131a913d.setView(novaPosicao, map_2c6f7962906ac812aae604c2131a913d.getZoom());
|
||||
});
|
||||
|
||||
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {
|
||||
// Converter latitudes e longitudes de graus para radianos
|
||||
const latA = P1latitude * (Math.PI / 180.0);
|
||||
const lonA = P1longitude * (Math.PI / 180.0);
|
||||
const latB = P2latitude * (Math.PI / 180.0);
|
||||
const lonB = P2longitude * (Math.PI / 180.0);
|
||||
|
||||
// Calcular a diferença de longitude
|
||||
const deltaLon = lonB - lonA;
|
||||
|
||||
// Calcular a direção
|
||||
const y = Math.sin(deltaLon) * Math.cos(latB);
|
||||
const x = Math.cos(latA) * Math.sin(latB) - Math.sin(latA) * Math.cos(latB) * Math.cos(deltaLon);
|
||||
const direcaoRadianos = Math.atan2(y, x);
|
||||
|
||||
// Converter a direção de radianos para graus
|
||||
let direcaoGraus = direcaoRadianos * (180.0 / Math.PI);
|
||||
|
||||
// Normalizar a direção para que esteja no intervalo de 0 a 360 graus
|
||||
direcaoGraus = (direcaoGraus + 360) % 360;
|
||||
|
||||
return direcaoGraus;
|
||||
}
|
||||
|
||||
</script>
|
||||
</html>
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -201,6 +201,18 @@ with open(caminho_completo_html, 'r+') as arquivo_html:
|
|||
</script>
|
||||
"""
|
||||
|
||||
# Importar arquivos localmente
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://code.jquery.com/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/', 'folium/')
|
||||
|
||||
# Inserir o script no conteúdo HTML
|
||||
conteudo_atualizado = conteudo_html.replace('</html>', script_desenha_trajeotria + script_atualizacao_marcador + '</html>')
|
||||
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -480,4 +480,4 @@ C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\MathNet.Numerics.xml
|
|||
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\bin\Debug\OpenHardwareMonitorLib.dll
|
||||
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.frmA05Config.resources
|
||||
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.Forms.frmEthernet.resources
|
||||
C:\ZendionInc\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.csproj.CopyComplete
|
||||
C:\ZendionINC\agrobot_base\AgroBase\AgroBase\obj\Debug\AgroBase.csproj.Up2Date
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -57,6 +57,7 @@
|
|||
this.btnProximo = new System.Windows.Forms.Button();
|
||||
this.pnlParametros = new System.Windows.Forms.Panel();
|
||||
this.gpbSensoriamento = new System.Windows.Forms.GroupBox();
|
||||
this.chbSonarAtivado = new System.Windows.Forms.CheckBox();
|
||||
this.rtbDescricao = new System.Windows.Forms.RichTextBox();
|
||||
this.lblConfigUltrassom = new System.Windows.Forms.Label();
|
||||
this.cmbConfiguracaoUltrassom = new System.Windows.Forms.ComboBox();
|
||||
|
|
@ -102,7 +103,6 @@
|
|||
this.btnCarregar = new System.Windows.Forms.Button();
|
||||
this.txtDescricao = new System.Windows.Forms.TextBox();
|
||||
this.lblDescricao = new System.Windows.Forms.Label();
|
||||
this.chbSonarAtivado = new System.Windows.Forms.CheckBox();
|
||||
this.gpbModulos.SuspendLayout();
|
||||
this.pnlModulos.SuspendLayout();
|
||||
this.tabControl1.SuspendLayout();
|
||||
|
|
@ -473,6 +473,16 @@
|
|||
this.gpbSensoriamento.TabStop = false;
|
||||
this.gpbSensoriamento.Text = "Sensoriamento";
|
||||
//
|
||||
// chbSonarAtivado
|
||||
//
|
||||
this.chbSonarAtivado.AutoSize = true;
|
||||
this.chbSonarAtivado.Location = new System.Drawing.Point(9, 90);
|
||||
this.chbSonarAtivado.Name = "chbSonarAtivado";
|
||||
this.chbSonarAtivado.Size = new System.Drawing.Size(93, 17);
|
||||
this.chbSonarAtivado.TabIndex = 13;
|
||||
this.chbSonarAtivado.Text = "Sonar Ativado";
|
||||
this.chbSonarAtivado.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// rtbDescricao
|
||||
//
|
||||
this.rtbDescricao.BackColor = System.Drawing.SystemColors.Window;
|
||||
|
|
@ -923,16 +933,6 @@
|
|||
this.lblDescricao.TabIndex = 7;
|
||||
this.lblDescricao.Text = "Descrição";
|
||||
//
|
||||
// chbSonarAtivado
|
||||
//
|
||||
this.chbSonarAtivado.AutoSize = true;
|
||||
this.chbSonarAtivado.Location = new System.Drawing.Point(9, 90);
|
||||
this.chbSonarAtivado.Name = "chbSonarAtivado";
|
||||
this.chbSonarAtivado.Size = new System.Drawing.Size(93, 17);
|
||||
this.chbSonarAtivado.TabIndex = 13;
|
||||
this.chbSonarAtivado.Text = "Sonar Ativado";
|
||||
this.chbSonarAtivado.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// frmAjustesOperacao
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||
|
|
|
|||
|
|
@ -201,7 +201,7 @@ namespace AgroMonitor.Forms
|
|||
});
|
||||
}
|
||||
|
||||
if (Dispositivo == T_Code.A05)
|
||||
if (Dispositivo == T_Code.A05 || Dispositivo == T_Code.Knt)
|
||||
{
|
||||
gpbSensoriamento.Enabled = chb.Checked;
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,209 @@
|
|||
import geopandas as gpd
|
||||
import json
|
||||
import sys
|
||||
import folium
|
||||
import requests
|
||||
import re
|
||||
|
||||
def internet_disponivel():
|
||||
"""Verifica se há conexão com a internet."""
|
||||
url = 'http://www.google.com/'
|
||||
timeout = 5
|
||||
try:
|
||||
_ = requests.get(url, timeout=timeout)
|
||||
return True
|
||||
except requests.ConnectionError:
|
||||
return False
|
||||
|
||||
# Argumentos e configurações iniciais
|
||||
pathFiles = sys.argv[1]
|
||||
fileName = sys.argv[2]
|
||||
outputName = sys.argv[3]
|
||||
outputMapName = sys.argv[4]
|
||||
topico_gps = sys.argv[5]
|
||||
pastaSaida = 'Python/Output/'
|
||||
|
||||
center = [0, 0]
|
||||
|
||||
# Verificar se há conexão com a internet
|
||||
if internet_disponivel():
|
||||
m = folium.Map(location=center, zoom_start=12)
|
||||
else:
|
||||
m = folium.Map(location=center, zoom_start=12, tiles=None)
|
||||
|
||||
# Salvar o mapa interativo em um arquivo HTML
|
||||
m.save(pastaSaida + outputMapName)
|
||||
|
||||
|
||||
# Caminho completo para o arquivo HTML gerado
|
||||
caminho_completo_html = pastaSaida + outputMapName
|
||||
|
||||
# Abrir o arquivo HTML para leitura e escrita
|
||||
with open(caminho_completo_html, 'r+') as arquivo_html:
|
||||
# Ler o conteúdo do arquivo
|
||||
conteudo_html = arquivo_html.read()
|
||||
|
||||
# Usar expressão regular para encontrar o ID do mapa
|
||||
padrao_id_mapa = re.compile(r'id="map_(.*?)"')
|
||||
resultado_busca = padrao_id_mapa.search(conteudo_html)
|
||||
|
||||
# Verificar se encontrou um ID de mapa
|
||||
if resultado_busca:
|
||||
id_mapa = 'map_' + resultado_busca.group(1)
|
||||
else:
|
||||
raise ValueError("Não foi possível encontrar o ID do mapa no arquivo HTML.")
|
||||
|
||||
# Script JavaScript para adicionar ao HTML, com o ID do mapa substituído
|
||||
script_desenha_trajeotria = f"""
|
||||
<script>
|
||||
function trajeto_json_onEachFeature(feature, layer) {{
|
||||
layer.on({{
|
||||
}});
|
||||
}};
|
||||
var trajeto_json = L.geoJson(null, {{
|
||||
onEachFeature: trajeto_json_onEachFeature,
|
||||
style: function(feature) {{
|
||||
return {{color: 'red'}};
|
||||
}}
|
||||
}}
|
||||
);
|
||||
function trajeto_json_add (data) {{
|
||||
trajeto_json.addData(data);
|
||||
}}
|
||||
trajeto_json_add({{"features": []}});
|
||||
|
||||
trajeto_json.addTo({id_mapa});
|
||||
|
||||
function adicionarGeometria(novaGeometria) {{
|
||||
trajeto_json.addData(novaGeometria);
|
||||
}}
|
||||
|
||||
function saoCoordenadasIguais(coord1, coord2, tolerancia) {{
|
||||
return Math.abs(coord1[0] - coord2[0]) < tolerancia && Math.abs(coord1[1] - coord2[1]) < tolerancia;
|
||||
}}
|
||||
|
||||
function adicionarCoordenada(idGeometria, novaCoordenada) {{
|
||||
var feature = trajeto_json.toGeoJSON().features.find(f => f.id === idGeometria);
|
||||
if (feature) {{
|
||||
var ultima = [0.0,0.0];
|
||||
if (feature.geometry.coordinates.length > 0) {{
|
||||
ultima = feature.geometry.coordinates[feature.geometry.coordinates.length - 1];
|
||||
}}
|
||||
if (!saoCoordenadasIguais(ultima, novaCoordenada, 0.000001)) {{
|
||||
feature.geometry.coordinates.push(novaCoordenada);
|
||||
var ft = feature;
|
||||
trajeto_json.clearLayers();
|
||||
trajeto_json.addData(ft);
|
||||
}}
|
||||
|
||||
}} else {{
|
||||
console.log("Feature com ID " + idGeometria + " não encontrada.");
|
||||
}}
|
||||
}}
|
||||
|
||||
adicionarGeometria({{
|
||||
"type": "Feature",
|
||||
"geometry": {{
|
||||
"type": "LineString",
|
||||
"coordinates": []
|
||||
}},
|
||||
"properties": {{"Dist1": 0.0, "Dist2": 0.0, "Id": 1517, "Length": 21.724783283, "Name": "Projeto"}},
|
||||
"id": "Tj"
|
||||
}});
|
||||
|
||||
</script>
|
||||
"""
|
||||
|
||||
# Script JavaScript para adicionar ao HTML, com o ID do mapa substituído
|
||||
script_atualizacao_marcador = f"""
|
||||
<script src="folium/mqtt.min.js"></script>
|
||||
<script src="folium/leaflet.rotatedMarker.js"></script>
|
||||
<script>
|
||||
let posicaoAtual = {{
|
||||
lat: 0,
|
||||
long: 0
|
||||
}};
|
||||
|
||||
var customIcon = L.icon({{
|
||||
iconUrl: 'folium/images/position_marker.png',
|
||||
iconSize: [32, 32],
|
||||
iconAnchor: [16, 16],
|
||||
popupAnchor: [0, -16]
|
||||
}});
|
||||
|
||||
var marcadorDinamico = L.marker([0, 0], {{
|
||||
icon: customIcon
|
||||
}}).addTo({id_mapa});
|
||||
|
||||
// Conectar ao broker MQTT
|
||||
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
|
||||
|
||||
// Quando conectado, inscreva-se no tópico desejado
|
||||
client.on('connect', function () {{
|
||||
console.log('Conectado ao broker MQTT');
|
||||
|
||||
// Inscrever-se no tópico
|
||||
client.subscribe('{topico_gps}', function (err) {{
|
||||
if (!err) {{
|
||||
console.log("Inscrição bem-sucedida no tópico");
|
||||
}} else {{
|
||||
console.error("Falha na inscrição do tópico", err);
|
||||
}}
|
||||
}});
|
||||
}});
|
||||
|
||||
// Lidar com mensagens recebidas para o tópico inscrito
|
||||
client.on('message', function (topic, message) {{
|
||||
// A mensagem é um Buffer, converta para string ou objeto conforme necessário
|
||||
//console.log(`Mensagem recebida no tópico '${{topic}}': ${{message.toString()}}`);
|
||||
var dados = JSON.parse(message);
|
||||
var novaLatitude = dados.latitude;
|
||||
var novaLongitude = dados.longitude;
|
||||
var novaPosicao = [novaLatitude, novaLongitude];
|
||||
marcadorDinamico.setLatLng(novaPosicao);
|
||||
|
||||
var angulo = dados.orientacao;
|
||||
|
||||
posicaoAtual.lat = novaPosicao[0];
|
||||
posicaoAtual.long = novaPosicao[1];
|
||||
|
||||
// Rotacionar o marcador para o angulo calculado
|
||||
marcadorDinamico.setRotationAngle(angulo);
|
||||
|
||||
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
|
||||
{id_mapa}.setView(novaPosicao, {id_mapa}.getZoom());
|
||||
}});
|
||||
|
||||
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {{
|
||||
// Converter latitudes e longitudes de graus para radianos
|
||||
const latA = P1latitude * (Math.PI / 180.0);
|
||||
const lonA = P1longitude * (Math.PI / 180.0);
|
||||
const latB = P2latitude * (Math.PI / 180.0);
|
||||
const lonB = P2longitude * (Math.PI / 180.0);
|
||||
|
||||
// Calcular a diferença de longitude
|
||||
const deltaLon = lonB - lonA;
|
||||
|
||||
// Calcular a direção
|
||||
const y = Math.sin(deltaLon) * Math.cos(latB);
|
||||
const x = Math.cos(latA) * Math.sin(latB) - Math.sin(latA) * Math.cos(latB) * Math.cos(deltaLon);
|
||||
const direcaoRadianos = Math.atan2(y, x);
|
||||
|
||||
// Converter a direção de radianos para graus
|
||||
let direcaoGraus = direcaoRadianos * (180.0 / Math.PI);
|
||||
|
||||
// Normalizar a direção para que esteja no intervalo de 0 a 360 graus
|
||||
direcaoGraus = (direcaoGraus + 360) % 360;
|
||||
|
||||
return direcaoGraus;
|
||||
}}
|
||||
|
||||
</script>
|
||||
"""
|
||||
|
||||
# Inserir o script no conteúdo HTML
|
||||
conteudo_atualizado = conteudo_html.replace('</html>', script_desenha_trajeotria + script_atualizacao_marcador + '</html>')
|
||||
|
||||
# Agora, reabrir o arquivo para escrita e sobrescrever o conteúdo com a versão atualizada
|
||||
with open(caminho_completo_html, 'w') as arquivo_html:
|
||||
arquivo_html.write(conteudo_atualizado)
|
||||
|
|
@ -0,0 +1,123 @@
|
|||
import cv2
|
||||
import numpy as np
|
||||
from flask import Flask, Response, request
|
||||
import json
|
||||
import time
|
||||
import threading
|
||||
import sys
|
||||
import os
|
||||
|
||||
import uuid
|
||||
import paho.mqtt.client as mqtt
|
||||
mqtt_client = mqtt.Client(f"client_weed_detector_{uuid.uuid4()}")
|
||||
mqtt_client.connect("localhost", port=1883)
|
||||
|
||||
|
||||
max_readings = int(sys.argv[1])
|
||||
porta = sys.argv[2]
|
||||
url = sys.argv[3]
|
||||
arquivoSaida = sys.argv[4]
|
||||
mostrar_linhas = sys.argv[5] == "1"
|
||||
mqtt_topic = sys.argv[6]
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
json_data = None
|
||||
output_folder = 'Python/Output/'
|
||||
|
||||
# Função para detecção de objetos usando YOLO e salvar as coordenadas em um arquivo JSON
|
||||
def detect_objects(conf_threshold, nms_threshold, _camera_index):
|
||||
# Definir intervalos de cor verde no espaço HSV
|
||||
lower_green = np.array([35, 50, 100]) # Valores de limite inferior (Hue, Saturation, Value)
|
||||
upper_green = np.array([90, 255, 255]) # Valores de limite superior (Hue, Saturation, Value)
|
||||
|
||||
#cap = cv2.VideoCapture(_camera_index, cv2.CAP_DSHOW)
|
||||
cap = cv2.VideoCapture(_camera_index, cv2.CAP_MSMF)
|
||||
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
|
||||
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
|
||||
readings = []
|
||||
|
||||
while True:
|
||||
ret, frame = cap.read()
|
||||
if not ret:
|
||||
break
|
||||
|
||||
# Converter a imagem de BGR para HSV
|
||||
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
|
||||
|
||||
# Criar uma máscara para os pixels verdes na faixa especificada
|
||||
mask = cv2.inRange(hsv, lower_green, upper_green)
|
||||
|
||||
# Encontrar os contornos na máscara
|
||||
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
||||
current_readings = []
|
||||
idx = 0 # Índice de detecção
|
||||
for contour in contours:
|
||||
area = cv2.contourArea(contour)
|
||||
if area > 1000: # Filtrar áreas menores que um valor específico (ajuste conforme necessário)
|
||||
x, y, w, h = cv2.boundingRect(contour)
|
||||
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
|
||||
cv2.putText(frame, f'Verde {idx}', (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
|
||||
|
||||
# Salvar as informações da detecção
|
||||
detection_info = {
|
||||
'id': int(idx),
|
||||
'descricao': 'Green',
|
||||
'x': int(x),
|
||||
'y': int(y),
|
||||
'largura': int(w),
|
||||
'altura': int(h),
|
||||
'confianca': 1.0 # Neste caso, confiança fixa para detecções baseadas em cores
|
||||
}
|
||||
current_readings.append(detection_info)
|
||||
idx += 1
|
||||
|
||||
global json_data
|
||||
|
||||
# Atualizar os resultados
|
||||
timestamp = time.time()
|
||||
json_data = {'timestamp': timestamp, 'x_max': width, 'y_max': height, 'objetos': current_readings}
|
||||
readings.append(json_data)
|
||||
|
||||
mqtt_client.publish(mqtt_topic, json.dumps(json_data).encode('utf-8'))
|
||||
|
||||
if not os.path.exists(output_folder):
|
||||
os.makedirs(output_folder)
|
||||
|
||||
if len(readings) > max_readings:
|
||||
readings.pop(0)
|
||||
|
||||
with open(output_folder + arquivoSaida, 'w') as file:
|
||||
json.dump(readings, file, indent=4)
|
||||
|
||||
|
||||
# Convertendo frame para JPEG e enviando via Flask
|
||||
ret, buffer = cv2.imencode('.jpg', frame)
|
||||
frame = buffer.tobytes()
|
||||
yield (b'--frame\r\n'
|
||||
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
|
||||
|
||||
# Esta função é para confirmar que script está pronto para execução
|
||||
def send_script_ready():
|
||||
mqtt_client.publish(mqtt_topic, "OK")
|
||||
|
||||
# Iniciar o servidor Flask em uma thread separada
|
||||
def run_flask_server():
|
||||
app.run(host='0.0.0.0', port=porta, threaded=True, debug=False)
|
||||
|
||||
@app.route('/' + url, methods=['GET'])
|
||||
def video_feed():
|
||||
conf_threshold = float(request.args.get('conf_threshold'))
|
||||
nms_threshold = float(request.args.get('nms_threshold'))
|
||||
camera_index = int(request.args.get('camera_index'))
|
||||
return Response(detect_objects(conf_threshold, nms_threshold, camera_index), mimetype='multipart/x-mixed-replace; boundary=frame')
|
||||
|
||||
|
||||
# Iniciar o servidor
|
||||
if __name__ == '__main__':
|
||||
# Cria trhead separada para informar que o script iniciou com sucesso
|
||||
mqtt_thread = threading.Thread(target=send_script_ready)
|
||||
mqtt_thread.start()
|
||||
|
||||
# Inicia o servidor Flask na thread principal
|
||||
run_flask_server()
|
||||
|
|
@ -0,0 +1,235 @@
|
|||
import geopandas as gpd
|
||||
import json
|
||||
import sys
|
||||
import folium
|
||||
import requests
|
||||
import re
|
||||
import shutil
|
||||
|
||||
def internet_disponivel():
|
||||
"""Verifica se há conexão com a internet."""
|
||||
url = 'http://www.google.com/'
|
||||
timeout = 5
|
||||
try:
|
||||
_ = requests.get(url, timeout=timeout)
|
||||
return True
|
||||
except requests.ConnectionError:
|
||||
return False
|
||||
|
||||
# Argumentos e configurações iniciais
|
||||
pathFiles = sys.argv[1]
|
||||
fileName = sys.argv[2]
|
||||
outputName = sys.argv[3]
|
||||
outputMapName = sys.argv[4]
|
||||
topico_gps = sys.argv[5]
|
||||
topico_ruas = sys.argv[6]
|
||||
topico_trajeto_dinamico = sys.argv[7]
|
||||
mapa_dados_json = sys.argv[8]
|
||||
pastaSaida = 'Python/Output/'
|
||||
|
||||
|
||||
if mapa_dados_json == "0":
|
||||
# Carregar o arquivo shapefile contendo a geometria
|
||||
input_shapefile = pathFiles + fileName + '.shp'
|
||||
data_geometry = gpd.read_file(input_shapefile)
|
||||
|
||||
# Converter o GeoDataFrame para GeoJSON e adicionar ao mapa
|
||||
geojson_data = data_geometry.to_json()
|
||||
# Calcular os limites (bounds) da geometria
|
||||
minx, miny, maxx, maxy = data_geometry.total_bounds
|
||||
center = [(miny + maxy) / 2, (minx + maxx) / 2]
|
||||
|
||||
# Salvar GEOJson
|
||||
data_geometry.to_file(pastaSaida + outputName, driver='GeoJSON')
|
||||
else:
|
||||
# Lendo os dados JSON
|
||||
with open(pathFiles + fileName + '.json', 'r', encoding='utf-8-sig') as f:
|
||||
geojson_data = json.load(f)
|
||||
# Obter os limites (bounds) dos dados GeoJSON
|
||||
bounds = folium.GeoJson(geojson_data).get_bounds()
|
||||
center = [(bounds[0][0] + bounds[1][0]) / 2, (bounds[0][1] + bounds[1][1]) / 2]
|
||||
|
||||
# Adicionando um ID sequencial a cada Feature
|
||||
for idx, feature in enumerate(geojson_data["features"]):
|
||||
# Adicionar uma propriedade 'id' para cada Feature começando do índice zero
|
||||
feature['id'] = idx
|
||||
|
||||
# Copiando o arquivo JSON para a pasta de saída
|
||||
shutil.copy(pathFiles + fileName + '.json', pastaSaida + outputName)
|
||||
|
||||
# Verificar se há conexão com a internet
|
||||
if internet_disponivel():
|
||||
m = folium.Map(location=center, zoom_start=12)
|
||||
else:
|
||||
m = folium.Map(location=center, zoom_start=12, tiles=None)
|
||||
|
||||
|
||||
folium.GeoJson(geojson_data).add_to(m)
|
||||
|
||||
# Salvar o mapa interativo em um arquivo HTML
|
||||
m.save(pastaSaida + outputMapName)
|
||||
|
||||
|
||||
# Caminho completo para o arquivo HTML gerado
|
||||
caminho_completo_html = pastaSaida + outputMapName
|
||||
|
||||
# Abrir o arquivo HTML para leitura e escrita
|
||||
with open(caminho_completo_html, 'r+') as arquivo_html:
|
||||
# Ler o conteúdo do arquivo
|
||||
conteudo_html = arquivo_html.read()
|
||||
|
||||
# Usar expressão regular para encontrar o ID do mapa
|
||||
padrao_id_mapa = re.compile(r'id="map_(.*?)"')
|
||||
resultado_busca = padrao_id_mapa.search(conteudo_html)
|
||||
|
||||
# Verificar se encontrou um ID de mapa
|
||||
if resultado_busca:
|
||||
id_mapa = 'map_' + resultado_busca.group(1)
|
||||
else:
|
||||
raise ValueError("Não foi possível encontrar o ID do mapa no arquivo HTML.")
|
||||
|
||||
# Script para desenhar o trajo percorrido no mapa
|
||||
script_marcadores_dinamicos = f"""
|
||||
<script src="folium/mqtt.min.js"></script>
|
||||
<script src="folium/leaflet.rotatedMarker.js"></script>
|
||||
<script>
|
||||
var marcadores = {{}};
|
||||
var trajetos = {{}};
|
||||
|
||||
function criarMarcador(id, coordenadas, orientacao) {{
|
||||
var marcador;
|
||||
|
||||
if (id == 1) {{
|
||||
marcador = L.marker(coordenadas, {{}}).addTo({id_mapa});
|
||||
var icon = L.AwesomeMarkers.icon(
|
||||
{{"extraClasses": "fa-rotate-0", "icon": "info-sign", "iconColor": "white", "markerColor": "red", "prefix": "glyphicon"}}
|
||||
);
|
||||
marcador.setIcon(icon);
|
||||
}}
|
||||
else {{
|
||||
var customIcon = L.icon({{
|
||||
iconUrl: 'folium/images/position_marker.png',
|
||||
iconSize: [32, 32],
|
||||
iconAnchor: [16, 16],
|
||||
popupAnchor: [0, -16]
|
||||
}});
|
||||
marcador = L.marker(coordenadas, {{ icon: customIcon }}).addTo({id_mapa});
|
||||
marcador.setRotationAngle(orientacao);
|
||||
}}
|
||||
|
||||
var popup = L.popup({{"maxWidth": "100%"}});
|
||||
var html = $(`<div id="html_${{id}}" style="width: 100.0%; height: 100.0%;">Endereco: ${{id}}</div>`)[0];
|
||||
popup.setContent(html);
|
||||
marcador.bindPopup(popup)
|
||||
|
||||
marcadores[id] = marcador;
|
||||
}}
|
||||
|
||||
function criarTrajeto(id) {{
|
||||
trajetos[id] = L.geoJson(null, {{
|
||||
style: function(feature) {{
|
||||
return {{ color: 'red' }};
|
||||
}}
|
||||
}}).addTo({id_mapa});
|
||||
}}
|
||||
|
||||
function atualizarMarcador(id, coordenadas, orientacao) {{
|
||||
var marcador = marcadores[id];
|
||||
if (marcador) {{
|
||||
marcador.setLatLng(coordenadas);
|
||||
marcador.setRotationAngle(orientacao);
|
||||
}}
|
||||
}}
|
||||
|
||||
function atualizarTrajeto(id, coordenadas) {{
|
||||
var trajeto = trajetos[id];
|
||||
if (trajeto) {{
|
||||
var feature = trajeto.toGeoJSON().features.find(f => f.id === id);
|
||||
if (feature) {{
|
||||
var ultima = [0.0, 0.0];
|
||||
if (feature.geometry.coordinates.length > 0) {{
|
||||
ultima = feature.geometry.coordinates[feature.geometry.coordinates.length - 1];
|
||||
}}
|
||||
if (!saoCoordenadasIguais(ultima, coordenadas, 0.000001)) {{
|
||||
feature.geometry.coordinates.push(coordenadas);
|
||||
trajeto.clearLayers();
|
||||
trajeto.addData(feature);
|
||||
}}
|
||||
}}
|
||||
}}
|
||||
}}
|
||||
|
||||
function saoCoordenadasIguais(coord1, coord2, tolerancia) {{
|
||||
return Math.abs(coord1[0] - coord2[0]) < tolerancia && Math.abs(coord1[1] - coord2[1]) < tolerancia;
|
||||
}}
|
||||
|
||||
function adicionarDados(id, coordenadas, orientacao, foco) {{
|
||||
if (!marcadores[id]) {{
|
||||
criarMarcador(id, coordenadas, orientacao);
|
||||
criarTrajeto(id);
|
||||
trajetos[id].addData({{
|
||||
"type": "Feature",
|
||||
"geometry": {{
|
||||
"type": "LineString",
|
||||
"coordinates": []
|
||||
}},
|
||||
"properties": {{"Dist1": 0.0, "Dist2": 0.0, "Id": id, "Length": 0.0, "Name": "Trajeto"}},
|
||||
"id": id
|
||||
}});
|
||||
}} else {{
|
||||
atualizarMarcador(id, coordenadas, orientacao);
|
||||
atualizarTrajeto(id, [coordenadas[1], coordenadas[0]]);
|
||||
}}
|
||||
if (foco) {{
|
||||
{id_mapa}.setView(coordenadas, {id_mapa}.getZoom());
|
||||
}}
|
||||
}}
|
||||
|
||||
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexao segura
|
||||
|
||||
client.on('connect', function () {{
|
||||
console.log('Conectado ao broker MQTT');
|
||||
client.subscribe('{topico_gps}', function (err) {{
|
||||
if (!err) {{
|
||||
console.log("Inscricao bem-sucedida no topico");
|
||||
}} else {{
|
||||
console.error("Falha na inscricao do topico", err);
|
||||
}}
|
||||
}});
|
||||
}});
|
||||
|
||||
client.on('message', function (topic, message) {{
|
||||
var dados = JSON.parse(message);
|
||||
if (topic === '{topico_gps}') {{
|
||||
var id = dados.id;
|
||||
var novaLatitude = dados.latitude;
|
||||
var novaLongitude = dados.longitude;
|
||||
var novaPosicao = [novaLatitude, novaLongitude];
|
||||
var orientacao = dados.orientacao;
|
||||
var foco = dados.foco;
|
||||
|
||||
adicionarDados(id, novaPosicao, orientacao, foco);
|
||||
}}
|
||||
}});
|
||||
|
||||
</script>
|
||||
"""
|
||||
|
||||
# Importar arquivos localmente
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://code.jquery.com/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/', 'folium/')
|
||||
|
||||
# Inserir o script no conteúdo HTML
|
||||
conteudo_atualizado = conteudo_html.replace('</html>', script_marcadores_dinamicos + '</html>')
|
||||
|
||||
# Agora, reabrir o arquivo para escrita e sobrescrever o conteúdo com a versão atualizada
|
||||
with open(caminho_completo_html, 'w') as arquivo_html:
|
||||
arquivo_html.write(conteudo_atualizado)
|
||||
|
|
@ -0,0 +1,456 @@
|
|||
import geopandas as gpd
|
||||
import json
|
||||
import sys
|
||||
import folium
|
||||
import requests
|
||||
import re
|
||||
import shutil
|
||||
|
||||
def internet_disponivel():
|
||||
"""Verifica se há conexão com a internet."""
|
||||
url = 'http://www.google.com/'
|
||||
timeout = 5
|
||||
try:
|
||||
_ = requests.get(url, timeout=timeout)
|
||||
return True
|
||||
except requests.ConnectionError:
|
||||
return False
|
||||
|
||||
# Argumentos e configurações iniciais
|
||||
pathFiles = sys.argv[1]
|
||||
fileName = sys.argv[2]
|
||||
outputName = sys.argv[3]
|
||||
outputMapName = sys.argv[4]
|
||||
topico_gps = sys.argv[5]
|
||||
topico_ruas = sys.argv[6]
|
||||
topico_trajeto_dinamico = sys.argv[7]
|
||||
mapa_dados_json = sys.argv[8]
|
||||
pastaSaida = 'Python/Output/'
|
||||
|
||||
|
||||
if mapa_dados_json == "0":
|
||||
# Carregar o arquivo shapefile contendo a geometria
|
||||
input_shapefile = pathFiles + fileName + '.shp'
|
||||
data_geometry = gpd.read_file(input_shapefile)
|
||||
|
||||
# Converter o GeoDataFrame para GeoJSON e adicionar ao mapa
|
||||
geojson_data = data_geometry.to_json()
|
||||
# Calcular os limites (bounds) da geometria
|
||||
minx, miny, maxx, maxy = data_geometry.total_bounds
|
||||
center = [(miny + maxy) / 2, (minx + maxx) / 2]
|
||||
|
||||
# Salvar GEOJson
|
||||
data_geometry.to_file(pastaSaida + outputName, driver='GeoJSON')
|
||||
else:
|
||||
# Lendo os dados JSON
|
||||
with open(pathFiles + fileName + '.json', 'r', encoding='utf-8-sig') as f:
|
||||
geojson_data = json.load(f)
|
||||
# Obter os limites (bounds) dos dados GeoJSON
|
||||
bounds = folium.GeoJson(geojson_data).get_bounds()
|
||||
center = [(bounds[0][0] + bounds[1][0]) / 2, (bounds[0][1] + bounds[1][1]) / 2]
|
||||
|
||||
# Adicionando um ID sequencial a cada Feature
|
||||
for idx, feature in enumerate(geojson_data["features"]):
|
||||
# Adicionar uma propriedade 'id' para cada Feature começando do índice zero
|
||||
feature['id'] = idx
|
||||
|
||||
# Copiando o arquivo JSON para a pasta de saída
|
||||
shutil.copy(pathFiles + fileName + '.json', pastaSaida + outputName)
|
||||
|
||||
# Verificar se há conexão com a internet
|
||||
if internet_disponivel():
|
||||
m = folium.Map(location=center, zoom_start=12)
|
||||
else:
|
||||
m = folium.Map(location=center, zoom_start=12, tiles=None)
|
||||
|
||||
|
||||
folium.GeoJson(geojson_data).add_to(m)
|
||||
|
||||
# Salvar o mapa interativo em um arquivo HTML
|
||||
m.save(pastaSaida + outputMapName)
|
||||
|
||||
|
||||
# Caminho completo para o arquivo HTML gerado
|
||||
caminho_completo_html = pastaSaida + outputMapName
|
||||
|
||||
# Abrir o arquivo HTML para leitura e escrita
|
||||
with open(caminho_completo_html, 'r+') as arquivo_html:
|
||||
# Ler o conteúdo do arquivo
|
||||
conteudo_html = arquivo_html.read()
|
||||
|
||||
# Usar expressão regular para encontrar o ID do mapa
|
||||
padrao_id_mapa = re.compile(r'id="map_(.*?)"')
|
||||
resultado_busca = padrao_id_mapa.search(conteudo_html)
|
||||
|
||||
# Verificar se encontrou um ID de mapa
|
||||
if resultado_busca:
|
||||
id_mapa = 'map_' + resultado_busca.group(1)
|
||||
else:
|
||||
raise ValueError("Não foi possível encontrar o ID do mapa no arquivo HTML.")
|
||||
|
||||
# Usar expressão regular para encontrar o ID da Trajetoria
|
||||
padrao_id_trajetoria = re.compile(r'var geo_json_(\w+)\s*=')
|
||||
resultado_busca_trajetoria = padrao_id_trajetoria.search(conteudo_html)
|
||||
|
||||
# Verificar se encontrou um ID de trajetória
|
||||
if resultado_busca_trajetoria:
|
||||
id_trajetoria = 'geo_json_' + resultado_busca_trajetoria.group(1)
|
||||
else:
|
||||
# Adicionar mensagem de depuração para verificar o conteúdo do arquivo HTML
|
||||
raise ValueError("Não foi possível encontrar o ID da trajetória no arquivo HTML.")
|
||||
|
||||
# Script para representar a trajetoria que o robô deve fazer até iniciar o trabalho
|
||||
script_desenha_trajetoria_dinamica = f"""
|
||||
<script>
|
||||
function trajeto_dinamico_json_onEachFeature(feature, layer) {{
|
||||
layer.on({{
|
||||
}});
|
||||
}};
|
||||
var trajeto_dinamico_json = L.geoJson(null, {{
|
||||
onEachFeature: trajeto_dinamico_json_onEachFeature,
|
||||
style: function(feature) {{
|
||||
return {{color: 'green'}};
|
||||
}}
|
||||
}}
|
||||
);
|
||||
function trajeto_dinamico_json_add (data) {{
|
||||
trajeto_dinamico_json.addData(data);
|
||||
}}
|
||||
trajeto_dinamico_json_add({{"features": []}});
|
||||
|
||||
trajeto_dinamico_json.addTo({id_mapa});
|
||||
|
||||
function adicionarGeometriaDinamica(novaGeometria) {{
|
||||
trajeto_dinamico_json.addData(novaGeometria);
|
||||
}}
|
||||
|
||||
function adicionarCoordenadaDinamica(idGeometria, coordenadas) {{
|
||||
var feature = trajeto_dinamico_json.toGeoJSON().features.find(f => f.id === idGeometria);
|
||||
if (feature) {{
|
||||
feature.geometry.coordinates = [];
|
||||
coordenadas.forEach(x => feature.geometry.coordinates.push([x.longitude, x.latitude]));
|
||||
var ft = feature;
|
||||
trajeto_dinamico_json.clearLayers();
|
||||
trajeto_dinamico_json.addData(ft);
|
||||
}} else {{
|
||||
console.log("Feature com ID " + idGeometria + " nao encontrada.");
|
||||
}}
|
||||
}}
|
||||
|
||||
adicionarGeometriaDinamica({{
|
||||
"type": "Feature",
|
||||
"geometry": {{
|
||||
"type": "LineString",
|
||||
"coordinates": []
|
||||
}},
|
||||
"properties": {{"Dist1": 0.0, "Dist2": 0.0, "Id": 1517, "Length": 21.724783283, "Name": "Projeto"}},
|
||||
"id": "TjD"
|
||||
}});
|
||||
|
||||
</script>
|
||||
"""
|
||||
|
||||
# Script para desenhar o trajo percorrido no mapa
|
||||
script_desenha_trajeotria = f"""
|
||||
<script>
|
||||
function trajeto_json_onEachFeature(feature, layer) {{
|
||||
layer.on({{
|
||||
}});
|
||||
}};
|
||||
var trajeto_json = L.geoJson(null, {{
|
||||
onEachFeature: trajeto_json_onEachFeature,
|
||||
style: function(feature) {{
|
||||
return {{color: 'red'}};
|
||||
}}
|
||||
}}
|
||||
);
|
||||
function trajeto_json_add (data) {{
|
||||
trajeto_json.addData(data);
|
||||
}}
|
||||
trajeto_json_add({{"features": []}});
|
||||
|
||||
trajeto_json.addTo({id_mapa});
|
||||
|
||||
function adicionarGeometria(novaGeometria) {{
|
||||
trajeto_json.addData(novaGeometria);
|
||||
}}
|
||||
|
||||
function saoCoordenadasIguais(coord1, coord2, tolerancia) {{
|
||||
return Math.abs(coord1[0] - coord2[0]) < tolerancia && Math.abs(coord1[1] - coord2[1]) < tolerancia;
|
||||
}}
|
||||
|
||||
function adicionarCoordenada(idGeometria, novaCoordenada) {{
|
||||
var feature = trajeto_json.toGeoJSON().features.find(f => f.id === idGeometria);
|
||||
if (feature) {{
|
||||
var ultima = [0.0,0.0];
|
||||
if (feature.geometry.coordinates.length > 0) {{
|
||||
ultima = feature.geometry.coordinates[feature.geometry.coordinates.length - 1];
|
||||
}}
|
||||
if (!saoCoordenadasIguais(ultima, novaCoordenada, 0.000001)) {{
|
||||
feature.geometry.coordinates.push(novaCoordenada);
|
||||
var ft = feature;
|
||||
trajeto_json.clearLayers();
|
||||
trajeto_json.addData(ft);
|
||||
}}
|
||||
|
||||
}} else {{
|
||||
console.log("Feature com ID " + idGeometria + " não encontrada.");
|
||||
}}
|
||||
}}
|
||||
|
||||
adicionarGeometria({{
|
||||
"type": "Feature",
|
||||
"geometry": {{
|
||||
"type": "LineString",
|
||||
"coordinates": []
|
||||
}},
|
||||
"properties": {{"Dist1": 0.0, "Dist2": 0.0, "Id": 1517, "Length": 21.724783283, "Name": "Projeto"}},
|
||||
"id": "Tj"
|
||||
}});
|
||||
|
||||
</script>
|
||||
"""
|
||||
|
||||
# Script JavaScript para adicionar ao HTML, com o ID do mapa substituído
|
||||
script_atualizacao_marcador = f"""
|
||||
<script src="folium/mqtt.min.js"></script>
|
||||
<script src="folium/leaflet.rotatedMarker.js"></script>
|
||||
<script>
|
||||
let posicaoAtualEquipamento = {{
|
||||
lat: 0,
|
||||
long: 0
|
||||
}};
|
||||
|
||||
let posicaoAtualBase = {{
|
||||
lat: 0,
|
||||
long: 0
|
||||
}};
|
||||
|
||||
var customIcon = L.icon({{
|
||||
iconUrl: 'folium/images/position_marker.png',
|
||||
iconSize: [32, 32],
|
||||
iconAnchor: [16, 16],
|
||||
popupAnchor: [0, -16]
|
||||
}});
|
||||
|
||||
var marcadorEquipamento = L.marker([0, 0], {{
|
||||
icon: customIcon
|
||||
}}).addTo({id_mapa});
|
||||
|
||||
var marcadorBase = L.marker([0, 0], {{}}).addTo({id_mapa});
|
||||
var icon = L.AwesomeMarkers.icon(
|
||||
{{"extraClasses": "fa-rotate-0", "icon": "info-sign", "iconColor": "white", "markerColor": "red", "prefix": "glyphicon"}}
|
||||
);
|
||||
marcadorBase.setIcon(icon);
|
||||
|
||||
// Conectar ao broker MQTT
|
||||
const client = mqtt.connect('ws://localhost:9001'); // Use wss para conexão segura
|
||||
|
||||
// Quando conectado, inscreva-se no tópico desejado
|
||||
client.on('connect', function () {{
|
||||
console.log('Conectado ao broker MQTT');
|
||||
|
||||
// Inscrever-se no tópico
|
||||
client.subscribe('{topico_gps}', function (err) {{
|
||||
if (!err) {{
|
||||
console.log("Inscricao bem-sucedida no topico");
|
||||
}} else {{
|
||||
console.error("Falha na inscricao do topico", err);
|
||||
}}
|
||||
}});
|
||||
client.subscribe('{topico_trajeto_dinamico}', function (err) {{
|
||||
if (!err) {{
|
||||
console.log("Inscricao bem-sucedida no topico");
|
||||
}} else {{
|
||||
console.error("Falha na inscricao do topico", err);
|
||||
}}
|
||||
}});
|
||||
client.subscribe('{topico_ruas}', function (err) {{
|
||||
if (!err) {{
|
||||
console.log("Inscricao bem-sucedida no topico");
|
||||
}} else {{
|
||||
console.error("Falha na inscricao do topico", err);
|
||||
}}
|
||||
}});
|
||||
}});
|
||||
|
||||
// Lidar com mensagens recebidas para o topico inscrito
|
||||
client.on('message', function (topic, message) {{
|
||||
var dados = JSON.parse(message);
|
||||
if (topic === "{topico_trajeto_dinamico}") {{
|
||||
adicionarCoordenadaDinamica("TjD", dados); // "Tj" é o ID da feature no GeoJSON
|
||||
}}
|
||||
else if (topic === "{topico_gps}") {{
|
||||
// A mensagem e um Buffer, converta para string ou objeto conforme necessario
|
||||
//console.log(`Mensagem recebida no topico '${{topic}}': ${{message.toString()}}`);
|
||||
|
||||
var id = dados.id;
|
||||
var novaLatitude = dados.latitude;
|
||||
var novaLongitude = dados.longitude;
|
||||
var novaPosicao = [novaLatitude, novaLongitude];
|
||||
var orientacao = dados.orientacao;
|
||||
var foco = dados.foco;
|
||||
|
||||
if (id == 1) {{
|
||||
marcadorBase.setLatLng(novaPosicao);
|
||||
|
||||
// Calcular angulo de rotacao
|
||||
var angulo = dados.orientacao;
|
||||
|
||||
posicaoAtualBase.lat = novaPosicao[0];
|
||||
posicaoAtualBase.long = novaPosicao[1];
|
||||
|
||||
// Rotacionar o marcador para o angulo calculado
|
||||
marcadorBase.setRotationAngle(angulo);
|
||||
}}
|
||||
else {{
|
||||
marcadorEquipamento.setLatLng(novaPosicao);
|
||||
|
||||
// Calcular angulo de rotacao
|
||||
var angulo = dados.orientacao;
|
||||
|
||||
posicaoAtualEquipamento.lat = novaPosicao[0];
|
||||
posicaoAtualEquipamento.long = novaPosicao[1];
|
||||
|
||||
// Rotacionar o marcador para o angulo calculado
|
||||
marcadorEquipamento.setRotationAngle(angulo);
|
||||
|
||||
adicionarCoordenada("Tj", [novaLongitude, novaLatitude]);
|
||||
}}
|
||||
|
||||
if (foco) {{
|
||||
{id_mapa}.setView(novaPosicao, {id_mapa}.getZoom());
|
||||
}}
|
||||
|
||||
}}
|
||||
else if (topic === '{topico_ruas}') {{
|
||||
var selecionadas = dados;
|
||||
if (selecionadas.length != RuasSelecionadas.length) {{
|
||||
atualizarSelecaoRuas(selecionadas);
|
||||
}}
|
||||
}}
|
||||
|
||||
}});
|
||||
|
||||
// Função para atualizar a seleção das ruas e mudar a cor no mapa
|
||||
function atualizarSelecaoRuas(selecionadas) {{
|
||||
selecionadas = JSON.parse(selecionadas);
|
||||
RuasSelecionadas = Array.isArray(selecionadas) ? [...selecionadas] : [];
|
||||
{id_trajetoria}.eachLayer(function (layer) {{
|
||||
if (RuasSelecionadas.includes(parseInt(layer.feature.id))) {{
|
||||
layer.setStyle({{ color: 'blue' }});
|
||||
}} else {{
|
||||
layer.setStyle({{ color: '#3388ff' }}); // Cor original
|
||||
}}
|
||||
}});
|
||||
}}
|
||||
|
||||
function calcularOrientacao(P1latitude, P1longitude, P2latitude, P2longitude) {{
|
||||
// Converter latitudes e longitudes de graus para radianos
|
||||
const latA = P1latitude * (Math.PI / 180.0);
|
||||
const lonA = P1longitude * (Math.PI / 180.0);
|
||||
const latB = P2latitude * (Math.PI / 180.0);
|
||||
const lonB = P2longitude * (Math.PI / 180.0);
|
||||
|
||||
// Calcular a diferença de longitude
|
||||
const deltaLon = lonB - lonA;
|
||||
|
||||
// Calcular a direção
|
||||
const y = Math.sin(deltaLon) * Math.cos(latB);
|
||||
const x = Math.cos(latA) * Math.sin(latB) - Math.sin(latA) * Math.cos(latB) * Math.cos(deltaLon);
|
||||
const direcaoRadianos = Math.atan2(y, x);
|
||||
|
||||
// Converter a direção de radianos para graus
|
||||
let direcaoGraus = direcaoRadianos * (180.0 / Math.PI);
|
||||
|
||||
// Normalizar a direção para que esteja no intervalo de 0 a 360 graus
|
||||
direcaoGraus = (direcaoGraus + 360) % 360;
|
||||
|
||||
return direcaoGraus;
|
||||
}}
|
||||
|
||||
</script>
|
||||
"""
|
||||
|
||||
# Primeiro, vamos definir o novo trecho de JavaScript que você quer adicionar
|
||||
funcao_define_ruas_selecionadas = f"""
|
||||
var trajetosSelecionados = {{}};
|
||||
var RuasSelecionadas = [];
|
||||
function enviarSelecaoParaServidor() {{
|
||||
client.publish("{topico_ruas}", JSON.stringify(RuasSelecionadas), function (err) {{
|
||||
/*if (!err) {{
|
||||
console.log("Mensagem publicada com sucesso");
|
||||
}} else {{
|
||||
console.error("Falha ao publicar mensagem", err);
|
||||
}}*/
|
||||
}});
|
||||
}}
|
||||
"""
|
||||
|
||||
# Código para inserir dentro do layer.on({})
|
||||
codigo_layer_on = """
|
||||
click: function(e) {
|
||||
// Verificar se o trajeto já está selecionado
|
||||
if (trajetosSelecionados[feature.id]) {
|
||||
// Se já está selecionado, reverta para a cor original e remova da seleção
|
||||
e.target.setStyle({
|
||||
color: '#3388ff' // Cor original
|
||||
});
|
||||
delete trajetosSelecionados[feature.id];
|
||||
RuasSelecionadas.splice(RuasSelecionadas.indexOf(feature.id), 1);
|
||||
} else {
|
||||
// Se não está selecionado, mude a cor para indicar seleção e adicione ao objeto de seleção
|
||||
e.target.setStyle({
|
||||
color: 'blue' // Cor de seleção
|
||||
});
|
||||
trajetosSelecionados[feature.id] = true;
|
||||
RuasSelecionadas.push(feature.id);
|
||||
}
|
||||
enviarSelecaoParaServidor();
|
||||
}/*, mouseover: function(e) {
|
||||
// Mostrar tooltip com o ID da geometria quando o mouse passar sobre a linha
|
||||
var tooltip = L.tooltip({
|
||||
direction: 'auto', // Leaflet determina a melhor posição
|
||||
sticky: true // Faz com que o tooltip siga o cursor do mouse
|
||||
})
|
||||
.setContent('Rua ' + feature.id); // Define o conteúdo do tooltip
|
||||
|
||||
// Abre o tooltip na posição atual do mouse
|
||||
var latLng = e.latlng;
|
||||
tooltip.setLatLng(latLng);
|
||||
layer.bindTooltip(tooltip).openTooltip(latLng);
|
||||
}*/
|
||||
"""
|
||||
|
||||
# Importar arquivos localmente
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://code.jquery.com/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/', 'folium/')
|
||||
conteudo_html = conteudo_html.replace('https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/', 'folium/')
|
||||
|
||||
# Inserir o script no conteúdo HTML
|
||||
conteudo_atualizado = conteudo_html.replace('</html>', script_desenha_trajeotria + script_desenha_trajetoria_dinamica + script_atualizacao_marcador + '</html>')
|
||||
# Encontrar a posição onde inserir o novo trecho de JavaScript
|
||||
indice_inicio_funcao = conteudo_atualizado.find("function geo_json_")
|
||||
# Inserir o novo trecho de JavaScript antes da função
|
||||
conteudo_atualizado = conteudo_atualizado[:indice_inicio_funcao] + funcao_define_ruas_selecionadas + conteudo_atualizado[indice_inicio_funcao:]
|
||||
# Agora, para adicionar o código dentro do layer.on({})
|
||||
# Você precisa encontrar o local exato. Isso pode ser um pouco mais complicado, pois pode haver várias ocorrências.
|
||||
# Uma abordagem seria encontrar a primeira ocorrência após o seu trecho inserido anteriormente.
|
||||
indice_layer_on = conteudo_atualizado.find("layer.on({", indice_inicio_funcao)
|
||||
# Verificar se encontrou o layer.on({})
|
||||
if indice_layer_on != -1:
|
||||
# Encontrar a posição do fechamento do layer.on({})
|
||||
indice_fechamento = conteudo_atualizado.find("});", indice_layer_on) # +1 para incluir a abertura da chave
|
||||
# Inserir o código dentro do layer.on({})
|
||||
conteudo_atualizado = conteudo_atualizado[:indice_fechamento] + codigo_layer_on + conteudo_atualizado[indice_fechamento:]
|
||||
|
||||
# Agora, reabrir o arquivo para escrita e sobrescrever o conteúdo com a versão atualizada
|
||||
with open(caminho_completo_html, 'w') as arquivo_html:
|
||||
arquivo_html.write(conteudo_atualizado)
|
||||
|
|
@ -0,0 +1,191 @@
|
|||
import torch
|
||||
from PIL import Image
|
||||
import torchvision.transforms as T
|
||||
import numpy as np
|
||||
import cv2
|
||||
import json
|
||||
import time
|
||||
import io
|
||||
import paho.mqtt.client as mqtt
|
||||
import uuid
|
||||
import sys
|
||||
import os
|
||||
import base64
|
||||
|
||||
# Parâmetros de entrada
|
||||
output_folder = 'Python/Output/'
|
||||
mqtt_send_topic = sys.argv[1] # Tópico para receber o bitmap
|
||||
mqtt_receive_topic = sys.argv[2] # Tópico para enviar o resultado
|
||||
model_folder = sys.argv[3] # Pasta do modelo
|
||||
script_version = sys.argv[4] # Versao do script
|
||||
|
||||
# Configurações MQTT
|
||||
mqtt_client = mqtt.Client(f"client_street_detector_{uuid.uuid4()}")
|
||||
mqtt_client.connect("localhost", port=1883)
|
||||
|
||||
script_dir = os.path.dirname(__file__) # Obtém o diretório onde o script está localizado
|
||||
parent_dir = os.path.dirname(script_dir) # Obtém o diretório pai (Python/)
|
||||
sys.path.append(parent_dir)
|
||||
|
||||
# Supondo que você tenha a estrutura do repositório e o módulo `network` conforme descrito no README
|
||||
from Models.deeplabv3plus.modeling import deeplabv3plus_resnet50 as deeplabv3_model
|
||||
|
||||
# Configurações Iniciais
|
||||
NUM_CLASSES = 4 # Pascal VOC possui 3 classes + 1 para o fundo
|
||||
OUTPUT_STRIDE = 16 # Valor comum para DeepLab
|
||||
MODEL_PATH = model_folder + "model-" + script_version + '.pth' # Caminho para o modelo pré-treinado
|
||||
|
||||
# Variáveis globais para armazenar os dados do labelmap
|
||||
label_colors = None
|
||||
class_names = None
|
||||
|
||||
# Função para carregar o modelo
|
||||
def load_model(model_path):
|
||||
model = deeplabv3_model(num_classes=NUM_CLASSES, output_stride=OUTPUT_STRIDE)
|
||||
model.load_state_dict(torch.load(model_path), strict=False)
|
||||
model.eval() # Modo de avaliação
|
||||
return model
|
||||
|
||||
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
||||
# Carregar o modelo
|
||||
model = load_model(MODEL_PATH)
|
||||
model.to(device)
|
||||
|
||||
# Função para processar o frame
|
||||
def segment_frame(frame):
|
||||
image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
|
||||
transform = T.Compose([
|
||||
T.Resize(520),
|
||||
T.ToTensor(),
|
||||
T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
|
||||
])
|
||||
|
||||
input_tensor = transform(image).unsqueeze(0).to(device)
|
||||
with torch.no_grad():
|
||||
output = model(input_tensor)
|
||||
output_predictions = output.max(1)[1].squeeze().detach().cpu().numpy()
|
||||
|
||||
return output_predictions
|
||||
|
||||
# Função para ler o mapa de rótulos
|
||||
def read_labelmap(path):
|
||||
global label_colors, class_names
|
||||
if label_colors is None or class_names is None: # Verifica se já estão carregados
|
||||
label_colors = []
|
||||
class_names = []
|
||||
with open(path, 'r') as file:
|
||||
for line in file.readlines():
|
||||
if line.startswith('#'):
|
||||
continue
|
||||
parts = line.strip().split(':')
|
||||
if len(parts) >= 2:
|
||||
label = parts[0].strip()
|
||||
color = tuple(map(int, parts[1].split(',')))
|
||||
class_names.append(label)
|
||||
label_colors.append(color)
|
||||
label_colors = np.array(label_colors)
|
||||
return label_colors, class_names
|
||||
|
||||
# Função para gerar o JSON de saída
|
||||
def generate_json(image):
|
||||
label_colors, class_names = read_labelmap(model_folder + "labelmap-" + script_version + ".txt")
|
||||
detected_classes = set(np.unique(image))
|
||||
|
||||
timestamp = time.time()
|
||||
json_data = {'timestamp': timestamp, 'Classes': []}
|
||||
for l in detected_classes:
|
||||
if l < len(label_colors):
|
||||
class_entry = {'Classe': class_names[l], 'Contornos': []}
|
||||
mask = (image == l).astype(np.uint8) * 255
|
||||
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
||||
for contour in contours:
|
||||
if contour.size > 0:
|
||||
for point in contour:
|
||||
class_entry['Contornos'].append(point.squeeze().tolist())
|
||||
json_data['Classes'].append(class_entry)
|
||||
|
||||
return json_data
|
||||
|
||||
# Função para aplicar o overlay da segmentação no frame original
|
||||
def apply_segmentation_overlay(frame, output_predictions):
|
||||
label_colors, class_names = read_labelmap(model_folder + "labelmap-" + script_version + ".txt")
|
||||
nc = len(label_colors)
|
||||
|
||||
height, width, _ = frame.shape
|
||||
overlay = np.zeros((height, width, 3), dtype=np.uint8)
|
||||
|
||||
output_predictions_resized = cv2.resize(output_predictions, (width, height), interpolation=cv2.INTER_NEAREST)
|
||||
|
||||
for l in np.unique(output_predictions_resized):
|
||||
if l < nc:
|
||||
mask = output_predictions_resized == l
|
||||
overlay[mask] = label_colors[l]
|
||||
|
||||
overlayed_frame = cv2.addWeighted(frame, 0.6, overlay, 0.4, 0)
|
||||
|
||||
return overlayed_frame
|
||||
|
||||
# Função para converter imagem para base64
|
||||
def image_to_base64(image):
|
||||
_, buffer = cv2.imencode('.jpg', image)
|
||||
image_base64 = base64.b64encode(buffer).decode('utf-8')
|
||||
return image_base64
|
||||
|
||||
# Função para decodificar a imagem bitmap recebida via MQTT
|
||||
def decode_bitmap_message(payload):
|
||||
image_stream = io.BytesIO(payload)
|
||||
image = Image.open(image_stream)
|
||||
return np.array(image)
|
||||
|
||||
# Função chamada quando uma mensagem MQTT é recebida
|
||||
def on_message(client, userdata, message):
|
||||
print(f"Mensagem recebida no tópico {message.topic}")
|
||||
try:
|
||||
bitmap = decode_bitmap_message(message.payload)
|
||||
output_predictions = segment_frame(bitmap)
|
||||
|
||||
# Gerar JSON das classes detectadas
|
||||
json_data = generate_json(output_predictions)
|
||||
|
||||
# Aplicar segmentação ao bitmap
|
||||
segmented_bitmap = apply_segmentation_overlay(bitmap, output_predictions)
|
||||
|
||||
# Converter o bitmap segmentado em base64
|
||||
segmented_bitmap_base64 = image_to_base64(segmented_bitmap)
|
||||
|
||||
# Adicionar o bitmap segmentado no JSON
|
||||
json_data['segmented_image'] = segmented_bitmap_base64
|
||||
|
||||
# Enviar JSON e bitmap segmentado via MQTT
|
||||
mqtt_client.publish(mqtt_send_topic, json.dumps(json_data).encode('utf-8')) # Enviar JSON
|
||||
print(f"Segmentação processada e enviada para {mqtt_send_topic}")
|
||||
except Exception as e:
|
||||
print(f"Erro ao processar a imagem: {e}")
|
||||
|
||||
def on_connect(client, userdata, flags, rc):
|
||||
if rc == 0:
|
||||
print("Conectado ao MQTT com sucesso!")
|
||||
else:
|
||||
print(f"Falha ao conectar ao MQTT: {rc}")
|
||||
|
||||
def on_disconnect(client, userdata, rc):
|
||||
print(f"Desconectado do MQTT: {rc}")
|
||||
|
||||
# Configurações do MQTT
|
||||
mqtt_client.on_connect = on_connect
|
||||
mqtt_client.on_disconnect = on_disconnect
|
||||
mqtt_client.on_message = on_message
|
||||
mqtt_client.subscribe(mqtt_receive_topic)
|
||||
|
||||
mqtt_client.publish(mqtt_send_topic, "OK")
|
||||
|
||||
mqtt_client.loop_forever()
|
||||
|
||||
# Loop principal aguardando mensagens MQTT
|
||||
try:
|
||||
while True:
|
||||
time.sleep(1)
|
||||
except KeyboardInterrupt:
|
||||
print("Finalizando script...")
|
||||
finally:
|
||||
mqtt_client.loop_stop()
|
||||
|
|
@ -0,0 +1,172 @@
|
|||
import cv2
|
||||
import torch
|
||||
import time
|
||||
import threading
|
||||
import numpy as np
|
||||
from numpy import random
|
||||
import sys
|
||||
import os
|
||||
from flask import Flask, Response, request
|
||||
import json
|
||||
|
||||
models_path = os.path.join(os.path.dirname(__file__), '..', 'Models/yolov7')
|
||||
sys.path.append(models_path)
|
||||
|
||||
from models.experimental import attempt_load
|
||||
from utils.general import non_max_suppression, scale_coords, check_img_size
|
||||
from utils.torch_utils import select_device, time_synchronized
|
||||
from utils.datasets import letterbox
|
||||
from utils.plots import plot_one_box
|
||||
|
||||
import uuid
|
||||
import paho.mqtt.client as mqtt
|
||||
mqtt_client = mqtt.Client(f"client_weed_detector_{uuid.uuid4()}")
|
||||
mqtt_client.connect("localhost", port=1883)
|
||||
|
||||
# Outras configurações
|
||||
json_data = None
|
||||
output_folder = 'Python/Output/'
|
||||
max_readings = int(sys.argv[1])
|
||||
porta = sys.argv[2]
|
||||
url = sys.argv[3]
|
||||
arquivoSaida = sys.argv[4]
|
||||
mostrar_linhas = sys.argv[5] == "1"
|
||||
mqtt_topic = sys.argv[6]
|
||||
model_folder = sys.argv[7]
|
||||
script_version = sys.argv[8]
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
def detect(weights, _camera_index, img_size=512, conf_thres=0.25, iou_thres=0.45):
|
||||
with torch.no_grad():
|
||||
# Initialize
|
||||
device = select_device('')
|
||||
half = device.type != 'cpu' # half precision only supported on CUDA
|
||||
|
||||
# Load model
|
||||
model = attempt_load(weights, map_location=device) # load FP32 model
|
||||
model.eval()
|
||||
stride = int(model.stride.max()) # model stride
|
||||
imgsz = check_img_size(img_size, s=stride) # check img_size
|
||||
if half:
|
||||
model.half() # to FP16
|
||||
|
||||
# Open camera
|
||||
cap = cv2.VideoCapture(_camera_index) # 0 for the first webcam device
|
||||
#cap.set(3, 640) # set video width
|
||||
#cap.set(4, 480) # set video height
|
||||
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
|
||||
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
|
||||
readings = []
|
||||
|
||||
while True:
|
||||
ret, frame = cap.read()
|
||||
if not ret:
|
||||
break
|
||||
|
||||
# Padded resize
|
||||
img = letterbox(frame, imgsz, stride=stride)[0]
|
||||
|
||||
# Convert
|
||||
img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416
|
||||
img = np.ascontiguousarray(img)
|
||||
|
||||
img = torch.from_numpy(img).to(device)
|
||||
img = img.half() if half else img.float() # uint8 to fp16/32
|
||||
img /= 255.0 # 0 - 255 to 0.0 - 1.0
|
||||
if img.ndimension() == 3:
|
||||
img = img.unsqueeze(0)
|
||||
|
||||
# Inference
|
||||
t1 = time_synchronized()
|
||||
pred = model(img, augment=False)[0]
|
||||
t2 = time_synchronized()
|
||||
|
||||
# Apply NMS
|
||||
pred = non_max_suppression(pred, conf_thres, iou_thres, classes=None, agnostic=False)
|
||||
|
||||
current_readings = []
|
||||
# Process detections
|
||||
for i, det in enumerate(pred): # detections per frame
|
||||
if len(det):
|
||||
# Rescale boxes from img_size to frame size
|
||||
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], frame.shape).round()
|
||||
|
||||
# Print results and draw boxes
|
||||
for *xyxy, conf, cls in reversed(det):
|
||||
x1, y1, x2, y2 = xyxy
|
||||
x = int(x1)
|
||||
y = int(y1)
|
||||
w = int(x2 - x1)
|
||||
h = int(y2 - y1)
|
||||
class_id = int(cls)
|
||||
confidence = float(conf)
|
||||
|
||||
detection_info = {
|
||||
'id': class_id,
|
||||
'descricao': model.module.names[class_id] if hasattr(model, 'module') else model.names[class_id],
|
||||
'x': x,
|
||||
'y': y,
|
||||
'largura': w,
|
||||
'altura': h,
|
||||
'confianca': confidence
|
||||
}
|
||||
current_readings.append(detection_info)
|
||||
|
||||
if mostrar_linhas:
|
||||
label = f'{model.names[class_id]} {confidence:.2f}'
|
||||
plot_one_box(xyxy, frame, label=label, color=[random.randint(0, 255) for _ in range(3)], line_thickness=3)
|
||||
|
||||
# Após a detecção:
|
||||
del img # Delete the image tensor to free up memory
|
||||
#if device.type == 'cuda':
|
||||
# torch.cuda.empty_cache() # Clear CUDA cache
|
||||
#gc.collect() # Run garbage collection
|
||||
|
||||
global json_data
|
||||
timestamp = time.time()
|
||||
json_data = {'timestamp': timestamp, 'x_max': width, 'y_max': height, 'objetos': current_readings}
|
||||
readings.append(json_data)
|
||||
|
||||
# Verifica se atingiu o limite do buffer
|
||||
if len(readings) >= max_readings:
|
||||
# Escolhe a mensagem mais relevante
|
||||
mensagem_relevante = max(readings, key=lambda m: len(m['objetos']), default=None)
|
||||
if not mensagem_relevante:
|
||||
mensagem_relevante = readings[0] # Envia qualquer mensagem se não houver dados
|
||||
|
||||
mqtt_client.publish(mqtt_topic, json.dumps(mensagem_relevante).encode('utf-8'))
|
||||
readings.clear() # Limpa o buffer após o envio
|
||||
|
||||
ret, buffer = cv2.imencode('.jpg', frame)
|
||||
frame = buffer.tobytes()
|
||||
yield (b'--frame\r\n'
|
||||
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')
|
||||
|
||||
|
||||
|
||||
# Esta função é para confirmar que script está pronto para execução
|
||||
def send_script_ready():
|
||||
mqtt_client.publish(mqtt_topic, "OK")
|
||||
|
||||
# Iniciar o servidor Flask em uma thread separada
|
||||
def run_flask_server():
|
||||
app.run(host='0.0.0.0', port=porta, threaded=True, debug=False)
|
||||
|
||||
@app.route('/' + url, methods=['GET'])
|
||||
def video_feed():
|
||||
weights_path = model_folder + 'model-' + script_version + '.pt'
|
||||
conf_threshold = float(request.args.get('conf_threshold'))
|
||||
nms_threshold = float(request.args.get('nms_threshold'))
|
||||
camera_index = int(request.args.get('camera_index'))
|
||||
return Response(detect(weights_path, camera_index, 512), mimetype='multipart/x-mixed-replace; boundary=frame')
|
||||
|
||||
|
||||
# Iniciar o servidor
|
||||
if __name__ == '__main__':
|
||||
# Cria trhead separada para informar que o script iniciou com sucesso
|
||||
mqtt_thread = threading.Thread(target=send_script_ready)
|
||||
mqtt_thread.start()
|
||||
|
||||
# Inicia o servidor Flask na thread principal
|
||||
run_flask_server()
|
||||
Binary file not shown.
|
|
@ -185,7 +185,6 @@ C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\OpenTK.GLControl.xml
|
|||
C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\OpenTK.xml
|
||||
C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\obj\Debug\AgroMonitor.Forms.frmAjustesOperacao.resources
|
||||
C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\obj\Debug\AgroMonitor.Forms.frmMonitoramento.resources
|
||||
C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\obj\Debug\AgroMonitor.csproj.CopyComplete
|
||||
C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\dll\x86\OpenCvSharpExtern.dll
|
||||
C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\dll\x86\opencv_videoio_ffmpeg4100.dll
|
||||
C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\dll\x64\OpenCvSharpExtern.dll
|
||||
|
|
@ -208,3 +207,4 @@ C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\x86\msvcp140_codecvt_i
|
|||
C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\x86\opencv_videoio_ffmpeg440.dll
|
||||
C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\x86\vcruntime140.dll
|
||||
C:\ZendionInc\agrobot_base\AgroBase\AgroMonitor\bin\Debug\OpenHardwareMonitorLib.dll
|
||||
C:\ZendionINC\agrobot_base\AgroBase\AgroMonitor\obj\Debug\AgroMoni.D419EBC3.Up2Date
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue