Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug in ClientWillTopic #66

Open
SvenJoedicke opened this issue Apr 5, 2024 · 3 comments
Open

Bug in ClientWillTopic #66

SvenJoedicke opened this issue Apr 5, 2024 · 3 comments

Comments

@SvenJoedicke
Copy link

Ich habe wahrscheinlich einen Bug beim ClientWillTopic entdeckt . Ab einer gewissen Größe geht der HANDLE_MQTT in Störung und es ist nicht möglich sich mit den MQTT-Broker zu verbinden. Als Beispiel habe ich einen Gutfall und einen Schlechtfall mit exakt einem Zeichen mehr.

I probably discovered a bug with ClientWillTopic. When the HANDLE_MQTT reaches a certain size, it malfunctions and it is not possible to connect to the MQTT broker. As an example, I have a good case and a bad case with exactly one more character.

Good Case:
image

Bad Case:
image

Test-Sourcecode:


// Declaration
PROGRAM PLC_PRG
VAR
	_MQTTInOut  : MQTT.MQTT_IN_OUT;
	_MQTTInfo   : MQTT.MQTT_INFO;
	_MQTTCLient : MQTT.HANDLE_MQTT;
	_ConfigDone : BOOL;
	_ErrorC     : DWORD;
	_ErrorT     : BYTE;
	UseValidMqttTopic      : BOOL := TRUE;
	LastUseValidMqttTopic  : BOOL;
	ValidMqttWillTopic     : STRING(255) := 'AAAAA/BBBBB/CCCCC/DDDDD/EEEEE/FFFFF/GGGGG/HHHHH/IIIII/123456';
	InvalidMqttWillTopic   : STRING(255) := 'AAAAA/BBBBB/CCCCC/DDDDD/EEEEE/FFFFF/GGGGG/HHHHH/IIIII/1234567';
	ChoosenClientWillTopic : STRING(255);

	Connected : REFERENCE TO BOOL := _MQTTInOut.BROKER_CONNECTED;
END_VAR 

// Implementation
IF _MQTTInOut.ClientWillTopic <> ChoosenClientWillTopic OR_ELSE UseValidMqttTopic <> LastUseValidMqttTopic THEN
	_MQTTCLient.ENABLE := FALSE;
	IF UseValidMqttTopic THEN
		ChoosenClientWillTopic := ValidMqttWillTopic;
	ELSE
		ChoosenClientWillTopic := InvalidMqttWillTopic;
	END_IF
	_MQTTInOut.ClientWillTopic := ChoosenClientWillTopic;
	LastUseValidMqttTopic := UseValidMqttTopic;
END_IF

_MQTTCLient(
	MQTT_IN_OUT := _MQTTInOut,
	MQTT_INFO	:= _MQTTInfo,
	URL			:= '192.168.1.20:1883',
	TIMEOUT		:= T#5S,
	TLS			:= FALSE,
	ERROR_C		=> _ErrorC,
	ERROR_T		=> _ErrorT
);
_MQTTCLient.ENABLE := TRUE;

Connected; // Only for monitoring
@stefandreyer
Copy link
Owner

Hi Sven,

ich denke ich weiß wo das her kommt.

Bin dran, Grüße

@stefandreyer
Copy link
Owner

Hi Sven,

ich bekomme das bei mir nicht nachgestellt, kannst du mir was zum Broker und den Versionen der Libs sagen?

image

Bei mir bekommt er den Connect.

Hast du auch eine andere Will Message genommen?

Grüße

@SvenJoedicke
Copy link
Author

SvenJoedicke commented Apr 22, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants