Se tens um bom coração, ajuda-me! Prova de apitidão profissional

Nukenin106

Membro
Olá pessoal, boa noite
Desculpa pela hora, é que cheguei qause agora a casa. Bom, estou desenvolvendo o meu projeto para a pap, ele consiste em um sistema de alarme de temperatura que é enviado por SMS. Estou com um problema na parte do código (Python), eu fiz um script para o alarme da temperatura e seus padrões, e fiz uma interface para o utilizador (criei para evitar o contato do utilizador com o script) configurar os padões, o número de telemóvel e coisas do tipo, para ligar o script a GUI (estou usando a biblioteca tkinter) criei um módulo, para interligar as alterações de um código ao outro, só que não está funcionando, ele não está alterando no script. O que acham que eu possa fazer para consertar ?

Não sei se me entenderam, sou ruim com as palavras, mas desde já agradesço a quem puder me ajudar em algo!
 
Precisas de dar muito mais detalhes. Se puderes partilha o código que tens e explica o que funciona e o que não funciona.
 
Bom, então irei compartilhar aqui os códigos, só não me julguem se tiver erros bobos hahahaha, meu curso é de hardware, então estou aprendendo sozinha.


Bom vou tentar explicar, basicamente no script, em um loop infinito, um sensor é lido, e os valores comparados, se excederem os valores estipulados, entra numa "verificação", se verificar a alteração ele envia um SMS para o número de telefone que é configurado na API. A GUI recebe os valores que o utilizador quer alterar, e insere (altera) no script. O módulo contém as variavéis que vão ser alteradas, e depois importo o módulo em ambos (script e GUI), pois assim, quando a GUI alterar o valor da variavél, será alterado no módulo, e consequentemente no script. Esse foi o meu raciocínio.Tem alguns “print’s” no código, que são pra “testes” meus, então desconsiderem eles.

Módulo
Python:
MAXTEMP= 26
MINTEMP = 18

NUM_TELE= "+351960000000"
account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX3b"
auth_token = "1aXXXXXXXXXXXXXXXXXXXXXXXXXXXX29"
NUMERO_PI = "+16200000000"

Script
Python:
import time
import board
import adafruit_dht
from twilio.rest import Client
import temp
# Vars
SLEEPTIMETEST = 1.0
SLEEPTIMESMS = 15.0
NUMCONFIRM = 5
NUMERROR = 5
# Initialize the Twilio client
client = Client(temp.account_sid, temp.auth_token)
# Initialize the DHT22 sensor
dhtDevice = adafruit_dht.DHT22(board.D4)
count = 0
counterror = 0
while True:
    try:
        # Read the temperature and humidity from the sensor
        temperature_c = dhtDevice.temperature
        humidity = dhtDevice.humidity
        print (temp.MAXTEMP, temp.MINTEMP)
        # Check if the temperature is greater than 25 degrees Celsius
        if temperature_c > temp.MAXTEMP or temperature_c < temp.MINTEMP:
            #Increment the counter
            count = count +1
         
            time.sleep(SLEEPTIMETEST)
            if count == NUMCONFIRM:
                # Send a message using Twilio
                message = client.messages.create(
                    to= temp.NUM_TELE,
                    from_=temp.NUMERO_PI,
                    body="A temperatura atual é de {:.1f} C. Isso excede as normas estipuladas para a sala. Verifique, por favor! ;) ".format(temperature_c))
                time.sleep(SLEEPTIMESMS)
                #Reset the counter to repeat the loop
                count = 0
     
        else:
            #Reset the counter if the temperature is within the range
            count = 0    


    except RuntimeError as error:
        while True:
            try:
                # Read the temperature and humidity from the sensor
                temperature_c = dhtDevice.temperature
                humidity = dhtDevice.humidity
                break
            except RuntimeError as error:
                continue
                counterror = counterror +1
                if counterror == NUMERROR:
                    # Send an error message using Twilio
                    message = client.messages.create(
                        to="+351960000000",
                        from_="+16200000000",
                        body="Falha na leitura do sensor")
                    time.sleep(SLEEPTIMESMS)
                    break
                else:
                    counterror = 0
             
             
    print(count)
    print(temperature_c)
 
             
    time.sleep(SLEEPTIMETEST)


GUI
Python:
import tkinter as tk
import temp
import sys
# Add path to the module
sys.path.append('pap/front_back_sensor/twilio_sensor.py')
# Global variables
global MINANT, MAXANT
# Print current temperature settings
print (temp.MAXTEMP, temp.MINTEMP)
## Function to read and store desired temperature
def NEWTEMP():
    global MAXANT, MINANT
    MAXANT = temp.MAXTEMP
    MINANT = temp.MINTEMP
    print (MAXANT, MINANT)
    temp.MAXTEMP = float(entry1.get())
    temp.MINTEMP = float(entry2.get())
    print (temp.MAXTEMP, temp.MINTEMP)
    print(f"MAXTEMP: {temp.MAXTEMP}, MINTEMP: {temp.MINTEMP}")
    label_resultado["text"] = f"Alteração feita para:\nTemperatura Máxima {temp.MAXTEMP}\nTemperatura Mínima {temp.MINTEMP}"
# Function to display previous temperatures
def EXIBETEMP ():
 
    label_resultado["text"] = f"Temperatura Máxima anterior: {MAXANT}\nTemperatura Mínima anterior: {MINANT}"
# Function to set Twilio number
def NUMTWILIO ():
    temp.NUM_TELE= str(entry3.get())
    label_resultado["text"] = f" O número definido para notificação é : {temp.NUM_TELE} "
def ACCOUNT ():
    temp.auth_token = entry4.get()
    label_resultado["text"] = f"O Account inserido foi: {temp.account_sid}"
def TOKEN ():
    temp.auth_token = entry6.get()
    label_resultado ["text"] = f"O Token inserido foi: {temp.auth_token}"
def NUMERO_PI ():
    temp.NUMERO_PI = entry6.get ()
    label_resultado ["text"] = f"O número do RaspBerry foi inserido, {temp.NUMERO_PI}"
# Create the Tkinter root window
root= tk.Tk()
root.title ("Configurações do Sistema")


# Labels and entries for phone number
label4= tk.Label (root, text= "É necessário um número de telemóvel para receber os alertas. Defina este número com cuidado para evitar transtornos. \nO número definido para notificação é : ")
label4.pack()
entry3= tk.Entry(root)
entry3.pack (padx=10)
# Button to change phone number
botao_alt_num= tk.Button (root, text="Alterar Número", command= NUMTWILIO)
botao_alt_num.pack(pady= 10)
label7 =tk.Label (root, text= "Insira o número disponibilizado pela twilio, para o RaspBerry.")
label7.pack()
entry6 = tk.Entry (root)
entry6.pack ()
botao_NUMERO_PI= tk.Button (root, text= "Inserir", command= NUMERO_PI)
botao_NUMERO_PI.pack(pady= 10)
label5 = tk.Label (root, text= "Insira o Account twilio:")
label5.pack ()
entry4= tk.Entry (root)
entry4.pack()
botao_ACCOUNT= tk.Button (root, text="Inserir", command= ACCOUNT)
botao_ACCOUNT.pack(pady=10)
label6= tk.Label (root, text = "Insira o Token twilio")
label6.pack()
entry5= tk.Entry (root)
entry5.pack ()
botao_TOKEN= tk.Button (root, text= "Inserir", command= TOKEN)
botao_TOKEN.pack (pady= 10)
# Labels and entries for desired temperature
label3= tk.Label (root, text = "A temperatura atual é de:" .format())
label1 = tk.Label (root, text= "Temparatura maxima desejada")
label1.pack ()
entry1= tk.Entry (root)
entry1.pack()
label2= tk.Label(root, text= "Temperatura minima desejada")
label2.pack()
entry2= tk.Entry (root)
entry2.pack()
# Button to update temperature settings
botao_alterar =tk.Button (root, text="Alterar temperatura padrão", command= NEWTEMP)
botao_alterar.pack(pady=10)


# Button to display previous temperatures
botao_exibir = tk.Button(root, text="Exibir temperaturas anteriores", command= EXIBETEMP)
botao_exibir.pack(pady=10)
# Result label to display messages
label_resultado = tk.Label(root, text="")
label_resultado.pack()


# Additional label for number format
label5= tk.Label (root, text = "OBS: O número deve ter o seguinte formato +351XXXXXXXX, \ndeve conter o indicativo telefónico do país, a seguir (sem espaço), dos 8 dígitos telefónicos.")
label5.pack()


# Result label to display messagesr
root.mainloop()
 
Última edição pelo moderador:
pois assim, quando a GUI alterar o valor da variavél, será alterado no módulo, e consequentemente no script
Não li com muita atenção, mas olhando por alto não vi código para fazer isso acontecer.

Mudar o valor de uma variável obtida num módulo não muda o ficheiro original. Provavelmente queres espreitar alguma biblioteca para gerir ficheiros de configuração, p.ex. https://docs.python.org/3/library/configparser.html e https://tutswiki.com/read-write-config-files-in-python/
 
Back
Topo