+class ReadsensorError(RuntimeError):
+ pass
+
+
+def readsensor(sensor_id):
+ sensorfile = "/sys/bus/w1/devices/28-{}/w1_slave".format(sensor_id)
+ file = open(sensorfile)
+
+ # Inhalt des Sensors:
+ # 64 01 4b 46 7f ff 0c 10 01 : crc=01 YES
+ # 64 01 4b 46 7f ff 0c 10 01 t=22250
+
+ # Suche nach YES
+ linecrc = file.readline()
+ match = re.search(": crc=[0-9a-f]{2} (YES|NO)",linecrc)
+
+ yesno = match.group(1)
+ if yesno != "YES":
+ raise ReadsensorError('Could not evaluate sensorfile "{}"'.format(sensorfile))
+
+ # Temperatur raus
+ linetemp = file.readline()
+ match = re.search(" t=([-0-9]+)",linetemp)
+
+ temp_raw = match.group(1)
+ temp = float(temp_raw)/1000
+
+ file.close()
+ jetzt = datetime.datetime.now()
+
+ return jetzt, temp_raw, temp
+
+
+def writesensordatacsv(config, sensor_id, sensor_name, timestamp, value_type, value_raw, value):
+ # Schreiben des csv-files
+ with open(os.path.expanduser(config.get("csv", "filename")), "a", newline = "") as file:
+ writer = csv.writer(file, dialect = "excel")
+ writer.writerow([timestamp.strftime("%Y-%m-%d %H:%M"), sensor_id, sensor_name, "{:.1f}".format(value)])
+
+
+def readcsvfile(csvfile):
+ with open(csvfile, "r", newline="") as file:
+ yield from csv.DictReader(file, dialect = "excel", fieldnames=("timestamp", "sensor_id", "sensor_name", "value"))
+
+
+def writesensordatadb(config, sensor_id, sensor_name, timestamp, value_type, value_raw, value):
+ # Schreiben des db-files
+ user = config.get('database', 'user')
+ pwd = config.get('database','password')
+ host = config.get('database','hostname')
+ db = config.get('database','database')
+
+ engine = create_engine('mysql+mysqldb://{}:{}@{}/{}'.format(user, pwd, host, db), echo=False)
+ conn = engine.connect()
+ with warnings.catch_warnings():
+ # ignore _mysql_exceptions.Warning: Duplicate entry '0316a2193bff-2018-08-29 14:30:00' for key 'sensorid_timestamp'
+ warnings.simplefilter("ignore", category=MySQLdb.cursors.Warning)
+ conn.execute("insert ignore into sensors (sensor_id, sensor_name, value_type, value_raw, value, timestamp) values (%s,%s,%s,%s,%s,%s)", sensor_id, sensor_name, value_type, value_raw, value, timestamp)
+ conn.close()