#!/usr/bin/python2
# -*- coding: utf-8 -*-
import codecs
import telnetlib
import MySQLdb
from datetime import datetime, time
################
# Hole FHEM data
################
tnet_host= "localhost"
tnet_port= 7072
def fhem_task(fcmd):
tc= telnetlib.Telnet(tnet_host,tnet_port)
tc.write(fcmd)
erg= tc.read_until( "\n" )
tc.close()
return erg
# Abwesenheit pruefen
if "off" in fhem_task("list ABWESENHEIT STATE\r\n"):
abwesenheit="nicht gesetzt"
if "on" in fhem_task("list ABWESENHEIT STATE\r\n"):
abwesenheit="gesetzt"
# Liste Fensterkontakte
listFensterkontakte = ['FensterHeizung', 'FensterKeller', 'FensterGaestezimmer1', 'FensterGaestezimmer2', 'FensterBuero1', 'FensterBuero2', 'FensterWohnen1', 'FensterWohnen2', 'FensterWohnen3', 'FensterWohnen4', 'FensterGaestebad', 'FensterSpind', 'FensterBad1']
# Fensterkontakte
anz_fenster_offen=0;
for Fensterkontakt in listFensterkontakte:
if "open" in fhem_task("get "+ Fensterkontakt +" param STATE\r\n"):
anz_fenster_offen += 1
# Garagenkontakt
if "open" in fhem_task("get Garagentor param STATE\r\n"):
stat_garage="offen"
else:
stat_garage="geschlossen"
# Batteriestatus Fensterkontakte
kontakt_batterie_low=""
for Fensterkontakt in listFensterkontakte:
if "low" in fhem_task("get "+ Fensterkontakt +" param battery\r\n"):
kontakt_batterie_low += Fensterkontakt + ", "
# Wetter
try:
condition=str.split(fhem_task("get MeinWetter condition\r\n"))
if len(condition)==5:
wetter_icon=condition[3] + " " + condition[4]
else:
wetter_icon=condition[3]
except:
wetter_icon="Fehler"
luftdruck=str.split(fhem_task("get MeinWetter pressure\r\n"))
tendenz=str.split(fhem_task("get MeinWetter pressure_trend_txt\r\n"))
wind=str.split(fhem_task("get MeinWetter wind_speed\r\n"))
######################
# Datenbanken auslesen
######################
db = MySQLdb.connect(host="localhost", user="<benutzer>", passwd="<passwort>", db="<dbname>")
cur = db.cursor()
cur.execute("SELECT MIN(aussentemperatur), MAX(aussentemperatur) FROM temperaturen WHERE timestamp >= DATE(NOW()) ORDER BY timestamp")
for row in cur.fetchall():
mintemp=round(row[0],2)
maxtemp=round(row[1],2)
cur = db.cursor()
cur.execute("SELECT warmwasser, speicher_unten, error0 FROM snapshot")
for row in cur.fetchall():
speicher_oben=round(row[0],2)
speicher_unten=round(row[1],2)
fehlerspeicher=row[2].replace(" ","\r",2)
db.close()
################
# Preprocess SVG
################
now = datetime.now()
now_time = now.time()
if time(5,50) <= now.time() <= time(22,50):
# Wenn eine der Batterien der Fensterkontakte leer ist
if kontakt_batterie_low!="":
output = codecs.open('batterie_preprocess.svg', 'r', encoding='utf-8').read()
# Wenn die Heizung einen Fehler anzeigt
elif 'kein Fehler' not in fehlerspeicher:
output = codecs.open('fehler_preprocess.svg', 'r', encoding='utf-8').read()
# ansonsten abhaengig von speicher_unten ein SVG mit Luftdruck und Wind anzeigen. Ansonsten Puffertemperaturen
elif speicher_unten<=28:
output = codecs.open('daten_script_preprocess_lfw.svg', 'r', encoding='utf-8').read()
else:
output = codecs.open('daten_script_preprocess.svg', 'r', encoding='utf-8').read()
# Platzhalter mit Daten ersetzen
output = output.replace('ICON_ONE',wetter_icon.decode("utf-8"))
output = output.replace('WETTER_BESCHR',wetter_icon.decode("utf-8"))
output = output.replace('TEMP_A',fhem_task("get Aussenthermometer param temperature\r\n"))
output = output.replace('LUFT_A',fhem_task("get Aussenthermometer param humidity\r\n"))
output = output.replace('MIN_TEMP',str(mintemp))
output = output.replace('MAX_TEMP',str(maxtemp))
output = output.replace('PS_O',str(speicher_oben))
output = output.replace('PS_U',str(speicher_unten))
output = output.replace('DRUCK_A',luftdruck[3])
output = output.replace('TENDENZ',tendenz[3])
output = output.replace('WIND_A',wind[3])
output = output.replace('ANZ_FENSTER',str(anz_fenster_offen))
output = output.replace('STAT_ABWESENHEIT',abwesenheit)
output = output.replace('STAT_GARAGE',stat_garage)
output = output.replace('DATUM_UHRZEIT',datetime.strftime(datetime.now(), '%d.%m.%Y %H:%M:%S'))
output = output.replace('FEHLERSPEICHER',fehlerspeicher)
output = output.replace('BATTERIE',kontakt_batterie_low.replace(", ","\r"))
# neues SVG schreiben
codecs.open('daten_script_output.svg', 'w', encoding='utf-8').write(output)
else:
# Platzhalter mit Daten ersetzen
output = codecs.open('sleep_preprocess.svg', 'r', encoding='utf-8').read()
output = output.replace('DATUM_UHRZEIT',datetime.strftime(datetime.now(), '%d.%m.%Y %H:%M:%S'))
# neues SVG schreiben
codecs.open('daten_script_output.svg', 'w', encoding='utf-8').write(output)