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
-
Patryk
- Posts: 2944
- Joined: Mon Jan 07, 2019 7:51 pm
- Location: Rybnik
Istnieje możliwość udostępnienia kodu źródłowego ?djack2017 wrote: Sun Oct 06, 2019 7:23 pm Zastosowany został programowy filtr przeciwzakłóceniowy, więc urządzenie nie powinno być wraźliwe na elektryczne zakłócenia zewnętrzne.
-
djack2017
- Posts: 784
- Joined: Mon Nov 27, 2017 7:36 am
- Been thanked: 1 time
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ą :
Code: Select all
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
-
wojtas567
- Posts: 2334
- Joined: Sun Apr 03, 2016 7:16 pm
- Location: Olsztyn
Ostatnio sprawdzałem tym gniazdkiem zużycie w innym miejscu i gniazdo było wyłączone na godzinkę a na wykresie jest w tym czasie zużycie
You do not have the required permissions to view the files attached to this post.
Pozdrawiam
Wojtek
Wojtek
-
pzygmunt
- Posts: 20302
- Joined: Tue Jan 19, 2016 9:26 am
- Location: Paczków
- Been thanked: 59 times
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.
SUPLA.... Nareszcie w domu.
-
wojtas567
- Posts: 2334
- Joined: Sun Apr 03, 2016 7:16 pm
- Location: Olsztyn
Tak gniazdko było całkowicie wyłączone miałem w kieszeni.
Jak jest włączone a urządzenie nie pobiera to widać na wykresie 0.
Jak jest włączone a urządzenie nie pobiera to widać na wykresie 0.
Pozdrawiam
Wojtek
Wojtek
-
pzygmunt
- Posts: 20302
- Joined: Tue Jan 19, 2016 9:26 am
- Location: Paczków
- Been thanked: 59 times
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.
SUPLA.... Nareszcie w domu.
-
djack2017
- Posts: 784
- Joined: Mon Nov 27, 2017 7:36 am
- Been thanked: 1 time
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
-
Demolkaa
- Posts: 242
- Joined: Thu Oct 11, 2018 8:42 pm
- Location: Twardowice
no to mnie wyje.... dodałem gniazdko do koszyka i zanim załatwiłem transakcje to z konta ściągnęło mi 52zł a w koszyku normalnie miałem 39zł
