Rejestracja kanału termostatu

Sheezo
Posts: 40
Joined: Thu Oct 21, 2021 1:28 pm

Post

Faktycznie ciężki temat do opanowania.
Z rejestracją kanałów typu_E poszło gładko. Po zarejestrowaniu otrzymuję bardzo dziwne dane z serwera ale o tym może później.
Staram się wysłać tą konfigurację ale kicha. Czy mogę otrzymać informację odnośnie pól w strukturze TSDS_SetDeviceConfig;
Czym się różni AvailableFields; od Fields; ? Czy to oznacza, że mam wybrać z mapy bitowej jakie w moim regulatorze są możliwości wg mapy bitowej?
#define SUPLA_DEVICE_CONFIG_FIELD_STATUS_LED (1ULL << 0) // v. >= 21
// type: TDeviceConfig_ScreenBrightness
#define SUPLA_DEVICE_CONFIG_FIELD_SCREEN_BRIGHTNESS (1ULL << 1) // v. >= 21
// type: TDeviceConfig_ButtonVolume
#define SUPLA_DEVICE_CONFIG_FIELD_BUTTON_VOLUME (1ULL << 2) // v. >= 21
// type: TDeviceConfig_DisableUserInterface
#define SUPLA_DEVICE_CONFIG_FIELD_DISABLE_USER_INTERFACE \
(1ULL << 3) // v. >= 21
// type: TDeviceConfig_AutomaticTimeSync
#define SUPLA_DEVICE_CONFIG_FIELD_AUTOMATIC_TIME_SYNC (1ULL << 4) // v. >= 21
// type: TDeviceConfig_HomeScreenDelay
#define SUPLA_DEVICE_CONFIG_FIELD_HOME_SCREEN_OFF_DELAY (1ULL << 5) // v. >= 21
// type: TDeviceConfig_HomeScreenContent
#define SUPLA_DEVICE_CONFIG_FIELD_HOME_SCREEN_CONTENT (1ULL << 6) // v. >= 21

Następnie:
unsigned _supla_int16_t ConfigSize;
char Config[SUPLA_DEVICE_CONFIG_MAXSIZE]; // Last variable in struct!
Czy ConfigSize to ilość bajtów w tablicy Config? I skąd wziąć dane do tablicy config?
Testuję i wysyłam 512 bajtów samych zer ale dostaję SUPLA_RESULTCODE_UNSUPORTED 1

Pozdrawiam.
User avatar
klew
Posts: 13911
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 136 times
Been thanked: 137 times

Post

To są elementy tzw. DeviceConfig i nie ma nic wspólnego z termostatem.
Także o ile nie chcesz używać tych parametrów, to nie ma co nas tym czasu spędzać ;)
Najlepsze suple dla Twojego domu :mrgreen:
Sheezo
Posts: 40
Joined: Thu Oct 21, 2021 1:28 pm

Post

To bardzo proszę o nakierowanie mnie na odpowiednie tory.
W cloud mam komunikat, że konfiguracja nie dostępna i oczekiwanie aż moduł się podłączy.
Co muszę zrobić aby ten komunikat zniknął i mógłbym normalnie korzystać z termostatu?

Pozdrawiam.
User avatar
klew
Posts: 13911
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 136 times
Been thanked: 137 times

Post

Sheezo wrote: Fri Dec 29, 2023 7:30 pm To bardzo proszę o nakierowanie mnie na odpowiednie tory.
W cloud mam komunikat, że konfiguracja nie dostępna i oczekiwanie aż moduł się podłączy.
Co muszę zrobić aby ten komunikat zniknął i mógłbym normalnie korzystać z termostatu?

Pozdrawiam.
Ogólnie napisałem w poprzedniej wiadomości. DeviceConfig nie jest niezbędny. Natomiast konieczne są te wiadomości " Chanel config"
Najlepsze suple dla Twojego domu :mrgreen:
Sheezo
Posts: 40
Joined: Thu Oct 21, 2021 1:28 pm

Post

Dzięki za info. Źle zrozumiałem poprzednią wiadomość.
Skupiłem się na wysłaniu ChannelConfig. Niestety serwer nie odpowiada na ramkę. Czy możecie rzucić okiem co robię źle?
Ogólnie to rejestruję jeden kanał termostatu i jeden kanał termometru. Numer kanału termostatu to 0 a termometru to 1.
Rejestruje się bardzo ładnie, w cloud widoczny termostat i termometr. Termostat rejestruje z flagą SUPLA_CHANNEL_FLAG_RUNTIME_CHANNEL_CONFIG_UPDATE. Zaraz po zarejestrowaniu odbieram takie 2 ramki:
1. 53h 55h 50h 4Ch 41h 15h 02h 00h 00h 00h 02h 00h 00h 00h 00h 00h 00h A4h 01h 00h 00h 00h 00h 00h 53h 55h 50h 4Ch 41h
2. 53h 55h 50h 4Ch 41h 15h 03h 00h 00h 00h ABh 02h 00h 00h 01h 00h 00h 00h 00h 53h 55h 50h 4Ch 41h

Pierwsza to nie mam pojęcia co to jest natomiast druga to wiadomość: SUPLA_SD_CALL_CHANNEL_CONFIG_FINISHED z result 0x00.

Następnie wysyłam taka ramkę:

Code: Select all

Len = 0x00;
TXBuff[Len++] = 'S';				//Naglowek
TXBuff[Len++] = 'U';
TXBuff[Len++] = 'P';
TXBuff[Len++] = 'L';
TXBuff[Len++] = 'A';
	
TXBuff[Len++] = 21;				//Version
	
TXBuff[Len++] = Supla.RR_ID;		//rrid
TXBuff[Len++] = Supla.RR_ID >> 8;
TXBuff[Len++] = Supla.RR_ID >> 16;
TXBuff[Len++] = Supla.RR_ID >> 24;
	
TXBuff[Len++] = 0xA9;			//CallType (Set channel Config (681))
TXBuff[Len++] = 0x02;
TXBuff[Len++] = 0x00;
TXBuff[Len++] = 0x00;
	
TXBuff[Len++] = 0x00;  			//DataSize (obliczane na końcu)
TXBuff[Len++] = 0x00;
TXBuff[Len++] = 0x00;
TXBuff[Len++] = 0x00;	
	
//Data	
TXBuff[Len++] = Channel;			//ChannelNumber (0x00 jako kanał termostatu)

TXBuff[Len++] = 0xA4;		        //#define SUPLA_CHANNELFNC_HVAC_THERMOSTAT 420  
TXBuff[Len++] = 0x01;			//#define SUPLA_CHANNELFNC_HVAC_THERMOSTAT 420  
TXBuff[Len++] = 0x00;			//#define SUPLA_CHANNELFNC_HVAC_THERMOSTAT 420  
TXBuff[Len++] = 0x00;			//#define SUPLA_CHANNELFNC_HVAC_THERMOSTAT 420  
	
TXBuff[Len++] = 0x00;			//SUPLA_CONFIG_TYPE_DEFAULT 0
TXBuff[Len++] = 0x00;			//SUPLA_CONFIG_TYPE_DEFAULT 0
TXBuff[Len++] = 0x00;			//SUPLA_CONFIG_TYPE_DEFAULT 0
TXBuff[Len++] = 0x00;			//SUPLA_CONFIG_TYPE_DEFAULT 0
	
TXBuff[Len++] = 0x00;			//ConfigSize (obliczane ze zmiennej ConfigSize)
TXBuff[Len++] = 0x00;			//ConfigSize (obliczane ze zmiennej ConfigSize)
	
//Config[SUPLA_CHANNEL_CONFIG_MAXSIZE];
TXBuff[Len++] = 0x01; ConfigSize++;		//MainThermometerChannelNo (wskazuje na termometr)
TXBuff[Len++] = Channel; ConfigSize++;	        //AuxThermometerChannelNo (wskazuje na siebie)
TXBuff[Len++] = Channel;	ConfigSize++;	//BinaryThermometerChannelNo (wskazuje na siebie)
TXBuff[Len++] = 0x00; ConfigSize++;		//AuxThermometerType (not set)
TXBuff[Len++] = 0x00; ConfigSize++;		//AntiFreezeAndOverheatProtectionEnabled (not set)
TXBuff[Len++] = 0x00; ConfigSize++;		//AvailableAlgorithms;
TXBuff[Len++] = 0x00; ConfigSize++;		//AvailableAlgorithms;
TXBuff[Len++] = 0x00; ConfigSize++;		//UsedAlgorithms;
TXBuff[Len++] = 0x00; ConfigSize++;		//UsedAlgorithms;
TXBuff[Len++] = 0x00; ConfigSize++;		//MinOnTimeS;
TXBuff[Len++] = 0x00; ConfigSize++;		//MinOnTimeS;	
TXBuff[Len++] = 0x00; ConfigSize++;		//MinOffTimeS;
TXBuff[Len++] = 0x00; ConfigSize++;		//MinOffTimeS;
TXBuff[Len++] = 0x00; ConfigSize++;		//OutputValueOnError;
TXBuff[Len++] = 0x00; ConfigSize++;		//Subfunction; 
TXBuff[Len++] = 0x00; ConfigSize++;		//TemperatureSetpointChangeSwitchesToManualMode;
TXBuff[Len++] = 0x00; ConfigSize++;		//AuxMinMaxSetpointEnabled;
TXBuff[Len++] = 0x00; ConfigSize++;		//AutoUseSeparateHeatCoolOutputs;
	
for (uint32_t a = 0; a < 48; a++)                         //Reserved
{
	TXBuff[Len++] = 0x00; 
	ConfigSize++;
}

//THVACTemperatureCfg;
TXBuff[Len++] = 0x00; ConfigSize++;	//Index
TXBuff[Len++] = 0x00; ConfigSize++;	//Index
TXBuff[Len++] = 0x00; ConfigSize++;	//Index
TXBuff[Len++] = 0x00; ConfigSize++;	//Index
	
for (DataLen = 0; DataLen < 24; DataLen++) //Reserved
{
     TXBuff[Len++] = 0x00; //Temperature
     TXBuff[Len++] = 0x00; //Temperature		
     ConfigSize += 2;
}
	
TXBuff[Len++] = 'S';										//Naglowek
TXBuff[Len++] = 'U';
TXBuff[Len++] = 'P';
TXBuff[Len++] = 'L';
TXBuff[Len++] = 'A';
Niestety z serwera cisza. Bardzo proszę o jakąś wskazówkę.

Pozdrawiam.
Sheezo
Posts: 40
Joined: Thu Oct 21, 2021 1:28 pm

Post

Dałem radę z przesłaniem konfiguracji :)

Ostatnie pytanko i przestanę męczyć. W cloud już się wyświetlają parametry ale jest problem z aplikacją na smartfon.
Jak wchodzę w kanał termostatu to jest to zielone kółeczko co się kręci i nic nie można ustawić.
Czy to dalej coś z modułem? Co trzeba zrobić aby kanał w apce też działał?

Pozdrawiam.
User avatar
klew
Posts: 13911
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 136 times
Been thanked: 137 times

Post

Sheezo wrote: Thu Mar 28, 2024 8:24 pm Dałem radę z przesłaniem konfiguracji :)

Ostatnie pytanko i przestanę męczyć. W cloud już się wyświetlają parametry ale jest problem z aplikacją na smartfon.
Jak wchodzę w kanał termostatu to jest to zielone kółeczko co się kręci i nic nie można ustawić.
Czy to dalej coś z modułem? Co trzeba zrobić aby kanał w apce też działał?

Pozdrawiam.
Nic mi do głowy nie przychodzi. Ogólnie apka czyta "config" urządzenia z serwera. Więc jeśli serwer ma kompletną konfigurację, to apka powinna móc ją odczytać.
Musiałbyś coś więcej napisać, co zrobiłeś i jak.
Najlepsze suple dla Twojego domu :mrgreen:
Sheezo
Posts: 40
Joined: Thu Oct 21, 2021 1:28 pm

Post

Bardzo dziękuję za odpowiedź.
Oto jedna z moich konfiguracji kanału. W cloud jest widoczna, jak zmienię jakieś parametry to od razu widać:

Code: Select all

	
	TXBuff[Len++] = 'S';						//Naglowek
	TXBuff[Len++] = 'U';
	TXBuff[Len++] = 'P';
	TXBuff[Len++] = 'L';
	TXBuff[Len++] = 'A';
	
	TXBuff[Len++] = 21;						//Version
	
	TXBuff[Len++] = Supla.RR_ID;				//rrid (za każdym razem zwiększany o 1)
	TXBuff[Len++] = Supla.RR_ID >> 8;
	TXBuff[Len++] = Supla.RR_ID >> 16;
	TXBuff[Len++] = Supla.RR_ID >> 24;
	
	TXBuff[Len++] = 0xA9;				       //CallType (Set channel Config (681))
	TXBuff[Len++] = 0x02;
	TXBuff[Len++] = 0x00;
	TXBuff[Len++] = 0x00;
	
	TXBuff[Len++] = 0x00;					//DataSize (na razie 0, wypełniane na końcu)
	TXBuff[Len++] = 0x00;
	TXBuff[Len++] = 0x00;
	TXBuff[Len++] = 0x00;	
	
//Data	
	TXBuff[Len++] = 0x00;					//ChannelNumber, w tym wypadku 0x00

	TXBuff[Len++] = 0xA4;								//Function SUPLA_CHANNELFNC_HVAC_THERMOSTAT 420
	TXBuff[Len++] = 0x01;								        
	TXBuff[Len++] = 0x00;								        
	TXBuff[Len++] = 0x00;								 
	
	TXBuff[Len++] = 0x00;								//Config Type SUPLA_CONFIG_TYPE_DEFAULT 0
		
	TXBuff[Len++] = 0x00;								//ConfigSize wypelniane na końcu
	TXBuff[Len++] = 0x00;								
	
	//Config[SUPLA_CHANNEL_CONFIG_MAXSIZE];
	TXBuff[Len++] = 0x01; ConfigSize++;		//MainThermometerChannelNo (DS18B20 zarejestrowany na kanale 1)
	TXBuff[Len++] = 0x00; ConfigSize++;		
	TXBuff[Len++] = 0x00; ConfigSize++;		
	TXBuff[Len++] = 0x00; ConfigSize++;		
	
	TXBuff[Len++] = 0x01; ConfigSize++;		//AuxThermometerChannelNo (Nie ma dodatkowego czujnika ale wysyłam 0x01)
	TXBuff[Len++] = 0x00; ConfigSize++;		
	TXBuff[Len++] = 0x00; ConfigSize++;		
	TXBuff[Len++] = 0x00; ConfigSize++;		
	
	TXBuff[Len++] = 0x01;	ConfigSize++;	//BinaryThermometerChannelNo (Wysyłam 0x01, wysyłanie 0x00 nic nie zmienia)
	TXBuff[Len++] = 0x00;	ConfigSize++;		
	TXBuff[Len++] = 0x00;	ConfigSize++;		
	TXBuff[Len++] = 0x00;	ConfigSize++;		
	
	TXBuff[Len++] = 0x01; ConfigSize++;		//AuxThermometerType (disable)
	
        TXBuff[Len++] = 0x00; ConfigSize++;		//AntiFreezeAndOverheatProtectionEnabled (not set)
	
	TXBuff[Len++] = 0x00; ConfigSize++;		//AvailableAlgorithms;
	TXBuff[Len++] = 0x00; ConfigSize++;		//AvailableAlgorithms;
	
	TXBuff[Len++] = 0x00; ConfigSize++;		//UsedAlgorithms;
	TXBuff[Len++] = 0x00; ConfigSize++;		//UsedAlgorithms;
	
        TXBuff[Len++] = 0x10; ConfigSize++;		//MinOnTimeS;
	TXBuff[Len++] = 0x00; ConfigSize++;		//MinOnTimeS;	
	
	TXBuff[Len++] = 0x10; ConfigSize++;		//MinOffTimeS;
	TXBuff[Len++] = 0x00; ConfigSize++;		//MinOffTimeS;
	
	TXBuff[Len++] = 0x00; ConfigSize++;		//OutputValueOnError;
	
	TXBuff[Len++] = 0x01; ConfigSize++;		//Subfunction; 
	
	TXBuff[Len++] = 0x00; ConfigSize++;		//TemperatureSetpointChangeSwitchesToManualMode;
	
	TXBuff[Len++] = 0x00; ConfigSize++;		//AuxMinMaxSetpointEnabled;
	
	TXBuff[Len++] = 0x00; ConfigSize++;		//AutoUseSeparateHeatCoolOutputs;
	
	for (DataLen = 0; DataLen < 48; DataLen++) //Reserved
	{
		TXBuff[Len++] = 0x00; 
		ConfigSize++;
	}
//THVACTemperatureCfg;	(tu definiuje które wartości temperatur używam w termostacie)
	        TXBuff[Len++] = 0x20; ConfigSize++;	//Hysteresis (0x20), 
	        TXBuff[Len++] = 0x0C; ConfigSize++;	//Room min(0x04), Room Max(0x08)
	        TXBuff[Len++] = 0x0C; ConfigSize++;	//hysteresis Min(0x40), Hysteresis Max (0x80)
	        TXBuff[Len++] = 0x00; ConfigSize++;	
	

		TXBuff[Len++] = 0x00; ConfigSize++; 	//TEMPERATURE_FREEZE_PROTECTION
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_FREEZE_PROTECTION		
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	//TEMPERATURE_ECO 
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_ECO 		
	
		TXBuff[Len++] = 0x00; ConfigSize++; 	//TEMPERATURE_COMFORT  
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_COMFORT  
	
		TXBuff[Len++] = 0x00; ConfigSize++; 	//TEMPERATURE_BOOST   
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_BOOST   
	
		TXBuff[Len++] = 0x00; ConfigSize++; 	//TEMPERATURE_HEAT_PROTECTION    
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_HEAT_PROTECTION    
		
		TXBuff[Len++] = 0x64; ConfigSize++; 	//TEMPERATURE_HISTERESIS  (1 stopień)  
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_HISTERESIS    
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	//TEMPERATURE_BELOW_ALARM    
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_BELOW_ALARM    
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	//TEMPERATURE_ABOVE_ALARM   
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_ABOVE_ALARM   
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	//TEMPERATURE_AUX_MIN_SETPOINT   
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_AUX_MIN_SETPOINT   
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	//TEMPERATURE_AUX_MAX_SETPOINT    
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_AUX_MAX_SETPOINT 

		TXBuff[Len++] = 0xE8; ConfigSize++; 	//TEMPERATURE_ROOM_MIN   (10 stopni) 
		TXBuff[Len++] = 0x03; ConfigSize++;	//TEMPERATURE_ROOM_MIN 
		
		TXBuff[Len++] = 0xA0; ConfigSize++; 	//TEMPERATURE_ROOM_MAX     (40 stopni)
		TXBuff[Len++] = 0x0F; ConfigSize++;	//TEMPERATURE_ROOM_MAX  
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	//TEMPERATURE_AUX_MIN      
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_AUX_MIN 
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	//TEMPERATURE_AUX_MAX      
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_AUX_MAX 
		
		TXBuff[Len++] = 0x64; ConfigSize++; 	//TEMPERATURE_HISTERESIS_MIN     (1 stopień) 
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_HISTERESIS_MIN 
		
		TXBuff[Len++] = 0xF4; ConfigSize++; 	//TEMPERATURE_HISTERESIS_MAX      (5 stopni)
		TXBuff[Len++] = 0x01; ConfigSize++;	//TEMPERATURE_HISTERESIS_MAX 
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	//TEMPERATURE_HEAT_COOL_OFFSET_MIN       
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_HEAT_COOL_OFFSET_MIN  
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	//TEMPERATURE_HEAT_COOL_OFFSET_MAX       
		TXBuff[Len++] = 0x00; ConfigSize++;	//TEMPERATURE_HEAT_COOL_OFFSET_MAX  
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	       
		TXBuff[Len++] = 0x00; ConfigSize++;

		TXBuff[Len++] = 0x00; ConfigSize++; 	       
		TXBuff[Len++] = 0x00; ConfigSize++;
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	       
		TXBuff[Len++] = 0x00; ConfigSize++;
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	       
		TXBuff[Len++] = 0x00; ConfigSize++;
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	       
		TXBuff[Len++] = 0x00; ConfigSize++;
		
		TXBuff[Len++] = 0x00; ConfigSize++; 	       
		TXBuff[Len++] = 0x00; ConfigSize++;
	
	
	TXBuff[Len++] = 'S';										//Naglowek
	TXBuff[Len++] = 'U';
	TXBuff[Len++] = 'P';
	TXBuff[Len++] = 'L';
	TXBuff[Len++] = 'A';
Po wysłaniu dostaję potwierdzenie SUPLA_SD_CALL_CHANNEL_CONFIG_FINISHED i nie za bardzo rozumiem dlaczego tak się dzieje.
Próbowałem różne konfiguracje wgrywać ale nic to nie daje.

Pozdrawiam.
User avatar
klew
Posts: 13911
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław
Has thanked: 136 times
Been thanked: 137 times

Post

Channel config finished wysyła serwer, aby poinformować urządzenie, że serwer wysłał już całą konfigurację kanału do urządzenia.
Jeśli chcesz wysłać config do serwera, to rob to dopiero po otrzymaniu tej wiadomości.
Budowanie wiadomości bajt po bajcie to dość pracochłonna metoda. Lepiej dodaj gotowe struktury danych i wysyłaj całe struktury
Najlepsze suple dla Twojego domu :mrgreen:
Sheezo
Posts: 40
Joined: Thu Oct 21, 2021 1:28 pm

Post

Channel config finished wysyła serwer, aby poinformować urządzenie, że serwer wysłał już całą konfigurację kanału do urządzenia.
Dobrze wiedzieć. Dzięki.
Jeśli chcesz wysłać config do serwera, to rob to dopiero po otrzymaniu tej wiadomości.
Ten config wysyłany jest dla także do nowo zarejestrowanego urządzenia więc serwer nie wyśle tej wiadomości.
Budowanie wiadomości bajt po bajcie to dość pracochłonna metoda. Lepiej dodaj gotowe struktury danych i wysyłaj całe struktury
To oczywista sprawa. Docelowo będzie tak zrobione. Na chwilę obecną staram się dojść niskopoziomowo co jest grane.
Jakby komuś się nudziło to proszę tylko o sprawdzenie co w mojej konfiguracji jest źle.

Pozdrawiam.

Return to “Pomoc”