Blitzwolf-SHP6

djack2017
Posty: 686
Rejestracja: pn lis 27, 2017 7:36 am
Kontakt:

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
Posty: 2685
Rejestracja: pn sty 07, 2019 7:51 pm
Lokalizacja: Rybnik

djack2017 pisze: ndz paź 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
Posty: 686
Rejestracja: pn lis 27, 2017 7:36 am
Kontakt:

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

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
Patryk
Posty: 2685
Rejestracja: pn sty 07, 2019 7:51 pm
Lokalizacja: Rybnik

Dziękuję !!!
Awatar użytkownika
wojtas567
Posty: 2213
Rejestracja: ndz kwie 03, 2016 7:16 pm
Lokalizacja: 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
Screenshot_20191103-163140_1.png
Screenshot_20191103-163140_1.png (149.29 KiB) Przejrzano 5180 razy
Pozdrawiam
Wojtek
Awatar użytkownika
pzygmunt
Posty: 18325
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

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.
Awatar użytkownika
wojtas567
Posty: 2213
Rejestracja: ndz kwie 03, 2016 7:16 pm
Lokalizacja: 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.
Pozdrawiam
Wojtek
Awatar użytkownika
pzygmunt
Posty: 18325
Rejestracja: wt sty 19, 2016 9:26 am
Lokalizacja: Paczków
Kontakt:

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.
djack2017
Posty: 686
Rejestracja: pn lis 27, 2017 7:36 am
Kontakt:

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
Awatar użytkownika
Demolkaa
Posty: 242
Rejestracja: czw paź 11, 2018 8:42 pm
Lokalizacja: 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ł
ODPOWIEDZ

Wróć do „Gotowy sprzęt”