Registering mqtt on-message callback from script:

I’m writing a script that will autosetup MQTT subscriptions on Mikrotik KNOT. I’m having problems with non deterministic behavior of /iot mqtt subscriptions set on-message=… if called from script. Sometimes the scripts works and sets up at least one subscriptions, most of the time it crashes on first setting of callback. However If I copy out the command and execute it later from command line it works fine 100% of time. Unsubscribing in the start of the script is done just for testing, version of KNOT iot library is 7.16.1. Also letting the subscription set prompt user for the number (here set to zero) doesn’t help. Though I have no clue what the number is supposed to do.

Here is problematic part of the script:

  :global serialNumber [/system routerboard get serial-number]
  :global lorainfo [/iot/lora print detail as-value]
  :local mqttTopic ("GW/LRW/G-MIK-924-S-" . $serialNumber . "/CMD/WIFI/SCAN/START")
  :local mqttTopicBroadcast "GW/LRW/BROADCAST/CMD/WIFI/SCAN/START"

  :if ([:len [/iot mqtt subscriptions find topic=$mqttTopic broker="mosquitto"]] != 0) do={
    /iot mqtt unsubscribe broker="mosquitto" topic="GW/LRW/G-MIK-924-S-F5750EBAD33B/CMD/WIFI/SCAN/START"
  }
  :if ([:len [/iot mqtt subscriptions find topic=$mqttTopicBroadcast broker="mosquitto"]] != 0) do={
    /iot mqtt unsubscribe broker="mosquitto" topic="GW/LRW/BROADCAST/CMD/WIFI/SCAN/START"
  }

  :if ([:len [/iot mqtt subscriptions find topic=$mqttTopic broker="mosquitto"]] = 0) do={
    :put ("Subscribing to: ".  $mqttTopic)
    /iot mqtt subscribe broker=mosquitto topic=$mqttTopic
    :put ("Registering callback on: ".  $mqttTopic)
    :delay 1s
    /iot mqtt subscriptions set on-message={/system script run wifi_scan} broker="mosquitto" topic=$mqttTopic 0
    :put ("Subscribed to: ".  $mqttTopic)
  }

  :if ([:len [/iot mqtt subscriptions find topic=$mqttTopicBroadcast broker="mosquitto"]] = 0) do={
    :put ("Subscribing to: ".  $mqttTopicBroadcast)
    /iot mqtt subscribe broker=mosquitto topic=$mqttTopicBroadcast
    :put ("Registering callback on: ".  $mqttTopicBroadcast)
    # :delay 1s
    /iot mqtt subscriptions set on-message={/system script run wifi_scan} broker="mosquitto" topic=$mqttTopicBroadcast 0
    :put ("Subscribed to: ".  $mqttTopicBroadcast)
  }