Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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]

  1. Apenas o parâmetro host é OBRIGATÓRIO;
  2. O limit só será aplicado se os parâmetros date e marte não forem especificados, definindo quantos registros de telemetria serão processados por execução;
  3. 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);
  4. 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]

  1. Ao reprocessar registros de telemetria os dados atuais dessa data serão excluídos/sobrescrito;
  2. 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 e TALHAO_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.