Documentation?
I have a script that provides this converted data
import subprocess
import time
import re
# Comando a ser executado localmente
comando = 'sudo tail -f /opt/traccar/logs/tracker-server.log'
# Executa o comando localmente
processo = subprocess.Popen(comando.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
def calcular_soc(tensao, V_cheio=4.2, V_vazio=3.0):
soc = ((float(tensao) - V_vazio) / (V_cheio - V_vazio)) * 100
if soc > 100:
soc = 100
elif tensao < V_vazio:
soc = 0
return round(soc, 2)
def calcular_y(ADC): #CALCULO PARA TENSAO DE ENTRADA 9V
ADC = float(ADC)
y = (1.1856 * ADC**6
- 4.8729 * ADC**5
+ 51.867 * ADC**4
- 285.27 * ADC**3
+ 853.52 * ADC**2
- 1305 * ADC
+ 793.79)
return round(y, 2)
# Lê a saída do comando continuamente
try:
while True:
# Lê a próxima linha da saída
linha = processo.stdout.readline()
if not linha:
time.sleep(0.1) # Aguarda um curto período antes de tentar novamente
continue
# Pula os primeiros 64 caracteres
hex_string = linha.decode()[64:].strip()
# Filtra apenas os caracteres hexadecimais
hex_string = re.sub('[^0-9a-fA-F]', '', hex_string)
# Verifica se a sequência começa com '535454', '554558', '414c56' ou '414c54'
if hex_string.startswith(('535454', '554558', '414c56', '414c54')):
# Divide a sequência em pares de caracteres hexadecimais e converte para ASCII
ascii_string = "".join([chr(int(hex_string[i:i+2], 16)) for i in range(0, len(hex_string), 2)])
# Imprime a conversão
print("")
print(ascii_string.strip())
# Se a sequência começar com '554558', processa os valores ESN e outros dados relevantes
if hex_string.startswith('554558'): #UEX
dados = ascii_string.split(";")
if len(dados) >= 22:
hdr = dados[0]
dev_id = dados[1]
report_map = dados[2]
modelo = dados[3]
sw_ver = dados[4]
msg_type = dados[5]
data = dados[6]
hora = dados[7]
latitude = dados[8]
longitude = dados[9]
spd = dados[10]
crs = dados[11]
satt = dados[12]
fix = dados[13]
in_state = dados[14]
out_state = dados[15]
len_data = dados[16]
RFID = dados[17]
velocidade_instantanea = dados[18]
velocidade_pico = dados[19]
temperatura_instantanea = dados[20]
temperatura_pico = dados[21]
# Imprime os dados relevantes
print("")
print("HDR:", hdr)
print("Device ID:", dev_id)
print("Report Map:", report_map)
print("Modelo:", modelo)
print("Software Version:", sw_ver)
print("Message Type:", msg_type)
print("Data:", data)
print("Hora:", hora)
print("Latitude:", latitude)
print("Longitude:", longitude)
print("Speed gps (Km/h):", spd)
print("Course:", crs)
print("Satellites:", satt)
print("Fix:", fix)
print("In State:", in_state)
print("Out State:", out_state)
print("Data Length:", len_data)
print("Id Motorista:", RFID)
print("Velocidade Instantânea:", velocidade_instantanea)
print("Velocidade de Pico:", velocidade_pico)
print("Temperatura Instantânea:", temperatura_instantanea)
print("Temperatura de Pico:", temperatura_pico)
elif hex_string.startswith('535454'): #STT
dados = ascii_string.split(";")
if len(dados) >= 33:
hdr = dados[0]
dev_id = dados[1]
report_map = dados[2]
model = dados[3]
sw_ver = dados[4]
msg_type = dados[5]
data = dados[6]
hora = dados[7]
latitude = dados[8]
longitude = dados[9]
spd = dados[10]
crs = dados[11]
satt = dados[12]
fix = dados[13]
in_state = dados[14]
out_state = dados[15]
mode = dados[16]
stt_rpt_type = dados[17]
msg_num = dados[18]
reserved = dados[19]
assign_map = dados[20]
pwr_voltage = float(dados[21])
bck_voltage = float(dados[22])
conn_rat = dados[23]
acc_x = round((float(dados[24]) / 256) ** 2, 2)
acc_y = round((float(dados[25]) / 256) ** 2, 2)
acc_z = round((float(dados[26]) / 256) ** 2, 2)
ADC = dados[27]
gps_odom = dados[28]
trip_distance = dados[29]
h_metter = dados[30]
trip_h_meter = dados[31]
idle_time = dados[32]
# Calcula o impacto
impacto = round((acc_x + acc_y + acc_z) ** 0.5, 2)
# Calcula SoC da tensão da bateria
soc_tensaost = calcular_soc(pwr_voltage)
temperatura = calcular_y(ADC)
# Print dos dados processados
print("")
print("HDR:", hdr)
print("Device ID:", dev_id)
print("Report Map:", report_map)
print("Model:", model)
print("Software Version:", sw_ver)
print("Message Type:", msg_type)
print("Data:", data)
print("Hora:", hora)
print("Latitude:", latitude)
print("Longitude:", longitude)
print("Speed gps (Km/h):", spd)
print("Course:", crs)
print("Satellites:", satt)
print("Fix Status:", fix)
print("In State:", in_state)
print("Out State:", out_state)
print("Mode:", mode)
print("Report Type:", stt_rpt_type)
print("Message Number:", msg_num)
print("Reserved:", reserved)
print("Assign Map:", assign_map)
print("Power Voltage:", pwr_voltage)
print("Bateria suntech:", bck_voltage)
print("Connection RAT:", conn_rat)
print("Acceleration X:", acc_x)
print("Acceleration Y:", acc_y)
print("Acceleration Z:", acc_z)
print("ADC:", ADC)
print("GPS Odometer:", gps_odom)
print("Trip Distance:", trip_distance)
print("Horimeter:", h_metter)
print("Trip Horimeter:", trip_h_meter)
print("Idle Time:", idle_time)
print("Impact:", impacto)
print("SoC (Battery Voltage):", soc_tensaost, "%")
print("Temperatura:", temperatura)
elif hex_string.startswith('414c54'): #ALT
dados = ascii_string.split(";")
if len(dados) >= 33:
hdr = dados[0]
dev_id = dados[1]
report_map = dados[2]
model = dados[3]
sw_ver = dados[4]
msg_type = dados[5]
data = dados[6]
hora = dados[7]
latitude = dados[8]
longitude = dados[9]
spd = dados[10]
crs = dados[11]
satt = dados[12]
fix = dados[13]
in_state = dados[14]
out_state = dados[15]
alert_id = dados[16]
alert_mod = dados[17]
alert_data = dados[18]
reserved = dados[19]
assign_map = dados[20]
pwr_voltage = float(dados[21])
bck_voltage = float(dados[22])
conn_rat = dados[23]
acc_x = round((float(dados[24]) / 256) ** 2, 2)
acc_y = round((float(dados[25]) / 256) ** 2, 2)
acc_z = round((float(dados[26]) / 256) ** 2, 2)
ADC = dados[27]
gps_odom = dados[28]
trip_distance = dados[29]
h_metter = dados[30]
trip_h_meter = dados[31]
idle_time = dados[32]
# Calcula o impacto
impacto = round((acc_x + acc_y + acc_z) ** 0.5, 2)
# Calcula SoC da tensão da bateria
soc_tensaost = calcular_soc(pwr_voltage)
temperatura = calcular_y(ADC)
# Print dos dados processados
print("")
print("HDR:", hdr)
print("Device ID:", dev_id)
print("Report Map:", report_map)
print("Model:", model)
print("Software Version:", sw_ver)
print("Message Type:", msg_type)
print("Data:", data)
print("Hora:", hora)
print("Latitude:", latitude)
print("Longitude:", longitude)
print("Speed gps (Km/h):", spd)
print("Course:", crs)
print("Satellites:", satt)
print("Fix Status:", fix)
print("In State:", in_state)
print("Out State:", out_state)
print("Alert ID:", alert_id)
print("Alert Modifier:", alert_mod)
print("Alert Data:", alert_data)
print("Reserved:", reserved)
print("Assign Map:", assign_map)
print("Power Voltage:", pwr_voltage)
print("Bateria suntech):", bck_voltage)
print("Connection RAT:", conn_rat)
print("Acceleration X:", acc_x)
print("Acceleration Y:", acc_y)
print("Acceleration Z:", acc_z)
print("ADC:", ADC)
print("GPS Odometer:", gps_odom)
print("Trip Distance:", trip_distance)
print("Trip Horimeter:", trip_h_meter)
print("Idle Time:", idle_time)
print("Impact:", impacto)
print("SoC (Battery Voltage):", soc_tensaost, "%")
print("Temperatura:", temperatura)
except KeyboardInterrupt:
# Se o usuário pressionar Ctrl+C, encerra o processo
processo.terminate()
DATA RESULT:
STT;1610013739;FFF83F;161;3.0.7;1;20240604;22:37:21;-19.948785;-44.014357;0.93;231.01;11;1;00001001;00000000;2;1;2502;;000F807F;13.71;4.0;255;-185;-21;-30;6.68;247361;453;4536;625;600
HDR: STT
Device ID: 1610013739
Report Map: FFF83F
Model: 161
Software Version: 3.0.7
Message Type: 1
Data: 20240604
Hora: 22:37:21
Latitude: -19.948785
Longitude: -44.014357
Speed gps (Km/h): 0.93
Course: 231.01
Satellites: 11
Fix Status: 1
In State: 00001001
Out State: 00000000
Mode: 2
Report Type: 1
Message Number: 2502
Reserved:
Assign Map: 000F807F
Power Voltage: 13.71
Bateria suntech: 4.0
Connection RAT: 255
Acceleration X: 0.52
Acceleration Y: 0.01
Acceleration Z: 0.01
ADC: 6.68
GPS Odometer: 247361
Trip Distance: 453
Horimeter: 4536
Trip Horimeter: 625
Idle Time: 600
Impact: 0.73
SoC (Battery Voltage): 100 %
Temperatura: 88932.06
Dear,
I have to enable new features in the tracker to obtain protocols (ALT, STT, ALV, UEX) below from the Suntech ST4305 4G device.
Could anyone help with how I can configure these new features in traccar or even in the source code!