Salve a tutti, Mi chiamo Andrea D'alessandro e sto cominciando a leggere e scrivere con python..... Leggendo vari esempi e vari libri stavo provando a fare un applicazione web con flask che gira su raspberry pi3 alla quale sono collegati 4 RELE' ,un orologio, un sensore di temperatura e umidita', ed una fotoresistenza. Ho creato una pagina web con 4 tasti che accende e spegne i RELE' legge le variabili ora temperatura ed umidita'. Funziona alla grande
Il problema e' la fotoresistenza, ho provato a far girare un altro script ceck_current() (threaded=True) che rileva lo stato di una luce ed a seconda se spenta o accesa lo comunica alla variabile status della pagina Web ma purtroppo non va. Se qualcuno mi potrebbe dare qualche consiglio gli sarei molto grato. vi allego lo script python e la pagine web Saluti AndreaTitle: STATO CORRENTE
Lista Devices e Stato
La Data e l'ora sul server e': {{ time }} UTC
La Temperatura e': {{ temp }} C°
L' umidità e': {{ hum }} %
LINEA: {{ status }}
{% for pin in pins %}Il RELE {{ pins[pin].name }} {% if pins[pin].state == true %} e' attualmente ON (SPEGNI) {% else %} e attualmente OFF (ACCENDI) {% endif %}
{% endfor %} {% if message %}{{ message }}
{% endif %}
# -*- coding: utf-8 -*-
import threading
import time
import fotoresistenza
import dht11
from collections import OrderedDict #non necessaria serve a ordinare i pulsanti se sono nominati con RELE1 RELE2 etc
import RPi.GPIO as GPIO
from flask import Flask, render_template,request
import datetime
app = Flask(__name__)
def ceck_current():
global status
GPIO.setmode(GPIO.BCM)
GPIO.setup(19,GPIO.IN)
while True:
value= GPIO.input(19)
if value == 0:
status = 'LINEA in CORRENTE'
return(status)
print(status)
else:
status = 'ASSENZA RETE ELETTRICA'
return(status)
print(status)
time.sleep(1)
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
pins = {
4: {'name':'MODEM','state': GPIO.LOW,'pos':1},
17: {'name': 'SENSORE','state': GPIO.LOW,'pos':2},
22: {'name':'GPS','state': GPIO.LOW,'pos':3},
27: {'name':'SENSORE1','state': GPIO.LOW,'pos':4},
}
pins1 = OrderedDict (sorted (pins.items(),key= lambda x: x[1]['pos'], reverse=False))#non necessaria serve a ordinare i pulsanti se sono nominati con RELE1 RELE2 etc
print (pins1) #non necessaria serve a ordinare i pulsanti se sono nominati con RELE1 RELE2 etc
for pin in pins1:
GPIO.setup(pin,GPIO.OUT)
GPIO.output(pin,GPIO.LOW)
@app.route("/")
def main():
now= datetime.datetime.now()
timestring = now.strftime("%Y-%m-%d %H:%M")
instance = dht11.DHT11(pin=5)
result = instance.read()
temp= result.temperature
hum = result.humidity
#variabile = fotoresistenza.get_temp_hum()
for pin in pins1:
pins[pin]['state'] = GPIO.input(pin)
templateData = {
'time' : timestring,
'pins' : pins1,
'temp' : temp,
'hum' : hum,
'status' : status
}
return render_template('index.html', **templateData)
@app.route("/<changePin>/<action>")
def action(changePin,action):
variabile = fotoresistenza.get_temp_hum()
instance = dht11.DHT11(pin=5)
result = instance.read()
temp= result.temperature
hum = result.humidity
now= datetime.datetime.now()
timestring = now.strftime("%Y-%m-%d %H:%M")
changePin = int(changePin)
deviceName = pins[changePin]['name']
if action == "on":
GPIO.output(changePin, GPIO.HIGH)
message = deviceName, " ACCESO."
if action == "off":
GPIO.output(changePin, GPIO.LOW)
message = deviceName, " SPENTO."
if action == "toggle":
GPIO.output(changePin, not GPIO.input(changePin))
message = "Toggled " + deviceName + "."
for pin in sorted (pins):
pins[pin]['state'] = GPIO.input(pin)
templateData = {
'message' : message,
'pins' : pins1,
'time' : timestring,
'temp' : temp,
'hum' : hum,
'status': status,
}
return render_template('index.html', **templateData)
if __name__ == "__main__":
ceck_current() # se attivo questa funzione la pagina veb si blocca
# se attivo questa funzione la pagina web si blocca
app.run(host='0.0.0.0', port=80, debug=True, threaded=True)
_______________________________________________ Python mailing list [email protected] https://lists.python.it/mailman/listinfo/python
