Read the statement by Michael Teeuw here.
MMM-MQTTbridge
-
Ok, so now I tried setting it up, so far without luck.
In the config.js I added
{ module: 'MMM-MQTTbridge', disabled: false, config: { mqttServer: "mqtt://user:password@mqttserver:1883", mqttConfig: { listenMqtt: true, useMqttBridgeFormatOnly: false, interval: 300000, topicSubscr: ["cmnd/home/bathroom/mirror"], }, notiConfig: { listenNoti: true, useMqttBridgeFormatOnly: false, ignoreNotiId: ["CLOCK_MINUTE", "NEWS_FEED"], ignoreNotiSender: ["system", "NEWS_FEED"], }, // set "NOTIFICATIONS -> MQTT" dictionary at /dict/notiDictionary.js // set "MQTT -> NOTIFICATIONS" dictionary at /dict/mqttDictionary.js }, },
So this should make it listen to the topic
cmnd/home/bathroom/mirror
I have added the MMM-Remote module to have the screen off/on commands.
in the dict/mqttDictionary.js I have written/** mqtt-to-notification **/ /** dictionaty **/ /** for MMM-MQTTbridge module **/ /** modify comands **/ /** @sergge1 **/ var mqttHook = [ { mqttPayload: "TURN_OFF_SCREEN", mqttNotiCmd: ["MONITOROFF"] }, { mqttPayload: "TURN_ON_SCREEN", mqttNotiCmd: ["MONITORON"] }, { mqttPayload: "UNDIM_SCREEN", mqttNotiCmd: ["UNDIM"] }, { mqttPayload: "DIM_SCREEN", mqttNotiCmd: ["DIM"] }, ]; var mqttNotiCommands = [ { commandId: "MONITOROFF", notiID: "REMOTE_ACTION", notiPayload: 'MONITOROFF' }, { commandId: "MONITORON", notiID: "REMOTE_ACTION", notiPayload: 'MONITORON' }, { commandId: "UNDIM", notiID: "REMOTE_ACTION", notiPayload: 'BRIGHTNESS 100' }, { commandId: "DIM", notiID: "REMOTE_ACTION", notiPayload: 'BRIGHTNESS 75' }, ]; module.exports = { mqttHook, mqttNotiCommands};
But if I publish MONITOROFF to cmnd/home/bathroom/mirror nothing happens?
Now, how do I debug this, where can I see if it even receives the message? -
You have (1) mismatch in config and (2) wrong use of MMMRemoteControl syntax.
- First.
You config.js contains a line:
useMqttBridgeFormatOnly: false,
use the syntax exactly as it is written in the module’s readme. So please correct your config.js to
useMqttBridgeFromatOnly
.
!!! I know about this misprint but it will be corrected in next release. As of now use as it is mentioned in readme.- Second.
notiPayload: ‘MONITOROFF’
Notifications
REMOTE_ACTION:MONITOROFF
should be issued by the MQTTbridge module with your current mqttDictionary.js.However, I have checked the MMM-Remote control module, section “examples” and have found that MMMRemoteControl requires different from your Notification’s payload. It requires format:
REMOTE_ACTION:{action: 'MONITOROFF'}
So correct your mqttDictionary according to that format from MMM-Remote Control repo. As I understood, for monitor turn-off it should look like:
commandId: "MONITOROFF", notiID: "REMOTE_ACTION", notiPayload: "{action: 'MONITOROFF'}"
Check the terminal log, MQTTbridge log in there (1) module start/stop (2) connection to mqtt server (3) conversion mqtt->noti.
- First.
-
@fribse said in MMM-MQTTbridge:
where can I see if it even receives the message?
see the log in terminal
module produces something like this:[00:46:52.653] [LOG] [MQTT bridge] MQTT message received. Topic: cmnd/home/smartmirror/volume/set, message: VOLUME_SET:0 [00:46:52.873] [LOG] [MQTT bridge] MQTT -> NOTI issued: VOLUME_SET, payload: 0
-
This post is deleted! -
Ok, I fixed the config.
The typo is back :-)I see a few results right of the bat:
[15:55:10.009] [LOG] [MQTT bridge] MQTT brocker error: Error: client disconnecting [15:55:10.015] [LOG] [MQTT bridge] NOTI->MQTT. Topic: home/bathroom/mirror/set, payload: {"state":"OFF"} [15:55:20.026] [LOG] [MQTT bridge] MQTT brocker error: Error: client disconnecting [15:55:20.028] [LOG] [MQTT bridge] NOTI->MQTT. Topic: home/bathroom/mirror/set, payload: {"state":"ON"}
It also pops up on the screen that the MQTT broker is not replying, which is weird, as it’s in use for a lot of systems. Not sure what is going on?
The dict looks like this:
var mqttHook = [ { mqttPayload: "TURN_OFF_SCREEN", mqttNotiCmd: ["MONITOROFF"] }, { mqttPayload: "TURN_ON_SCREEN", mqttNotiCmd: ["MONITORON"] }, { mqttPayload: "UNDIM_SCREEN", mqttNotiCmd: ["UNDIM"] }, { mqttPayload: "DIM_SCREEN", mqttNotiCmd: ["DIM"] }, ]; var mqttNotiCommands = [ { commandId: "MONITOROFF", notiID: "REMOTE_ACTION", notiPayload: "{action: 'MONITOROFF'}" }, { commandId: "MONITORON", notiID: "REMOTE_ACTION", notiPayload: "{action: 'MONITORON'}" }, { commandId: "UNDIM", notiID: "REMOTE_ACTION", notiPayload: "{action; 'BRIGHTNESS 100'}" }, { commandId: "DIM", notiID: "REMOTE_ACTION", notiPayload: "{action: 'BRIGHTNESS 75'}" }, ]; module.exports = { mqttHook, mqttNotiCommands};
When I publish the MONITOROFF to it, it seems to pick it up and then bummer:
[16:04:30.547] [LOG] [MQTT bridge] MQTT message received. Topic: cmnd/home/bathroom/mirror, message: TURN_OFF_SCREEN [16:04:30.639] [LOG] [MQTT bridge] MQTT -> NOTI issued: REMOTE_ACTION, payload: {action: 'MONITOROFF'} [16:04:30.646] [LOG] Whoops! There was an uncaught exception... [16:04:30.665] [LOG] MagicMirror will not quit, but it might be a good idea to check why this happened. Maybe no internet connection? [16:04:30.667] [LOG] If you think this really is an issue, please open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues [16:04:30.710] [LOG] Whoops! There was an uncaught exception... [16:04:30.713] [LOG] MagicMirror will not quit, but it might be a good idea to check why this happened. Maybe no internet connection? [16:04:30.714] [LOG] If you think this really is an issue, please open an issue on GitHub: https://github.com/MichMich/MagicMirror/issues
So for me it looks like the MQTT part works, it’s the sending to ‘Remote commander’ that is not working, or am I wrong?
I’ve also tried creating a ‘RESTART’ command, same result. -
@fribse said in MMM-MQTTbridge:
[16:04:30.547] [LOG] [MQTT bridge] MQTT message received. Topic: cmnd/home/bathroom/mirror, message: TURN_OFF_SCREEN
the log record above means that MMM-MQTTbridge received mqtt message at the topic
cmnd/home/bathroom/mirror
with payloadTURN_OFF_SCREEN
.The next log record
[16:04:30.639] [LOG] [MQTT bridge] MQTT -> NOTI issued: REMOTE_ACTION, payload: {action: ‘MONITOROFF’}
says that MQTTbridge issued MagicMirror’s notification
REMOTE_ACTION
with payload{action: 'MONITOROFF'}
which is exactly what you need. So this part works well.However, the further messages in log
[16:04:30.646] [LOG] Whoops! There was an uncaught exception…
[16:04:30.665] [LOG] MagicMirror will not quit, but it might be a good idea to check why this happened. Maybe no internet connection?
[16:04:30.667] [LOG] If you think this really is an issue, please open an issue on GitHub: https://github.com/MichMich/MagicMirror/issuessays that something went wrong with the MM core. That could be the reason for not executing the command by another module.
To find out the reason, you need to localize the error. Try to disable all modules and then add modules one-by-one and find which one cause that error.
hint: to disable modules, usedisabled: true
within each module config.Change also
listenNoti:
tofalse,
in MQTTbridge config if you do not need to convert Noti to Mqtt messages. So the module will not check all incoming MM’s notifications.Here is the full log within my setup, I just sent a simple message to issue noti
TEST
with payloadmessage
:pi@raspberrypi:~/MagicMirror $ npm start dev > magicmirror@2.10.1 start /home/pi/MagicMirror > ./run-start.sh "dev" [23:48:05.361] [LOG] Starting MagicMirror: v2.10.1 [23:48:05.395] [LOG] Loading config ... [23:48:05.435] [LOG] Loading module helpers ... [23:48:05.444] [LOG] No helper found for module: clock. [23:48:07.792] [LOG] Initializing new module helper ... [23:48:07.794] [LOG] Module helper loaded: calendar [23:48:07.800] [LOG] No helper found for module: currentweather. [23:48:07.802] [LOG] No helper found for module: weatherforecast. [23:48:07.890] [LOG] Initializing new module helper ... [23:48:07.891] [LOG] Module helper loaded: newsfeed [23:48:08.506] [LOG] Initializing new module helper ... [23:48:08.507] [LOG] Module helper loaded: MMM-MQTTbridge [23:48:08.691] [LOG] All module helpers loaded. [23:48:08.693] [LOG] Starting server on port 8181 ... [23:48:08.705] [INFO] You're using a full whitelist configuration to allow for all IPs [23:48:08.735] [LOG] Server started ... [23:48:08.740] [LOG] Connecting socket for: calendar [23:48:08.744] [LOG] Starting node helper for: calendar [23:48:08.747] [LOG] Connecting socket for: newsfeed [23:48:08.749] [LOG] Starting module: newsfeed [23:48:08.752] [LOG] Connecting socket for: MMM-MQTTbridge [23:48:08.754] [LOG] [MQTT bridge] Module started [23:48:08.800] [LOG] Sockets connected & modules started ... [23:48:09.890] [LOG] Launching application. [23:48:26.071] [LOG] [MQTT bridge] Subscribed to the topic: home/smartmirror/bathroom/light/set [23:51:43.274] [LOG] [MQTT bridge] MQTT message received. Topic: home/smartmirror/bathroom/light/set, message: TEST:message [23:51:43.420] [LOG] [MQTT bridge] MQTT -> NOTI issued: TEST, payload: message
-
Hmm, not really sure what changed. I’ve tried setting the notilisten to false, and then I don’t see the error, but after reactivating it, I still dont’ see it.
I can see that the log reports state 0x6 when the monitor is on, and 0x2 when it’s off.
I can send commands to the Remote_Control module via http api, but nothing happens when I try it via the mqttbridge.
I guess I have to ask @Jopyth about that?I also tried changing the quotation markings in the dict file, to match the Remote_Control parameters in the examples, but no change :-(
var mqttNotiCommands = [ { commandId: "MONITOROFF", notiID: 'REMOTE_ACTION', notiPayload: '{action: "MONITOROFF"}' }, { commandId: "MONITORON", notiID: 'REMOTE_ACTION', notiPayload: '{action: "MONITORON"}' }, { commandId: "UNDIM", notiID: 'REMOTE_ACTION', notiPayload: '{action; "BRIGHTNESS", value: "100"}' }, { commandId: "DIM", notiID: "REMOTE_ACTION", notiPayload: '{action: "BRIGHTNESS", value: "75"}' }, { commandId: "RESTART", notiID: "REMOTE_ACTION", notiPayload: '{action: "RESTART"}' }, ];
-
@fribse said in MMM-MQTTbridge:
notiPayload: '{action; "BRIGHTNESS", value: "100"}'
attention the syntax is not correct
try wih:
notiPayload: '{action: "BRIGHTNESS", value: "100"}'
-
@Bugsounet Thanks, it doesn’t change the behaviour though :-)
-
Darned, I just found the problem.
I had this in the mqttdictionary:
var mqttHook = [ { mqttPayload: "TURN_OFF_SCREEN", mqttNotiCmd: ["MONITOROFF"] },
But I was sending a MQTT message with ‘MONITOROFF’, if I send ‘TURN_OFF_SCREEN’ it works perfectly :-)
Thankyou @Serge and @Bugsounet for this GREAT module, just the missing piece.
Now I have to figure out about the noti->mqtt thing, I can see that the monitor status is reported in the log, but I can’t see what ‘notification’ is sent…P.S. the logfile looks a bit weird:
0|mm | [MQTT bridge] MQTT message received. Topic: cmnd/bathroom/mirror, message: MONITORON 0|mm | [MQTT bridge] MQTT -> NOTI issued: REMOTE_ACTION, payload: **[object Object]**
But it works…