163 lines
5.7 KiB
Python
163 lines
5.7 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():
|
|
#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'),
|
|
'ChScaleMax1' : redSrv0.get('SETTINGS:CH:SCALE:MAX1').decode('utf-8'),
|
|
'ChScaleMin1' : redSrv0.get('SETTINGS:CH:SCALE:MIN1').decode('utf-8'),
|
|
'ChRealMax1' : redSrv0.get('SETTINGS:CH:REAL:MAX1').decode('utf-8'),
|
|
'ChRealMin1' : redSrv0.get('SETTINGS:CH:REAL:MIN1').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/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/smin1", methods=['POST'])
|
|
def setScaleMin1():
|
|
scaleMin1 = request.form['ScaleMin1']
|
|
redSrv0.set('SETTINGS:CH:SCALE:MIN1', scaleMin1)
|
|
# rimando in settings
|
|
return redirect("/settings")
|
|
|
|
@flaskApp.route("/api/v1/smax1", methods=['POST'])
|
|
def setScaleMax1():
|
|
scaleMax1 = request.form['ScaleMax1']
|
|
redSrv0.set('SETTINGS:CH:SCALE:MAX1', scaleMax1)
|
|
# rimando in settings
|
|
return redirect("/settings")
|
|
|
|
@flaskApp.route("/api/v1/rmin1", methods=['POST'])
|
|
def setRealMin1():
|
|
realMin1 = redSrv0.get('RTDATA:CH:0')
|
|
redSrv0.set('SETTINGS:CH:REAL:MIN1', realMin1)
|
|
# rimando in settings
|
|
return redirect("/settings")
|
|
|
|
@flaskApp.route("/api/v1/rmax1", methods=['POST'])
|
|
def setRealMax1():
|
|
realMax1 = redSrv0.get('RTDATA:CH:0')
|
|
redSrv0.set('SETTINGS:CH:REAL:MAX1', realMax1)
|
|
# 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) |