Read the statement by Michael Teeuw here.
Unsolved Display image based on state or time
-
@wishmaster270 thanks, but I’m really confused by the notifications side.
I’ve setup mqttDictionary.js
var mqttHook = [ { mqttTopic: "magicmirror/tarrif/set", mqttPayload: [ { payloadValue: '{"state": "PEAK"}', mqttNotiCmd: ["Command PEAK"] }, { payloadValue: '{"state": "OFF-PEAK"}', mqttNotiCmd: ["Command OFF-PEAK"] }, { payloadValue: '{"state": "NIGHT"}', mqttNotiCmd: ["Command NIGHT"] }, ], }, ]; var mqttNotiCommands = [ { commandId: "Command PEAK", notiID: "ENERGY_TARRIF", notiPayload: {action: 'PEAK'} }, { commandId: "Command OFF-PEAK", notiID: "ENERGY_TARRIF", notiPayload: {action: 'OFF-PEAK'} }, { commandId: "Command NIGHT", notiID: "ENERGY_TARRIF", notiPayload: {action: 'NIGHT'} }, ]; module.exports = { mqttHook, mqttNotiCommands};
So ‘magicmirror/tarrif/set’ topic gets set to either PEAK, OFF-PEAK or NIGHT via Home Assistant mqtt publish action, and the above sees this then this sets the notification payload to send.
What I don’t understand is how to display the appropriate .png file using your module. I assume notification: “ENERGY_TARRIF” relates to the notification ID in the dictionary (?) but what relates to the payload? Based on your example I assumed it would be, eg: value: “PEAK” with the valueImgIcon underneath but that doesn’t work.
I just get all 3 images showing with NA underneath.
-
@wishmaster270 Thanks anyway and nevermind, I use MMM-MQTT already and found this to be considerably easier using the ‘conversions’ functionality…
{ module: 'MMM-MQTT', position: 'top_right', header: 'ENERGY TARRIF', config: { logging: false, useWildcards: false, mqttServers: [ { address: '192.168.222.100', port: '1883', user: 'mqtt', password: 'password, subscriptions: [ { topic: "magicmirror/tarrif/set", maxAgeSeconds: 60, label: "", conversions: [ { from: "PEAK", to: "<img src='modules/default/icons/peak.png' width=80px>", }, { from: "OFF-PEAK", to: "<img src='modules/default/icons/offpeak.png' width=80px>", }, { from: "NIGHT", to: "<img src='modules/default/icons/night.png' width=80px>", }, { from: "", to: "#DISABLED#", }, ] } ] } ], } },
-
@chimera Hi and no problem, great you found a solution. My modules are much more complicated in this situation.
-
@wishmaster270 For my own understanding (and possibly others) I’d still like to know how notifications work in your module, what variable determines the payload? How would I select an image based on a notification from the MQTTbridge? I see your example uses code to return a variable based on time of day, but if that comes in via notifications instead how would one display the correct image?
-
@chimera Hi and sure,
just tested a config which uses the values send by MQTT directly to decide which icon to display:
var mqttHook = [ { mqttTopic: "magicmirror/tarrif/set", mqttPayload: [ { mqttNotiCmd: ["energy_tarrif_value"] } ] } ]; var mqttNotiCommands = [ { commandId: "energy_tarrif_value", notiID: "ENERGY_TARRIF" } ]; module.exports = { mqttHook, mqttNotiCommands};
{ module: "MMM-MQTTbridge", disabled: false, config: { mqttServer: "mqtt://my_user:my_pass@my_server:the_port", mqttConfig: { listenMqtt: true, }, } }, { module: "MMM-ValuesByNotification", position: "top_left", header: "Energy", config: { updateInterval: 10, reuseCount: 90, valuePositions: "i", valueNaPositions: "i", itemPositions: "e", groupPositions: "e", groups: [ { items: [ { notification: "ENERGY_TARRIF", valueImgIcon: "modules/MMM-ValuesByNotification/icons/tom.jpg", values: [ { jsonpath: "state", thresholds: [ { type: "eq", value: "PEAK", valueImgIcon: "modules/MMM-ValuesByNotification/icons/peak.jpg", }, { type: "eq", value: "OFF-PEAK", valueImgIcon: "modules/MMM-ValuesByNotification/icons/off-peak.jpg", }, { type: "eq", value: "NIGHT", valueImgIcon: "modules/MMM-ValuesByNotification/icons/night.jpg", }, ] }, ] }, ] }, ] }, },
Explanation…
MMM-MQTTbridge:
- The module connects to the MQTT-Server
my_server
to portthe_port
with usermy_user
and passwordmy_pass
- As
listenMqtt
is set totrue
the settings inmqttDictionary.js
are used which results in:- If a message to
mqttTopic
magicmirror/tarrif/set
is received the message is processed by themqttNotiCmd
energy_tarrif_value
- As no
payloadValue
is specified the command is called independent of the message that is send to the topic - As no
notiPayload
is set in the command configuration but thenotiID
ENERGY_TARRIF
every time a message is received of the specified topic a notification is send to all other modules with notification idENERGY_TARRIF
and the original MQTT message as payload
- If a message to
MMM-ValuesByNotification:
- the module refreshes every ten seconds as
updateInterval
is set to10
- if no new notification is received for a configured
notification
of a item but the module refreshes it will reuse the last received value for a maximum of 90 times (reuseCount
) - As
valuePositions
andvalueNaPositions
are set toi
only a specified icon will be displayed instead of the value itself (which will bev
or if both should be displayedvi
; see Positions-Documentation for more info) - As
itemPositions
andgroupPositions
are both set toe
only the elements and no additional titles (t
) or icons (i
) are displayed ( see Positions-Documentation for more info) - A single group with one item which contains one value is specified
- The values of the item use the payload of the notification with id
ENERGY_TARRIF
- As default icon a image for the value (
valueImgIcon
) is used which has the pathmodules/MMM-ValuesByNotification/icons/tom.jpg
(see Icon-Documentation for more details) - The value element selects the content with
jsonpath
state
as its value. This means the payload of the notification is parsed as JSON and the value which is used in further processing is the content of thestate
element. This can be everything the HomeAssistant sends but should be eitherPEAK
,OFF_PEAK
orNIGHT
- As there are
thresholds
specified they are validated against the previously selectedstate
- If the payload is equal to (
eq
) to thevalue
PEAK
the path of thevalueimgIcon
is changed tomodules/MMM-ValuesByNotification/icons/peak.jpg
- If the payload is equal to (
eq
) to thevalue
OFF_PEAK
the path of thevalueimgIcon
is changed tomodules/MMM-ValuesByNotification/icons/off-peak.jpg
- If the payload is equal to (
eq
) to thevalue
NIGHT
the path of thevalueimgIcon
is changed tomodules/MMM-ValuesByNotification/icons/night.jpg
- If the payload is equal to (
Directly after the start the MMM-ValuesByNotification module will display the default icon. Every 10 seconds it refreshes. If a message for the specified topic is received by MMM-MQTTbridge the notification is send. The next time the module refreshes it will validate the message content and changes the icon depending on the content.
- The module connects to the MQTT-Server