stefandreyer / CODESYS-MQTT

MQTT client library for CODESYS, supporting all QoS
MIT License
109 stars 24 forks source link

Bug in ClientWillTopic #66

Open SvenJoedicke opened 5 months ago

SvenJoedicke commented 5 months ago

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 commented 4 months ago

Hi Sven,

ich denke ich weiß wo das her kommt.

Bin dran, Grüße

stefandreyer commented 4 months ago

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 commented 4 months ago

Hallo Stefan,

Tatsächlich nutze ich einen etwas älteren Broker, Version 1.6.15

Und ja, ich nutze in der richtigen Applikation eine andere größere Message, mit demselben Problem.

Mfg Sven

On Sun, Apr 21, 2024 at 1:08 PM stefandreyer @.***> wrote:

Hi Sven,

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

image.png (view on web) https://github.com/stefandreyer/CODESYS-MQTT/assets/41088808/b402aeba-9770-4b35-882a-11f6964d551c

Bei mir bekommt er den Connect.

Hast du auch eine andere Will Message genommen?

Grüße

— Reply to this email directly, view it on GitHub https://github.com/stefandreyer/CODESYS-MQTT/issues/66#issuecomment-2068005124, or unsubscribe https://github.com/notifications/unsubscribe-auth/ALCEVSAC6KEUPWBMDXBBQYDY6OM25AVCNFSM6AAAAABFZBEO5KVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDANRYGAYDKMJSGQ . You are receiving this because you authored the thread.Message ID: @.***>