Files
AnaLogger/server/FlythisServer.py
T
2021-03-26 15:11:53 +01:00

173 lines
6.3 KiB
Python

#!/usr/bin/python
from flask import Flask, render_template, jsonify, request
import datetime
from flask.wrappers import Request
import redis
import socket
from werkzeug.utils import redirect
#create a socket object
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
#connect to the server on local computer
s.connect(("8.8.8.8", 80))
#assegno a variabile indirizzo ip per usi futuri
ipv4 = s.getsockname()[0]
s.close()
#volendo stampo a video IPv4
#print("Indirizzo Ipv4 assegnato: ",s.getsockname()[0])
#configurazione per lavorare su server redis locale
REDIS_PORT = 6379
REDIS_HOST = '127.0.0.1'
redSrv0 = redis.Redis(
host=REDIS_HOST,
port=REDIS_PORT,
db=0)
flaskApp = Flask(__name__)
@flaskApp.route("/")
#funzione main: passa al template home il titolo
def main():
channelsData = {
'title' : 'Home'
}
#assegno il template html di riferimento
return render_template('home.html', **channelsData)
@flaskApp.route("/logger")
#funzione logger, route a pagina /logger
def logger():
channelsData = {
'title' : 'Logger',
'timeSrv' : redSrv0.get('RTDATA:TIME:SRV').decode('utf-8'),
'timeLog' : redSrv0.get('RTDATA:TIME:LOG').decode('utf-8'),
'Freq' : redSrv0.get('SETTINGS:LOG:FREQ').decode('utf-8'),
'Ch0' : redSrv0.get('RTDATA:CH:0').decode('utf-8'),
'Ch1' : redSrv0.get('RTDATA:CH:1').decode('utf-8'),
'Ch2' : redSrv0.get('RTDATA:CH:2').decode('utf-8'),
'Ch3' : redSrv0.get('RTDATA:CH:3').decode('utf-8'),
'Ch4' : redSrv0.get('RTDATA:CH:4').decode('utf-8'),
'Ch5' : redSrv0.get('RTDATA:CH:5').decode('utf-8'),
'Ch6' : redSrv0.get('RTDATA:CH:6').decode('utf-8'),
'Ch7' : redSrv0.get('RTDATA:CH:7').decode('utf-8')
}
#assegno il template html di riferimento
return render_template('logger.html', **channelsData)
@flaskApp.route("/settings")
#funzione setup, route a pagina /setup
def setup():
channelsData = {
'title' : 'Settings',
'Freq' : redSrv0.get('SETTINGS:LOG:FREQ').decode('utf-8')
}
#assegno il template html di riferimento
return render_template('settings.html', **channelsData)
@flaskApp.route("/about")
#funzione about, route a pagina /about
def about():
channelsData = {
'title' : 'About'
}
#assegno il template html di riferimento
return render_template('about.html', **channelsData)
# definisco una NUOVA route a cui rispondere su chiamta in metodo GET x restituire dati aggiornati
@flaskApp.route("/api/v1/channels/all", methods=['GET'])
def api_channels_all():
numCh = redSrv0.get('SETTINGS:SELECTED_CH').decode('utf-8')
#funzione api_channels_all: legge direttamente da redis, ritorna jsonify
channelsData = {
'timeSrv' : redSrv0.get('RTDATA:TIME:SRV').decode('utf-8'),
'timeLog' : redSrv0.get('RTDATA:TIME:LOG').decode('utf-8'),
'Freq' : redSrv0.get('SETTINGS:LOG:FREQ').decode('utf-8'),
'Ch0' : redSrv0.get('RTDATA:CH:0').decode('utf-8'),
'Ch1' : redSrv0.get('RTDATA:CH:1').decode('utf-8'),
'Ch2' : redSrv0.get('RTDATA:CH:2').decode('utf-8'),
'Ch3' : redSrv0.get('RTDATA:CH:3').decode('utf-8'),
'Ch4' : redSrv0.get('RTDATA:CH:4').decode('utf-8'),
'Ch5' : redSrv0.get('RTDATA:CH:5').decode('utf-8'),
'Ch6' : redSrv0.get('RTDATA:CH:6').decode('utf-8'),
'Ch7' : redSrv0.get('RTDATA:CH:7').decode('utf-8'),
'ChScaleMax' : redSrv0.get('SETTINGS:IN:MAX:'+str(numCh)).decode('utf-8'),
'ChScaleMin' : redSrv0.get('SETTINGS:IN:MIN:'+str(numCh)).decode('utf-8'),
'ChRealMax' : redSrv0.get('SETTINGS:OUT:MAX:'+str(numCh)).decode('utf-8'),
'ChRealMin' : redSrv0.get('SETTINGS:OUT:MIN:'+str(numCh)).decode('utf-8')
}
# restituisce in formato json i dati letti da redis
return jsonify(channelsData)
# Route di comando x LOG: start e stop
@flaskApp.route("/api/v1/log/start", methods=['PUT'])
def start_log():
#funzione start_log: scrive su redis LOG:STATUS -> 1
redSrv0.set('SETTINGS:LOG:STATUS', 1)
return "OK"
@flaskApp.route("/api/v1/log/stop", methods=['PUT'])
def stop_log():
#funzione stop_log: scrive su redis LOG:STATUS -> 0
redSrv0.set('SETTINGS:LOG:STATUS', 0)
return "OK"
@flaskApp.route("/api/v1/setup/saveInMin", methods=['PUT'])
def setupInMin():
# devo leggere il channel attualmente selezionato
indCh = redSrv0.get('SETTINGS:SELECTED_CH').decode('utf-8')
currChVal = redSrv0.get('RTDATA:CH:'+ str(indCh))
redSrv0.set('SETTINGS:IN:MIN:'+ str(indCh), currChVal)
return redirect("/settings")
@flaskApp.route("/api/v1/setup/saveInMax", methods=['PUT'])
def setupInMax():
# devo leggere il channel attualmente selezionato
indCh = redSrv0.get('SETTINGS:SELECTED_CH').decode('utf-8')
currChVal = redSrv0.get('RTDATA:CH:'+ str(indCh))
redSrv0.set('SETTINGS:IN:MAX:'+ str(indCh), currChVal)
return redirect("/settings")
@flaskApp.route("/api/v1/setup/selectChannel/<numCh>", methods=['PUT'])
def selectChannel(numCh):
print(numCh)
# request_data = request.get_json()
# # devo leggere il channel attualmente selezionato, x ora cablo a 0...
# numCh = request_data['channel']
redSrv0.set('SETTINGS:SELECTED_CH', numCh)
return "OK"
@flaskApp.route("/api/v1/sessions", methods=['POST'])
def sessionCreate():
#funzione creazione sessione: scrive su redis SESSION:NAME prendendolo dall'input in pagina html con nome NewSessionName
sessionName = request.form['NewSessionName']
redSrv0.set('RTDATA:SESSION:NAME', sessionName)
# rimando in logger
return redirect("/logger")
@flaskApp.route("/api/v1/frequency", methods=['POST'])
def setFrequency():
#funzione set frequenza scrive su redis LOG:FREQ prendendolo dall'input in pagina html con nome LogFreq
newFrequency = request.form['LogFreq']
redSrv0.set('SETTINGS:LOG:FREQ', newFrequency)
# rimando in settings
return redirect("/settings")
@flaskApp.route("/api/v1/scaleout", methods=['POST'])
def setScale():
indexCh = redSrv0.get('SETTINGS:SELECTED_CH').decode('utf-8')
scaleMin = request.form['ScaleMin']
redSrv0.set('SETTINGS:OUT:MIN:'+ str(indexCh), scaleMin)
scaleMax = request.form['ScaleMax']
redSrv0.set('SETTINGS:OUT:MAX:'+ str(indexCh), scaleMax)
# rimando in settings
return redirect("/settings")
#dichiaro host ipv4 (ottenuto sopra utilizzando il modulo socket)
if __name__ == "__main__":
flaskApp.run(host=ipv4, port=80, debug=True)