ich habe jetzt einen Tag lang versucht mit Liste bzw Tupel zu arbeiten bzw in mein Script einzubinden.
Hoffe Ihr könnt mir hier weiterhelfen
Problem bei meinem Script ist, das mein Raspberry ein SMS versenden soll, das Script finktioniert soweit auch er schickt für jeden Temperatursensor eine Email und eine SMS.
Das Script läuft also in einer Schleife alle Sensoren surch und schickt dann Email und SMS, was natürlich blöd ist, es sollte so sein, das er nur die Sensorwerte schickt die nicht OK sind.
Ich muß noch erwähnen das ich ein totaler Anfänger bin und mir das Script aus einem anderen Forum zurechtgestrickt habe, aber jetzt steh ich am Schlauch.
Bitte helft mir, mein Ziel wäre es wenn Ihr noch Zeit findet mir es auch näher zu bringen, der Weg ist das Ziel
Code: Alles auswählen
#!/usr/bin/python
import os
import sys
import smtplib
from email.mime.text import MIMEText
verbose_level = 2
dead_hi = -0.02
dead_lo = -0.20
debug_level = 0
error_temp = -999
# dictionary with for 1-wire sensors: [sensor name] [1-Wire device]
sensor_dict = { 'G1':'28-01146530dbff',
'G2':'28-0114657640ff',
'G3':'28-0114658046ff',
'G4':'28-0114653517ff',
'G5':'28-0114652d46ff'
}
#---------------------------------------------------------------------------------------------
def read_sensor(Sensor):
if verbose_level > 2:
print "1++++ read_sensor()"
print "sensor:" , Sensor
if debug_level == 0:
# get 1-Wire id from dictionary
sensor_slave = str(sensor_dict.get(Sensor))
# Open 1-wire slave file
sensor_device = '/sys/bus/w1/devices/' + str(sensor_slave) + '/w1_slave'
if verbose_level > 2:
print "open: ", sensor_device
try:
file = open(sensor_device)
filecontent = file.read() # Read content from 1-wire slave file
file.close() # Close 1-wire slave file
stringvalue = filecontent.split("\n")[1].split(" ")[9] # Extract temperature string
if stringvalue[0].find("YES") > 0:
temp = error_temp
else:
temp = float(stringvalue[2:]) / 1000 # Convert temperature value
# temp=str(temp)
except IOError:
print "PANIC read_sensor - Cannot find file >" + sensor_slave + "< in /sys/bus/w1/devices/"
print "No sensor attached"
print "check with > cat /sys/devices/w1_bus_master1/w1_master_slaves"
temp=("Sensor not attached")
return(temp) # exit function read_sensor
#---------------------------------------------------------------------------------------------
def control_sensor(Sensor,alarm_hi,alarm_lo):
cur_temp = read_sensor(Sensor)
print "Aktuelle Temperatur:", cur_temp, "/ Alarm High:", alarm_hi, "/ Alarm Low:", alarm_lo
if cur_temp >= dead_lo and cur_temp <= dead_hi or cur_temp == error_temp:
print "read error - CRC = NO"
else:
if (cur_temp > alarm_hi) or (cur_temp < alarm_lo):
emailtext = "Sensor: " + Sensor + " / Die Temperatur betraegt: " + str(cur_temp) + " Grad Celsius"
msg = MIMEText(emailtext)
msg['Subject'] = 'Temperatur Alarm'
msg['From'] = 'XXX@gmail.com'
#msg['From'] = mail_from
msg['To'] = 'XXX@t-online.de'
#msg['To'] = mail_to
s = smtplib.SMTP('smtp.gmail.com:587')
#s = smtplib.SMTP(mail_smtp)
s.starttls()
s.login('XXX@gmail.com','PASSWORD')
#s.login(mail_from,mail_from_pass)
s.sendmail('XXX@t-online.de',['XXX@t-online.de'], msg.as_string())
#s.sendmail(mail_to,[mail_to], msg.as_string())
s.quit()
#Datei namens sms.txt in /var/spool/sms/outgoing erstellen
with open ("/var/spool/sms/Outgoing/sms.txt","w") as f:
f.write ("To: 0049170xxxxxxx / Sensor: %s / Temperatur ist/ %s Celsius" %(Sensor, str(cur_temp)))
else:
print "o.k."
return; # exit function control_sensor
#---------------------------------------------------------------------------------------------
if __name__ == "__main__":
### /etc/profile Umgebungsvariable festlegen
mail_from = os.getenv("MAIL-FROM")
mail_from_pass = os.getenv("MAIL-FROM-PASS")
mail_to = os.getenv("MAIL-TO")
mail_smtp = os.getenv("MAIL-SMTP")
### Sensor Kontrollfunktion fuer jeden aufrufen 1. Parameter = Alarm Hoechstwert 2. Parameter = Alarm Niedrigwert
control_sensor("G1",29.0,3.5)
control_sensor("G2",20.0,3.5)
control_sensor("G3",45.0,3.5)
control_sensor("G4",35.0,3.5)
control_sensor("G5",38.0,3.5)
sys.exit(0)