My goal is:
use the dashboard to change device configurations - in cases where the configured MQTT password is long.
My actions are:
making dashboard configuration changes to a device that is working when a configuration is flashed with mos
The result I see is: I have a project that uses very long MQTT password (currently 162 characters). The password is working fine when setting it in mos.,yml, building and updating the whole firmware.
With this long password the content of the password configuration gets garbled. After updating the configuration through the dashboard the MQTT from the mongoose-os device stops working as it cannot log in.
When making changes to the configuration with the Dashboard tools everything is fine if the passwords have normal length.
My expectation & question is:
Is there a limit for the length of the password in the dashboard configuration window / save?
Could be something else. But limited size for the password handling in the dashboard save seemed like a reasonable suspect…
It looks like a bug.
Does it manifest only for the long password?
Saving other options is fine?
Could you start developer tools in a browser and catch the Config.Set REST request & reply please?
Then Config.Save
{“reboot”:true,“try_once”:true}
->
{
“saved”: true
}
And then the subsequent Config.Get partial response, the line with error:
“mqtt”: {
“pass”: “”,
For a few first experiments with a long password, I got about the right password, just <10 of the first characters were garbled. Then it was truncated to empty string. Updating with a short password fixes this.
Passwords up to about 80 characters seemed to work, and around 90 character long passwords start getting garbled. Sometimes truncated for empty string, sometimes the first characters replaced like this:
“”,5�?edAccessSignature…"
There is no Windows involved when this error happens. The target for MQTT is an Azure server. But the configuration&dashboard is used from a Mac. The error happens both with Crome and Safari.
mos config-set to my understanding works only on locally connected devices? We would need to update remote devices.
What kind of escaping is needed for the mqtt.pass - or is it just a string? We can check that.
After several experiments, it seems that it is the &-characters that cause the trouble. If I remove the three occurrences of & in the password line, dashboard works ok.
Can I somehow escape the characters in the dashboard in such a way that it would be stored as a & in the MongooseOS device?
The configuration is JSON. And thus, the JSON strings that are used in the configuration, should be properly escaped. You can use some free online JSON escape/unescape tools to escape your password, and test.
w.r.t. Microsoft - I was under impression that Azure is Microsoft’s product.
The password we use is valid JSON. There is no problem having a &-character in JSON, it does not need to be escaped: https://www.json.org/
The same string works when set in mos.yml
Nevertheless, tried to replace & with \&. mdash gives an error “SyntaxError: Unexpected token & in JSON at position 1541”
Could it be that the &-escaping is needed in the HTML/form/web part? That is hard to tell without looking how the dashboard is implemented…
(Azure is Microsoft, but no Microsoft product is yet involved when this problem arises. Once the password setting is correct, then it will connect to a Microsoft server…)
I’ve mos config-set debug.level=3 followed by mos console, and in the mDash UI, set the mqtt1.pass to 1&2. I can see that the UI sends the data as expected:
Notice the "params":{"config":{"mqtt1":{"pass":"1\u00262"}}}, . The ampersand was marshalled by mDash into \u0026, and that is the reason why the parser on the device side gets confused. The parser is https://github.com/cesanta/frozen, which croaks on the \u… escapes:
Thus, the solution is either to make frozen recognise at least simple one-byte unicode escapes, or to make the mDash not escaping ASCII range.
Let me follow up further on that.
For now, you can use the mos command line tool to set the field value:
mos --port wss://YOUR_API_KEY@mdash.net/api/v2/devices/YOUR_DEVICE_ID/rpc config-set mqtt.pass=...
Thanks for figuring out where the problem was and for the frozen fix!
I did not manage to update the confs remotely from my Mac as I get these errors from mos WebSocket connection failed: Invalid HTTP response code returned. Missing rpc-ws library?: bad status.
I get this after both “mos update latest” and “mos update latest”. Tried some “go get …” libs but did not figure it out.
Let’s see if the mdash.net could be used with “mos --port mqtt://mdash.net:1883…” way
At least this will be fixed once the changes propagate so not that big issue to us any more.