Processo de Compilação de Dados de Telemetria
Nesse processos os dados de Telemetria são compilados e armazenados na tabela app_marte_telemetry_report, que é criada para os clientes que possuem a propriedade MARTE_ENABLED=1, porém é necessário executar o processo descrito no item Linha de Comando para o devido preenchimento e compilação dos dados para a tabela.
Junto com esse processo será gerado também um resumo diário do dispositivo marte. Este resumo será armazenado na tabela app_marte_telemetry_summary.
[!NOTE] Nesse processo os dados de Telemetria são cruzados com os dados de posicionamento registrados na tabela app_marte_report_pos.
Linha de Comando
Para executar a compilação usa-se a seguinte linha de comando:
$ php marte/nfs_marte_daily.php --host=<host-do-cliente>
[--date=dd/mm/YYYY]
[--marte=<MARTE_SEQ_DB>]
[--geom=0||1]
[--limit=200]
[--debug=0||1]
Onde:
string host = cliente.simova.cloud
: subdomínio do cliente;string date = dd/mm/YYYY
: data do arquivo de telemetria a processar;int marte = SEQ_DB
: SEQ_DB do dispositivo Marte, caso queira processar apenas os dados de um dispositivo;int geom = 0 || 1
: se os dados de geolocalização GIS/GEOM devem ser processados durante a compilação dos dados (padrão=0
);int limit = 200 || N
: Número de registros de telemetria que serão processados por execução (padrão=200
);int debug = 0 || 1
: exibir mais informações no (terminal/log) da execução do processo (padrão=0
).
[!IMPORTANT]
- Apenas o parâmetro host é OBRIGATÓRIO;
- O limit só será aplicado se os parâmetros
date
emarte
não forem especificados, definindo quantos registros de telemetria serão processados por execução;- Se date for especificado processará apenas registros da data definida, do contrário serão processados os N Registros de Telemetria, definidos no limit, com status
PROC_ST=0
(não processado);- O uso da opção geom requer mais definições (Processos de Geolocalização GIS/GEOM) para processar os dados de Geolocalização GIS/GEOM;
[!TIP]
- Ao reprocessar registros de telemetria os dados atuais dessa data serão excluídos/sobrescrito;
- Para reprocessar basta executar especificando o parâmetro date da telemetria desejada.
Agendamento CRON:
0 6,15,23 * * * php /home/ubuntu/bitbucket-deploy/nfs/marte/nfs_marte_daily.php --host=suzanosa.simova.cloud --geom=1 --debug=1 >> /home/ubuntu/log-marte-suzanosa-daily.txt
[!TIP]
Os agendamentos atuais registram o resultado no arquivo de log especificado; este arquivo deve ser removido manualmente para preservar espaço em disco.
Cálculos Automáticos do Marte
Atualmente são previstos cálculos durante o processo de compilação, sendo eles Cálculo de Produção e Cálculo de Distância Percorridas, ambos em apontamentos produtivos.
Para isso, faz-se necessário o parâmetro MARTE_CALCULO:
{
"KM": {
// PRODUCAO ou KM
"ENTIDADE": "EQP", // nome da tabela da entidade equipamento
"BOLETIM": {
// referências do boletim (atualmente não usada)
"TABLE": "EQP_BOLETIM",
"FLAG": "FLAG_KM_PROCESSADO"
},
"APONTAMENTO": {
// referências do apontamento
"TABLE": "EQP_APT", // nome da tabela de apontamento
"FIELD": "MEDICAO_KM", // coluna na tabela de apontamentos para registrar o resultado do cálculo
"TABLE_OPER": "OPER", // nome da tabela de operações do relacionamento com apontamentos
"TABLE_OPER_FLAG": "FLAG_PRODUTIVA" // flag na tabela de operações que registra produtividade (0 || 1)
}
}
}
[!IMPORTANT]
Composição do Cálculo de Produção
- Variáveis usadas no Cálculo de Produção:
$larguraFaixa = 0 || `Coluna LARGURA_FAIXA do Apontamento`; $qtdLinha = 0 || `Coluna QTDE_LINHA do Apontamento`; $faixaTrabalho = $larguraFaixa \* $qtdLinha; # 10.000 metros quadrados => Hectare $metrosLineares = 10000 / (1 || $faixaTrabalho);
- Cálculo Efetivo:
$distancia = GisUtils::getDistanceInMeters($lastLat, $lastLon, $latitude, $longitude); // calcula area $area = $distancia \* $faixaTrabalho; // calcular producao $producal = $distancia / $metrosLineares;
Estrutura da Tabela app_marte_telemetry_report
CREATE TABLE `app_marte_telemetry_report` (
-- colunas padrão do NFS para tabelas APP
`MARTE_SEQ_DB` bigint(20) unsigned NOT NULL, -- SEQ_DB do dispositivo MARTE
`DEVICE_NUM` int(11) DEFAULT NULL, -- Número do dispositivo
`VEICULO_EQUIPAMENTO_SEQ_DB` bigint(20) unsigned DEFAULT NULL, -- SEQ_DB do equipamento
`REFERENCE_SEQ_DB` bigint(20) unsigned NOT NULL, -- referência usada no processo
`EVT_DH` timestamp NOT NULL, -- DH do evento MARTE
`IGN_ON` tinyint(1) unsigned DEFAULT NULL, -- Ignição OFF || ON (0 || 1)
`ENGINE_ON` tinyint(1) unsigned DEFAULT NULL, -- Morto OFF || ON (0 || 1)
`RPM` smallint(5) unsigned DEFAULT NULL, -- RPM
`SPEED` smallint(5) DEFAULT NULL, -- Velocidade
`WORKSTATE` tinyint(1) unsigned DEFAULT NULL, -- WORKSTATE
`HR_IGN` int(4) unsigned DEFAULT NULL, -- Horímetro ignição total
`HR_MOTOR` int(4) unsigned DEFAULT NULL, -- Horímetro motor total
`HR_AUX1` int(4) unsigned DEFAULT NULL, -- Horímetro AUX 1
`HR_AUX2` int(4) unsigned DEFAULT NULL, -- Horímetro AUX 2
`ODOMETRO_TRIP` decimal(10,2) DEFAULT NULL, -- Odômetro Viagem
`ODOMETRO_TOTAL` decimal(10,2) DEFAULT NULL, -- Odômetro Total
`ALTITUDE` smallint(5) DEFAULT NULL, -- Altitude registrada
`TIL_SEC` int(4) unsigned DEFAULT NULL, -- Tempo de ignição em segundos
`TED_SEC` int(4) unsigned DEFAULT NULL, -- Tempo em movimento em segundos
`AUX_CT21` int(4) unsigned DEFAULT NULL, --
`GPS_SPEED` smallint(5) unsigned DEFAULT NULL, -- Velocidade GPS
`CAN_SPEED` smallint(5) unsigned DEFAULT NULL, -- Velocidade CAN
`CAN_RPM` smallint(5) unsigned DEFAULT NULL, -- RPM CAN
`CAN_TEMPERATURE` smallint(5) DEFAULT NULL, -- Temperatura CAN
`CAN_HORIMETER` int(4) unsigned DEFAULT NULL, -- Horímetro CAN
`CAN_ODOMETER` int(4) unsigned DEFAULT NULL, -- Odômetro CAN
`CAN_ECONOMY` int(4) unsigned DEFAULT NULL, -- Economia CAN
`CAN_FUEL` int(4) unsigned DEFAULT NULL, -- Nível de Combustível CAN
`CAN_OIL_PRESSURE` int(4) unsigned DEFAULT NULL, -- Pressão do Óleo CAN
`CAN_CT31` int(4) unsigned DEFAULT NULL, --
`POSICAO_PLAT` decimal(12,8) DEFAULT NULL, -- Latitude registrado no evento
`POSICAO_PLON` decimal(12,8) DEFAULT NULL, -- Longitude registrada no evento
`POSICAO_GEOM` point DEFAULT NULL, -- GEOM registrado no evento
`ACCELERATION` int(4) unsigned DEFAULT NULL, -- Aceleração
`IND_IN_E0` tinyint(1) unsigned DEFAULT NULL,
`IND_IN_E1` tinyint(1) unsigned DEFAULT NULL,
`IND_IN_E2` tinyint(1) unsigned DEFAULT NULL,
`IND_IN_E3` tinyint(1) unsigned DEFAULT NULL,
`IND_IN_E4` tinyint(1) unsigned DEFAULT NULL,
`IND_IN_E5` tinyint(1) unsigned DEFAULT NULL,
`MAIN_POWER` decimal(5,2) DEFAULT NULL,
`IN_HEX` varchar(2) DEFAULT NULL,
`IN_BIN` char(8) DEFAULT NULL,
`DEVICE_DH` timestamp NULL DEFAULT NULL, -- DH do dispositivo
`EVT_GMT_DH` timestamp NULL DEFAULT NULL, -- DH do evento GMT
`GIS_OBJECT_MASTER_SEQ_DB` bigint(20) unsigned DEFAULT NULL, -- Posição GIS Master
`GIS_OBJECT_SUB_MASTER_SEQ_DB` bigint(20) unsigned DEFAULT NULL, -- Posição GIS Submaster (setor)
`GIS_OBJECT_DETAIL_SEQ_DB` bigint(20) unsigned DEFAULT NULL, -- Posição GIS Detail (talhão)
`GIS_ST` tinyint(4) DEFAULT '0', -- Status do processo GIS/GEOM
`APONTAMENTO_SEQ_DB` bigint(20) unsigned DEFAULT NULL, -- Apontamento relacionado
`DISTANCIA` int(11) DEFAULT '0', -- Resultado calculado Distância
`AREA` decimal(8,4) DEFAULT '0.0000', -- Resultado calculada Área
`PRODUCAO` decimal(8,4) DEFAULT '0.0000', -- Resultado calculado Produção
/**
* índices do sistema criados pelo core
* e
* índices para otimização do processo
*/
PRIMARY KEY (`REFERENCE_SEQ_DB`,`MARTE_SEQ_DB`,`EVT_DH`),
KEY `app_marte_telemetry_report_reference_gis_st_idx` (`REFERENCE_SEQ_DB`, `GIS_ST`) USING BTREE,
KEY `app_marte_telemetry_report_gis_st_master_idx` (`GIS_ST`, `GIS_OBJECT_MASTER_SEQ_DB`) USING BTREE,
KEY `app_marte_telemetry_report_efl_veiculo_idx` (`EMPRESA`, `FILIAL`, `LOCAL`, `VEICULO_EQUIPAMENTO_SEQ_DB`, `EVT_DH`) USING BTREE,
KEY `app_marte_telemetry_report_apontamento_idx` (`APONTAMENTO_SEQ_DB`, `GIS_ST`) USING BTREE,
KEY `app_marte_telemetry_report_equipamento_gis_evt_dh` (`VEICULO_EQUIPAMENTO_SEQ_DB`, `EVT_DH`, `GIS_ST`) USING BTREE,
KEY `app_marte_telemetry_report_empresa_filial_gis` (`EMPRESA`, `FILIAL`, `GIS_ST`, `GIS_OBJECT_DETAIL_SEQ_DB`) USING BTREE,
KEY `app_marte_telemetry_report_reference_gis_position_idx` (`REFERENCE_SEQ_DB`, `GIS_ST`, `POSICAO_GEOM`(25)) USING BTREE,
KEY `app_marte_telemetry_report_empresa_idx` (`EMPRESA`, `FILIAL`, `LOCAL`, `GIS_ST`) USING BTREE,
KEY `app_marte_telemetry_report_marte_idx` (`MARTE_SEQ_DB`, `EVT_DH`) USING BTREE,
KEY `app_marte_telemetry_report_gis_st_submaster_idx` (`GIS_ST`, `GIS_OBJECT_SUB_MASTER_SEQ_DB`) USING BTREE,
KEY `app_marte_telemetry_report_gis_st_detail_idx` (`GIS_ST`, `GIS_OBJECT_DETAIL_SEQ_DB`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC;
Processos de Geolocalização GIS/GEOM
[!CAUTION]
Para a execução do Processamento de dados de Geolocalização GIS/GEOM, usado atualmente apenas no Cliente Suzano, temos as seguintes observações:
- Usa evento MySQL
ev_gis_update
na base do Cliente (para definição de posicionamento GEOM);- Colunas
TALHAO_GIS_ST
eTALHAO_GIS
na tabela de Apontamento do processo;- Tabela app_gis_object preenchida devidamente.
Estrutura da Tabela app_marte_telemetry_summary
"CREATE TABLE `app_marte_telemetry_summary` (
...
`MARTE_SEQ_DB` bigint unsigned NOT NULL, -- SEQ_DB do dispositivo Marte
`DEVICE_NUM` int DEFAULT NULL, -- Número do dispositivo
`VEICULO_EQUIPAMENTO_SEQ_DB` bigint unsigned NOT NULL, -- SEQ_DB do equipamento
`TELEMETRY_SEQ_DB` bigint unsigned NOT NULL, -- SEQ_DB do registro de telemetria
`MARTE_DATE` date NOT NULL, -- data da telemetria
`TOTAL_TIME` int unsigned DEFAULT '0', -- tempo total de rastreamento
`ENGINE_OFF_TIME` int unsigned DEFAULT '0', -- tempo total de motor desligado
`ENGINE_ON_TIME` int unsigned DEFAULT '0', -- tempo total de motor ligado
`MOVING_TIME` int unsigned DEFAULT '0', -- tempo total de deslocamento
`IDLE_TIME` int unsigned DEFAULT '0', -- tempo total de motos ocioso
`AVG_SPEED` decimal(5,2) DEFAULT '0.00', -- velocidade média durante o deslocamento
`MAX_SPEED` smallint unsigned DEFAULT '0', -- velocidade máxima registrada
`TOTAL_DISTANCE` decimal(8,2) unsigned DEFAULT '0.00', -- deslocamento total do dia
`TOTAL_AREA` decimal(8,4) unsigned DEFAULT '0.0000', -- area total de operação
`TOTAL_PRODUCAO` decimal(8,4) unsigned DEFAULT '0.0000', -- produção total do dia
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;",
[!IMPORTANT] Os cálculos de Área Total e Produção Total seguem as premissas descritas no item Cãlculos Automáticos do Marte.