├── .gitattributes ├── Node-Red-Example-Flow.txt ├── Prusa.yaml ├── README.md ├── install.sh ├── shutdown.py ├── shutdown.service └── shutdown.sh /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /Node-Red-Example-Flow.txt: -------------------------------------------------------------------------------- 1 | [{"id":"37d7f76b.8d69f8","type":"tab","label":"Prusa","disabled":false,"info":""},{"id":"ce904bf6.d38e78","type":"mqtt in","z":"37d7f76b.8d69f8","name":"Octoprint Print Done","topic":"octoPrint/event/PrintDone/#","qos":"0","datatype":"utf8","broker":"3ca313b8.542abc","x":350,"y":180,"wires":[["179c7e9a.b21511"]]},{"id":"32f3f58d.044a4a","type":"debug","z":"37d7f76b.8d69f8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":830,"y":120,"wires":[]},{"id":"63dd5bc4.c0e4e4","type":"mqtt out","z":"37d7f76b.8d69f8","name":"Prusa Switch","topic":"octoprint/shutdown","qos":"0","retain":"false","broker":"3ca313b8.542abc","x":1150,"y":238,"wires":[]},{"id":"179c7e9a.b21511","type":"function","z":"37d7f76b.8d69f8","name":"OFF","func":"msg.payload=\"OFF\"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":550,"y":180,"wires":[["32f3f58d.044a4a","d023a363.af34f"]]},{"id":"edc56e9f.7c54e","type":"inject","z":"37d7f76b.8d69f8","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"ON","payloadType":"str","x":330,"y":440,"wires":[["58e9dfb3.67c4c"]]},{"id":"58e9dfb3.67c4c","type":"mqtt out","z":"37d7f76b.8d69f8","name":"","topic":"prusa/switch/mains/command","qos":"0","retain":"false","broker":"3ca313b8.542abc","x":710,"y":440,"wires":[]},{"id":"d023a363.af34f","type":"function","z":"37d7f76b.8d69f8","name":"Printing Finished","func":"hi= msg.payload;\npayload={chatId:876235944,\ntype:\"message\",\ncontent: \"Printing Finished\"\n};\nreturn {payload};","outputs":1,"noerr":0,"initialize":"","finalize":"","x":850,"y":180,"wires":[["4f9c00fa.1afe7"]]},{"id":"e25b5160.5c861","type":"timeout","z":"37d7f76b.8d69f8","name":"My Timeout","outtopic":"Off","outsafe":"","outwarning":"","outunsafe":"Nexz z level","warning":"10","timer":"600","repeat":false,"again":true,"x":830,"y":240,"wires":[["d7cd07af.9d31c8"]]},{"id":"51802b11.d3bb54","type":"debug","z":"37d7f76b.8d69f8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":810,"y":300,"wires":[]},{"id":"becb66e0.56c8c8","type":"function","z":"37d7f76b.8d69f8","name":"OFF","func":"msg.payload=\"OFF\"\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","x":550,"y":240,"wires":[["51802b11.d3bb54","e25b5160.5c861"]]},{"id":"d417e411.4b1e38","type":"mqtt in","z":"37d7f76b.8d69f8","name":"Print Progress","topic":"octoPrint/progress/printing/#","qos":"0","datatype":"utf8","broker":"3ca313b8.542abc","x":330,"y":240,"wires":[["becb66e0.56c8c8"]]},{"id":"d7cd07af.9d31c8","type":"debug","z":"37d7f76b.8d69f8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":1130,"y":300,"wires":[]},{"id":"d6666d50.e1a2c","type":"inject","z":"37d7f76b.8d69f8","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"OFF","payloadType":"str","x":330,"y":600,"wires":[["3e8e02a8.2fed9e"]]},{"id":"3e8e02a8.2fed9e","type":"mqtt out","z":"37d7f76b.8d69f8","name":"","topic":"octoprint/shutdown","qos":"0","retain":"false","broker":"3ca313b8.542abc","x":670,"y":598,"wires":[]},{"id":"70ca460f.6cb348","type":"inject","z":"37d7f76b.8d69f8","name":"","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"OFF","payloadType":"str","x":330,"y":500,"wires":[["58e9dfb3.67c4c"]]},{"id":"4f9c00fa.1afe7","type":"telegram sender","z":"37d7f76b.8d69f8","name":"AwningBot","bot":"f181a11d.afdf1","x":1150,"y":180,"wires":[[]]},{"id":"3ca313b8.542abc","type":"mqtt-broker","z":"","name":"Hub","broker":"mosquitto","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"f181a11d.afdf1","type":"telegram bot","z":"","botname":"sensorsIOT_AwningBot","usernames":"","chatids":"","baseapiurl":"","updatemode":"polling","pollinterval":"300","usesocks":false,"sockshost":"","socksport":"6667","socksusername":"anonymous","sockspassword":"","bothost":"","localbotport":"8443","publicbotport":"8443","privatekey":"","certificate":"","useselfsignedcertificate":false,"sslterminated":false,"verboselogging":false}] -------------------------------------------------------------------------------- /Prusa.yaml: -------------------------------------------------------------------------------- 1 | esphome: 2 | name: prusa1 3 | platform: ESP8266 4 | board: esp01_1m 5 | 6 | wifi: 7 | ssid: !secret wifi_ssid 8 | password: !secret wifi_password 9 | fast_connect: true 10 | 11 | mqtt: 12 | broker: 192.168.0.203 13 | port: 1883 14 | username: "admin" 15 | password: "admin" 16 | on_message: 17 | topic: prusa/mains 18 | qos: 0 19 | then: 20 | - delay: 30s 21 | - switch.turn_off: mains 22 | 23 | captive_portal: 24 | 25 | # Enable logging 26 | logger: 27 | 28 | ota: 29 | 30 | output: 31 | - platform: gpio 32 | pin: GPIO12 33 | id: relay_1 34 | 35 | switch: 36 | - platform: output 37 | name: mains 38 | id: mains 39 | output: relay_1 40 | 41 | status_led: 42 | pin: 43 | number: GPIO13 44 | inverted: yes -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Raspberry remote shutdown 2 | 3 | Video: https://youtu.be/WR0WdTBQJGo 4 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "installing pip3" 3 | sudo apt update 4 | sudo apt install python-pip 5 | sudo pip install paho-mqtt 6 | 7 | echo "installing service" 8 | 9 | sudo cp shutdown.service /etc/systemd/system/shutdown.service 10 | sudo systemctl enable shutdown.service 11 | sudo systemctl start shutdown.service -------------------------------------------------------------------------------- /shutdown.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | import paho.mqtt.client as mqtt 5 | import time 6 | broker="192.168.0.203" 7 | 8 | #define callback 9 | def on_message(client, userdata, message): 10 | msg=str(message.payload.decode("utf-8")) 11 | print("message =",msg) 12 | topic=message.topic 13 | messages.append([topic,msg]) 14 | def on_connect(client, userdata, flags,rc): 15 | if rc==0: 16 | client.connected_flag=True 17 | client.subscribe(sub_topic) 18 | else: 19 | client.bad_connection_flag=True 20 | client.connected_flag=False 21 | 22 | ##MQTT 23 | messages=[] 24 | sub_topic="octoprint/shutdown/#" 25 | client= mqtt.Client("Octoprint") 26 | ###### 27 | client.on_message=on_message 28 | client.on_connect=on_connect 29 | client.username_pw_set(username="admin", password="admin") 30 | client.connected_flag=False 31 | client.connect(broker)#connect 32 | while True: 33 | client.loop(0.01) 34 | time.sleep(1) 35 | if len(messages)>0: 36 | m=messages.pop(0) 37 | print("shutdown") 38 | client.publish("prusa/mains/sonoff", payload=None, qos=0, retain=False) 39 | os.system("sudo shutdown now") -------------------------------------------------------------------------------- /shutdown.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Shutdown 3 | After=network.target 4 | 5 | [Service] 6 | User=pi 7 | ExecStart=/usr/bin/python -u /home/pi/Raspberry-remote-shutdown/shutdown.py 8 | StandardOutput=inherit 9 | StandardError=inherit 10 | Restart=always 11 | 12 | [Install] 13 | WantedBy=multi-user.target -------------------------------------------------------------------------------- /shutdown.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "Shutdown started" 3 | mosquitto_pub -h hub.local -t prusa/mains/sonoff -m OFF 4 | sudo shutdown now 5 | --------------------------------------------------------------------------------