MATLAB: Error using MQTT callbacks in AppDesigner

MATLABmqtt callback

I am trying to communicate with a MQTT broker inside a app but my callback functions don't run.
It gives me the following error: Invalid callback function 'myMQTT_RdAllPow_Callback' for input arguments of type 'string'.
The code is bellow:
app.myMQTT = mqtt(mqttServerAddr,'Username','test','Password','test','Port',1883);
subscribe_regCallback(app, app.myMQTT);
app.ConnectedLamp.Color = 'green';
app.NotConnectedLabel.Text = 'Connected';
while 1
publish(app.myMQTT, 'VGA/RdAllPow', '1');
pause(5);
end
function subscribe_regCallback(app,myMQTT)
app.RdAllPow = subscribe(myMQTT, 'VGA/RdAllPow', 'QoS', 0, 'Callback', @myMQTT_RdAllPow_Callback);
end
function myMQTT_RdAllPow_Callback(app,~)
app.ConnectedLamp.Color = 'yellow';

Best Answer

  • If you wish to use a private method of an App Designer App as callback, please define your callback by referring to @app.myCallbackMethod. Further, make sure then that myCallbackMethod has a function signature:
    function myCallbackMethod(app, input1AsNormallyExpectedByCallback, input2AsNormallyExpectedByCallback, inputNAsNormallyExpectedByCallback, etc)
    So in your specific case:
    function subscribe_regCallback(app,myMQTT)
    % Refer to @app.myMQTT_RdAllPow_Callback
    app.RdAllPow = subscribe(myMQTT, 'VGA/RdAllPow', 'QoS', 0, 'Callback', @app.myMQTT_RdAllPow_Callback);
    end
    % For a MQTT callback two inputs are expected, make sure you
    % really define them both and also add app as first input
    function myMQTT_RdAllPow_Callback(app,topic,data)
    app.ConnectedLamp.Color = 'yellow';