修改了Web后台的部分界面,增加了HAmqtt中的总电量传感器,后台新增mqtt上报频率设置

This commit is contained in:
OOP
2025-03-03 21:49:41 +08:00
parent e1e00b60ce
commit 9f9d4c7a56
4468 changed files with 1473046 additions and 10728 deletions

View File

@@ -1,79 +1,79 @@
#include "http_server/web_log.h"
#include "TimeUtils.h"
#include "mico.h"
#include "main.h"
#include "mqtt_server/user_mqtt_client.h"
#include "user_power.h"
uint32_t p_count = 0;
PowerRecord power_record = { 1,{ 0 } };
char power_record_str[1101] = { 0 };
float real_time_power = 0;
void SetPowerRecord(PowerRecord* pr, uint32_t pw)
{
pr->powers[(++pr->idx)% PW_NUM] = pw;
}
char* GetPowerRecord(int idx)
{
if (idx > power_record.idx) return "";
idx = idx <= power_record.idx - PW_NUM ? 0 : idx;
int i = idx > 0 ? idx : (power_record.idx - PW_NUM + 1);
i = i < 0 ? 0 : i;
char* tmp = power_record_str;
for (; i <= power_record.idx; i++)
{
sprintf(tmp, "%lu,", power_record.powers[i%PW_NUM]);
tmp += strlen(tmp);
}
*(--tmp) = 0;
return power_record_str;
}
uint64_t NS = 1000000000;
float n_1s = 0; //在当前这一秒功率中断次数
uint64_t past_ns = 0; //系统运行的纳秒数
uint64_t irq_old = 0; //上次中断的时间(纳秒)
static void PowerIrqHandler(void* arg)
{
//警告! 不能在此函数里调用任何有关moloc()的操作
p_count++;
//mico_time_get_time(&past_ns); //系统运行毫秒数
past_ns = mico_nanosecond_clock_value(); //系统运行纳秒数
uint64_t spend_ns = past_ns - irq_old;
if (irq_old % NS + spend_ns <= NS)
{
n_1s += 1;
irq_old = past_ns;
return;
}
int n = (spend_ns - past_ns % NS) / NS;
n_1s += (float)(NS - irq_old % NS) / spend_ns;
real_time_power = 17.1 * n_1s;
SetPowerRecord(&power_record, (int)real_time_power);
int i = 0;
for (; i < n; i++)
{
real_time_power = 17.1 * NS / spend_ns;
SetPowerRecord(&power_record, (int)real_time_power);
}
irq_old = past_ns;
n_1s = (float)(past_ns % NS) / spend_ns;
}
void PowerInit(void)
{
power_log("PowerInit");
MicoGpioInitialize(POWER, INPUT_PULL_UP);
MicoGpioEnableIRQ(POWER, IRQ_TRIGGER_FALLING_EDGE, PowerIrqHandler, NULL);
}
#include "http_server/web_log.h"
#include "TimeUtils.h"
#include "mico.h"
#include "main.h"
#include "mqtt_server/user_mqtt_client.h"
#include "user_power.h"
uint32_t p_count = 0;
PowerRecord power_record = { 1,{ 0 } };
char power_record_str[1101] = { 0 };
float real_time_power = 0;
void SetPowerRecord(PowerRecord* pr, uint32_t pw)
{
pr->powers[(++pr->idx)% PW_NUM] = pw;
}
char* GetPowerRecord(int idx)
{
if (idx > power_record.idx) return "";
idx = idx <= power_record.idx - PW_NUM ? 0 : idx;
int i = idx > 0 ? idx : (power_record.idx - PW_NUM + 1);
i = i < 0 ? 0 : i;
char* tmp = power_record_str;
for (; i <= power_record.idx; i++)
{
sprintf(tmp, "%lu,", power_record.powers[i%PW_NUM]);
tmp += strlen(tmp);
}
*(--tmp) = 0;
return power_record_str;
}
uint64_t NS = 1000000000;
float n_1s = 0; //在当前这一秒功率中断次数
uint64_t past_ns = 0; //系统运行的纳秒数
uint64_t irq_old = 0; //上次中断的时间(纳秒)
static void PowerIrqHandler(void* arg)
{
//警告! 不能在此函数里调用任何有关moloc()的操作
p_count++;
//mico_time_get_time(&past_ns); //系统运行毫秒数
past_ns = mico_nanosecond_clock_value(); //系统运行纳秒数
uint64_t spend_ns = past_ns - irq_old;
if (irq_old % NS + spend_ns <= NS)
{
n_1s += 1;
irq_old = past_ns;
return;
}
int n = (spend_ns - past_ns % NS) / NS;
n_1s += (float)(NS - irq_old % NS) / spend_ns;
real_time_power = 17.1 * n_1s;
SetPowerRecord(&power_record, (int)real_time_power);
int i = 0;
for (; i < n; i++)
{
real_time_power = 17.1 * NS / spend_ns;
SetPowerRecord(&power_record, (int)real_time_power);
}
irq_old = past_ns;
n_1s = (float)(past_ns % NS) / spend_ns;
}
void PowerInit(void)
{
power_log("PowerInit");
MicoGpioInitialize(POWER, INPUT_PULL_UP);
MicoGpioEnableIRQ(POWER, IRQ_TRIGGER_FALLING_EDGE, PowerIrqHandler, NULL);
}