#!/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)