This commit is contained in:
Yunhorn 2024-09-30 17:45:01 +08:00
commit 4c424cf812
8 changed files with 117 additions and 18 deletions

View File

@ -209,7 +209,6 @@ void Error_Handler(void);
#define I2C2_STANDARD_100K 0x00000E14
#define I2C2_FAST_400K 0x00000004
#define I2C2_FAST_PLUS_1M 0x00000000
#endif
#if defined(STS_R4)
@ -229,6 +228,19 @@ void Error_Handler(void);
#define SOAP_DATA HAL_GPIO_ReadPin(SOAP_STATUS_GPIO_Port,SOAP_STATUS_Pin)
#endif
#if defined(STS_M1)
/* Water leakage MEMS_IF_3, PA10 */
#define WATER_LEAKAGE_STATUS_Pin GPIO_PIN_10
#define WATER_LEAKAGE_STATUS_GPIO_Port GPIOA
/* Water leakageON_OFF, MEMS_IF_1, PB5 */
#define WATER_LEAKAGE_SWITCH_Pin GPIO_PIN_5
#define WATER_LEAKAGE_SWITCH_GPIO_Port GPIOB
#define WATER_LEAKAGE_DATA HAL_GPIO_ReadPin(WATER_LEAKAGE_STATUS_GPIO_Port,WATER_LEAKAGE_STATUS_Pin)
#endif
/* USER CODE END Private defines */
#ifdef __cplusplus

View File

@ -82,8 +82,10 @@ typedef enum
/* USER CODE BEGIN CFG_SEQ_Task_Id_t */
CFG_SEQ_Task_YunhornSTSEventRFAC, /* RFAC */
#ifdef STS_O6
#if defined(STS_M1)||defined(STS_O6)
CFG_SEQ_Task_YunhornSTSEventP1, /* REEDSWITCH, IO */
#endif
#if defined(STS_O6)
CFG_SEQ_Task_YunhornSTSEventP2, /* MOTION */
CFG_SEQ_Task_YunhornSTSEventP3, /* LAMP BAR LED */
#endif
@ -99,7 +101,7 @@ typedef enum
#ifdef STS_E2
CFG_SEQ_Task_YunhornSTSEventP7, /* IAQ */
#endif
#ifdef STS_M1
#ifdef STS_M7
CFG_SEQ_Task_YunhornSTSEventP8, /* ETR, PULSE COUNT */
#endif
#ifdef MODBUS_RS485

View File

@ -418,7 +418,7 @@ void LoRaWAN_Init(void)
/* USER CODE BEGIN LoRaWAN_Init_LV */
uint32_t feature_version = 0UL;
/* USER CODE END LoRaWAN_Init_LV */
APP_LOG(TS_OFF, VLEVEL_M, "\n\n# YUNHORN SMARTOILETS: MTM:%d.%d HWFW:%d.%d V:%d.%d.%d #\n\n",
APP_LOG(TS_OFF, VLEVEL_M, "\n\n# YUNHORN SMARTOILETS: (%s) MTM:%d.%d HWFW:%d.%d V:%d.%d.%d #\n\n",(char*)YUNHORN_STS_PRD_STRING,
(uint8_t)sts_mtmcode1, (uint8_t)sts_mtmcode2,(uint8_t)sts_hardware_ver,(uint8_t)FirmwareVersion,
(uint8_t)MajorVer,(uint8_t)MinorVer,(uint8_t)SubMinorVer);
/* USER CODE BEGIN LoRaWAN_Init_1 */
@ -510,6 +510,13 @@ void LoRaWAN_Init(void)
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventRFAC), UTIL_SEQ_RFU, STS_YunhornSTSEventRFAC_Process);
#ifdef STS_M1
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), UTIL_SEQ_RFU, STS_YunhornSTSEventP1_Process);
#endif
#ifdef STS_P2
UTIL_SEQ_RegTask((1 << CFG_SEQ_Task_YunhornSTSEventP5), UTIL_SEQ_RFU, STS_YunhornSTSEventP5_Process);
@ -748,6 +755,8 @@ static void SendTxData(void)
sts_tof_range_data_t sts_rr_sensor_data={0x0,0x0,0x0};
#elif defined(STS_R4)
sts_r_sensor_data_t sts_r4_sensor_data={0};
#elif defined(STS_M1)
sts_r_sensor_data_t sts_m1_sensor_data={0};
#endif
if (LmHandlerIsBusy() == false)
@ -767,12 +776,20 @@ static void SendTxData(void)
#endif /* CAYENNE_LPP */
EnvSensors_Read(&sensor_data);
#ifdef STS_R4
//UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP6), CFG_SEQ_Prio_0);
//STS_YunhornSTSEventP6_Process();
STS_R4_sensor_read(&sts_r4_sensor_data);
#endif
#ifdef STS_M1
STS_M1_sensor_read(&sts_m1_sensor_data);
#endif
#ifdef VL53LX
STS_people_count_sensor_Read(&sts_p2_sensor_data);
#endif
@ -788,14 +805,16 @@ static void SendTxData(void)
AppData.Port = YUNHORN_STS_R2_LORA_APP_DATA_PORT; /* STS-R2 Data Port */
#elif defined(STS_R5)
AppData.Port = YUNHORN_STS_R5_LORA_APP_DATA_PORT; /* STS-R5 Data Port */
#endif
#endif //STS_R1
#endif //VL53L0
#ifdef STS_R4
#ifdef STS_R4 //SOAP/SANITIZER LEVEL
AppData.Port = YUNHORN_STS_R4_LORA_APP_DATA_PORT; /* STS-R4 Data Port */
#endif
#ifdef STS_M1 // WATER LEAKAGE SENSOR
AppData.Port = YUNHORN_STS_M1_LORA_APP_DATA_PORT; /* STS-M1 Data Port */
#endif
AppData.Buffer[i++] = (uint8_t) (AppLedStateOn|0x80); // for first byte, cannot be 0x0
AppData.Buffer[i++] = (uint8_t) sts_mtmcode1;
@ -926,6 +945,14 @@ static void SendTxData(void)
AppData.Buffer[i++] = (uint8_t)(sts_r4_sensor_data.measure_tech & 0xFF);
AppData.Buffer[i++] = (uint8_t)(sts_r4_sensor_data.on_off_event & 0xFF);
#endif //STS_R4
/* STS-M1 WATER LEAKAGE SENSOR */
#ifdef STS_M1
AppData.Buffer[i++] = 2;
AppData.Buffer[i++] = (uint8_t)(sts_m1_sensor_data.measure_tech & 0xFF);
AppData.Buffer[i++] = (uint8_t)(sts_m1_sensor_data.on_off_event & 0xFF);
#endif //STS_M1
AppData.BufferSize = i;
if ((JoinLedTimer.IsRunning) && (LmHandlerJoinStatus() == LORAMAC_HANDLER_SET))
@ -964,9 +991,13 @@ static void OnTxTimerEvent(void *context)
/* USER CODE BEGIN OnTxTimerEvent_1 */
/* USER CODE END OnTxTimerEvent_1 */
#ifdef STS_R4
#ifdef STS_R4
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP6), CFG_SEQ_Prio_0);
#elif defined(STS_M1)
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_YunhornSTSEventP1), CFG_SEQ_Prio_0);
#endif
UTIL_SEQ_SetTask((1 << CFG_SEQ_Task_LoRaSendOnTxTimerOrButtonEvent), CFG_SEQ_Prio_0);
/*Wait for next tx slot*/

View File

@ -5,3 +5,4 @@
2024 09 20 START RR
2024 09 25 START R1D
2024 09 27 GOOD STS-R4 on single board RM2_1

View File

@ -101,6 +101,7 @@
#ifdef YUNHORN_STS_R4_ENABLED
#define YUNHORN_STS_R4_LORA_APP_DATA_PORT 7U
#define YUNHORN_STS_R4_LORA_APP_HTBT_PORT 8U
#define YUNHORN_STS_PRD_STRING "STS_R4"
#define sts_mtmcode1 0U
#define sts_mtmcode2 8U
@ -124,6 +125,14 @@
#endif
#ifdef STS_M1
#define YUNHORN_STS_M1_LORA_APP_DATA_PORT 6U
#define YUNHORN_STS_M1_LORA_APP_HTBT_PORT 6U
#define YUNHORN_STS_PRD_STRING "STS_M1"
#define sts_mtmcode1 0U
#define sts_mtmcode2 6U
#endif
//#define YUNHORN_STS_M1_LORA_APP_DATA_PORT 6U
//#define YUNHORN_STS_M1_LORA_APP_HTBT_PORT 6U
//#define YUNHORN_STS_M2_LORA_APP_DATA_PORT 59U

View File

@ -266,6 +266,7 @@ void STS_SENSOR_Upload_AppData_Message(LmHandlerAppData_t stsAppdata);
void STS_SENSOR_MEMS_Get_ID(uint16_t *devID);
void STS_RR_Sensor_Read(sts_tof_range_data_t *sts_rr_sensor_data);
void STS_R4_sensor_read(sts_r_sensor_data_t *sts_r_sensor_data);
void STS_M1_sensor_read(sts_r_sensor_data_t *sts_m_sensor_data);
void OnYunhornSTSHeartBeatPeriodicityChanged(uint32_t periodicity);
void OnYunhornSTSTxPeriodicityChanged(uint32_t periodicity);
void USER_APP_AUTO_RESPONDER_Parse(uint8_t *parse_buffer, uint8_t parse_buffer_size);

View File

@ -37,6 +37,7 @@
#include "flash_if.h"
#include "lora_app.h"
/* USER CODE BEGIN Includes */
#include "main.h"
#include "stm32_seq.h"
#include "stm32_timer.h"
#include "utilities_def.h"
@ -122,6 +123,9 @@ volatile sts_tof_range_data_t sts_range_sensor_data={0x0,0x0,0x0};
volatile uint8_t sts_soap_level_state=0;
void STS_R4_sensor_read(sts_r_sensor_data_t *sts_r_sensor_data);
#endif
#ifdef STS_M1
volatile uint8_t sts_water_leakage_state=0;
#endif
#if 0
volatile uint8_t sts_reed_hall_result, last_sts_reed_hall_result,sts_reed_hall_changed_flag;
volatile uint32_t event_start_time, event_stop_time;
@ -286,6 +290,13 @@ void STS_YunhornSTSEventP1_Process(void)
}
#endif
/* STS-M1 Water leakage sensor */
#if defined(STS_M1)
APP_LOG(TS_OFF, VLEVEL_M, "\r\n WATER LEAKAGE DETECTION Process \n");
sts_water_leakage_state = WATER_LEAKAGE_DATA;
#endif
}
@ -516,12 +527,24 @@ void STS_SENSOR_MEMS_Reset(uint8_t cnt)
void STS_R4_sensor_read(sts_r_sensor_data_t *sts_r_sensor_data)
{
sts_r_sensor_data->on_off_event = sts_soap_level_state;
// sts_soap_level_state 0x00 --- Liquid Detected, 0x01 --- no Detection
sts_r_sensor_data->on_off_event = (sts_soap_level_state ==0x00? true:false);
sts_r_sensor_data->measure_tech = 0; //liquid capacity
}
#endif
#ifdef STS_M1
void STS_M1_sensor_read(sts_r_sensor_data_t *sts_m_sensor_data)
{
sts_m_sensor_data->on_off_event = sts_water_leakage_state;
sts_m_sensor_data->measure_tech = 0; //weak current detection
}
#endif
#if defined(YUNHORN_STS_O5_ENABLED)
void STS_O5_SENSOR_Read(STS_OO_SensorDataTypeDef *oo_data)
{

View File

@ -7,7 +7,21 @@
function Decode(fPort, data, variables) {
var data = {};
data.length = bytes.length;
if ((fPort === 10)) { // STS_O2_O6 V3 version 2023,pixel-network version
// R4 soap/sanitizer sensor
if (fPort === 7) {
data.length = bytes.length;
data.led_state = bytes[0] == 0x0 ? "Off" : "On";
data.mtm_code_1 = bytes[1];
data.mtm_code_2 = bytes[2];
data.hw_code = bytes[3];
data.battery_level = bytes[4] + "%";
data.size_value = bytes[5];
data.measure_tech = (bytes[6] === 0) ? "Capacitive" : "Other";
data.liquid_level_event = (bytes[7] === 0x1) ? "Liquid Detected" : "No Liquid";
return { "Yunhorn_SmarToilets_data": data };
}
else if ((fPort === 10)) { // STS_O2_O6 V3 version 2023,pixel-network version
switch (bytes[0]) {
case 0x00:
data.LEDcolor = "Dark";
@ -303,7 +317,7 @@ function Decode(fPort, data, variables) {
return { "Yunhorn_SmarToilets_data": data };
}
// Heart Beat
else if ((fPort === 12) || (fPort === 20) || (fPort === 18) || (fPort === 5) || (fPort === 107) || (fPort === 58)) {
else if ((fPort === 8) || (fPort === 12) || (fPort === 20) || (fPort === 18) || (fPort === 5) || (fPort === 107) || (fPort === 58)) {
var data = {};
//data.led_state=(bytes[0] & 0x7f) === 0 ? "Off" : "On";
data.BoardLED = ((bytes[0] & 0x7F) === 0x01) ? "ON" : "OFF";
@ -316,8 +330,11 @@ function Decode(fPort, data, variables) {
else if (fPort === 1) {
var data = {};
data.length = bytes.length;
if ((data.length === 4) && (bytes[0] == 0x52) && (bytes[1] = 0x46)) //RFAC
if ((data.length === 10) && (bytes[0] == 0x59) && (bytes[9] == 0x38)) {
data.Yunhorn_PRD = "True";
data.PRD_String = String.fromCharCode(bytes);
}
else if ((data.length === 4) && (bytes[0] == 0x52) && (bytes[1] == 0x46)) //RFAC
{
data.Request_Performed = "OK";
data.RFAC = "OK";
@ -351,17 +368,20 @@ function Decode(fPort, data, variables) {
}
}
if ((bytes[0] === 0x59) && (bytes[1] === 0x44)) //Duration interval
{
data.Heart_beat_Duration = (bytes[2] - 0x30) * 10 + (bytes[3] - 0x30);
data.Unit = String.fromCharCode(bytes[4]);
data.Uplink_interval = (bytes[2] - 0x30) * 10 + (bytes[3] - 0x30);
data.Uplink_interval_unit = String.fromCharCode(bytes[4]);
//data.Heart_beat_Duration = (bytes[2]-0x30)*10 + (bytes[3]-0x30);
//data.Unit = String.fromCharCode(bytes[4]);
}
else if ((bytes[0] === 0x59) && (bytes[1] === 0x53)) //Sampling interval or Heart-beat interval
{
data.Wakeup_sampling_interval = (bytes[2] - 0x30) * 10 + (bytes[3] - 0x30);
data.Unit = String.fromCharCode(bytes[4]);
data.Heart_Beat_interval = (bytes[2] - 0x30) * 10 + (bytes[3] - 0x30);
data.Heart_Beat_interval_unit = String.fromCharCode(bytes[4]);
//data.Wakeup_sampling_interval = (bytes[2]-0x30)*10 + (bytes[3]-0x30);
//data.Unit = String.fromCharCode(bytes[4]);
}
else if (bytes[0] === 0x43) { // report current nvm config