Blitzwolf-SHP6

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

Post

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.
__________________________________________________________
Specjalizowane oprogramowanie do sterowników Sonoff, Gosund, Blitzwolf, Shelly i innych:
https://djack.com.pl/modules.php?name=Downloads&d_op=viewdownload&cid=54
Patryk
Posts: 2944
Joined: Mon Jan 07, 2019 7:51 pm
Location: Rybnik

Post

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.
Istnieje możliwość udostępnienia kodu źródłowego ?
djack2017
Posts: 784
Joined: Mon Nov 27, 2017 7:36 am
Been thanked: 1 time

Post

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ą :

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
Patryk
Posts: 2944
Joined: Mon Jan 07, 2019 7:51 pm
Location: Rybnik

Post

Dziękuję !!!
User avatar
wojtas567
Posts: 2334
Joined: Sun Apr 03, 2016 7:16 pm
Location: Olsztyn

Post

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
Screenshot_20191103-163140_1.png
You do not have the required permissions to view the files attached to this post.
Pozdrawiam
Wojtek
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

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.
SUPLA.... Nareszcie w domu.
User avatar
wojtas567
Posts: 2334
Joined: Sun Apr 03, 2016 7:16 pm
Location: Olsztyn

Post

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.
Pozdrawiam
Wojtek
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

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.
SUPLA.... Nareszcie w domu.
djack2017
Posts: 784
Joined: Mon Nov 27, 2017 7:36 am
Been thanked: 1 time

Post

Okazja - do 3 grudnia SHP-6 jest w cenie 39 zł:
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
User avatar
Demolkaa
Posts: 242
Joined: Thu Oct 11, 2018 8:42 pm
Location: Twardowice

Post

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ł

Return to “Gotowy sprzęt”