Merge pull request #84 from oleo65/zigbee

Zigbee improvements
This commit is contained in:
rbaron 2022-12-19 09:27:43 +01:00 committed by GitHub
commit 06627ff85d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 101 additions and 29 deletions

View file

@ -6,4 +6,4 @@ config BOARD_ENABLE_DCDC
select SOC_DCDC_NRF52X
default y
endif # BOARD_BPARASITE_NRF52833
endif # BOARD_BPARASITE_NRF52833

View file

@ -11,4 +11,4 @@ config BOARD_ENABLE_DCDC_HV
select SOC_DCDC_NRF52X_HV
default y
endif # BOARD_BPARASITE_NRF52840
endif # BOARD_BPARASITE_NRF52840

View file

@ -21,4 +21,8 @@
#define UNUSED_OK(expr) (void)expr;
#ifndef CONFIG_PRSTLIB_DEFAULT_LOG_LEVEL
#define CONFIG_PRSTLIB_DEFAULT_LOG_LEVEL LOG_LEVEL_WRN
#endif
#endif // _PRST_MACROS_H_

View file

@ -9,7 +9,7 @@
#include "prstlib/macros.h"
LOG_MODULE_REGISTER(adc, LOG_LEVEL_WRN);
LOG_MODULE_REGISTER(adc, CONFIG_PRSTLIB_DEFAULT_LOG_LEVEL);
// PWM spec for square wave. Input to the soil sensing circuit.
static const struct pwm_dt_spec soil_pwm_dt =

View file

@ -6,7 +6,7 @@
#include "prstlib/led.h"
#include "prstlib/macros.h"
LOG_MODULE_REGISTER(button, LOG_LEVEL_WRN);
LOG_MODULE_REGISTER(button, CONFIG_PRSTLIB_DEFAULT_LOG_LEVEL);
static struct gpio_dt_spec button =
GPIO_DT_SPEC_GET(DT_NODELABEL(button0), gpios);

View file

@ -4,7 +4,7 @@
#include "prstlib/macros.h"
LOG_MODULE_REGISTER(led, LOG_LEVEL_WRN);
LOG_MODULE_REGISTER(led, CONFIG_PRSTLIB_DEFAULT_LOG_LEVEL);
struct gpio_dt_spec led = GPIO_DT_SPEC_GET(DT_NODELABEL(led0), gpios);

View file

@ -6,7 +6,7 @@
#include "prstlib/led.h"
#include "prstlib/macros.h"
LOG_MODULE_REGISTER(sensors, LOG_LEVEL_WRN);
LOG_MODULE_REGISTER(sensors, CONFIG_PRSTLIB_DEFAULT_LOG_LEVEL);
int prst_sensors_read_all(prst_sensors_t *sensors) {
RET_IF_ERR(prst_adc_batt_read(&sensors->batt));
@ -16,10 +16,10 @@ int prst_sensors_read_all(prst_sensors_t *sensors) {
LOG_DBG("Batt: %d mV (%.2f%%)", sensors->batt.adc_read.millivolts,
100 * sensors->batt.percentage);
LOG_DBG("Soil: %.0f %% (%.3f mV)", 100 * sensors->soil.percentage,
sensors->soil.adc_read.voltage);
LOG_DBG("Photo: %u lx (%.3f mV)", sensors->photo.brightness,
sensors->soil.adc_read.voltage);
LOG_DBG("Soil: %.0f %% (%d mV)", 100 * sensors->soil.percentage,
sensors->soil.adc_read.millivolts);
LOG_DBG("Photo: %u lx (%d mV)", sensors->photo.brightness,
sensors->soil.adc_read.millivolts);
LOG_DBG("Temp: %f oC", sensors->shtc3.temp_c);
LOG_DBG("Humi: %.0f %%", 100 * sensors->shtc3.rel_humi);
LOG_DBG("--------------------------------------------------");

View file

@ -6,7 +6,7 @@
#include "prstlib/macros.h"
LOG_MODULE_REGISTER(shtc3, LOG_LEVEL_WRN);
LOG_MODULE_REGISTER(shtc3, CONFIG_PRSTLIB_DEFAULT_LOG_LEVEL);
static const struct i2c_dt_spec shtc3 = I2C_DT_SPEC_GET(DT_NODELABEL(shtc3));

View file

@ -2,8 +2,24 @@ source "Kconfig.zephyr"
config PRST_ZB_SLEEP_DURATION_SEC
int "Sleep duration between waking up and reading sensors (in seconds)"
default 60
default 600
config PRST_ZB_PARENT_POLL_INTERVAL_SEC
int "Interval for when b-parasite polls its parent for data (in seconds)"
default 60
default 60
config PRSTLIB_DEFAULT_LOG_LEVEL
int "Logging level in core prst library. (0: NONE, 2: WARN, 4: DEBUG) See Zephyr logging for more."
default 2
config PRST_ZB_BUILD_DATE
string "Zigbee app init basic date code. Can be used as build revision. (1 byte)"
default "20221214"
config PRST_ZB_MODEL_ID
string "Zigbee app model id."
default "b-parasite"
config PRST_ZB_HARDWARE_VERSION
int "Zigbee basic cluster hardware version. (1 byte)"
default 2

View file

@ -41,6 +41,3 @@ CONFIG_ZIGBEE_CHANNEL_SELECTION_MODE_MULTI=y
# Enable API for powering down unused RAM parts.
# https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.7.1/nrf/ug_zigbee_configuring.html#power-saving-during-sleep
CONFIG_RAM_POWER_DOWN_LIBRARY=y
# Config options in Kconfig.
# CONFIG_PRST_ZB_SLEEP_DURATION_SEC=5

View file

@ -0,0 +1,49 @@
CONFIG_LOG=y
CONFIG_PWM=y
CONFIG_I2C=y
CONFIG_ADC=y
CONFIG_GPIO=y
CONFIG_PM=y
CONFIG_PM_DEVICE=y
CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
CONFIG_SERIAL=n
CONFIG_HEAP_MEM_POOL_SIZE=2048
CONFIG_MAIN_THREAD_PRIORITY=7
CONFIG_ZIGBEE=y
CONFIG_ZIGBEE_APP_UTILS=y
CONFIG_ZIGBEE_ROLE_END_DEVICE=y
# This example requires more workqueue stack
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=2048
# Enable nRF ECB driver
CONFIG_CRYPTO=y
CONFIG_CRYPTO_NRF_ECB=y
CONFIG_CRYPTO_INIT_PRIORITY=80
# Networking
CONFIG_NET_IPV6_MLD=n
CONFIG_NET_IPV6_NBR_CACHE=n
CONFIG_NET_IPV6_RA_RDNSS=n
CONFIG_NET_IP_ADDR_CHECK=n
CONFIG_NET_UDP=n
# Get Zigbee to scan every channel.
CONFIG_ZIGBEE_CHANNEL_SELECTION_MODE_MULTI=y
# Enable API for powering down unused RAM parts.
# https://developer.nordicsemi.com/nRF_Connect_SDK/doc/1.7.1/nrf/ug_zigbee_configuring.html#power-saving-during-sleep
CONFIG_RAM_POWER_DOWN_LIBRARY=y
# Config options in Kconfig.
CONFIG_PRST_ZB_SLEEP_DURATION_SEC=10
CONFIG_LOG_DEFAULT_LEVEL=4
CONFIG_PRSTLIB_DEFAULT_LOG_LEVEL=4

View file

@ -23,7 +23,7 @@
#define FACTORY_RESET_BUTTON DK_BTN4_MSK
LOG_MODULE_REGISTER(app, LOG_LEVEL_INF);
LOG_MODULE_REGISTER(app, CONFIG_LOG_DEFAULT_LEVEL);
static struct zb_device_ctx dev_ctx;
@ -57,13 +57,13 @@ ZB_ZCL_DECLARE_BASIC_ATTRIB_LIST_EXT(
&dev_ctx.basic_attr.app_version,
&dev_ctx.basic_attr.stack_version,
&dev_ctx.basic_attr.hw_version,
dev_ctx.basic_attr.mf_name,
dev_ctx.basic_attr.model_id,
dev_ctx.basic_attr.date_code,
&dev_ctx.basic_attr.mf_name,
&dev_ctx.basic_attr.model_id,
&dev_ctx.basic_attr.date_code,
&dev_ctx.basic_attr.power_source,
dev_ctx.basic_attr.location_id,
&dev_ctx.basic_attr.location_id,
&dev_ctx.basic_attr.ph_env,
dev_ctx.basic_attr.sw_ver);
&dev_ctx.basic_attr.sw_ver);
ZB_ZCL_DECLARE_TEMP_MEASUREMENT_ATTRIB_LIST(temp_measurement_attr_list,
&dev_ctx.temp_measure_attrs.measure_value,
@ -82,8 +82,8 @@ ZB_ZCL_DECLARE_REL_HUMIDITY_MEASUREMENT_ATTRIB_LIST(
ZB_ZCL_DECLARE_POWER_CONFIG_BATTERY_ATTRIB_LIST_EXT(
batt_attr_list,
&dev_ctx.batt_attrs.voltage,
/*battery_size=*/NULL,
/*battery_quantity=*/NULL,
/*battery_size=*/ZB_ZCL_POWER_CONFIG_BATTERY_SIZE_OTHER,
/*battery_quantity=*/1,
/*battery_rated_voltage=*/NULL,
/*battery_alarm_mask=*/NULL,
/*battery_voltage_min_threshold=*/NULL,
@ -113,7 +113,7 @@ PRST_ZB_DECLARE_CLUSTER_LIST(
identify_attr_list,
temp_measurement_attr_list,
rel_humi_attr_list,
basic_attr_list,
batt_attr_list,
soil_moisture_attr_list,
illuminance_attr_list);
@ -163,7 +163,7 @@ void update_sensors_cb(zb_uint8_t arg) {
return;
}
// Battery voltlage in units of 100 mV.
// Battery voltage in units of 100 mV.
uint8_t batt_voltage = sensors.batt.adc_read.millivolts / 100;
prst_zb_set_attr_value(ZB_ZCL_CLUSTER_ID_POWER_CONFIG,
ZB_ZCL_ATTR_POWER_CONFIG_BATTERY_VOLTAGE_ID,

View file

@ -14,8 +14,15 @@ void prst_zb_attrs_init(struct zb_device_ctx *dev_ctx) {
ZB_ZCL_SET_STRING_VAL(
dev_ctx->basic_attr.model_id,
PRST_BASIC_MODEL_ID,
ZB_ZCL_STRING_CONST_SIZE(PRST_BASIC_MODEL_ID));
CONFIG_PRST_ZB_MODEL_ID,
ZB_ZCL_STRING_CONST_SIZE(CONFIG_PRST_ZB_MODEL_ID));
ZB_ZCL_SET_STRING_VAL(
dev_ctx->basic_attr.date_code,
CONFIG_PRST_ZB_BUILD_DATE,
ZB_ZCL_STRING_CONST_SIZE(CONFIG_PRST_ZB_BUILD_DATE));
dev_ctx->basic_attr.hw_version = CONFIG_PRST_ZB_HARDWARE_VERSION;
dev_ctx->identify_attr.identify_time =
ZB_ZCL_IDENTIFY_IDENTIFY_TIME_DEFAULT_VALUE;

View file

@ -5,7 +5,6 @@
#define PRST_ZIGBEE_ENDPOINT 10
#define PRST_BASIC_MANUF_NAME "b-parasite"
#define PRST_BASIC_MODEL_ID "b-parasite"
#define PRST_ZB_DEVICE_ID 0x0008
#define PRST_ZB_DEVICE_VERSION 0