Files
carputer/templates/app-service.py.j2
2025-08-03 17:18:58 -07:00

130 lines
4.2 KiB
Django/Jinja

import subprocess
import requests
from lxml import html
from flask import Flask, request, jsonify
import json
import os
app = Flask(__name__)
def start_service():
command = "systemctl start timelapse.service"
try:
# Run the command using subprocess.run()
process = subprocess.Popen(command, shell=True)
except subprocess.CalledProcessError as e:
return {"Error": e.strip('\n')}
command = "systemctl status timelapse.service | grep Active | cut -d ':' -f 2- | cut -b 2-"
try:
# Run the command using subprocess.run()
result = subprocess.run(command, shell=True, check=True, capture_output=True, text=True)
return {"Message": result.stdout.strip('\n')}
except subprocess.CalledProcessError as e:
return {"Error": e.strip('\n')}
def stop_service():
command = "systemctl stop timelapse.service"
try:
# Run the command using subprocess.run()
process = subprocess.Popen(command, shell=True)
except subprocess.CalledProcessError as e:
return {"Error": e.strip('\n')}
command = "systemctl status timelapse.service | grep Active | cut -d ':' -f 2- | cut -b 2-"
try:
# Run the command using subprocess.run()
result = subprocess.run(command, shell=True, check=True, capture_output=True, text=True)
return {"Message": result.stdout.strip('\n')}
except subprocess.CalledProcessError as e:
return {"Error": e.strip('\n')}
def service_status():
command = "systemctl status timelapse.service | grep Active | cut -d ':' -f 2- | cut -b 2-"
try:
# Run the command using subprocess.run()
result = subprocess.run(command, shell=True, check=True, capture_output=True, text=True)
command = "systemctl status timelapse.service | grep Active | cut -d ':' -f 2 | cut -d ' ' -f 2"
status = subprocess.run(command, shell=True, check=True, capture_output=True, text=True)
return {"Message": result.stdout.strip('\n'), "Status": status.stdout.strip('\n')}
except subprocess.CalledProcessError as e:
return {"Error": e.strip('\n')}
def read_gps_data_file():
# Define the path to your file. This is a relative path example. Adjust it as needed.
file_path = '{{ gps_service_directory }}/gps_data'
if os.path.exists(file_path):
with open(file_path, 'r') as file:
lines = file.readlines()
# Assuming the data is in a specific format, you can parse it accordingly
lat = lines[0].split(':')[1]
lon = lines[1].split(':')[1]
speed = lines[2].split(':')[1]
try:
lat = float(lat.strip('\n'))
lon = float(lon.strip('\n'))
speed = float(speed.strip('\n')) * 0.62
except:
lat = 0
lon = 0
speed = 0
# Round latitude and longitude to 5 decimal places at most
lat_rounded = round(lat, 3)
lon_rounded = round(lon, 3)
speed_rounded = round(speed, 1)
data = {
"lat": lat_rounded,
"lon": lon_rounded,
"speed": speed_rounded
}
else:
data = {
"lat": 37.548,
"lon": -121.961,
"speed": 0
}
return jsonify(data)
@app.route('/return_gps', methods=['GET'])
def return_gps():
return read_gps_data_file()
@app.route('/start', methods=['GET'])
def start():
try:
return jsonify(start_service())
except ValueError as e:
print(e)
return jsonify({'error': e}), 400
@app.route('/stop', methods=['GET'])
def stop():
try:
return jsonify(stop_service())
except ValueError as e:
print(e)
return jsonify({'error': e}), 400
@app.route('/status', methods=['GET'])
def status():
try:
return jsonify(service_status())
except ValueError as e:
print(e)
return jsonify({'error': e}), 400
@app.route('/test', methods=['GET'])
def test():
return jsonify({'message': 'Hello there'})
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)