added shutdown command and details to posts
Using os.system the script sets a shutdown time, the bot will then inform users for the impending shutdown.
This commit is contained in:
parent
ce9d735acc
commit
dcb7f0f9d3
28
solar_bot.py
28
solar_bot.py
|
@ -6,7 +6,7 @@
|
||||||
# Command: python3 solar_bot.py --port /dev/ttyUSB0
|
# Command: python3 solar_bot.py --port /dev/ttyUSB0
|
||||||
|
|
||||||
import settings
|
import settings
|
||||||
import argparse, os, time
|
import argparse, os, time, datetime
|
||||||
from vedirect import Vedirect
|
from vedirect import Vedirect
|
||||||
from mastodon import Mastodon
|
from mastodon import Mastodon
|
||||||
from apscheduler.schedulers.background import BackgroundScheduler
|
from apscheduler.schedulers.background import BackgroundScheduler
|
||||||
|
@ -46,6 +46,21 @@ def print_data_callback(packet):
|
||||||
r.set('yield_yesterday',packet['H22'])
|
r.set('yield_yesterday',packet['H22'])
|
||||||
r.set('max_power_yesterday',packet['H23'])
|
r.set('max_power_yesterday',packet['H23'])
|
||||||
|
|
||||||
|
def get_shutdown():
|
||||||
|
fp = open('/run/systemd/shutdown/scheduled')
|
||||||
|
data = fp.readlines()
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
shutdown_date = data[0].split('=')[1].rstrip()
|
||||||
|
ts = int(shutdown_date) / 1000000
|
||||||
|
time_now = int(time.time())
|
||||||
|
shutdown_date = datetime.datetime.utcfromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
|
time_to_shutdown = ts - time_now
|
||||||
|
time_to_date = datetime.datetime.utcfromtimestamp(time_to_shutdown).strftime('%H:%M:%S')
|
||||||
|
|
||||||
|
return shutdown_date, time_to_date
|
||||||
|
|
||||||
def send_toot():
|
def send_toot():
|
||||||
logging.info('Preparing Toot')
|
logging.info('Preparing Toot')
|
||||||
try:
|
try:
|
||||||
|
@ -57,7 +72,10 @@ def send_toot():
|
||||||
yield_today = int(r.get('yield_today')) / 1000
|
yield_today = int(r.get('yield_today')) / 1000
|
||||||
max_power_today = r.get('max_power_today')
|
max_power_today = r.get('max_power_today')
|
||||||
load_power = load_current * batt_v_V
|
load_power = load_current * batt_v_V
|
||||||
toot_to_send = 'Solarcene.community Power Data\nBattery Voltage: {}V\nBattery Current: {}mA\nPanel Voltage: {}V\nPanel Power: {}W\nLoad Current: {}A\nLoad Power: {}W\nYield Today: {}kWh\nMax Power Today: {}W\nUpdated every 60 minutes'.format(batt_v_V, main_current, panel_voltage, panel_power, load_current, load_power, yield_today, max_power_today)
|
|
||||||
|
final_date, time_date = get_shutdown()
|
||||||
|
|
||||||
|
toot_to_send = 'Solarcene.community Power Data\nBattery Voltage: {}V\nBattery Current: {}mA\nPanel Voltage: {}V\nPanel Power: {}W\nLoad Current: {}A\nLoad Power: {}W\nYield Today: {}kWh\nMax Power Today: {}W\nUpdated every 60 minutes\n\nShutdown planned for {}UTC (in {})'.format(batt_v_V, main_current, panel_voltage, panel_power, load_current, load_power, yield_today, max_power_today, final_date, time_date)
|
||||||
logging.info(toot_to_send)
|
logging.info(toot_to_send)
|
||||||
except:
|
except:
|
||||||
logging.info('Failed to construct toot')
|
logging.info('Failed to construct toot')
|
||||||
|
@ -69,9 +87,12 @@ def send_toot():
|
||||||
logging.info('Failed to send toot')
|
logging.info('Failed to send toot')
|
||||||
|
|
||||||
def start_toot():
|
def start_toot():
|
||||||
|
logging.info('Sleeping for 60 seconds to allow mastodon to fully start')
|
||||||
|
time.sleep(60)
|
||||||
try:
|
try:
|
||||||
|
final_date, time_date = get_shutdown()
|
||||||
mastodon = Mastodon(access_token = settings.access_secret, api_base_url = settings.instance_url)
|
mastodon = Mastodon(access_token = settings.access_secret, api_base_url = settings.instance_url)
|
||||||
mastodon.toot('System Online')
|
mastodon.toot('System Online\n\nShutdown planned for: {}UTC (in {})'.format(final_date, time_date))
|
||||||
except:
|
except:
|
||||||
logging.info('Failed to send toot')
|
logging.info('Failed to send toot')
|
||||||
|
|
||||||
|
@ -86,6 +107,7 @@ if __name__ == '__main__':
|
||||||
mastodon_login()
|
mastodon_login()
|
||||||
logging.info('Logged In')
|
logging.info('Logged In')
|
||||||
|
|
||||||
|
os.system("shutdown -h 20:15")
|
||||||
start_toot()
|
start_toot()
|
||||||
|
|
||||||
ve = Vedirect(args.port, args.timeout)
|
ve = Vedirect(args.port, args.timeout)
|
||||||
|
|
Loading…
Reference in New Issue