change time units to milliseconds
Signed-off-by: YoungSoo Shin <shinys000114@gmail.com>
This commit is contained in:
@@ -70,7 +70,7 @@ class OdroidPowerLogger:
|
|||||||
|
|
||||||
# Write header
|
# Write header
|
||||||
header = [
|
header = [
|
||||||
'timestamp', 'uptime_sec',
|
'timestamp', 'uptime_ms',
|
||||||
'vin_voltage', 'vin_current', 'vin_power',
|
'vin_voltage', 'vin_current', 'vin_power',
|
||||||
'main_voltage', 'main_current', 'main_power',
|
'main_voltage', 'main_current', 'main_power',
|
||||||
'usb_voltage', 'usb_current', 'usb_power'
|
'usb_voltage', 'usb_current', 'usb_power'
|
||||||
@@ -97,10 +97,10 @@ class OdroidPowerLogger:
|
|||||||
# Process only if the payload type is 'sensor_data'
|
# Process only if the payload type is 'sensor_data'
|
||||||
if status_message.WhichOneof('payload') == 'sensor_data':
|
if status_message.WhichOneof('payload') == 'sensor_data':
|
||||||
sensor_data = status_message.sensor_data
|
sensor_data = status_message.sensor_data
|
||||||
ts_dt = datetime.fromtimestamp(sensor_data.timestamp)
|
ts_dt = datetime.fromtimestamp(sensor_data.timestamp_ms / 1000)
|
||||||
ts_str = ts_dt.strftime('%Y-%m-%d %H:%M:%S')
|
ts_str = ts_dt.strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
print(f"--- {ts_str} (Uptime: {sensor_data.uptime_sec}s) ---")
|
print(f"--- {ts_str} (Uptime: {sensor_data.uptime_ms / 1000}s) ---")
|
||||||
|
|
||||||
# Print data for each channel
|
# Print data for each channel
|
||||||
for name, channel in [('VIN', sensor_data.vin), ('MAIN', sensor_data.main),
|
for name, channel in [('VIN', sensor_data.vin), ('MAIN', sensor_data.main),
|
||||||
@@ -111,7 +111,7 @@ class OdroidPowerLogger:
|
|||||||
# Write to CSV if enabled
|
# Write to CSV if enabled
|
||||||
if csv_writer:
|
if csv_writer:
|
||||||
row = [
|
row = [
|
||||||
ts_dt.isoformat(), sensor_data.uptime_sec,
|
ts_dt.isoformat(), sensor_data.uptime_ms,
|
||||||
sensor_data.vin.voltage, sensor_data.vin.current, sensor_data.vin.power,
|
sensor_data.vin.voltage, sensor_data.vin.current, sensor_data.vin.power,
|
||||||
sensor_data.main.voltage, sensor_data.main.current, sensor_data.main.power,
|
sensor_data.main.voltage, sensor_data.main.current, sensor_data.main.power,
|
||||||
sensor_data.usb.voltage, sensor_data.usb.current, sensor_data.usb.power
|
sensor_data.usb.voltage, sensor_data.usb.current, sensor_data.usb.power
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ typedef struct _SensorData {
|
|||||||
SensorChannelData main;
|
SensorChannelData main;
|
||||||
bool has_vin;
|
bool has_vin;
|
||||||
SensorChannelData vin;
|
SensorChannelData vin;
|
||||||
uint32_t timestamp;
|
uint64_t timestamp_ms;
|
||||||
uint32_t uptime_sec;
|
uint64_t uptime_ms;
|
||||||
} SensorData;
|
} SensorData;
|
||||||
|
|
||||||
/* Contains WiFi connection status */
|
/* Contains WiFi connection status */
|
||||||
@@ -85,8 +85,8 @@ extern "C" {
|
|||||||
#define SensorData_usb_tag 1
|
#define SensorData_usb_tag 1
|
||||||
#define SensorData_main_tag 2
|
#define SensorData_main_tag 2
|
||||||
#define SensorData_vin_tag 3
|
#define SensorData_vin_tag 3
|
||||||
#define SensorData_timestamp_tag 4
|
#define SensorData_timestamp_ms_tag 4
|
||||||
#define SensorData_uptime_sec_tag 5
|
#define SensorData_uptime_ms_tag 5
|
||||||
#define WifiStatus_connected_tag 1
|
#define WifiStatus_connected_tag 1
|
||||||
#define WifiStatus_ssid_tag 2
|
#define WifiStatus_ssid_tag 2
|
||||||
#define WifiStatus_rssi_tag 3
|
#define WifiStatus_rssi_tag 3
|
||||||
@@ -111,8 +111,8 @@ X(a, STATIC, SINGULAR, FLOAT, power, 3)
|
|||||||
X(a, STATIC, OPTIONAL, MESSAGE, usb, 1) \
|
X(a, STATIC, OPTIONAL, MESSAGE, usb, 1) \
|
||||||
X(a, STATIC, OPTIONAL, MESSAGE, main, 2) \
|
X(a, STATIC, OPTIONAL, MESSAGE, main, 2) \
|
||||||
X(a, STATIC, OPTIONAL, MESSAGE, vin, 3) \
|
X(a, STATIC, OPTIONAL, MESSAGE, vin, 3) \
|
||||||
X(a, STATIC, SINGULAR, UINT32, timestamp, 4) \
|
X(a, STATIC, SINGULAR, UINT64, timestamp_ms, 4) \
|
||||||
X(a, STATIC, SINGULAR, UINT32, uptime_sec, 5)
|
X(a, STATIC, SINGULAR, UINT64, uptime_ms, 5)
|
||||||
#define SensorData_CALLBACK NULL
|
#define SensorData_CALLBACK NULL
|
||||||
#define SensorData_DEFAULT NULL
|
#define SensorData_DEFAULT NULL
|
||||||
#define SensorData_usb_MSGTYPE SensorChannelData
|
#define SensorData_usb_MSGTYPE SensorChannelData
|
||||||
@@ -172,7 +172,7 @@ extern const pb_msgdesc_t StatusMessage_msg;
|
|||||||
#define LoadSwStatus_size 4
|
#define LoadSwStatus_size 4
|
||||||
#define STATUS_PB_H_MAX_SIZE SensorData_size
|
#define STATUS_PB_H_MAX_SIZE SensorData_size
|
||||||
#define SensorChannelData_size 15
|
#define SensorChannelData_size 15
|
||||||
#define SensorData_size 63
|
#define SensorData_size 73
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "monitor.h"
|
#include "monitor.h"
|
||||||
#include <nconfig.h>
|
#include <nconfig.h>
|
||||||
|
#include <sys/time.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "climit.h"
|
#include "climit.h"
|
||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
@@ -89,9 +90,10 @@ static void send_pb_message(const pb_msgdesc_t* fields, const void* src_struct)
|
|||||||
|
|
||||||
static void sensor_timer_callback(void* arg)
|
static void sensor_timer_callback(void* arg)
|
||||||
{
|
{
|
||||||
int64_t uptime_us = esp_timer_get_time();
|
struct timeval tv;
|
||||||
uint32_t uptime_sec = (uint32_t)(uptime_us / 1000000);
|
gettimeofday(&tv, NULL);
|
||||||
uint32_t timestamp = (uint32_t)time(NULL);
|
uint64_t timestamp_ms = (uint64_t)tv.tv_sec * 1000 + (uint64_t)tv.tv_usec / 1000;
|
||||||
|
uint64_t uptime_ms = (uint64_t)esp_timer_get_time() / 1000;
|
||||||
|
|
||||||
StatusMessage message = StatusMessage_init_zero;
|
StatusMessage message = StatusMessage_init_zero;
|
||||||
message.which_payload = StatusMessage_sensor_data_tag;
|
message.which_payload = StatusMessage_sensor_data_tag;
|
||||||
@@ -120,8 +122,8 @@ static void sensor_timer_callback(void* arg)
|
|||||||
|
|
||||||
// datalog_add(timestamp, channel_data_log);
|
// datalog_add(timestamp, channel_data_log);
|
||||||
|
|
||||||
sensor_data->timestamp = timestamp;
|
sensor_data->timestamp_ms = timestamp_ms;
|
||||||
sensor_data->uptime_sec = uptime_sec;
|
sensor_data->uptime_ms = uptime_ms;
|
||||||
|
|
||||||
send_pb_message(StatusMessage_fields, &message);
|
send_pb_message(StatusMessage_fields, &message);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ function updateSingleChart(chart, metric, data, timeLabel) {
|
|||||||
* @param {Object} data - The new sensor data object from the WebSocket.
|
* @param {Object} data - The new sensor data object from the WebSocket.
|
||||||
*/
|
*/
|
||||||
export function updateCharts(data) {
|
export function updateCharts(data) {
|
||||||
const timeLabel = new Date(data.timestamp * 1000).toLocaleTimeString();
|
const timeLabel = new Date(data.timestamp).toLocaleTimeString();
|
||||||
|
|
||||||
updateSingleChart(charts.power, 'power', data, timeLabel);
|
updateSingleChart(charts.power, 'power', data, timeLabel);
|
||||||
updateSingleChart(charts.voltage, 'voltage', data, timeLabel);
|
updateSingleChart(charts.voltage, 'voltage', data, timeLabel);
|
||||||
|
|||||||
@@ -88,13 +88,13 @@ function onWsMessage(event) {
|
|||||||
USB: sensorData.usb,
|
USB: sensorData.usb,
|
||||||
MAIN: sensorData.main,
|
MAIN: sensorData.main,
|
||||||
VIN: sensorData.vin,
|
VIN: sensorData.vin,
|
||||||
timestamp: sensorData.timestamp
|
timestamp: sensorData.timestampMs
|
||||||
};
|
};
|
||||||
updateSensorUI(sensorPayload);
|
updateSensorUI(sensorPayload);
|
||||||
|
|
||||||
// Update uptime separately from the sensor data payload
|
// Update uptime separately from the sensor data payload
|
||||||
if (sensorData.uptimeSec !== undefined) {
|
if (sensorData.uptimeMs !== undefined) {
|
||||||
updateUptimeUI(sensorData.uptimeSec);
|
updateUptimeUI(sensorData.uptimeMs / 1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export function debounce(func, delay) {
|
|||||||
* @returns {string} The formatted uptime string.
|
* @returns {string} The formatted uptime string.
|
||||||
*/
|
*/
|
||||||
export function formatUptime(totalSeconds) {
|
export function formatUptime(totalSeconds) {
|
||||||
|
totalSeconds = Math.floor(totalSeconds);
|
||||||
const days = Math.floor(totalSeconds / 86400);
|
const days = Math.floor(totalSeconds / 86400);
|
||||||
const hours = Math.floor((totalSeconds % 86400) / 3600);
|
const hours = Math.floor((totalSeconds % 86400) / 3600);
|
||||||
const minutes = Math.floor((totalSeconds % 3600) / 60);
|
const minutes = Math.floor((totalSeconds % 3600) / 60);
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ message SensorData {
|
|||||||
SensorChannelData usb = 1;
|
SensorChannelData usb = 1;
|
||||||
SensorChannelData main = 2;
|
SensorChannelData main = 2;
|
||||||
SensorChannelData vin = 3;
|
SensorChannelData vin = 3;
|
||||||
uint32 timestamp = 4;
|
uint64 timestamp_ms = 4;
|
||||||
uint32 uptime_sec = 5;
|
uint64 uptime_ms = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Contains WiFi connection status
|
// Contains WiFi connection status
|
||||||
|
|||||||
Reference in New Issue
Block a user