modyfikacja kodu sonoff socket

User avatar
kris.sg
Posts: 482
Joined: Mon Aug 07, 2017 8:08 pm
Location: Przezchlebie
Has thanked: 1 time
Been thanked: 1 time

Post

Witam
od kilku dni walczę ze zmianą kodu sonoff socket, chcę żeby po połączeniu z serwerem dioda statusu zamiast świecić sygnalizowała stan przekaźnika.
Na początek chciałem aby dioda po połączeniu z serwerem zgasła
zmiany dokonuję w pliku supla_esp_gpio.c
w sekcji "supla_esp_gpio_state_connected(void)"
supla_esp_gpio_set_led(0, 0, 0); zmieniam na 1 ale dioda dalej świeci dałem nawet : gpio_output_set(0, GPIO_ID_PIN(LED_RED_PORT), GPIO_ID_PIN(LED_RED_PORT), 0); i to samo
Nie wiem czy dobrze kombinuję
czy mogę prosić o pomoc ?

Pozdrawiam
Krzysiek
■Rpi4(m.2) Supla Cloud, Scripts ■Rpi3(sd) SD: 6x MI ATC, 1x W.S.
ROLETY_V3 x12 ■SWITCH_DUAL x4 ■GATE_MODULE_V3 x1 ■SOCKET_SSR x1 ■SMOKE_MODULE x1
SONOFF_TOUCH x4 ■YUNSCHAN x1 ■STAITCASE_DIMMER x1 ■MEW-01 x2 ■mROW-02 x1 ■LEW-01 x1
POW_R2 x2 ■SP111 x3
User avatar
kris.sg
Posts: 482
Joined: Mon Aug 07, 2017 8:08 pm
Location: Przezchlebie
Has thanked: 1 time
Been thanked: 1 time

Post

ciąg dalszy walki z kodem
zrobiłem to w ten sposób:

Code: Select all

sonoff_socket.h: 
#ifndef SONOFF_SOCKET_H_
#define SONOFF_SOCKET_H_

#define ESP8266_SUPLA_PROTO_VERSION 7
#define LED_RED_PORT 13

void supla_esp_board_send_channel_values_with_delay(void *srpc);

void supla_esp_board_gpiooutput_set_hi(uint8 port, uint8 hi);
uint8 supla_esp_board_gpio_output_is_hi(uint8 port);

#define BOARD_GPIO_OUTPUT_SET_HI if ( port >= 12 ) { supla_esp_board_gpiooutput_set_hi(port, hi); return; };
#define BOARD_GPIO_OUTPUT_IS_HI if ( port >= 12 ) return supla_esp_board_gpio_output_is_hi(port);


#endif 
sonoff_socket.c:

Code: Select all

#define B_RELAY1_PORT 12
#define B_CFG_PORT 0

void supla_esp_board_set_device_name(char *buffer, uint8 buffer_size) {

ets_snprintf(buffer, buffer_size, "GNIAZDKO NEO");

}


void supla_esp_board_gpio_init(void) {

supla_input_cfg[0].type = INPUT_TYPE_BTN_MONOSTABLE;
supla_input_cfg[0].gpio_id = B_CFG_PORT;
supla_input_cfg[0].flags = INPUT_FLAG_PULLUP | INPUT_FLAG_CFG_BTN;
supla_input_cfg[0].relay_gpio_id = B_RELAY1_PORT;
supla_input_cfg[0].channel = 0;

// ---------------------------------------
// ---------------------------------------

supla_relay_cfg[0].gpio_id = B_RELAY1_PORT;
supla_relay_cfg[0].flags = RELAY_FLAG_RESTORE_FORCE;
supla_relay_cfg[0].channel = 0;


}

void supla_esp_board_set_channels(TDS_SuplaDeviceChannel_B *channels, unsigned char *channel_count) {

*channel_count = 1;

channels[0].Number = 0;
channels[0].Type = SUPLA_CHANNELTYPE_RELAY;

channels[0].FuncList = SUPLA_BIT_RELAYFUNC_POWERSWITCH \
| SUPLA_BIT_RELAYFUNC_LIGHTSWITCH;

channels[0].Default = SUPLA_CHANNELFNC_POWERSWITCH;

channels[0].value[0] = supla_esp_gpio_relay_on(B_RELAY1_PORT);

}

void supla_esp_board_send_channel_values_with_delay(void *srpc) {

supla_esp_channel_value_changed(0, supla_esp_gpio_relay_on(B_RELAY1_PORT));

}

void supla_esp_board_gpiooutput_set_hi(uint8 port, uint8 hi) {

supla_esp_gpio_set_led(hi, 0, 0);

} 
niestety dioda nie reaguje na zmianę kanału próbowałem też:

Code: Select all

uint8 supla_esp_board_gpio_output_is_hi(uint8 port) {

supla_esp_gpio_set_led(hi, 0, 0);
return 0;
} 
też nie pomaga

będę wdzięczny za pomoc
■Rpi4(m.2) Supla Cloud, Scripts ■Rpi3(sd) SD: 6x MI ATC, 1x W.S.
ROLETY_V3 x12 ■SWITCH_DUAL x4 ■GATE_MODULE_V3 x1 ■SOCKET_SSR x1 ■SMOKE_MODULE x1
SONOFF_TOUCH x4 ■YUNSCHAN x1 ■STAITCASE_DIMMER x1 ■MEW-01 x2 ■mROW-02 x1 ■LEW-01 x1
POW_R2 x2 ■SP111 x3
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

Wystarczy Ci tylko to....teoretycznie ;)

Code: Select all

#define BOARD_GPIO_OUTPUT_SET_HI 
if ( port == LED_RED_PORT && supla_last_state == STATE_CONNECTED) { \
 hi = supla_esp_gpio_output_is_hi(RELAY_PORT);  \
};

SUPLA.... Nareszcie w domu.
User avatar
kris.sg
Posts: 482
Joined: Mon Aug 07, 2017 8:08 pm
Location: Przezchlebie
Has thanked: 1 time
Been thanked: 1 time

Post

zrobiłem to w ten sposób :
plik .c
#define BOARD_GPIO_OUTPUT_SET_HI if ( supla_last_state == STATE_CONNECTED) { \
hi = supla_esp_gpio_output_is_hi(RELAY_PORT); \
supla_esp_gpio_set_led(hi, 0, 0); \
};

Dioda dalej świeci z uporem maniaka nie chce gasnąć przy przełączaniu kanału

Jak dobrze zrozumiałem to makro wykonuje powyższy kod w pliku supla_esp_gpio.c w sekcji:
void
supla_esp_gpio_set_hi(int port, char hi)
czyli teoretycznie to powinno działać ale dioda świeci na stałe po połączeniu
gdzie robie błąd ?
■Rpi4(m.2) Supla Cloud, Scripts ■Rpi3(sd) SD: 6x MI ATC, 1x W.S.
ROLETY_V3 x12 ■SWITCH_DUAL x4 ■GATE_MODULE_V3 x1 ■SOCKET_SSR x1 ■SMOKE_MODULE x1
SONOFF_TOUCH x4 ■YUNSCHAN x1 ■STAITCASE_DIMMER x1 ■MEW-01 x2 ■mROW-02 x1 ■LEW-01 x1
POW_R2 x2 ■SP111 x3
User avatar
pzygmunt
Posts: 20302
Joined: Tue Jan 19, 2016 9:26 am
Location: Paczków
Been thanked: 59 times

Post

Może sterujesz nią stanem niskim ?
SUPLA.... Nareszcie w domu.
User avatar
kris.sg
Posts: 482
Joined: Mon Aug 07, 2017 8:08 pm
Location: Przezchlebie
Has thanked: 1 time
Been thanked: 1 time

Post

przemierzyłem płytkę i faktycznie dioda połączona jest przez rezystor do 3,3V.
tylko zastanawia mnie jedna rzecz przy sterowaniu jest raz stan niski raz wysoki to dioda powinna gasnąć tylko odwrotnie.
druga sprawa dioda jest podłączona do gpio 4 czy tutaj nie jest problem


przed połączeniem z serwerem dioda miga jak już się moduł połączy wtedy dioda świeci na stałe
■Rpi4(m.2) Supla Cloud, Scripts ■Rpi3(sd) SD: 6x MI ATC, 1x W.S.
ROLETY_V3 x12 ■SWITCH_DUAL x4 ■GATE_MODULE_V3 x1 ■SOCKET_SSR x1 ■SMOKE_MODULE x1
SONOFF_TOUCH x4 ■YUNSCHAN x1 ■STAITCASE_DIMMER x1 ■MEW-01 x2 ■mROW-02 x1 ■LEW-01 x1
POW_R2 x2 ■SP111 x3
User avatar
slawek
Posts: 2685
Joined: Mon Mar 14, 2016 11:48 pm
Location: Biała Podlaska

Post

kris.sg wrote: Sat Nov 10, 2018 9:05 am druga sprawa dioda jest podłączona do gpio 4 czy tutaj nie jest problem
Na pewno chodzi ci o sonoffa? Bo ja zrozumiałem, że chcesz do tego użyć oryginalnej diody sonoffa - a ta jest na GPIO13
TEORIA jest wtedy gdy wszystko wiemy i nic nie działa
PRAKTYKA jest wtedy gdy wszystko działa a my nie wiemy dlaczego
My łączymy teorię z praktyką czyli nic nie działa i nikt nie wie dlaczego
User avatar
kris.sg
Posts: 482
Joined: Mon Aug 07, 2017 8:08 pm
Location: Przezchlebie
Has thanked: 1 time
Been thanked: 1 time

Post

nie to nie jest sonoff chcę sobie skompilować soft do gniazdka NEO COOLCAM
kompilacja działa tylko chcę mieć sygnalizację stanu przekaźnika na diodzie tylko tyle

dodatkowo w ramach testu skompilowałem sobie softa do sonoffa wybrałem płytkę sonoff i dodałem do pliku .c

Code: Select all

#define BOARD_GPIO_OUTPUT_SET_HI if ( supla_last_state == STATE_CONNECTED) { \
hi = supla_esp_gpio_output_is_hi(RELAY_PORT); \
supla_esp_gpio_set_led(hi, 0, 0); \
}; 

i efekt jest ten sam dioda sygnalizuje proces łączenia z serwerem po połączeniu świeci na stałe, zmiana stanu przekaźnika nie zmienia stanu diody
Last edited by kris.sg on Sat Nov 10, 2018 10:35 am, edited 1 time in total.
■Rpi4(m.2) Supla Cloud, Scripts ■Rpi3(sd) SD: 6x MI ATC, 1x W.S.
ROLETY_V3 x12 ■SWITCH_DUAL x4 ■GATE_MODULE_V3 x1 ■SOCKET_SSR x1 ■SMOKE_MODULE x1
SONOFF_TOUCH x4 ■YUNSCHAN x1 ■STAITCASE_DIMMER x1 ■MEW-01 x2 ■mROW-02 x1 ■LEW-01 x1
POW_R2 x2 ■SP111 x3
User avatar
slawek
Posts: 2685
Joined: Mon Mar 14, 2016 11:48 pm
Location: Biała Podlaska

Post

kris.sg wrote: Tue Nov 06, 2018 2:29 pm ciąg dalszy walki z kodem
zrobiłem to w ten sposób:

Code: Select all

sonoff_socket.h: 
#ifndef SONOFF_SOCKET_H_
#define SONOFF_SOCKET_H_

#define ESP8266_SUPLA_PROTO_VERSION 7
#define LED_RED_PORT 13 
...i dlatego pytam
TEORIA jest wtedy gdy wszystko wiemy i nic nie działa
PRAKTYKA jest wtedy gdy wszystko działa a my nie wiemy dlaczego
My łączymy teorię z praktyką czyli nic nie działa i nikt nie wie dlaczego
User avatar
kris.sg
Posts: 482
Joined: Mon Aug 07, 2017 8:08 pm
Location: Przezchlebie
Has thanked: 1 time
Been thanked: 1 time

Post

masz rację
sory za zamieszanie w pliku mam ustawione

Code: Select all

#define LED_RED_PORT    4

jak wklejałem kod nie zwróciłem uwagi że jest port domyślny


poniżej zawartość pliku sonoff_socket.c:

Code: Select all

#define B_RELAY1_PORT    12
#define B_CFG_PORT       13

void supla_esp_board_set_device_name(char *buffer, uint8 buffer_size) {

	ets_snprintf(buffer, buffer_size, "GNIAZDKO NEO");

}


void supla_esp_board_gpio_init(void) {
		
	supla_input_cfg[0].type = INPUT_TYPE_BTN_MONOSTABLE;
	supla_input_cfg[0].gpio_id = B_CFG_PORT;
	supla_input_cfg[0].flags = INPUT_FLAG_PULLUP | INPUT_FLAG_CFG_BTN;
	supla_input_cfg[0].relay_gpio_id = B_RELAY1_PORT;
	supla_input_cfg[0].channel = 0;

	// ---------------------------------------
	// ---------------------------------------

    supla_relay_cfg[0].gpio_id = B_RELAY1_PORT;
    supla_relay_cfg[0].flags = RELAY_FLAG_RESTORE_FORCE;
    supla_relay_cfg[0].channel = 0;
    

}

void supla_esp_board_set_channels(TDS_SuplaDeviceChannel_B *channels, unsigned char *channel_count) {

	*channel_count = 1;

	channels[0].Number = 0;
	channels[0].Type = SUPLA_CHANNELTYPE_RELAY;

	channels[0].FuncList = SUPLA_BIT_RELAYFUNC_POWERSWITCH \
								| SUPLA_BIT_RELAYFUNC_LIGHTSWITCH;

	channels[0].Default = SUPLA_CHANNELFNC_POWERSWITCH;

	channels[0].value[0] = supla_esp_gpio_relay_on(B_RELAY1_PORT);

}

void supla_esp_board_send_channel_values_with_delay(void *srpc) {

	supla_esp_channel_value_changed(0, supla_esp_gpio_relay_on(B_RELAY1_PORT));
	

}

#define BOARD_GPIO_OUTPUT_SET_HI if ( supla_last_state == STATE_CONNECTED) { \
 	hi = supla_esp_gpio_output_is_hi(12);  \
	supla_esp_gpio_set_led(hi, 0, 0);	\
};

i pliku sonoff_socket.h:

Code: Select all

#ifndef SONOFF_SOCKET_H_
#define SONOFF_SOCKET_H_

#define ESP8266_SUPLA_PROTO_VERSION 7
#define LED_RED_PORT    4



void supla_esp_board_send_channel_values_with_delay(void *srpc);

#endif
■Rpi4(m.2) Supla Cloud, Scripts ■Rpi3(sd) SD: 6x MI ATC, 1x W.S.
ROLETY_V3 x12 ■SWITCH_DUAL x4 ■GATE_MODULE_V3 x1 ■SOCKET_SSR x1 ■SMOKE_MODULE x1
SONOFF_TOUCH x4 ■YUNSCHAN x1 ■STAITCASE_DIMMER x1 ■MEW-01 x2 ■mROW-02 x1 ■LEW-01 x1
POW_R2 x2 ■SP111 x3

Return to “Pomoc”