Shelly PM2 Gen4 [bramka ZigBee]

Moderator: vajera

djack2017
Posts: 784
Joined: Mon Nov 27, 2017 7:36 am
Been thanked: 1 time

Post

A skąd bierzesz energię, bo na liście atrybutów nie widzę takiej pozycji (są napięcie, prąd, moc itp)?
Podobno Shelly PM2/2PM Gen4 w wersji Zigbee implementuje klaster Smart Energy (0x0702), czyli Zigbee Metering i tam jest zawarta zużyta energia. A Ty chyba nie masz tego klastra.
Jak to się mówi "Nie ucz ojca dzieci robić", ale AI wymyslił taką implementację do Twojego modułu (nie wiem czy to ma jakiś sens, jeśli nie ma to przepraszam):

void ZigbeeGateway::zbReadMeteringCluster(
esp_zb_zcl_addr_t src_address,
uint16_t src_endpoint,
uint16_t cluster_id,
esp_zb_zcl_attribute_t *attribute)
{
if (cluster_id != ESP_ZB_ZCL_CLUSTER_ID_METERING)
return;

switch (attribute->id)
{
case 0x0000: // CurrentSummationDelivered
if (attribute->data.type == ESP_ZB_ZCL_ATTR_TYPE_U48 && attribute->data.value)
{
uint64_t raw_value = 0;
memcpy(&raw_value, attribute->data.value, 6); // 48-bit

// zapamiętaj wynik
_last_device_query.metering_current_summation_delivered = raw_value;

log_i("Metering: CurrentSummationDelivered = %llu (raw)", raw_value);

// sygnalizacja zakończenia
xSemaphoreGive(gt_lock);
}
break;

case 0x0301: // Multiplier
_last_device_query.metering_multiplier = *((uint32_t*)attribute->data.value);
log_i("Metering: Multiplier = %u", _last_device_query.metering_multiplier);
break;

case 0x0302: // Divisor
_last_device_query.metering_divisor = *((uint32_t*)attribute->data.value);
log_i("Metering: Divisor = %u", _last_device_query.metering_divisor);
break;

default:
log_i("Metering cluster: attribute 0x%04X received", attribute->id);
break;
}
}


query_basic_cluster_data_t ZigbeeGateway::_last_device_query;
uint64_t metering_current_summation_delivered;
uint32_t metering_multiplier;
uint32_t metering_divisor;


bool ZigbeeGateway::zbQueryMeteringCluster(zbg_device_params_t *device)
{
esp_zb_zcl_read_attr_cmd_t read_req = {};

read_req.address_mode = ESP_ZB_APS_ADDR_MODE_64_ENDP_PRESENT;
memcpy(read_req.zcl_basic_cmd.dst_addr_u.addr_long, device->ieee_addr, sizeof(esp_zb_ieee_addr_t));

read_req.zcl_basic_cmd.src_endpoint = _endpoint;
read_req.zcl_basic_cmd.dst_endpoint = device->endpoint;
read_req.clusterID = ESP_ZB_ZCL_CLUSTER_ID_METERING;

uint16_t attributes[] = {0x0000, 0x0301, 0x0302}; // energy, multiplier, divisor

for (int i = 0; i < 3; i++)
{
read_req.attr_number = 1;
read_req.attr_field = &attributes;

log_i("Query metering attribute 0x%04X", attributes);

esp_zb_lock_acquire(portMAX_DELAY);
uint8_t tsn = esp_zb_zcl_read_attr_cmd_req(&read_req);
esp_zb_lock_release();

log_i("Metering tsn 0x%x", tsn);

if (xSemaphoreTake(gt_lock, pdMS_TO_TICKS(3000)) != pdTRUE)
{
log_e("Timeout reading metering attribute 0x%04X", attributes);
return false;
}
}

return true;
}

double ZigbeeGateway::getEnergyKWh()
{
if (_last_device_query.metering_divisor == 0)
return 0;

return (double)_last_device_query.metering_current_summation_delivered *
(double)_last_device_query.metering_multiplier /
(double)_last_device_query.metering_divisor;
}
__________________________________________________________
Specjalizowane oprogramowanie do sterowników Sonoff, Gosund, Blitzwolf, Shelly i innych:
https://djack.com.pl/modules.php?name=Downloads&d_op=viewdownload&cid=54
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

djack2017 wrote: Mon Feb 23, 2026 6:04 pm A skąd bierzesz energię, bo na liście atrybutów nie widzę takiej pozycji (są napięcie, prąd, moc itp)?
Podobno Shelly PM2/2PM Gen4 w wersji Zigbee implementuje klaster Smart Energy (0x0702), czyli Zigbee Metering i tam jest zawarta zużyta energia. A Ty chyba nie masz tego klastra.
Jak to się mówi "Nie ucz ojca dzieci robić", ale AI wymyslił taką implementację do Twojego modułu (nie wiem czy to ma jakiś sens, jeśli nie ma to przepraszam):

void ZigbeeGateway::zbReadMeteringCluster(
esp_zb_zcl_addr_t src_address,
uint16_t src_endpoint,
uint16_t cluster_id,
esp_zb_zcl_attribute_t *attribute)
{
if (cluster_id != ESP_ZB_ZCL_CLUSTER_ID_METERING)
return;

switch (attribute->id)
{
case 0x0000: // CurrentSummationDelivered
if (attribute->data.type == ESP_ZB_ZCL_ATTR_TYPE_U48 && attribute->data.value)
{
uint64_t raw_value = 0;
memcpy(&raw_value, attribute->data.value, 6); // 48-bit

// zapamiętaj wynik
_last_device_query.metering_current_summation_delivered = raw_value;

log_i("Metering: CurrentSummationDelivered = %llu (raw)", raw_value);

// sygnalizacja zakończenia
xSemaphoreGive(gt_lock);
}
break;

case 0x0301: // Multiplier
_last_device_query.metering_multiplier = *((uint32_t*)attribute->data.value);
log_i("Metering: Multiplier = %u", _last_device_query.metering_multiplier);
break;

case 0x0302: // Divisor
_last_device_query.metering_divisor = *((uint32_t*)attribute->data.value);
log_i("Metering: Divisor = %u", _last_device_query.metering_divisor);
break;

default:
log_i("Metering cluster: attribute 0x%04X received", attribute->id);
break;
}
}


query_basic_cluster_data_t ZigbeeGateway::_last_device_query;
uint64_t metering_current_summation_delivered;
uint32_t metering_multiplier;
uint32_t metering_divisor;


bool ZigbeeGateway::zbQueryMeteringCluster(zbg_device_params_t *device)
{
esp_zb_zcl_read_attr_cmd_t read_req = {};

read_req.address_mode = ESP_ZB_APS_ADDR_MODE_64_ENDP_PRESENT;
memcpy(read_req.zcl_basic_cmd.dst_addr_u.addr_long, device->ieee_addr, sizeof(esp_zb_ieee_addr_t));

read_req.zcl_basic_cmd.src_endpoint = _endpoint;
read_req.zcl_basic_cmd.dst_endpoint = device->endpoint;
read_req.clusterID = ESP_ZB_ZCL_CLUSTER_ID_METERING;

uint16_t attributes[] = {0x0000, 0x0301, 0x0302}; // energy, multiplier, divisor

for (int i = 0; i < 3; i++)
{
read_req.attr_number = 1;
read_req.attr_field = &attributes;

log_i("Query metering attribute 0x%04X", attributes);

esp_zb_lock_acquire(portMAX_DELAY);
uint8_t tsn = esp_zb_zcl_read_attr_cmd_req(&read_req);
esp_zb_lock_release();

log_i("Metering tsn 0x%x", tsn);

if (xSemaphoreTake(gt_lock, pdMS_TO_TICKS(3000)) != pdTRUE)
{
log_e("Timeout reading metering attribute 0x%04X", attributes);
return false;
}
}

return true;
}

double ZigbeeGateway::getEnergyKWh()
{
if (_last_device_query.metering_divisor == 0)
return 0;

return (double)_last_device_query.metering_current_summation_delivered *
(double)_last_device_query.metering_multiplier /
(double)_last_device_query.metering_divisor;
}

Bramka ma klaster METERING od ponad roku - zajrzyj do zbGateway.cpp i z2s_devices_table.cpp 😉
W GUI też jest - bodajże jako SIMPLE METERING - tam jest atrybut 0x0000 - energia oraz atrybutu podzielnika i mnożnika energii.
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

djack2017 wrote: Sat Feb 21, 2026 11:31 am
vajera wrote: Fri Feb 20, 2026 9:22 pm Sprawdź jeszcze w GUI, zakładka C&A, klaster SIMPLE METERING - odczytaj atrybuty Divisor i Multiplier?
Prąd, napięcie, częstotliwość i moc mają poprawne wskazania.

Divisor:
Data value is 1000000(0xF4240)
Data type is U48(0x25)
Data size is 0x6

Multiplier:
Data value is 1(0x1)
Data type is U48(0x25)
Data size is 0x6
Tutaj sam korzystasz z tego klastra - SIMPLE METERING to właśnie 0x0702 😉
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
djack2017
Posts: 784
Joined: Mon Nov 27, 2017 7:36 am
Been thanked: 1 time

Post

OK, sorry. Szukałem w ZigbeeGateway.cpp ale nie znalazłem. Poszukam jeszcze raz.
W takim razie czemu Twoja odczytana energia jest inna niż ta którą wyświetla konsola shelly?
__________________________________________________________
Specjalizowane oprogramowanie do sterowników Sonoff, Gosund, Blitzwolf, Shelly i innych:
https://djack.com.pl/modules.php?name=Downloads&d_op=viewdownload&cid=54
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

djack2017 wrote: Mon Feb 23, 2026 5:58 pm
vajera wrote: Mon Feb 23, 2026 4:28 pm Tak na marginesie, porównując stosunek jakości i ceny, to Shelly wypada słabo z innymi urządzeniami Zigbee - chociażby z takim Sonoff S60TPF.
Tylko, że Sonoff S60 TPF nie jest dwukanałowy i do puszki 70mm go nie wsadzę.
To prawda, ale ja w domu mam normalne gniazdka ścienne Zigbee - możesz mieć takie 2 obok siebie i do tego jeszcze port USB w gniazdku (A+C). Nie wspomnę już, że takie gniazdko pełni dodatkowo funkcję routera Zigbee.
Możesz też mieć bezpiecznik Zigbee w rozdzielnicy - również z pomiarem energii.
Są również przekaźniki 2 kanałowe z pomiarem w ⅓ ceny Shelly.
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

djack2017 wrote: Mon Feb 23, 2026 6:54 pm OK, sorry. Szukałem w ZigbeeGateway.cpp ale nie znalazłem. Poszukam jeszcze raz.
W takim razie czemu Twoja odczytana energia jest inna niż ta którą wyświetla konsola shelly?
A możesz zrobić logi z pracy przekaźnika pod obciążeniem, np. suszarką?
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
djack2017
Posts: 784
Joined: Mon Nov 27, 2017 7:36 am
Been thanked: 1 time

Post

vajera wrote: Mon Feb 23, 2026 6:54 pm
djack2017 wrote: Mon Feb 23, 2026 5:58 pm
vajera wrote: Mon Feb 23, 2026 4:28 pm Tak na marginesie, porównując stosunek jakości i ceny, to Shelly wypada słabo z innymi urządzeniami Zigbee - chociażby z takim Sonoff S60TPF.
Tylko, że Sonoff S60 TPF nie jest dwukanałowy i do puszki 70mm go nie wsadzę.
To prawda, ale ja w domu mam normalne gniazdka ścienne Zigbee - możesz mieć takie 2 obok siebie i do tego jeszcze port USB w gniazdku (A+C). Nie wspomnę już, że takie gniazdko pełni dodatkowo funkcję routera Zigbee.
Możesz też mieć bezpiecznik Zigbee w rozdzielnicy - również z pomiarem energii.
Są również przekaźniki 2 kanałowe z pomiarem w ⅓ ceny Shelly.
A ja w puszkach za grzejnikami mam Shelly 2.5 (od początku 2021) z moim firmware. Dwa z pięciu ostatnio padły więc szukam zamiennika.
__________________________________________________________
Specjalizowane oprogramowanie do sterowników Sonoff, Gosund, Blitzwolf, Shelly i innych:
https://djack.com.pl/modules.php?name=Downloads&d_op=viewdownload&cid=54
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

djack2017 wrote: Mon Feb 23, 2026 6:57 pm
vajera wrote: Mon Feb 23, 2026 6:54 pm
djack2017 wrote: Mon Feb 23, 2026 5:58 pm
Tylko, że Sonoff S60 TPF nie jest dwukanałowy i do puszki 70mm go nie wsadzę.
To prawda, ale ja w domu mam normalne gniazdka ścienne Zigbee - możesz mieć takie 2 obok siebie i do tego jeszcze port USB w gniazdku (A+C). Nie wspomnę już, że takie gniazdko pełni dodatkowo funkcję routera Zigbee.
Możesz też mieć bezpiecznik Zigbee w rozdzielnicy - również z pomiarem energii.
Są również przekaźniki 2 kanałowe z pomiarem w ⅓ ceny Shelly.
A ja w puszkach za grzejnikami mam Shelly 2.5 (od początku 2021) z moim firmware. Dwa z pięciu ostatnio padły więc szukam zamiennika.
W cenie jednego Shelly masz 2-3 inne urządzenia, ale nic ns siłę.
Zróbmy tak - dodam te mnożniki/dzielniki na sztywno, tylko odczytaj mi jeszcze te z klastra ELECTRICAL MEASUREMENT (6 sztuk).
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277
djack2017
Posts: 784
Joined: Mon Nov 27, 2017 7:36 am
Been thanked: 1 time

Post

vajera wrote: Mon Feb 23, 2026 6:54 pm Są również przekaźniki 2 kanałowe z pomiarem w ⅓ ceny Shelly.
1. Możesz podaj jakiś przykład bo ja nie znalazłem za ⅓ ceny Shelly (126zł)
2. Nie znalazłem w Twoim wykazie - obsługujesz takie urządzenie: "Uniwersalny miniaturowy moduł RTX ZRS1EM"
(https://www.rtx24.pl/tuya-zigbee-sterow ... p-797.html)
__________________________________________________________
Specjalizowane oprogramowanie do sterowników Sonoff, Gosund, Blitzwolf, Shelly i innych:
https://djack.com.pl/modules.php?name=Downloads&d_op=viewdownload&cid=54
User avatar
vajera
Posts: 7290
Joined: Wed Oct 31, 2018 7:58 am
Location: Biedrusko
Has thanked: 289 times
Been thanked: 161 times

Post

djack2017 wrote: Tue Feb 24, 2026 4:46 pm
vajera wrote: Mon Feb 23, 2026 6:54 pm Są również przekaźniki 2 kanałowe z pomiarem w ⅓ ceny Shelly.
1. Możesz podaj jakiś przykład bo ja nie znalazłem za ⅓ ceny Shelly (126zł)
2. Nie znalazłem w Twoim wykazie - obsługujesz takie urządzenie: "Uniwersalny miniaturowy moduł RTX ZRS1EM"
(https://www.rtx24.pl/tuya-zigbee-sterow ... p-797.html)
ad.1. W czasie gdy dodawałem Twoje Shelly widziałem w sieci ceny > 150 zł, teraz pokazuje mi 140 zł?
ad.1. Podrzucę przykłady, ale muszę znaleźć wolną chwilę.

ad. 2. Dodanie tego urządzenia zajmie < 5 minut (o ile jeszcze nie ma go w bazie)
Bramka Zigbee <=> SUPLA
Więcej informacji tutaj:
https://forum.supla.org/viewforum.php?f=127
FAQ https://forum.supla.org/viewtopic.php?t=17277

Return to “Bramka ZigBee”