wip:
This commit is contained in:
1 parent
30bbbc9303
commit
0daf4de19f
3 files changed
+101
-143
No files matched your search
@@ -1,8 +1,3 @@
|
||||
# esp_component_template
|
||||
|
||||
esp_component_template
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -12,7 +7,7 @@ esp_component_template
|
||||
#include "esp_event.h"
|
||||
|
||||
#include "zh_nrf24_gateway.h"
|
||||
// #include "zh_nrf24_config.h"
|
||||
#include "zh_nrf24_config.h"
|
||||
|
||||
static const char *TAG = "MAIN";
|
||||
|
||||
@@ -32,17 +27,57 @@ static const zh_nrf_gateway_config_t s_gw_config = {
|
||||
.spi_clock_hz = 0,
|
||||
};
|
||||
|
||||
static void dump_bindings(const char *reason)
|
||||
static void handle_paired_event(const zh_nrf_gateway_binding_t *b)
|
||||
{
|
||||
zh_nrf_gateway_binding_t tmp[ZH_NRF_GATEWAY_MAX_BINDINGS];
|
||||
size_t got = zh_nrf_gateway_bindings_get(tmp, ZH_NRF_GATEWAY_MAX_BINDINGS);
|
||||
ESP_LOGI(TAG, ">>> SENSOR PAIRED: id=%u type=%u (%s)",
|
||||
b->id, b->type,
|
||||
zh_get_nrf24_sensor_type_name((zh_nrf24_sensor_type_t)b->type));
|
||||
|
||||
ESP_LOGI(TAG, "=== Bindings (%s): %u total ===", reason, (unsigned)got);
|
||||
for (size_t i = 0; i < got; i++) {
|
||||
ESP_LOGI(TAG, " [%u] id=%u type=%u (%s)",
|
||||
(unsigned)i,
|
||||
tmp[i].id, tmp[i].type,
|
||||
zh_get_nrf24_sensor_type_name((zh_nrf24_sensor_type_t)tmp[i].type));
|
||||
/* Здесь можно добавить:
|
||||
* - публикацию в MQTT: "sensor/paired" {id, type};
|
||||
* - сохранение метаданных во внешнюю БД;
|
||||
* - запись в журнал / уведомление;
|
||||
* - поиск пользователя, которому принадлежит новое устройство,
|
||||
* и т.п.
|
||||
*/
|
||||
}
|
||||
|
||||
static void handle_sensor_data_event(const zh_nrf24_sensor_transmitted_data_t *d)
|
||||
{
|
||||
const char *name = zh_get_nrf24_sensor_type_name((zh_nrf24_sensor_type_t)d->type);
|
||||
|
||||
ESP_LOGI(TAG, "<<< sensor id=%d type=%s battery=%.2fV",
|
||||
d->id, name, d->battery / 100.0);
|
||||
|
||||
switch (d->type)
|
||||
{
|
||||
case ZH_NRF24_SENSOR_TOUCH_SWITCH:
|
||||
ESP_LOGI(TAG, " button event");
|
||||
break;
|
||||
case ZH_NRF24_SENSOR_WATER_LEAKAGE:
|
||||
ESP_LOGI(TAG, " status=%s",
|
||||
d->value_1 == ZH_NRF24_SENSOR_STATUS_ALARM ? "ALARM" : "DRY");
|
||||
break;
|
||||
case ZH_NRF24_SENSOR_OPEN_CLOSE:
|
||||
ESP_LOGI(TAG, " state=%s",
|
||||
d->value_1 == ZH_NRF24_SENSOR_STATUS_OPEN ? "OPEN" : "CLOSE");
|
||||
break;
|
||||
case ZH_NRF24_SENSOR_PLANT_HUMIDITY:
|
||||
ESP_LOGI(TAG, " humidity=%d%%", d->value_1);
|
||||
break;
|
||||
case ZH_NRF24_SENSOR_BMP280:
|
||||
ESP_LOGI(TAG, " T=%d C, P=%d", d->value_1, d->value_2);
|
||||
break;
|
||||
case ZH_NRF24_SENSOR_BME280:
|
||||
ESP_LOGI(TAG, " H=%d%% T=%d C P=%d mmHg",
|
||||
d->value_1, d->value_2, d->value_3);
|
||||
break;
|
||||
case ZH_NRF24_SENSOR_BME680:
|
||||
ESP_LOGI(TAG, " H=%d%% T=%d C P=%d Q=%d",
|
||||
d->value_1, d->value_2, d->value_3, d->value_4);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,65 +90,19 @@ static void gateway_event_handler(void *arg,
|
||||
|
||||
switch (id)
|
||||
{
|
||||
case ZH_NRF_GATEWAY_EVENT_SENSOR_DATA: {
|
||||
const zh_nrf24_sensor_transmitted_data_t *d = event_data;
|
||||
const char *name = zh_get_nrf24_sensor_type_name((zh_nrf24_sensor_type_t)d->type);
|
||||
|
||||
ESP_LOGI(TAG, "<<< sensor id=%d type=%s battery=%.2fV",
|
||||
d->id, name, d->battery / 100.0);
|
||||
|
||||
switch (d->type)
|
||||
{
|
||||
case ZH_NRF24_SENSOR_TOUCH_SWITCH:
|
||||
ESP_LOGI(TAG, " button event");
|
||||
break;
|
||||
case ZH_NRF24_SENSOR_WATER_LEAKAGE:
|
||||
ESP_LOGI(TAG, " status=%s",
|
||||
d->value_1 == ZH_NRF24_SENSOR_STATUS_ALARM ? "ALARM" : "DRY");
|
||||
break;
|
||||
case ZH_NRF24_SENSOR_OPEN_CLOSE:
|
||||
ESP_LOGI(TAG, " state=%s",
|
||||
d->value_1 == ZH_NRF24_SENSOR_STATUS_OPEN ? "OPEN" : "CLOSE");
|
||||
break;
|
||||
case ZH_NRF24_SENSOR_PLANT_HUMIDITY:
|
||||
ESP_LOGI(TAG, " humidity=%d%%", d->value_1);
|
||||
break;
|
||||
case ZH_NRF24_SENSOR_BMP280:
|
||||
ESP_LOGI(TAG, " T=%d C, P=%d", d->value_1, d->value_2);
|
||||
break;
|
||||
case ZH_NRF24_SENSOR_BME280:
|
||||
ESP_LOGI(TAG, " H=%d%% T=%d C P=%d mmHg",
|
||||
d->value_1, d->value_2, d->value_3);
|
||||
break;
|
||||
case ZH_NRF24_SENSOR_BME680:
|
||||
ESP_LOGI(TAG, " H=%d%% T=%d C P=%d Q=%d",
|
||||
d->value_1, d->value_2, d->value_3, d->value_4);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
case ZH_NRF_GATEWAY_EVENT_SENSOR_DATA:
|
||||
handle_sensor_data_event((const zh_nrf24_sensor_transmitted_data_t *)event_data);
|
||||
break;
|
||||
}
|
||||
|
||||
case ZH_NRF_GATEWAY_EVENT_SENSOR_PAIRED:
|
||||
handle_paired_event((const zh_nrf_gateway_binding_t *)event_data);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Пример: удаление одной привязки (из MQTT, кнопки, HTTP и т.п.) */
|
||||
static void demo_manual_delete(void)
|
||||
{
|
||||
uint8_t id = 5;
|
||||
uint8_t type = ZH_NRF24_SENSOR_BME280;
|
||||
|
||||
if (zh_nrf_gateway_binding_exists(id, type)) {
|
||||
ESP_LOGI(TAG, "Binding {id=%u, type=%u} exists, deleting", id, type);
|
||||
esp_err_t err = zh_nrf_gateway_binding_delete(id, type);
|
||||
ESP_LOGI(TAG, "delete → %s", esp_err_to_name(err));
|
||||
} else {
|
||||
ESP_LOGW(TAG, "Binding {id=%u, type=%u} not found, nothing to do", id, type);
|
||||
}
|
||||
}
|
||||
|
||||
void app_main(void)
|
||||
{
|
||||
ESP_LOGI(TAG, "Starting nRF24L01+ gateway");
|
||||
@@ -126,24 +115,8 @@ void app_main(void)
|
||||
NULL, NULL));
|
||||
|
||||
ESP_ERROR_CHECK(zh_nrf_gateway_init(&s_gw_config));
|
||||
dump_bindings("after init");
|
||||
|
||||
ESP_ERROR_CHECK(zh_nrf_gateway_start());
|
||||
|
||||
ESP_LOGI(TAG, "Gateway running: channel=%d, address=0x%06X",
|
||||
GW_CHANNEL, GW_ADDRESS);
|
||||
|
||||
/* Здесь можно, например, ждать команд по MQTT/HTTP и вызывать:
|
||||
*
|
||||
* zh_nrf_gateway_binding_delete(id, type) — точное удаление
|
||||
* zh_nrf_gateway_bindings_delete_by_id(id) — всё с этим id
|
||||
* zh_nrf_gateway_bindings_delete_by_type(type) — всё этого типа
|
||||
* zh_nrf_gateway_binding_clear_all() — полный сброс
|
||||
* zh_nrf_gateway_binding_exists(id, type) — проверка
|
||||
* zh_nrf_gateway_bindings_get(...) / _count() — чтение
|
||||
*
|
||||
* После удаления id сразу доступен для следующего pairing-запроса
|
||||
* того же типа.
|
||||
*/
|
||||
}
|
||||
```
|
||||
}
|
||||
Reference in new issue
Block a user