Dla porządku informuję, że jest firmware dla sterownika Blitzwolf-SHP6 dla systemu SUPLA i Zabbix. Współczynniki kalibracji wpisuje się na stronie konfiguracji urządzenia. Urządzenie wyświetla wyniki w apce na smartfonie zgodnie ze standardem @pzygmunta.
Zastosowany został programowy filtr przeciwzakłóceniowy, więc urządzenie nie powinno być wraźliwe na elektryczne zakłócenia zewnętrzne.
Blitzwolf-SHP6
__________________________________________________________
Specjalizowane oprogramowanie do sterowników Sonoff, Gosund, Blitzwolf, Shelly i innych:
https://djack.com.pl/modules.php?name=Downloads&d_op=viewdownload&cid=54
Specjalizowane oprogramowanie do sterowników Sonoff, Gosund, Blitzwolf, Shelly i innych:
https://djack.com.pl/modules.php?name=Downloads&d_op=viewdownload&cid=54
Obsługa filtru jest bardzo prosta. W pliku supla_esp_gpio.c jest procedura obsługi przerwania o nazwie supla_esp_gpio_input_timer_cb(void *timer_arg)
Dołożyłem zmienną active_filter i odpowiednio zmieniłem w kilku miejscach tej procedury, kod programu, związany z tą zmienną :
Dołożyłem zmienną active_filter i odpowiednio zmieniłem w kilku miejscach tej procedury, kod programu, związany z tą zmienną :
Kod: Zaznacz cały
unsigned char active_filter = 0;
LOCAL void
supla_esp_gpio_input_timer_cb(void *timer_arg) {
supla_input_cfg_t *input_cfg = (supla_input_cfg_t *)timer_arg;
uint8 v = gpio__input_get(input_cfg->gpio_id);
uint8 active = (input_cfg->flags & INPUT_FLAG_PULLUP) ? 0 : 1;
if ( input_cfg->step == 1 ) {
if ( v == active ) {
input_cfg->cycle_counter = 1;
if ( input_cfg->flags & INPUT_FLAG_CFG_BTN
&& ( input_cfg->type == INPUT_TYPE_BTN_MONOSTABLE
|| input_cfg->type == INPUT_TYPE_BTN_MONOSTABLE_RS
|| (system_get_time() - input_cfg->last_active) >= 2000000 ) ) {
input_cfg->cfg_counter = 0;
}
input_cfg->step = 2;
active_filter = 1;
return;
} else {
if ( input_cfg->cycle_counter >= INPUT_MIN_CYCLE_COUNT ) {
if (active_filter == 1) {
supla_esp_gpio_on_input_inactive(input_cfg);
#if defined(SHP6)
supla_esp_gpio_set_hi(LED_RED_PORT2, 1);
#endif
active_filter = 0;
}
} else if ( input_cfg->cycle_counter < 255 ) {
input_cfg->cycle_counter++;
return;
}
}
} else if ( input_cfg->step > 1 ) {
if ( input_cfg->cycle_counter < 255 )
input_cfg->cycle_counter++;
if ( v == active ) {
if ( input_cfg->step == 3
&& input_cfg->flags & INPUT_FLAG_CFG_BTN
&& ( input_cfg->type == INPUT_TYPE_BTN_MONOSTABLE
|| input_cfg->type == INPUT_TYPE_BTN_MONOSTABLE_RS) ) {
if ( input_cfg->cfg_counter < 2048 )
input_cfg->cfg_counter++;
if ( supla_esp_restart_on_cfg_press == 1 ) {
system_restart();
return;
}
if ( (input_cfg->cfg_counter * INPUT_CYCLE_TIME) >= GET_CFG_PRESS_TIME(input_cfg) ) {
// CFG MODE
if ( supla_esp_cfgmode_started() == 0 ) {
supla_esg_gpio_start_cfg_mode();
} else if ( input_cfg->flags & INPUT_FLAG_FACTORY_RESET ) {
factory_defaults(1);
os_delay_us(500000);
system_restart();
}
input_cfg->step = 0;
os_timer_disarm(&input_cfg->timer);
return;
}
}
if ( input_cfg->step == 2
&& input_cfg->cycle_counter >= INPUT_MIN_CYCLE_COUNT ) {
if (active_filter == 1) {
supla_esp_gpio_on_input_active(input_cfg);
#if defined(SHP6)
supla_esp_gpio_set_hi(LED_RED_PORT2, 0);
#endif
active_filter = 0;
}
if ( (input_cfg->flags & INPUT_FLAG_CFG_BTN) == 0
|| input_cfg->type == INPUT_TYPE_BTN_BISTABLE ) {
os_timer_disarm(&input_cfg->timer);
}
input_cfg->cycle_counter = 1;
input_cfg->last_active = system_get_time();
input_cfg->step = 3;
}
return;
}
if ( input_cfg->step == 3 ) {
if ( input_cfg->cycle_counter >= INPUT_MIN_CYCLE_COUNT ) {
if ( input_cfg->flags & INPUT_FLAG_CFG_BTN
&& input_cfg->type == INPUT_TYPE_BTN_BISTABLE ) {
input_cfg->cfg_counter++;
if ( supla_esp_cfgmode_started() == 0 ) {
if ( input_cfg->cfg_counter >= CFG_BTN_PRESS_COUNT ) {
input_cfg->cfg_counter = 0;
// CFG MODE
supla_esg_gpio_start_cfg_mode();
}
} else if ( (system_get_time() - supla_esp_cfgmode_entertime) > 3000000 ) {
// EXIT CFG MODE
system_restart();
}
}
if ( input_cfg->flags & INPUT_FLAG_CFG_BTN
&& supla_esp_cfgmode_started() == 1
&& ( input_cfg->type == INPUT_TYPE_BTN_MONOSTABLE
|| input_cfg->type == INPUT_TYPE_BTN_MONOSTABLE_RS )
&& (system_get_time() - supla_esp_cfgmode_entertime) > 3000000 ) {
// EXIT CFG MODE
system_restart();
} else {
supla_esp_gpio_on_input_inactive(input_cfg);
}
} else {
return;
}
}
}
input_cfg->step = 0;
os_timer_disarm(&input_cfg->timer);
}
__________________________________________________________
Specjalizowane oprogramowanie do sterowników Sonoff, Gosund, Blitzwolf, Shelly i innych:
https://djack.com.pl/modules.php?name=Downloads&d_op=viewdownload&cid=54
Specjalizowane oprogramowanie do sterowników Sonoff, Gosund, Blitzwolf, Shelly i innych:
https://djack.com.pl/modules.php?name=Downloads&d_op=viewdownload&cid=54
Wykresy wypełniają luki po to by w przypadku braku internetu nie wyszło, że w 10 min zużyłeś 5kWh, a w rzeczywistości zużyłeś to w np 1h.
Przykład.
Stan licznika o godz. 13:00 150kWh
Kolejny pomiar w historii o 14:00 155kWh czyli licznik był offline przez godzinę.
Wykres różnicę czyli 155-150 = 5 podzieli przez 6 czyli 60 min/10 min = 6.
Wykres pokaże wypełnienie luki równymi pomiarami każdy po ~0,83kWh
Inaczej miałbyś szpilkę.
Jeżeli gniazdko było całkowicie odłączone to stawiam, że jest tam jakiś błąd (może pamięć) i nagle po włączeniu naliczyło sobie kilka kWh, a wykres to podzielił proporcjonalnie do ostatniego w historii pomiaru.
Przykład.
Stan licznika o godz. 13:00 150kWh
Kolejny pomiar w historii o 14:00 155kWh czyli licznik był offline przez godzinę.
Wykres różnicę czyli 155-150 = 5 podzieli przez 6 czyli 60 min/10 min = 6.
Wykres pokaże wypełnienie luki równymi pomiarami każdy po ~0,83kWh
Inaczej miałbyś szpilkę.
Jeżeli gniazdko było całkowicie odłączone to stawiam, że jest tam jakiś błąd (może pamięć) i nagle po włączeniu naliczyło sobie kilka kWh, a wykres to podzielił proporcjonalnie do ostatniego w historii pomiaru.
To w takim razie wygląda na to, że po podłączeniu gniazdko skądś wzięło sobie dodatkowe kWh. Bardzo możliwe, że jest to błąd pamięci.
Generalnie ten firmware powinien zapisywać zawsze dwie kopie we flashu razem z sumą kontrolną.
To pozwala uniknąć sytuacji w której podczas zapisu wyłączysz zasilanie i uszkodzeniu ulegną zapisane w pamięci dane.
Generalnie ten firmware powinien zapisywać zawsze dwie kopie we flashu razem z sumą kontrolną.
To pozwala uniknąć sytuacji w której podczas zapisu wyłączysz zasilanie i uszkodzeniu ulegną zapisane w pamięci dane.
Okazja - do 3 grudnia SHP-6 jest w cenie 39 zł:
https://www.banggood.com/BlitzWolf-BW-S ... rehouse=CN
https://www.banggood.com/BlitzWolf-BW-S ... rehouse=CN
__________________________________________________________
Specjalizowane oprogramowanie do sterowników Sonoff, Gosund, Blitzwolf, Shelly i innych:
https://djack.com.pl/modules.php?name=Downloads&d_op=viewdownload&cid=54
Specjalizowane oprogramowanie do sterowników Sonoff, Gosund, Blitzwolf, Shelly i innych:
https://djack.com.pl/modules.php?name=Downloads&d_op=viewdownload&cid=54