From time to time the photo module in MagicMirror hangs. I used to restart it manually by logging into the Raspberry and using the command “pm2 restart mm”. Now I want to make it so that it automatically restarts when I scan the NFC tag stuck to the back of the monitor.
So I divided big problem to smaller ones:
1. Restart MM,
2. Connection HA to MM machine,
3. Automation when HA apk scan tag,
4. Stick the NFC tag to the monitor xD
- Restart MM – Easy
pm2 restart mm
2. Connection HA to MM mashine
HA needs to let MM know to shut down for a while, so I guess the easiest way to do this is with mqtt broker.
I have used before Mosquitto, so I will use it.
MM site:
I created 2 files in my home directory: restartmm.sh and restartmm.py
restartmm.sh:
#!/usr/bin/env python
sleep 20
python /home/pi/restartmm.py &
restartmm.py basen on mqtt-screen-power project:
mqtt_host = "192.168.xxx.xxx"
mqtt_port = 1883
mqtt_topic = "/screen/restart"
mqtt_username = "xxxxxxxx"
mqtt_password = "xxxxxxxx"
power_on_command = "pm2 restart mm"
power_off_command = " "
import paho.mqtt.client as mqtt
import subprocess
def on_connect(client, userdata, flags, rc):
# The callback for when the client receives a CONNACK response from the server.
print("Connected with result code "+str(rc))
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
client.subscribe(mqtt_topic)
def on_message(client, userdata, msg):
# The callback for when a PUBLISH message is received from the server.
print(msg.topic+" "+str(msg.payload))
if str(msg.payload) == "ON":
subprocess.Popen(power_on_command,
shell=True, stdout=subprocess.PIPE)
else:
subprocess.Popen(power_off_command,
shell=True, stdout=subprocess.PIPE)
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set(mqtt_username, mqtt_password)
client.connect(mqtt_host, mqtt_port, 60)
# Blocking call that processes network traffic, dispatches callbacks and
# handles reconnecting.
# Other loop*() functions are available that give a threaded interface and a
# manual interface.
client.loop_forever()
Both files chown is 755. Autostart with command “crontab -e” – “@reboot sh /home/XXXXX/restartmm.sh”
HA site:
HA configuration.yaml
switch:
- platform: mqtt
name: "MM restart"
command_topic: "/screen/restart"
automations.yaml:
- alias: turn_off_restart_mm
trigger:
platform: state
entity_id: switch.mm_restart
to: 'on'
for:
seconds: 1
action:
service: switch.turn_off
entity_id: switch.mm_restart
3. Automation when HA apk scan tag,
HA automations.yaml:
- alias: mm_tag
initial_state: true
trigger:
- platform: tag
tag_id: 7275ecff-27a1-4c4d-a7fd-69647998dbf8
action:
- service: switch.turn_on
entity_id: switch.mm_restart
4. Stick the NFC tag to the monitor. Formality.
Comments are closed, but trackbacks and pingbacks are open.