Lueftung_kalibrieren
Druckschwelle begründen
MINMAX auch für Bilanz der Lüftung
dafür plot_bilanzfehler(Wärmebilanz oder Lüftung)
Fehlerbalken im Wärmeflussplot funktionieren nicht, minmax und daten_tgl vergleichen
self kalibrierung der Tatenlogger kontrollieren!
Bibliotheken importieren
# Name des aktuellen Notebooks für die exportierten Datein
file_name = "Lueftung_kalibrieren"
# Ordner auf dem Server (nach files/)
ftp_folder = 'Notebooks/Aufbereitung'
## Bibliotheken, Module und Text- bzw- Grafikformatierungen aus zentraler Datei laden
%run ../Template/libraries_and_styles.ipynb
## Warum auch immer muss rcParams.update() in eine eigene Zelle...
mpl.rcParams.update(params)
Daten Import
Daten zusammenführen (einmalig)
## einmalig Daten aus unterschiedlichen Datien zusammenfügen und als Testo_Arbeitsdaten_15s.csv speichern
# wrg = pd.read_csv("MA_WGR_Daten_Testo.csv",sep=";",decimal=",",encoding="cp1252")
# wrg['Datum'] = pd.to_datetime(wrg["Datum"],dayfirst=True,)
# wrg.set_index(["Datum"], inplace=True)
# wrgF = pd.read_csv("MA_WGR_Daten_Testo_Feb.csv",sep=";",decimal=",",encoding="cp1252")
# wrgF['Datum'] = pd.to_datetime(wrgF["Datum"],dayfirst=True,)
# wrgF.set_index(["Datum"], inplace=True)
# wrgF2 = pd.read_csv("MA_WGR_Daten_Testo_Feb2.csv",sep=";",decimal=",",encoding="cp1252")
# wrgF2['Datum'] = pd.to_datetime(wrgF2["Datum"],dayfirst=True,)
# wrgF2.set_index(["Datum"], inplace=True)
# wrg = wrg.resample('15s').interpolate(method='linear')
# wrgF = wrgF.resample('15s').interpolate(method='linear')
# wrgF2 = wrgF2.resample('15s').interpolate(method='linear')
# daten = pd.read_csv('../1_Daten/Arbeitsdaten/Daten_15s.csv')
# daten["Zeit"] = pd.to_datetime(daten["Zeit"],dayfirst=True)
# daten["Zeit1"] = daten["Zeit"]
# daten.set_index(['Zeit1'], inplace=True)
# daten = daten.loc['2017-12-05 10:00:00':'2018-02-23 14:38:00']
# daten['L_Zuluft_VPunkt'] = daten['L_Zuluft_1_VPunkt'] + daten['L_Zuluft_2_VPunkt'] + daten['L_Zuluft_3_VPunkt']
# # concat wrg`s
# frames = [wrg, wrgF, wrgF2]
# testo = pd.concat(frames)
# testo.columns = ['Außenluft_C', 'Außenluft_rF', 'Zuluft_C', 'Zuluft_rF', 'Abluft_C','Abluft_rF', 'Fortluft_C', 'Fortluft_rF']
# testo['Zeit'] = testo.index
# testo.to_csv('Testo_174H.csv')
# ## GET the data, just for saving, not use
# # Testo_174H = pd.read_csv("Testo_174H.csv")
# # Testo_174H['Datum'] = pd.to_datetime(Testo_174H["Datum"],dayfirst=True,)
# # Testo_174H.set_index(["Datum"], inplace=True)
# # Testo_174H.head()
# # merge mit testo
# testo = testo.merge(daten , left_on=['Zeit'], right_on=['Zeit'], how='outer')
# testo["Zeit"] = pd.to_datetime(testo["Zeit"],dayfirst=True)
# testo.set_index(['Zeit'], inplace=True)
# testo.to_csv('Testo_Arbeitsdaten_15s.csv')
# # testo.head()
Daten aufbereiten
def reload_Daten():
global daten
daten = pd.DataFrame()
daten = pd.read_csv("Testo_Arbeitsdaten_15s.csv")
daten['Zeit'] = pd.to_datetime(daten["Zeit"],dayfirst=True,)
daten.set_index(["Zeit"], inplace=True)
## Luftdruck
## topo: http://media.heimatundwelt.de/omeda/501/100264_009_3.jpg -> 139m ü.n.N 101.325
## barometrische Höhenformel: http://wetter.andreae-gymnasium.de/interaktives/Druck/barometrische.htm bei 5°C -> 995,9 hPa
daten['W_Luftdruck'] = daten['W_Luftdruck'] /10 + 5.1 ## 40 Hohenmeter Differenz zw Wetterstation und Bootshaus
## DataFrame für den Zeitraum der Kalibrierung
# daten_kal = daten.loc['2018-02-22 16:40:00':'2018-02-23 14:38:00'].copy()
# daten_kal_selbst = daten_kal.copy()
# daten_kal_T480 = daten_kal.copy()
## ungenaue Enden abschneiden
datena = daten.loc['2017-12-06 00:00:00':'2017-12-11 23:59:45']
datenb = daten.loc['2018-01-31 00:00:00':'2018-02-11 23:59:45']
datenc = daten.loc['2018-02-16 00:00:00':'2018-02-23 14:38:45']
daten = pd.concat([datena, datenb, datenc])
# del [[datena, datenb, datenc]] gc.collect()
daten.dropna(inplace=True)
## wurde in dem Zeitraum noch mal kalibriert?
datena = daten.loc['2017-12-06 00:00:00':'2018-02-04 23:59:45']
datenb = daten.loc['2018-02-06 00:00:00':'2018-02-23 14:38:45']
daten = pd.concat([datena, datenb])
daten.dropna(inplace=True)
## rename the columns from testo174
daten.rename(columns={'Außenluft_C' : 'T_Außenluft_C','Außenluft_rF' : 'T_Außenluft_rF','Zuluft_C' : 'T_Zuluft_C','Zuluft_rF' : 'T_Zuluft_rF','Abluft_C' : 'T_Abluft_C','Abluft_rF' : 'T_Abluft_rF','Fortluft_C' : 'T_Fortluft_C','Fortluft_rF' : 'T_Fortluft_rF'}, inplace=True)
## add columns for controlling
daten['Kalibrierung'] = 'noch keine'
daten['Datenquelle'] = 'Lüftung'
reload_Daten()
# daten = daten.replace(0, np.nan)
# daten = daten.dropna(how='all', axis=0)
# daten = daten.replace(np.nan, 0)
## Subsets für alles weitere
# daten_sub = daten.copy()
# daten_sub1 = daten.copy()
# daten_tgl = pd.DataFrame()
## gesamter Messzeitraum 6.12.2017 - 20.2.2018
# ## alt
# von = '2017-12-06 00:00:00'
# bis = '2018-02-20 23:59:45'
von = pd.to_datetime("2017-12-06 00:00", infer_datetime_format=True).to_pydatetime()
bis = pd.to_datetime("2018-02-20 23:59:45", infer_datetime_format=True).to_pydatetime()
## Periode 1
eins = pd.to_datetime("2017-12-06 00:00", infer_datetime_format=True).to_pydatetime()
zwei = pd.to_datetime("2017-12-11 23:59", infer_datetime_format=True).to_pydatetime()
## Periode 2
drei = pd.to_datetime("2018-01-31 00:00", infer_datetime_format=True).to_pydatetime()
vier = pd.to_datetime("2018-02-11 23:59", infer_datetime_format=True).to_pydatetime()
## Periode 3
fünf = pd.to_datetime("2018-02-16 00:00", infer_datetime_format=True).to_pydatetime()
sechs = pd.to_datetime("2018-02-20 23:59", infer_datetime_format=True).to_pydatetime()
## Zeitraum für Mischkalibrierung
Mischkal_start = pd.to_datetime("2018-02-22 16:40:00", infer_datetime_format=True).to_pydatetime()
Mischkal_ende = pd.to_datetime("2018-02-23 14:38:00", infer_datetime_format=True).to_pydatetime()
# daten.info()
# print_md(str(daten.columns))
Kontrollplot
fig, ax = plt.subplots(figsize=(6,2))
daten['T_Außenluft_C'].plot(ax=ax,color=colo('blau',1), linewidth=0.5, label = 'Testo')
daten['L_Aussenlufttemperatur_1'].plot(ax=ax,color=colo('rot',1), linewidth=0.5, label = 'Lüftung')
daten['W_Temperatur'].plot(ax=ax,color=colo('grün',1), linewidth=0.5, label = 'Wetterstation')
ax.set_xlabel('')
ax.set_ylabel(r'\textbf{Temperatur} ($^\circ$C)')
# Legende
h0, l0 = ax.get_legend_handles_labels()
legend = plt.legend(h0, l0, ncol=4, loc=2)
set_legend_linewidth(legend)
# monthlyX(ax)
ax = plt.gca()
ax.xaxis.set_major_locator(mdates.DayLocator(interval=10))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.'))
plt.setp(ax.get_xticklabels(), rotation=0, ha="center", rotation_mode="anchor")
plt.title('Außenluft')
## alt
# ax.xaxis.set_tick_params(rotation=0,ha='center')
# fig.autofmt_xdate(rotation=0,ha='center')
# xlabels = ['6. Dez','7.','8.','9.','10.','11.','12.']
# ax.set_xticklabels(ax.get_xticklabels(), rotation=0, ha='center')
# plt.xticks(rotation=0)
# ax.xaxis.set_tick_params(rotation=0)
# plt.setp(ax.get_xticklabels(), rotation=0, ha="center", rotation_mode="anchor")
Text(0.5, 1.0, 'Außenluft')
direkte Vergleiche
## direkter Vergleich von jeweils zwei gleichen Werten unterschiedlicher Sensoren
## dient zur Qualitätsischerung der Kalibrierung
## Zeitraum
dV_start = drei
dV_Ende = vier
## DataFrame
df = daten
fig, axes = plt.subplots(nrows=6, ncols=1, sharex=True, constrained_layout=False,figsize=(5.8,8.05))
## Titel und Zeitraum
axes[0].set_title('Vergleiche - Rohdaten')
axes[0].set(xlim=[pd.to_datetime(dV_start),pd.to_datetime(dV_Ende)])
axes[0].plot(df['T_Außenluft_rF'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[0].plot(df['W_Luftfeuchtigkeit'],color=colo('orange',1), linewidth=0.8, label='Wetterstation')
axes[0].text(0.012, 0.84, r"rel LF Außen", transform=axes[0].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[0].set_ylim(50,120)
axes[0].set_yticks([70,90])
axes[1].plot(df['T_Abluft_rF'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[1].plot(df['L_Duschen_Ablufttfeuchte'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[1].text(0.012, 0.84, r"rel LF Abluft", transform=axes[1].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[1].set_ylim(20,70)
axes[1].set_yticks([30,50])
axes[2].plot(df['T_Außenluft_C'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[2].plot(df['L_Aussenlufttemperatur_1'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[2].text(0.012, 0.84, r"Temp. Außen", transform=axes[2].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[2].set_ylim(-5,15)
axes[2].set_yticks([0,10])
axes[3].plot(df['T_Zuluft_C'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[3].plot(df['L_Zulufttemperatur'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[3].text(0.012, 0.84, r"Temp. Zuluft", transform=axes[3].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[3].set_ylim(10,40)
axes[3].set_yticks([20,30])
axes[4].plot(df['T_Abluft_C'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[4].plot(df['L_Ablufttemperatur'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[4].text(0.012, 0.84, r"Temp. Abluft", transform=axes[4].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[4].set_ylim(17,25)
axes[4].set_yticks([18,22])
axes[5].plot(df['T_Fortluft_C'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[5].plot(df['L_Fortlufttemperatur'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[5].text(0.012, 0.84, r"Temp. Fortluft", transform=axes[5].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[5].set_ylim(0,20)
axes[5].set_yticks([5,15])
## Legende
for ax in axes:
ax.legend( ncol=6, loc=1, bbox_to_anchor=(1., 1))
ax.yaxis.get_label().set_fontsize(8)
## Formatierung X-Achse
axes[0] = plt.gca()
axes[0].xaxis.set_minor_locator(AutoMinorLocator(2))
axes[0].xaxis.set_major_locator(mdates.DayLocator(interval=2))
axes[0].xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.'))
x_ticks = axes[0].xaxis.get_major_ticks()
x_ticks[0].label1.set_visible(False)
plt.setp(axes[0].get_xticklabels(), rotation=0, ha="center", rotation_mode="anchor")
plt.subplots_adjust(hspace=.1)
plt.show()
174H kalibrieren
def TESTO_Kalibrierung(variante='testo'):
global testo
testo = daten.copy()
if variante == '0':
testo['T_Abluft_rF'] = daten['T_Abluft_rF']
testo['T_Fortluft_rF'] = daten['T_Fortluft_rF']
testo['T_Außenluft_rF'] = daten['T_Außenluft_rF']
testo['T_Zuluft_rF'] = daten['T_Zuluft_rF']
testo['T_Abluft_C'] = daten['T_Abluft_C']
testo['T_Fortluft_C'] = daten['T_Fortluft_C']
testo['T_Außenluft_C'] = daten['T_Außenluft_C']
testo['T_Zuluft_C'] = daten['T_Zuluft_C']
daten['Kalibrierung'] = variante
daten['Datenquelle'] = 'Testo'
if variante == 'testo':
## Aus der Kalibrierung vom 25.03.2019 gegen das Testo480
## Excel MA_Testo_174_Kalibrierung
testo['T_Abluft_rF'] = daten['T_Abluft_rF'] * 1.0386 - 0.0826
testo['T_Fortluft_rF'] = daten['T_Fortluft_rF'] * 0.9522 + 2.5642
testo['T_Außenluft_rF'] = daten['T_Außenluft_rF'] * 1.0568 + 3.1864
testo['T_Zuluft_rF'] = daten['T_Zuluft_rF'] * 1.0489 + 2.9552
testo['T_Abluft_C'] = daten['T_Abluft_C'] * 1.0447 - 0.5989
testo['T_Fortluft_C'] = daten['T_Fortluft_C'] * 1.0002 + 0.2829
testo['T_Außenluft_C'] = daten['T_Außenluft_C'] * 1.0191 - 0.809
testo['T_Zuluft_C'] = daten['T_Zuluft_C'] * 1.0059 - 0.3276
daten['Kalibrierung'] = variante+'480'
daten['Datenquelle'] = 'Testo'
if variante == 'self':
## kal['ref_rF'] = (kal.Abluft_rF + kal.Fortluft_rF ) / 2
## kal['ref_C'] = (kal.Abluft_C + kal.Fortluft_C + kal.Zuluft_C) / 3
testo['T_Abluft_rF'] = daten['T_Abluft_rF'] * 0.828993573070746 + 6.801455317349444
testo['T_Fortluft_rF'] = daten['T_Fortluft_rF'] * 1.0674200418092923 + -2.6412934624410167
testo['T_Außenluft_rF'] = daten['T_Außenluft_rF'] * 0.8002161817773167 + 5.231630936999777
testo['T_Zuluft_rF'] = daten['T_Zuluft_rF'] * 0.9223667924445846 + 1.4339541677129877
testo['T_Abluft_C'] = daten['T_Abluft_C'] * 1.0209706144779265 + -0.4144120307172744
testo['T_Fortluft_C'] = daten['T_Fortluft_C'] * 0.9647290370199838 + 0.6981836985112495
testo['T_Außenluft_C'] = daten['T_Außenluft_C'] * 1.1242036726591484 + -2.0880414590720107
testo['T_Zuluft_C'] = daten['T_Zuluft_C'] * 0.9913301797188931 + 0.1560904830431007
daten['Kalibrierung'] = variante
daten['Datenquelle'] = 'Testo'
if variante == 'self1':
## kal['ref_rF'] = (kal.Abluft_rF + kal.Fortluft_rF + kal.Zuluft_rF + kal.Außenluft_rF) / 4
## kal['ref_C'] = (kal.Abluft_C + kal.Fortluft_C + kal.Zuluft_C + kal.Außenluft_C) / 4
testo['T_Abluft_rF'] = daten['T_Abluft_rF'] * 0.8305882666625446 + 8.055745638372443
testo['T_Fortluft_rF'] = daten['T_Fortluft_rF'] * 1.062370224215799 + -1.121169045293179
testo['T_Außenluft_rF'] = daten['T_Außenluft_rF'] * 0.8354930285393901 + 5.015519047999741
testo['T_Zuluft_rF'] = daten['T_Zuluft_rF'] * 0.9236537106550828 + 2.6983173712048316
testo['T_Abluft_C'] = daten['T_Abluft_C'] * 0.9596161144526612 + 0.6980052676578619
testo['T_Fortluft_C'] = daten['T_Fortluft_C'] * 0.9053512255469426 + 1.7706350319492505
testo['T_Außenluft_C'] = daten['T_Außenluft_C'] * 1.0931527544943642 + -1.5660310943041458
testo['T_Zuluft_C'] = daten['T_Zuluft_C'] * 0.9264435014124848 + 1.3362432683236858
daten['Kalibrierung'] = variante
daten['Datenquelle'] = 'Testo'
## Funktion kalibriert und gib Strings für copy&paste aus
# def kalibrieren(X,Y):
# polyfit = np.polyfit(X,Y,deg=1)
# schaetzer = np.poly1d(polyfit)
# print('daten_kalibriert[\''+X.name+'\'] = daten[\''+X.name+'\'] * ' +str(schaetzer[1]) + ' + ' +str(schaetzer[0]) )
# return schaetzer(X)
# TESTO_Kalibrierung('0')
# TESTO_Kalibrierung('testo')
# TESTO_Kalibrierung('self')
TESTO_Kalibrierung()
Mischkalibrierung für die Variante "self"
# ## Funktion kalibriert und gib Strings für copy&paste aus
# def kalibrieren(X,Y):
# polyfit = np.polyfit(X,Y,deg=1)
# schaetzer = np.poly1d(polyfit)
# # print(schaetzer)
# # print('daten_kal_selbst[\''+X.name+'\'] = pow(daten_kal_selbst[\''+X.name+'\'],3) * ' +str(schaetzer[3]) + ' + pow(daten_kal_selbst[\''+X.name+'\'],2) * ' +str(schaetzer[2]) + ' + daten_kal_selbst[\''+X.name+'\'] * ' +str(schaetzer[1]) + ' + ' +str(schaetzer[0]) )
# print('daten_sub[\''+X.name+'\'] = daten[\''+X.name+'\'] * ' +str(schaetzer[1]) + ' + ' +str(schaetzer[0]) )
# return schaetzer(X)
# ## Referenzen definieren
# daten_kal['ref_rF'] = (daten_kal.Abluft_rF + daten_kal.Fortluft_rF + daten_kal.Zuluft_rF + daten_kal.Außenluft_rF) / 4
# daten_kal['ref_C'] = (daten_kal.Abluft_C + daten_kal.Fortluft_C + daten_kal.Zuluft_C + daten_kal.Außenluft_C) / 4
# kalibrieren(daten_kal['Abluft_rF'], daten_kal['ref_rF'])
# kalibrieren(daten_kal['Fortluft_rF'], daten_kal['ref_rF'])
# kalibrieren(daten_kal['Außenluft_rF'],daten_kal['ref_rF'])
# kalibrieren(daten_kal['Zuluft_rF'], daten_kal['ref_rF'])
# kalibrieren(daten_kal['Abluft_C'], daten_kal['ref_C'])
# kalibrieren(daten_kal['Fortluft_C'], daten_kal['ref_C'])
# kalibrieren(daten_kal['Außenluft_C'], daten_kal['ref_C'])
# kalibrieren(daten_kal['Zuluft_C'], daten_kal['ref_C'])
Plot Kalibrierung
def TESTO_Kalibrierung_plot(df,titel):
fig, ax = plt.subplots(figsize=(6,2))
df['T_Außenluft_C'].plot(ax=ax,color=colo('blau',1), linewidth=0.8, label = 'Außenluft')
df['T_Zuluft_C'].plot(ax=ax,color=colo('rot',1), linewidth=0.8, label = 'Zuluft')
df['T_Abluft_C'].plot(ax=ax,color=colo('orange',1), linewidth=0.8, label = 'Abluft')
df['T_Fortluft_C'].plot(ax=ax,color=colo('violet',1), linewidth=0.8, label = 'Fortluft')
ax2 = ax.twinx()
df['T_Außenluft_rF'].plot(ax=ax2,color=colo('blau',1), linewidth=0.8, label = '__nolable__')
df['T_Zuluft_rF'].plot(ax=ax2,color=colo('rot',1), linewidth=0.8, label = '__nolable__')
df['T_Abluft_rF'].plot(ax=ax2,color=colo('orange',1), linewidth=0.8, label = '__nolable__')
df['T_Fortluft_rF'].plot(ax=ax2,color=colo('violet',1), linewidth=0.8, label = '__nolable__')
## Y Achse formatieren
ax.set(ylim=[18,23])
ax.set_yticks([18.5,19.5])
ax.set_ylabel(r'\textbf{Temperatur} ($^\circ$C)')
ax2.set(ylim=[25,58])
ax2.set_yticks([40,45])
ax2.set_ylabel(r'\textbf{rel. Luftfeuchte} (\%)')
# Legende
h0, l0 = ax.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
legend = plt.legend(h0+h2, l0+l2, ncol=4, loc=1)
set_legend_linewidth(legend)
plt.title(titel)
# X Achse formatieren
ax.set_xlabel('')
ax.set(xlim=[Mischkal_start, Mischkal_ende])
# ax = plt.gca()
ax.xaxis.set_major_locator(mdates.HourLocator(interval=6))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d.%m. %H:%M'))
plt.setp(ax.get_xticklabels(), rotation=0, ha="center", rotation_mode="anchor")
# fig.autofmt_xdate(rotation=0,ha='center')
reload_Daten()
## Kalibrierung und Plot aufrufen
# TESTO_Kalibrierung('0')
# TESTO_Kalibrierung_plot(df=testo, titel='Testo 174H Rohdaten')
TESTO_Kalibrierung('self')
TESTO_Kalibrierung_plot(df=testo, titel='Testo 174H Mischkalibrierung')
TESTO_Kalibrierung('self1')
TESTO_Kalibrierung_plot(df=testo, titel='Testo 174H Mischkalibrierung 1')
# TESTO_Kalibrierung('testo')
# TESTO_Kalibrierung_plot(df=testo, titel='Testo 174H gegen Testo 480')
Kalibrierungsabfrage
def welche_Kalibrierung(df):
print_md('**Datenquelle**: '+str(df['Datenquelle'].iloc[1])+' \t\t **Kalibrierung**: '+str(df['Kalibrierung'].iloc[1])+ '\n\n')
return ('Datenquelle: '+str(df['Datenquelle'].iloc[1])+' | Kalibrierung: '+str(df['Kalibrierung'].iloc[1]))
## Kalibrierung und Datenquelle abfragen
# TESTO_Kalibrierung('0')
# welche_Kalibrierung(testo)
# TESTO_Kalibrierung('self')
# welche_Kalibrierung(testo)
# TESTO_Kalibrierung('testo')
welche_Kalibrierung(testo)
Datenquelle: Testo Kalibrierung: self
'Datenquelle: Testo | Kalibrierung: self'
direkte Vergleiche
## direkter Vergleich von jeweils zwei gleichen Werten unterschiedlicher Sensoren
## dient zur Qualitätsischerung der Kalibrierung
## Zeitraum
dV_start = drei
dV_Ende = vier
## DataFrame
df = testo
fig, axes = plt.subplots(nrows=6, ncols=1, sharex=True, constrained_layout=False,figsize=(5.8,8.05))
## Titel und Zeitraum
axes[0].set_title('Vergleiche - Testo kalibriert '+str(df['Kalibrierung'].iloc[1]))
axes[0].set(xlim=[pd.to_datetime(dV_start),pd.to_datetime(dV_Ende)])
axes[0].plot(df['T_Außenluft_rF'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[0].plot(df['W_Luftfeuchtigkeit'],color=colo('orange',1), linewidth=0.8, label='Wetterstation')
axes[0].text(0.012, 0.84, r"rel LF Außen", transform=axes[0].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[0].set_ylim(50,120)
axes[0].set_yticks([70,90])
axes[1].plot(df['T_Abluft_rF'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[1].plot(df['L_Duschen_Ablufttfeuchte'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[1].text(0.012, 0.84, r"rel LF Abluft", transform=axes[1].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[1].set_ylim(20,70)
axes[1].set_yticks([30,50])
axes[2].plot(df['T_Außenluft_C'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[2].plot(df['L_Aussenlufttemperatur_1'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[2].text(0.012, 0.84, r"Temp. Außen", transform=axes[2].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[2].set_ylim(-5,15)
axes[2].set_yticks([0,10])
axes[3].plot(df['T_Zuluft_C'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[3].plot(df['L_Zulufttemperatur'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[3].text(0.012, 0.84, r"Temp. Zuluft", transform=axes[3].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[3].set_ylim(10,40)
axes[3].set_yticks([20,30])
axes[4].plot(df['T_Abluft_C'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[4].plot(df['L_Ablufttemperatur'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[4].text(0.012, 0.84, r"Temp. Abluft", transform=axes[4].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[4].set_ylim(17,25)
axes[4].set_yticks([18,22])
axes[5].plot(df['T_Fortluft_C'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[5].plot(df['L_Fortlufttemperatur'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[5].text(0.012, 0.84, r"Temp. Fortluft", transform=axes[5].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[5].set_ylim(0,20)
axes[5].set_yticks([5,15])
## Legende
for ax in axes:
ax.legend( ncol=6, loc=1, bbox_to_anchor=(1., 1))
ax.yaxis.get_label().set_fontsize(8)
## Formatierung X-Achse
axes[0] = plt.gca()
axes[0].xaxis.set_minor_locator(AutoMinorLocator(2))
axes[0].xaxis.set_major_locator(mdates.DayLocator(interval=2))
axes[0].xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.'))
x_ticks = axes[0].xaxis.get_major_ticks()
x_ticks[0].label1.set_visible(False)
plt.setp(axes[0].get_xticklabels(), rotation=0, ha="center", rotation_mode="anchor")
plt.subplots_adjust(hspace=.1)
plt.show()
Lüftung gegen T174H kalibrieren
WRG_Kalibrierung()
def kalibrieren(X,Y,output=0):
polyfit = np.polyfit(X,Y,deg=1)
kalval = np.poly1d(polyfit)
if output == 1:
print('WGR_kal[\''+X.name+'\'] = WGR_kal[\''+X.name+'\'] * ' +str(kalval[1]) + ' + '+str(kalval[0]))
return kalval(X)
def WRG_Kalibrierung(TE_Kalibrierung='testo', nur_Testo=0):
TESTO_Kalibrierung(TE_Kalibrierung)
global WGR_kal, testo
WGR_kal = pd.DataFrame()
WGR_kal = testo.copy()
if nur_Testo == 0:
WGR_kal['Datenquelle'] = 'Lüftung'
WGR_kal['Kalibrierung'] = TE_Kalibrierung
WGR_kal['L_Aussenlufttemperatur_1_korr'] = kalibrieren(daten['L_Aussenlufttemperatur_1'], testo['T_Außenluft_C'])
WGR_kal['L_Ablufttemperatur_korr'] = kalibrieren(daten['L_Ablufttemperatur'], testo['T_Abluft_C'])
WGR_kal['L_Fortlufttemperatur_korr'] = kalibrieren(daten['L_Fortlufttemperatur'], testo['T_Fortluft_C'])
WGR_kal['W_Luftfeuchtigkeit_korr'] = kalibrieren(daten['W_Luftfeuchtigkeit'], testo['T_Außenluft_rF'])
WGR_kal['L_Duschen_Ablufttfeuchte_korr'] = kalibrieren(daten['L_Duschen_Ablufttfeuchte'], testo['T_Abluft_rF'])
if nur_Testo == 1:
WGR_kal['Datenquelle'] = 'Testo'
WGR_kal['Kalibrierung'] = TE_Kalibrierung
WGR_kal['L_Aussenlufttemperatur_1_korr'] = testo['T_Außenluft_C']
WGR_kal['L_Ablufttemperatur_korr'] = testo['T_Abluft_C']
WGR_kal['L_Fortlufttemperatur_korr'] = testo['T_Fortluft_C']
WGR_kal['W_Luftfeuchtigkeit_korr'] = testo['T_Außenluft_rF']
WGR_kal['L_Duschen_Ablufttfeuchte_korr'] = testo['T_Abluft_rF']
## Zuluftfeuchte
WGR_kal['Außenluft_WG'] = psy.Hum_rat2(WGR_kal['L_Aussenlufttemperatur_1_korr'], WGR_kal['W_Luftfeuchtigkeit_korr']/100, daten['W_Luftdruck'])
## Fortluftfeuchte
WGR_kal['Abluft_WG'] = psy.Hum_rat2(WGR_kal['L_Ablufttemperatur_korr'], WGR_kal['L_Duschen_Ablufttfeuchte_korr']/100, daten['W_Luftdruck'])
WGR_kal['Fortluft_relF'] = psy.Rel_hum2(WGR_kal['L_Fortlufttemperatur_korr'], WGR_kal['Abluft_WG']*100, daten['W_Luftdruck'])
## Kalibrierung gegen Testo
if nur_Testo == 0:
WGR_kal['Fortluft_relF_korr'] = kalibrieren(WGR_kal['Fortluft_relF'], testo['T_Fortluft_rF'])
if nur_Testo == 1:
WGR_kal['Fortluft_relF_korr'] = testo['T_Fortluft_rF']
## Gewicht der Luft in kg/m³
WGR_kal['Außenluft_Masse'] = psy.Dry_Air_Density(daten['W_Luftdruck'], daten['L_Zulufttemperatur'], WGR_kal['Außenluft_WG']) * (1 + WGR_kal['Außenluft_WG'])
## abgegebene Energie des Nacherhitzers in kWh
WGR_kal['Nacherhitzer_Energie'] = energie(daten['L_Nacherhitzer_VL'], daten['L_Nacherhitzer_RL'], daten['S_Heizung_Vpunkt'])
# WGR_kal['Nacherhitzer_Energie'] = energie(daten['S_Heizung_VL'], daten['S_Heizung_RL'], daten['S_Heizung_Vpunkt'])
## 2 Enthalpie der Luft nach dem Nacherhitzer in kJ/kg
WGR_kal['Zuluft_nach_NE_h'] = psy.Enthalpy_Air_H2O(daten['L_Zulufttemperatur'], WGR_kal['Außenluft_WG'])
## 3 Energie der Luft nach dem Nacherhitzer in kWh
WGR_kal['Zuluft_nach_NE_Energie'] = WGR_kal['Zuluft_nach_NE_h'] * WGR_kal['Außenluft_Masse'] * daten['L_Zuluft_VPunkt'] * (1/3600) ## kJ in kWh
## 4 Energie der Luft vor dem Nacherhitzer in kWh
WGR_kal['Zuluft_vor_NE_Energie'] = WGR_kal['Zuluft_nach_NE_Energie'] - WGR_kal['Nacherhitzer_Energie']
## 5 Enthalpie der Luft vor dem Nacherhitzer in kJ/kg
WGR_kal['Zuluft_vor_NE_h'] = WGR_kal['Zuluft_vor_NE_Energie'] / (WGR_kal['Außenluft_Masse'] * daten['L_Zuluft_VPunkt'] * (1/3600) )
## 6 Temperatur der Luft vor dem Nacherhitzer
WGR_kal['Zuluft_vor_NE_C'] = 500 * (WGR_kal['Zuluft_vor_NE_h'] - 2510 * WGR_kal['Außenluft_WG']) / (930 * WGR_kal['Außenluft_WG'] + 503)
WGR_kal['Zuluft_vor_NE_C_rol'] = WGR_kal['Zuluft_vor_NE_C'].rolling(50, center=True, min_periods=1).mean()
if nur_Testo == 0:
WGR_kal['Zuluft_vor_NE_C_kal'] = kalibrieren(WGR_kal['Zuluft_vor_NE_C_rol'], testo['T_Zuluft_C'])
if nur_Testo == 1:
WGR_kal['Zuluft_vor_NE_C_kal'] = testo['T_Zuluft_C']
## Zuluftfeuchte
WGR_kal['Zuluft_relF_vor_NE'] = psy.Rel_hum2(WGR_kal['Zuluft_vor_NE_C_kal'], WGR_kal['Außenluft_WG']*100, daten['W_Luftdruck'])
WGR_kal['Zuluft_relF_nach_NE'] = psy.Rel_hum2(WGR_kal['L_Zulufttemperatur'], WGR_kal['Außenluft_WG']*100, daten['W_Luftdruck'])
if nur_Testo == 0:
WGR_kal['Zuluft_rF_vor_NE'] = kalibrieren(WGR_kal['Zuluft_relF_vor_NE'], testo['T_Zuluft_rF'])
if nur_Testo == 1:
WGR_kal['Zuluft_rF_vor_NE'] = testo['T_Zuluft_rF']
WGR_kal['Zuluft_C_vor_NE'] = WGR_kal['Zuluft_vor_NE_C_kal']
print_md('**Datenquelle**: '+str(WGR_kal['Datenquelle'].iloc[1])+' - **Kalibrierung**: '+str(WGR_kal['Kalibrierung'].iloc[1])+ '\n\n')
# return WGR_kal
WRG_Kalibrierung()
Datenquelle: Lüftung - Kalibrierung: testo
Zuweisungen
## Zuweisungen der acht klaibrierten Werte zu dem ursprünglichen Datensatz
def Kalibrierung_zuweisen():
global daten, WGR_kal
daten['Außenluft_C'] = WGR_kal['L_Aussenlufttemperatur_1_korr']
daten['Zuluft_C_nach_NE'] = WGR_kal['L_Zulufttemperatur']
daten['Abluft_C'] = WGR_kal['L_Ablufttemperatur_korr']
daten['Fortluft_C'] = WGR_kal['L_Fortlufttemperatur_korr']
daten['Außenluft_rF'] = WGR_kal['W_Luftfeuchtigkeit_korr']
daten['Zuluft_rF_nach_NE'] = WGR_kal['Zuluft_relF_nach_NE']
daten['Abluft_rF'] = WGR_kal['L_Duschen_Ablufttfeuchte_korr']
daten['Fortluft_rF'] = WGR_kal['Fortluft_relF_korr']
daten['Zuluft_rF_vor_NE'] = WGR_kal['Zuluft_rF_vor_NE']
daten['Zuluft_C_vor_NE'] = WGR_kal['Zuluft_vor_NE_C_kal']
daten['Kalibrierung'] = WGR_kal['Kalibrierung']
daten['Datenquelle'] = WGR_kal['Datenquelle']
daten['T_Abluft_rF'] = WGR_kal['T_Abluft_rF']
daten['T_Fortluft_rF'] = WGR_kal['T_Fortluft_rF']
daten['T_Außenluft_rF'] = WGR_kal['T_Außenluft_rF']
daten['T_Zuluft_rF'] = WGR_kal['T_Zuluft_rF']
daten['T_Abluft_C'] = WGR_kal['T_Abluft_C']
daten['T_Fortluft_C'] = WGR_kal['T_Fortluft_C']
daten['T_Außenluft_C'] = WGR_kal['T_Außenluft_C']
daten['T_Zuluft_C'] = WGR_kal['T_Zuluft_C']
Kalibrierung durchführen
reset und neu laden
def reset_daten(Kalibrierung='testo', Datenlogger=0):
## daten sicherheitshalber nochmal neu aus der Date laden & Kontrollvariable ausgeben: 2.8
reload_Daten()
## Kalibirierung durchführen
## wenn keine Parameter angegeben sind, wird gegen das Testo480 kalibriert
WRG_Kalibrierung(TE_Kalibrierung=Kalibrierung, nur_Testo=Datenlogger)
## Kalibrierung zuweisen
Kalibrierung_zuweisen()
reset_daten(Kalibrierung='self', Datenlogger=0)
Datenquelle: Lüftung - Kalibrierung: self
Testplot
Kalibrierung
def überprüfung_plot(df):
# print_md('Kalibrierung: '+str(WGR_kal['Kalibrierung'].iloc[1])+'\n\n')
# print_md(str(WGR_kal['L_Duschen_Ablufttfeuchte_korr'].loc['2017-12-06 00:00:00']))
fig, ax = plt.subplots(figsize=(6,3), constrained_layout=False)
df['Außenluft_C'].plot(ax=ax,color=colo('blau',1), linewidth=0.8, label = 'Außenluft')
df['Fortluft_C'].plot(ax=ax,color=colo('violet',1), linewidth=0.8, label = 'Fortluft')
df['Zuluft_C_nach_NE'].plot(ax=ax,color=colo('rot',1), linewidth=0.8, label = 'Zuluft nach NE')
df['Abluft_C'].plot(ax=ax,color=colo('orange',1), linewidth=0.8, label = 'Abluft')
df['Zuluft_C_vor_NE'].plot(ax=ax,color=colo('rot',1.5), linewidth=0.8, label = 'vor NE')
ax2 = ax.twinx()
df['Außenluft_rF'].plot(ax=ax2,color=colo('blau',1), linewidth=0.8, label = '__nolable__', linestyle="--")
df['Zuluft_rF_nach_NE'].plot(ax=ax2,color=colo('rot',1), linewidth=0.8, label = '__nolable__', linestyle="--")
df['Zuluft_rF_vor_NE'].plot(ax=ax2,color=colo('rot',1.5), linewidth=0.8, label = '__nolable__', linestyle="--")
df['Abluft_rF'].plot(ax=ax2,color=colo('orange',1), linewidth=0.8, label = '__nolable__', linestyle="--")
df['Fortluft_rF'].plot(ax=ax2,color=colo('violet',1), linewidth=0.8, label = '__nolable__', linestyle="--")
## Y Achse formatieren
ax.set(ylim=[-5,120])
ax.set_yticks([0,20])
ax.set_ylabel(r'\textbf{Temperatur} ($^\circ$C)')
ax2.set(ylim=[-80,130])
ax2.set_yticks([20,50,80])
ax2.set_ylabel(r'\textbf{rel. Luftfeuchte} (\%)')
# Legende
h0, l0 = ax.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
legend = plt.legend(h0+h2, l0+l2, ncol=3, loc=1)
set_legend_linewidth(legend)
plt.title('Datenquelle: '+str(df['Datenquelle'].iloc[1])+' Kalibrierung: '+str(df['Kalibrierung'].iloc[1]))
# X Achse formatieren
ax.set_xlabel('')
ax.set(xlim=[pd.to_datetime("2018-01-31 00:00:00"),pd.to_datetime("2018-02-02 11:00:00")])
ax = plt.gca()
ax.xaxis.set_major_locator(mdates.DayLocator(interval=1))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.'))
fig.autofmt_xdate(rotation=0,ha='center')
plt.show()
WRG_Kalibrierung(TE_Kalibrierung='testo', nur_Testo=0)
Kalibrierung_zuweisen()
überprüfung_plot(daten)
# WRG_Kalibrierung(TE_Kalibrierung='self', nur_Testo=1)
# Kalibrierung_zuweisen()
# überprüfung_plot(daten)
Datenquelle: Lüftung - Kalibrierung: testo
direkte Vergleiche
## direkter Vergleich von jeweils zwei gleichen Werten unterschiedlicher Sensoren
## dient zur Qualitätsischerung der Kalibrierung
## Zeitraum
dV_start = drei
dV_Ende = vier
## DataFrame
df = daten
fig, axes = plt.subplots(nrows=6, ncols=1, sharex=True, constrained_layout=False,figsize=(5.8,8.05))
## Titel und Zeitraum
axes[0].set_title('Vergleiche - Lüftung kalibriert '+str(df['Kalibrierung'].iloc[1]))
axes[0].set(xlim=[pd.to_datetime(dV_start),pd.to_datetime(dV_Ende)])
axes[0].plot(df['T_Außenluft_rF'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[0].plot(df['Außenluft_rF'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[0].text(0.012, 0.84, r"rel LF Außen", transform=axes[0].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[0].set_ylim(50,120)
axes[0].set_yticks([70,90])
axes[1].plot(df['T_Abluft_rF'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[1].plot(df['Abluft_rF'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[1].text(0.012, 0.84, r"rel LF Abluft", transform=axes[1].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[1].set_ylim(20,70)
axes[1].set_yticks([30,50])
axes[2].plot(df['T_Außenluft_C'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[2].plot(df['Außenluft_C'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[2].text(0.012, 0.84, r"Temp. Außen", transform=axes[2].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[2].set_ylim(-5,15)
axes[2].set_yticks([0,10])
axes[3].plot(df['T_Zuluft_C'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[3].plot(df['Zuluft_C_vor_NE'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[3].text(0.012, 0.84, r"Temp. Zuluft", transform=axes[3].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[3].set_ylim(10,40)
axes[3].set_yticks([20,30])
axes[4].plot(df['T_Abluft_C'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[4].plot(df['Abluft_C'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[4].text(0.012, 0.84, r"Temp. Abluft", transform=axes[4].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[4].set_ylim(17,25)
axes[4].set_yticks([18,22])
axes[5].plot(df['T_Fortluft_C'],color=colo('blau',1), linewidth=0.8, label='Testo 174H')
axes[5].plot(df['Fortluft_C'],color=colo('orange',1), linewidth=0.8, label='Lüftung')
axes[5].text(0.012, 0.84, r"Temp. Fortluft", transform=axes[5].transAxes, fontsize=10, bbox=dict(edgecolor='black', facecolor=colo('grau',2.5), alpha=1))
axes[5].set_ylim(0,20)
axes[5].set_yticks([5,15])
## Legende
for ax in axes:
ax.legend( ncol=6, loc=1, bbox_to_anchor=(1., 1))
ax.yaxis.get_label().set_fontsize(8)
## Formatierung X-Achse
axes[0] = plt.gca()
axes[0].xaxis.set_minor_locator(AutoMinorLocator(2))
axes[0].xaxis.set_major_locator(mdates.DayLocator(interval=2))
axes[0].xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.'))
x_ticks = axes[0].xaxis.get_major_ticks()
x_ticks[0].label1.set_visible(False)
plt.setp(axes[0].get_xticklabels(), rotation=0, ha="center", rotation_mode="anchor")
plt.subplots_adjust(hspace=.1)
plt.show()
Zulufttemperatur vor NE
fig, ax = plt.subplots()
daten['T_Zuluft_C'].plot(ax=ax,color=colo('grau',1.4), linewidth=1, label = 'gemessen')
daten['Zuluft_C_vor_NE'].plot(ax=ax,color=colo('rot',1), linewidth=1, label = ' berechnet')
ax.set_ylabel(r'\textbf{Temperatur}')
ax.set_xlabel('')
ax.set_ylim(10,20)
h0, l0 = ax.get_legend_handles_labels()
legend = plt.legend(h0, l0, ncol=2, loc=1)
set_legend_linewidth(legend)
ax = plt.gca()
ax.xaxis.set_major_locator(mdates.DayLocator(interval=1))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.'))
plt.setp(ax.get_xticklabels(), rotation=0, ha="center", rotation_mode="anchor")
ax.set(xlim=[pd.to_datetime(dV_start),pd.to_datetime(dV_Ende)])
ax.set_title('Zulufttemperatur vor NE - Kalibrierung '+str(df['Kalibrierung'].iloc[1]))
Text(0.5, 1.0, 'Zulufttemperatur vor NE - Kalibrierung testo')
welche_Kalibrierung(daten)
Datenquelle: Lüftung Kalibrierung: testo
'Datenquelle: Lüftung | Kalibrierung: testo'
Effizienz berechnen
## findet Werte (x) zwischen low und high mit der länge thresh
def sequence(x, low, high, thresh):
ind = np.flatnonzero(np.diff(np.r_[False, ((x >= low) & (x <= high)), False]))
start = ind[::2]
end = ind[1::2]
mask = end - start >= thresh
result = np.zeros(x.size, dtype=np.int8)
result[start[mask]] = + 1
mask[-1] = False
result[end[mask]] = - 1
return np.cumsum(result, out=result).view(bool)
def effizienz(by=0, außen_C=0, zu_C=0, ab_C=0, fort_C=0, außen_rF=0, zu_rf=0, ab_rF=0, fort_rf=0, zu_Vp=0):
by = (45+by)/100
global daten
## Schwellenwerte im Zuluftdruck für Bypass
schwelle_oben = 1000
schwelle_unten = 85.5
## Anteil an Luft durch den Bypass:
Anteil_Bypass = by
## MIN MAX
daten['Außenluft_C'] = daten['Außenluft_C'] + außen_C
daten['Zuluft_C_vor_NE'] = daten['Zuluft_C_vor_NE'] + zu_C
daten['Abluft_C'] = daten['Abluft_C'] + ab_C
daten['Fortluft_C'] = daten['Fortluft_C'] + fort_C
daten['Außenluft_rF'] = daten['Außenluft_rF'] + außen_rF
daten['Zuluft_rF_vor_NE']= daten['Zuluft_rF_vor_NE'] + zu_rf
daten['Abluft_rF'] = daten['Abluft_rF'] + ab_rF
daten['Fortluft_rF'] = daten['Fortluft_rF'] + fort_rf
daten['L_Zuluft_VPunkt'] = daten['L_Zuluft_VPunkt'] * (1+zu_Vp/100)
## abgegebene Energie des Nacherhitzers in kWh
daten['Nacherhitzer_Energie'] = energie(daten['L_Nacherhitzer_VL'], daten['L_Nacherhitzer_RL'], daten['S_Heizung_Vpunkt'])
# daten['Nacherhitzer_Energie'] = energie(daten['S_Heizung_VL'], daten['S_Heizung_RL'], daten['S_Heizung_Vpunkt'])
## Wassergehalte (WG) in den Luftströmen daten
daten['Außenluft_WG'] = psy.Hum_rat2(daten['Außenluft_C'], daten['Außenluft_rF'] /100, daten['W_Luftdruck'])
daten['Zuluft_WG'] = psy.Hum_rat2(daten['Zuluft_C_vor_NE'], daten['Zuluft_rF_vor_NE'] /100, daten['W_Luftdruck'])
daten['Abluft_WG'] = psy.Hum_rat2(daten['Abluft_C'], daten['Abluft_rF'] /100, daten['W_Luftdruck'])
daten['Fortluft_WG'] = psy.Hum_rat2(daten['Fortluft_C'], daten['Fortluft_rF'] /100, daten['W_Luftdruck'])
# daten['Zuluft_WG'] = daten['Außenluft_WG']
## Enthalpien in den Luftströmen daten
daten['h21_Außenluft'] = psy.Enthalpy_Air_H2O(daten['Außenluft_C'], daten['Außenluft_WG'])
daten['h22_Zuluft'] = psy.Enthalpy_Air_H2O(daten['Zuluft_C_vor_NE'], daten['Zuluft_WG'])
daten['h11_Abluft'] = psy.Enthalpy_Air_H2O(daten['Abluft_C'], daten['Abluft_WG'])
daten['h12_Fortluft'] = psy.Enthalpy_Air_H2O(daten['Fortluft_C'], daten['Fortluft_WG'])
## Enthalpien im Bypassbetrieb
daten['h21_Außenluft_by'] = daten['h21_Außenluft'] * (1-Anteil_Bypass) + daten['h11_Abluft'] * Anteil_Bypass
daten['h21_Außenluft_bypass'] = np.where((daten['L_Zuluft_Druck'] < schwelle_oben) & (daten['L_Zuluft_Druck'] > schwelle_unten), daten['h21_Außenluft'], daten['h21_Außenluft_by'])
daten['h21_Außenluft_pure'] = daten['h21_Außenluft']
## Effizienz der Wärmerückgewinnung
daten['EÜG_Außenluft_vorl'] = (daten['h22_Zuluft'] - daten['h21_Außenluft_bypass']) / (daten['h11_Abluft'] - daten['h21_Außenluft_bypass']) * 100
daten['EÜG_Fortluft_vorl'] = (daten['h11_Abluft'] - daten['h12_Fortluft']) / (daten['h11_Abluft'] - daten['h21_Außenluft_bypass']) * 100
## Rückwärmezahl
daten['RWZ_Außenluft_vorl'] = (daten['Zuluft_C_vor_NE'] - daten['Außenluft_C']) / (daten['Abluft_C'] - daten['Außenluft_C']) * 100
daten['RWZ_Fortluft_vorl'] = (daten['Abluft_C'] - daten['Fortluft_C']) / (daten['Abluft_C'] - daten['Außenluft_C']) * 100
## Gewicht der feuchten Luft
daten['Außenluft_Masse'] = psy.Dry_Air_Density(daten['W_Luftdruck'], daten['Außenluft_C'], daten['Außenluft_WG']) * (1 + daten['Außenluft_WG'])
daten['Zuluft_Masse'] = psy.Dry_Air_Density(daten['W_Luftdruck'], daten['Zuluft_C_vor_NE'], daten['Zuluft_WG']) * (1 + daten['Zuluft_WG'])
daten['Abluft_Masse'] = psy.Dry_Air_Density(daten['W_Luftdruck'], daten['Abluft_C'], daten['Abluft_WG']) * (1 + daten['Abluft_WG'])
daten['Fortluft_Masse'] = psy.Dry_Air_Density(daten['W_Luftdruck'], daten['Fortluft_C'], daten['Fortluft_WG']) * (1 + daten['Fortluft_WG'])
## Luftströme definieren, für die Unterscheidung des Bypass Betriebes
daten['Vpunkt_intern'] = daten['L_Zuluft_VPunkt']
daten['Vpunkt_extern'] = daten['L_Zuluft_VPunkt']
## Luftstrom im Bypassfall
daten['Vpunkt_extern'] = daten['L_Zuluft_VPunkt'] * (1-Anteil_Bypass)
daten['Vpunkt_extern'] = np.where((daten['L_Zuluft_Druck'] < schwelle_oben) & (daten['L_Zuluft_Druck'] > schwelle_unten), daten['L_Zuluft_VPunkt'], daten['Vpunkt_extern'])
## Energie der Luftmassenströme
daten['Außenluft_Energie'] = daten['h21_Außenluft_pure'] * daten['Außenluft_Masse'] * daten['Vpunkt_extern'] * (1/3600) ## kJ in kWh
daten['Zuluft_Energie'] = daten['h22_Zuluft'] * daten['Zuluft_Masse'] * daten['Vpunkt_intern'] * (1/3600) ## kJ in kWh
daten['Abluft_Energie'] = daten['h11_Abluft'] * daten['Abluft_Masse'] * daten['Vpunkt_intern'] * (1/3600) ## kJ in kWh
daten['Fortluft_Energie'] = daten['h12_Fortluft'] * daten['Fortluft_Masse'] * daten['Vpunkt_extern'] * (1/3600) ## kJ in kWh
daten['verlorene_Energie'] = daten['Außenluft_Energie'] + daten['Zuluft_Energie'] - daten['Abluft_Energie'] - daten['Fortluft_Energie']
## Schwellen wann die WRG zu 100% läuft, Bypass ist zu
daten['between_p'] = sequence(daten['L_Zuluft_Druck'], schwelle_unten, schwelle_oben, 1000)
daten['EÜG_Außenluft'] = np.where(daten['between_p'] == True ,daten['EÜG_Außenluft_vorl'] ,np.NaN)
daten['between_p'] = sequence(daten['L_Zuluft_Druck'], schwelle_unten, schwelle_oben, 1000)
daten['RWZ_Außenluft'] = np.where(daten['between_p'] == True ,daten['RWZ_Außenluft_vorl'] ,np.NaN)
daten['between_p'] = sequence(daten['L_Zuluft_Druck'], schwelle_unten, schwelle_oben, 1000)
daten['EÜG_Fortluft'] = np.where(daten['between_p'] == True ,daten['EÜG_Fortluft_vorl'] ,np.NaN)
daten['between_p'] = sequence(daten['L_Zuluft_Druck'], schwelle_unten, schwelle_oben, 1000)
daten['RWZ_Fortluft'] = np.where(daten['between_p'] == True ,daten['RWZ_Fortluft_vorl'] ,np.NaN)
## Mittelwerte
daten['EÜG_Außenluft_mean'] = daten['EÜG_Außenluft'].mean()
daten['RWZ_Außenluft_mean'] = daten['RWZ_Außenluft'].mean()
daten['EÜG_Fortluft_mean'] = daten['EÜG_Fortluft'].mean()
daten['RWZ_Fortluft_mean'] = daten['RWZ_Fortluft'].mean()
effizienz()
Effizienz_plot
def effizienz_plot():
# global daten
fig, ax = plt.subplots(figsize=(6,2))
ax.fill_between(daten.index, 0, 1, where=daten['between_p']==1, color=colo('grau',1.5), alpha=1, transform=ax.get_xaxis_transform())
# EÜG & RWZ
daten['EÜG_Außenluft_vorl'].plot(ax=ax,color=colo('grün',1), linewidth=.5, label = 'EÜG_Außenluft')
daten['RWZ_Außenluft_vorl'].plot(ax=ax,color=colo('blau',1), linewidth=.5, label = 'RWZ_Außenluft')
# EÜG & RWZ in Druckintervall
daten['EÜG_Außenluft'].plot(ax=ax,color=colo('grün',1), linewidth=1, label = '__nolable__')
daten['RWZ_Außenluft'].plot(ax=ax,color=colo('blau',1), linewidth=1, label = '__nolable__')
# EÜG & RWZ Durchschnittslinien
daten['EÜG_Außenluft_mean'].plot(ax=ax,color=colo('grün',1), linewidth=0.8, label = '__nolable__')
daten['RWZ_Außenluft_mean'].plot(ax=ax,color=colo('blau',1), linewidth=0.8, label = '__nolable__')
ax.text(0.05, 0.06, 'EÜG Außen: '+str(int(daten['EÜG_Außenluft_mean'].mean()))+' \%', color=colo('grün',1), transform=ax.transAxes, fontsize=10, bbox=dict(facecolor=colo('grau',1.5), alpha=1))
ax.text(0.3, 0.06, 'RWZ Außen: '+str(int(daten['RWZ_Außenluft_mean'].mean()))+' \%', color=colo('blau',1), transform=ax.transAxes, fontsize=10, bbox=dict(facecolor=colo('grau',1.5), alpha=1))
ax.set(xlim=[pd.to_datetime("2018-01-31 00:00:00"),pd.to_datetime("2018-02-12 11:00:00")])
ax.set(ylabel="Energie(kWh)", xlabel="Zeit",ylim=[30,100])
ax.set_xlabel('')
h0, l0 = ax.get_legend_handles_labels()
legend = plt.legend(h0, l0, ncol=4, loc=1)
set_legend_linewidth(legend)
plt.title('Effizienz - '+welche_Kalibrierung(daten))
plt.setp(ax.get_xticklabels(), rotation=0, ha="center", rotation_mode="anchor")
ax.get_xaxis().set_major_formatter(mdates.DateFormatter("%d.%m."))
# plt.savefig(output_folder + '/' + file_name + '_Effizienz - '+welche_Kalibrierung(daten) + '.pdf')
plt.show()
effizienz_plot()
Datenquelle: Lüftung Kalibrierung: testo
Testplots
reset_daten(Kalibrierung='testo', Datenlogger=0)
effizienz()
effizienz_plot()
reset_daten(Kalibrierung='self', Datenlogger=1)
effizienz()
effizienz_plot()
Datenquelle: Lüftung - Kalibrierung: testo
Datenquelle: Lüftung Kalibrierung: testo
Datenquelle: Testo - Kalibrierung: self
Datenquelle: Testo Kalibrierung: self
RESET
reset_daten()
effizienz()
Datenquelle: Lüftung - Kalibrierung: testo
Effizienz bax Plot
def effizienz_bax(title):
global daten
fig = plt.figure(constrained_layout=False, figsize=(6.9,2))
bax = brokenaxes(xlims=((eins, zwei), (drei, vier), (fünf,sechs)), hspace=1.2)
bax.plot(daten.index, daten['RWZ_Außenluft'], color=colo('blau',1), linewidth=1, label = r'RWZ_Außenluft')
bax.plot(daten.index, daten['EÜG_Außenluft'], color=colo('rot',1), linewidth=1, label = r'EÜG_Außenluft')
fig.axes[0].get_xaxis().set_major_formatter(mdates.DateFormatter("%d.%m."))
fig.axes[1].get_xaxis().set_major_formatter(mdates.DateFormatter("%d.%m."))
fig.axes[2].get_xaxis().set_major_formatter(mdates.DateFormatter("%d.%m."))
# bax.set_xlabel('')
bax.set(ylim=[50,100])
bax.set_yticks([60,70,80])
# bax.set_ylabel(r'\textbf{Temperatur} ($^\circ$C)')
bax.legend(loc=1, ncol=4)
plt.title(title+' '+welche_Kalibrierung(daten))
reset_daten(Kalibrierung='self', Datenlogger=1)
effizienz()
effizienz_bax('Effizienz der WRG')
Datenquelle: Testo - Kalibrierung: self
Datenquelle: Testo Kalibrierung: self
Suche nach dem Druck
Tests
# reset_daten()
# effizienz()
fig, ax = plt.subplots(figsize=(6,2))
ax.axhline(y=73, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
ax.axhline(y=82, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
daten['EÜG_Außenluft_vorl'].plot(ax=ax,color=colo('rot',1), linewidth=.5, label = 'EÜG_Außenluft')
daten['RWZ_Außenluft_vorl'].plot(ax=ax,color=colo('grün',1), linewidth=.5, label = 'RWZ_Außenluft')
daten['EÜG_Außenluft'].plot(ax=ax,color=colo('rot',1), linewidth=.8, label = '__nolabel__')
daten['RWZ_Außenluft'].plot(ax=ax,color=colo('grün',1), linewidth=.8, label = '__nolabel__')
daten['L_Zuluft_Druck'].plot(ax=ax,color=colo('grau',.8), linewidth=.8, label = 'Druck')
ax.set(ylim=[40,150])
ax.set_xlabel('')
plt.setp(ax.get_xticklabels(), rotation=0, ha="center", rotation_mode="anchor")
ax.get_xaxis().set_major_formatter(mdates.DateFormatter("%d.%m."))
ax.set(xlim=[pd.to_datetime("2018-01-31 00:00:00"),pd.to_datetime("2018-02-22 00:00:00")])
h0, l0 = ax.get_legend_handles_labels()
legend = plt.legend(h0, l0, ncol=3, loc=1)
set_legend_linewidth(legend)
print(f'RWZ außen: {int(daten.RWZ_Außenluft_mean.mean())}%')
print(f'EÜG außen: {int(daten.EÜG_Außenluft_mean.mean())}%')
RWZ außen: 76%
EÜG außen: 95%
Luftdruck
## Luftdruck der Wetterstation KAssel Mitte
fig, ax = plt.subplots(figsize=(6,2))
# ax2 = ax.twinx()
# ax2.axhline(y=0, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
daten['W_Luftdruck'].plot(ax=ax,color=colo('blau',1), linewidth=.8, label = 'W_Luftdruck')
# ax.set(ylim=[40,150])
# ax2.set(ylim=[-.025,.05])
ax.set_xlabel('')
plt.setp(ax.get_xticklabels(), rotation=0, ha="center", rotation_mode="anchor")
ax.get_xaxis().set_major_formatter(mdates.DateFormatter("%d.%m."))
ax.set(xlim=[pd.to_datetime(von),pd.to_datetime(bis)])
h0, l0 = ax.get_legend_handles_labels()
legend = plt.legend(h0, l0, ncol=3, loc=1)
set_legend_linewidth(legend)
Druck Histogramm
daten_std = daten.loc[eins : sechs]
# daten_std.dropna(inplace= True)
fig, ax = plt.subplots(figsize=(6,5))
bins = 1000
# .dropna()].isna().sum()
## Histogramme mit Rahmen
plt.hist(daten_std['L_Zuluft_Druck'], bins=bins, orientation="horizontal", color=colo('grün',1), linewidth=0.5, edgecolor='black', label = 'Druck Zuluft', histtype='stepfilled')
ax.axhline(y=93, linewidth=0.3, color=colo('black',1), xmin=0.0001, xmax=1)
ax.axhline(y=87, linewidth=0.3, color=colo('black',1), xmin=0.0001, xmax=1)
ax.axhline(y=81, linewidth=0.3, color=colo('black',1), xmin=0.0001, xmax=1)
ax.axhline(y=72, linewidth=0.3, color=colo('black',1), xmin=0.0001, xmax=1)
ax.axhline(y=65, linewidth=0.3, color=colo('black',1), xmin=0.0001, xmax=1)
h0, l0 = ax.get_legend_handles_labels()
legend = plt.legend(h0, l0, ncol=1, loc=1)
set_legend_linewidth(legend)
ax.set_ylabel(r'\textbf{Druck} (Pa)')
ax.set_xlabel(r'\textbf{Zeit} (h)')
ax.set_yticks([93,87,81,72,65])
ax.set(xlim=[0,2000])
ax.set(ylim=[70,100])
plt.tick_params(axis='x', which='minor', bottom=False)
# plt.savefig(output_folder + '/' + file_name + '_Luftdruck_Histogramm.pdf')
Druck Volumenstrom Linenplots
def axformat():
ax.axhline(y=93, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
ax.axhline(y=87, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
ax.axhline(y=81, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
ax.axhline(y=72, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
ax.axhline(y=65, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
ax.set_xlabel('')
ax.set(ylim=[60,100])
ax.set_yticks([93,87,81,72,65])
h0, l0 = ax.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
legend = plt.legend(h0+h2, l0+l2, ncol=2, loc=1)
set_legend_linewidth(legend)
ax.legend(loc=1, ncol=4)
plt.setp(ax.get_xticklabels(), rotation=0, ha="center", rotation_mode="anchor")
fig = plt.figure(constrained_layout=False, figsize=(6,2))
bax = brokenaxes(xlims=((eins, zwei), (drei, vier), (fünf,sechs)), hspace=1.2)
bax.plot(daten.index, daten['L_Zuluft_Druck'], color=colo('grün',1), linewidth=0.5, label = r'Zuluft_Druck')
fig.axes[0].get_xaxis().set_major_formatter(mdates.DateFormatter("%d.%m."))
fig.axes[1].get_xaxis().set_major_formatter(mdates.DateFormatter("%d.%m."))
fig.axes[2].get_xaxis().set_major_formatter(mdates.DateFormatter("%d.%m."))
bax.axhline(y=93, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
bax.axhline(y=87, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
bax.axhline(y=81, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
bax.axhline(y=72, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
plt.title('gesamter Zeitraum')
# bax.set_xlabel('')
# bax.set(ylim=[60,100])
# bax.set_yticks([18.5,19,19.5])
# bax.set_ylabel(r'\textbf{Temperatur} ($^\circ$C)')
bax.legend(loc=1, ncol=4)
## 12 Tage
fig, ax = plt.subplots(figsize=(6,2))
daten['L_Zuluft_Druck'].plot(ax=ax,color=colo('grün',1), linewidth=.5, label = 'Druck')
ax2 = ax.twinx()
daten['L_Zuluft_VPunkt'].plot(ax=ax2,color=colo('rot',1), linewidth=.5, label = 'Volumenstrom')
axformat()
plt.title('12 Tage')
ax.get_xaxis().set_major_formatter(mdates.DateFormatter("%d.%m."))
ax.set(xlim=[pd.to_datetime("2018-02-01 00:00:00"),pd.to_datetime("2018-02-12 00:00:00")])
## 3.2
fig, ax = plt.subplots(figsize=(6,2))
daten['L_Zuluft_Druck'].plot(ax=ax,color=colo('grün',1), linewidth=.5, label = 'L_Zuluft_Druck')
ax2 = ax.twinx()
daten['L_Zuluft_VPunkt'].plot(ax=ax2,color=colo('rot',1), linewidth=.5, label = 'Volumenstrom')
axformat()
plt.title('3.2.')
ax.get_xaxis().set_major_formatter(mdates.DateFormatter("%H:%M"))
ax.set(xlim=[pd.to_datetime("2018-02-03 00:00:00"),pd.to_datetime("2018-02-03 23:59:00")])
## 7.2.
fig, ax = plt.subplots(figsize=(6,2))
daten['L_Zuluft_Druck'].plot(ax=ax,color=colo('grün',1), linewidth=.5, label = 'L_Zuluft_Druck')
ax2 = ax.twinx()
daten['L_Zuluft_VPunkt'].plot(ax=ax2,color=colo('rot',1), linewidth=.5, label = 'Volumenstrom')
axformat()
plt.title('7.2.')
ax.get_xaxis().set_major_formatter(mdates.DateFormatter("%H:%M"))
ax.set(xlim=[pd.to_datetime("2018-02-07 00:00:00"),pd.to_datetime("2018-02-07 23:59:00")])
## 10.2.
fig, ax = plt.subplots(figsize=(6,2))
daten['L_Zuluft_Druck'].plot(ax=ax,color=colo('grün',1), linewidth=.5, label = 'L_Zuluft_Druck')
ax2 = ax.twinx()
daten['L_Zuluft_VPunkt'].plot(ax=ax2,color=colo('rot',1), linewidth=.5, label = 'Volumenstrom')
axformat()
plt.title('10.2.')
ax.get_xaxis().set_major_formatter(mdates.DateFormatter("%H:%M"))
ax.set(xlim=[pd.to_datetime("2018-02-10 00:00:00"),pd.to_datetime("2018-02-10 23:59:00")])
[(736735.0, 736735.9993055556)]
Wärmefluss
Berechnungen
def wärmefluss(title='Wärmefluss'):
global daten
## Gas
daten['S_Gas_Energie'] = daten['S_Gas_Vpunkt'].div(1000).mul(11.276)
## Hydraulik
daten['S_FriWa_Energie_Sek'] = energie(daten['S_FriWa_VL_Sek'], daten['S_FriWa_RL_Sek'], daten['S_FriWa_Vpunkt_Sek'])
daten['S_FriWa_Energie_Prim'] = energie(daten['S_FriWa_VL_Prim'], daten['S_FriWa_RL_Prim'], daten['S_FriWa_Vpunkt_Prim'])
daten['S_Solar_Energie'] = energie(daten['S_Solar_VL'], daten['S_Solar_RL'], daten['S_Solar_Vpunkt'])
daten['S_Heizung_Energie'] = energie(daten['S_Heizung_VL'], daten['S_Heizung_RL'], daten['S_Heizung_Vpunkt'])
daten['S_Kessel_Energie'] = energie(daten['S_Kessel_VL'], daten['S_Kessel_RL'], daten['S_Kessel_Vpunkt'])
## Transmissionswärmeverluste
daten['TMWV'] = -110 * (daten['Abluft_C'] - daten['Außenluft_C'])/1000 ## H_T Wert: gemessen: ~110 W/K, berechnet: 207 W/K
## Wärmegewinne durch el Strom
daten['Strom'] = .4
# ## Wärmespeicherkapazität des Gebäudes
# ## Umweg über einen eigenen DataFrame
# df = pd.DataFrame()
# df['Abluft_C'] = daten['Abluft_C']
# df['Wärmespeicherkap'] = daten['Abluft_C'].groupby(daten.index.date).apply(lambda x: x.iloc[-1] -x.iloc[0]) * 8.837 / 24 # Stunden pro Tag
# df['Wärmespeicherkap'].fillna(method='ffill', inplace =True)
# daten['Wärmespeicherkap'] = df['Wärmespeicherkap']
# daten['gesp_Wärme_neg'] = np.where(daten['Wärmespeicherkap'] < 0, daten['Wärmespeicherkap'].mul(-1), np.NaN)
# daten['gesp_Wärme_po'] = np.where(daten['Wärmespeicherkap'] > 0, daten['Wärmespeicherkap'].mul( 1), np.NaN)
## Lüftung
daten['L_Zuluft_VPunkt'] = daten['L_Zuluft_1_VPunkt'] + daten['L_Zuluft_2_VPunkt'] + daten['L_Zuluft_3_VPunkt']
daten['Lüftung_rein'] = daten['Außenluft_Energie']
daten['Lüftung_raus'] = daten['Fortluft_Energie']
daten['Lüftung'] = (daten['Lüftung_rein'] - daten['Lüftung_raus'])
## interne Wärmegewinne durch Meschen (Anzahl über CO2 Konzentration bestimmt)
## CO2 Tagesdurchschnittswerte
daten_co2 = daten[['L_Seminarraum_1_CO2','L_Seminarraum_2_CO2']].resample("1D").mean() ## oder median??
daten_co2 = daten_co2.resample("15s").fillna(method='ffill').interpolate()
V_1 = 330 ## Gesamtnettovolumen Sem1 + Sem2 = 440m³ # Flächen Sem1: 90m² und Sem2: 30m²
V_2 = 110 ## Volumen anteilig nach Fläche
daten['LWR_1'] = daten['L_Zuluft_1_VPunkt'] / V_1
daten['LWR_2'] = daten['L_Zuluft_2_VPunkt'] / V_2
daten['1CO2med'] = daten_co2['L_Seminarraum_1_CO2'] #daten['L_Seminarraum_1_CO2'].median()
daten['2CO2med'] = daten_co2['L_Seminarraum_2_CO2'] #daten['L_Seminarraum_2_CO2'].median()
c02_außenluft = (daten['1CO2med'] + daten['2CO2med']) / 2
co2_abgabe_ruhe = 20000 # CO2 Emmisionsrate pro Person in ml/h
co2_abgabe_sport = 100000 # CO2 Emmisionsrate pro Person in ml/h
daten['co2_abgabe_angepasst'] = co2_abgabe_ruhe
## Annahme: Abends wird dort Yoga gemacht
daten['co2_abgabe_angepasst'].loc[(daten.index.hour>=15) & (daten.index.hour<=23)] = co2_abgabe_sport
wärme_abgabe_ruhe = .12 # kW
wärme_abgabe_sport = .27 # kW
daten['wärme_abgabe_angepasst'] = wärme_abgabe_ruhe
daten['wärme_abgabe_angepasst'].loc[(daten.index.hour>=15) & (daten.index.hour<=23)] = wärme_abgabe_sport
daten['Personen_1'] = (-daten['LWR_1'] * V_1 * c02_außenluft + daten['LWR_1'] * V_1 * daten['L_Seminarraum_1_CO2']) / daten['co2_abgabe_angepasst']
daten['Personen_2'] = (-daten['LWR_2'] * V_2 * c02_außenluft + daten['LWR_2'] * V_2 * daten['L_Seminarraum_2_CO2']) / co2_abgabe_ruhe
daten['Personen_1'] = np.where(daten['Personen_1'] < 1, 0, daten['Personen_1'])
daten['Personen_2'] = np.where(daten['Personen_2'] < 1, 0, daten['Personen_2'])
daten['Wärme_durch_Personen_1'] = daten['Personen_1'] * daten['wärme_abgabe_angepasst']
daten['Wärme_durch_Personen_2'] = daten['Personen_2'] * wärme_abgabe_ruhe
daten['Wärme_durch_Personen'] = daten['Wärme_durch_Personen_2'] + daten['Wärme_durch_Personen_1']
## wenn Heizung + 2h aus - keine Bilanz erstellen
daten["S_Heizung_Vpunkt_flag"] = 0
daten.loc[daten["S_Heizung_Vpunkt"] > 50, "S_Heizung_Vpunkt_flag"] = 1
daten["S_Heizung_Vpunkt_flag"].fillna(value = 1,limit = 480, inplace = True)
daten.loc[daten["S_Heizung_Vpunkt_flag"] == 0, "S_FriWa_Energie_Prim"] = 0
daten.loc[daten["S_Heizung_Vpunkt_flag"] == 0, "Strom"] = 0
daten.loc[daten["S_Heizung_Vpunkt_flag"] == 0, "Wärme_durch_Personen"] = 0
daten.loc[daten["S_Heizung_Vpunkt_flag"] == 0, "Lüftung"] = 0
daten.loc[daten["S_Heizung_Vpunkt_flag"] == 0, "TMWV"] = 0
## Bilanzsumme
daten['Wärmebilanz'] = daten.S_Heizung_Energie + daten.S_FriWa_Energie_Prim + daten.Strom + daten.Wärme_durch_Personen + daten.Lüftung + daten.TMWV
## für Balkendiagramm
daten['Wärmebilanz_po'] = np.where(daten['Wärmebilanz'] < 0, daten['Wärmebilanz'], 0)
daten['Wärmebilanz_ne'] = np.where(daten['Wärmebilanz'] > 0, daten['Wärmebilanz'], 0)
# print_md(f'{title} minütlich<br>Wärmebilanz Summe: {int(daten.Wärmebilanz.sum()/240)} kWh<br> positiv: {int(daten.Wärmebilanz_po.sum()/240)} negativ: {int(daten.Wärmebilanz_ne.sum()/240)} ')
wärmefluss()
Wärmespeicherkapazität berechnen
## War wicvhtig, um einen Feher zu Finden
## Ist jetzt aber nicht mehr notwendig
# # erster und letzter Wert am Tag
# res = daten_sub['Abluft_C'].groupby(daten_sub.index.date).apply(lambda x: x.iloc[[0, -1]])
# res.index = res.index.droplevel(0)
# print(res)
# # aus Abluft_delta_C -> Wärmespeicherkap
# df = pd.DataFrame()
# df['Abluft_delta_C'] = daten_sub['Abluft_C'].groupby(daten_sub.index.date).apply(lambda x: x.iloc[-1] -x.iloc[0])
# df['Wärmespeicherkap'] = daten_sub['Abluft_C'].groupby(daten_sub.index.date).apply(lambda x: x.iloc[-1] -x.iloc[0]) * 8.837
# print(df)
Wärmefluss Plot
## den Daten df auf tägliche Basis sampeln
## Daten aus der MCA importieren
## beide zusammenführen und aufräumen
def daten_tgl_resample():
global daten_tgl
daten_sub = daten.loc[eins : sechs].resample('D').sum().div(240).copy()
daten_sub = daten_sub.replace(0, np.nan)
daten_sub = daten_sub.dropna(how='all', axis=0)
daten_sub = daten_sub.replace(np.nan, 0)
Bilanz_tgl = pd.DataFrame()
Bilanz_tgl = pd.read_csv("../MCA/Energie_Fehler_tgl.csv")
Bilanz_tgl['Zeit'] = pd.to_datetime(Bilanz_tgl["Zeit"],dayfirst=True,)
Bilanz_tgl.set_index(["Zeit"], inplace=True)
daten_tgl = pd.DataFrame()
daten_tgl = pd.concat([Bilanz_tgl, daten_sub], axis=1)
daten_tgl = daten_tgl.dropna(axis=0, subset=['T_Zuluft_rF'])
daten_tgl['TMWV_Fehler'] = daten_tgl['TMWV'] * .28
daten_tgl['Wärme_durch_Personen_Fehler'] = daten_tgl['Wärme_durch_Personen'] * .2
daten_tgl['Strom_Fehler'] = daten_tgl['Strom'] * .1
daten_tgl['Lüftung_Fehler'] = daten_tgl['Lüftung'] * .5
## Fehlersumme pro Säule im Diagramm
daten_tgl['Fehler_G'] = daten_tgl['S_Gas_Energie'].mul(0.016)
daten_tgl['Fehler_SK'] = daten_tgl['Solar_Fehler'] + daten_tgl['Kessel_Fehler']
daten_tgl['Fehler_PTSH'] = daten_tgl['FriWa_Prim_Fehler'] + daten_tgl['Heizung_Fehler'] + daten_tgl['Wärme_durch_Personen_Fehler'] + daten_tgl['Strom_Fehler']
daten_tgl['Fehler_LT'] = daten_tgl['TMWV_Fehler'] + daten_tgl['Lüftung_Fehler']
return daten_tgl
def wärmefluss_plot(title,nr=0):
## ALT
# asymmetric_error = []
# if err == 1:
# lower_error = minmax['Lüftung'] - minmax['Lüftung_min']
# upper_error = minmax['Lüftung'] + minmax['Lüftung_max']
# asymmetric_error = [lower_error, upper_error]
## Verluste sind in dieser Darstellung auch positiv
daten_tgl['Lüftung'] = abs(daten_tgl['Lüftung']) ##.mul(-1)
daten_tgl['TMWV'] = abs(daten_tgl['TMWV']) ##.mul(-1)
## Farben Plot
Farben_Gas = [colo('grau',.7)]
Farben_KeSo = [colo('blau',1), colo('orange',1) ]
Farben_rein = [colo('blau',.5), colo('rot',1.5), colo('gelb',1), colo('violet',1) ]
Farben_raus = [colo('rot',1), colo('grau',1.2) ]
Farben_Bilanz = [colo('grün',1)]
## Farben und Label für die Legende
L_Gas = mpatches.Patch(facecolor=colo('grau',.7), label='Gas', edgecolor='black', linewidth=0.3)
L_Kessel = mpatches.Patch(facecolor=colo('blau',1), label='Kessel', edgecolor='black', linewidth=0.3)
L_Solar = mpatches.Patch(facecolor=colo('orange',1), label='Solar', edgecolor='black', linewidth=0.3)
L_Heizung = mpatches.Patch(facecolor=colo('blau',.5), label='Heizung', edgecolor='black', linewidth=0.3)
L_FriWa = mpatches.Patch(facecolor=colo('rot',1.5), label='FriWa', edgecolor='black', linewidth=0.3)
L_Strom = mpatches.Patch(facecolor=colo('gelb',1), label='Strom', edgecolor='black', linewidth=0.3)
L_Personen = mpatches.Patch(facecolor=colo('violet',1), label='Personen', edgecolor='black', linewidth=0.3)
L_Lüftung = mpatches.Patch(facecolor=colo('grau',1), label='Lüftung', edgecolor='black', linewidth=0.3)
L_Trans = mpatches.Patch(facecolor=colo('rot',1), label='Transmission', edgecolor='black', linewidth=0.3)
L_Bilanz = mpatches.Patch(facecolor=colo('grün',1), label='Bilanz', edgecolor='black', linewidth=0.3)
L_Dummy = mpatches.Patch(facecolor=colo('black',1), label='Dummy', edgecolor='black', linewidth=0.3)
handles = [L_Gas,L_Dummy,L_Dummy,L_Dummy,
L_Solar,L_Kessel,L_Dummy,L_Dummy,
L_Personen,L_Strom,L_FriWa,L_Heizung,
L_Lüftung,L_Trans,L_Dummy,L_Dummy,
# L_Bilanz,L_Dummy,L_Dummy,L_Dummy,
]
def plot_3(von,bis):
Gas = daten_tgl[['S_Gas_Energie']].loc[von:bis]
KeSo = daten_tgl[['Kessel_Wert', 'Solar_Wert']].loc[von:bis]
W_rein = daten_tgl[['Heizung_Wert','FriWa_Prim_Wert', 'Strom','Wärme_durch_Personen']].loc[von:bis]
W_raus = daten_tgl[['TMWV','Lüftung']].loc[von:bis]
bilanz = daten_tgl[['Wärmebilanz']].loc[von:bis] * -1
fig, ax = plt.subplots(constrained_layout=True, figsize=(5.9,3))
Gas.plot.bar(position = 2, color=(Farben_Gas), edgecolor='black',linewidth = 0.3, width= 0.2,ax=ax,stacked=True,alpha = 1)
KeSo.plot.bar(position = 1, color=(Farben_KeSo), edgecolor='black',linewidth = 0.3, width= 0.2,ax=ax,stacked=True,alpha = 1)
W_rein.plot.bar(position= 0, color=(Farben_rein), edgecolor='black',linewidth = 0.3, width= 0.2,ax=ax,stacked=True,alpha = 1)
W_raus.plot.bar(position=-1, color=(Farben_raus), edgecolor='black',linewidth = 0.3, width= 0.2,ax=ax,stacked=True,alpha = 1)
## Fehlerbalken
error_kw_rein = dict(lw=0.5, capsize=1, capthick=0.5, ecolor=('black'))
Fehler_G_blind = daten_tgl['S_Gas_Energie']
Fehler_SK_blind = daten_tgl['Kessel_Wert'] + daten_tgl['Solar_Wert']
Fehler_PTSH_blind = daten_tgl['Heizung_Wert'] + daten_tgl['FriWa_Prim_Wert'] + daten_tgl['Strom'] + daten_tgl['Wärme_durch_Personen']
Fehler_LT_blind = daten_tgl['TMWV'] + daten_tgl['Lüftung']
Fehler_G_blind.plot.bar( position= 2, color=colo('grau',1), edgecolor='black',linewidth = 0.3, width= 0.2,ax=ax,stacked=True,alpha = .001, yerr=daten_tgl.Fehler_G, error_kw=error_kw_rein)
Fehler_SK_blind.plot.bar( position= 1, color=colo('grau',1), edgecolor='black',linewidth = 0.3, width= 0.2,ax=ax,stacked=True,alpha = .001, yerr=daten_tgl.Fehler_SK, error_kw=error_kw_rein)
Fehler_PTSH_blind.plot.bar(position= 0, color=colo('grau',1), edgecolor='black',linewidth = 0.3, width= 0.2,ax=ax,stacked=True,alpha = .001, yerr=daten_tgl.Fehler_PTSH, error_kw=error_kw_rein)
Fehler_LT_blind.plot.bar( position= -1, color=colo('grau',1), edgecolor='black',linewidth = 0.3, width= 0.2,ax=ax,stacked=True,alpha = .001, yerr=daten_tgl.Fehler_LT, error_kw=error_kw_rein)
### ALT
# ## Bilanzfehler in grün
# if err == 0:
# bilanz.plot.bar(position= -0.5, color=(Farben_Bilanz), edgecolor='black',linewidth = 0.3, width= 0.2,ax=ax,stacked=True,alpha = 1)
# ## Fehlerbalken auf Lüftung
# if err == 1:
# Lüftung_bottom = daten_tgl['TMWV']
# daten_tgl.Lüftung.plot.bar(position= -1,bottom=Lüftung_bottom, color=colo('grau',1), edgecolor='black',linewidth = 0.3, width= 0.2,ax=ax,stacked=True,alpha = 1, yerr=asymmetric_error, error_kw=error_kw_rein)
ax.axhline(y=0, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
ticklabels = ['']*len(W_rein.index)
ticklabels[::1] = [item.strftime('%d.\n %b') for item in W_rein.index[::1]]
ax.set_xlim(-0.5,len(W_rein.index))
ax.set_xticklabels(ticklabels, rotation=0)
ax.set_xticks(np.arange(0.2/2, len(W_rein.index), step = 1))
ax.set_xlabel('')
ax.set_yticks([0,50,100,150])
ax.set_ylim(0,300)
ax.set_ylabel(r'\textbf{Energie} ($kWh$)')
# for p in ax.patches:
# ax.annotate(str(p.get_height()), (p.get_x() * 1.005, p.get_height() * 1.005))
# Legende
legend = plt.legend(handles=handles, loc=1, ncol=4 )
legend.get_frame().set_linewidth(0.3)
## Dummies löschen
legend.legendHandles[1].set_visible(False)
legend.legendHandles[2].set_visible(False)
legend.legendHandles[3].set_visible(False)
legend.legendHandles[6].set_visible(False)
legend.legendHandles[7].set_visible(False)
legend.legendHandles[14].set_visible(False)
legend.legendHandles[15].set_visible(False)
# legend.legendHandles[16].set_visible(False)
# legend.legendHandles[17].set_visible(False)
# legend.legendHandles[18].set_visible(False)
# legend.legendHandles[19].set_visible(False)
legend.texts[1].set_visible(False)
legend.texts[2].set_visible(False)
legend.texts[3].set_visible(False)
legend.texts[6].set_visible(False)
legend.texts[7].set_visible(False)
legend.texts[14].set_visible(False)
legend.texts[15].set_visible(False)
# legend.texts[16].set_visible(False)
# legend.texts[17].set_visible(False)
# legend.texts[18].set_visible(False)
# legend.texts[19].set_visible(False)
ax.set_xlabel('')
plt.title('('+str(int(daten.Wärmebilanz_po.sum()/-240))+'/'+str(int(daten.Wärmebilanz_ne.sum()/-240))+') | '+title)
# plt.title(title)
# plt.savefig(output_folder + '/' + file_name + '_' + title +'.pdf')
if nr == 0:
plot_3(eins,sechs)
if nr == 1:
plot_3(eins,zwei)
if nr == 2:
plot_3(drei,vier)
if nr == 3:
plot_3(fünf,sechs)
# daten_tgl['Wärmebilanz_po'] = np.where(daten_tgl['Wärmebilanz'] < 0, daten_tgl['Wärmebilanz'], 0)
# daten_tgl['Wärmebilanz_ne'] = np.where(daten_tgl['Wärmebilanz'] > 0, daten_tgl['Wärmebilanz'], 0)
# print_md(f'{title} täglich<br>Wärmebilanz Summe: {int(daten_tgl.Wärmebilanz.sum())} kWh<br> positiv: {int(daten_tgl.Wärmebilanz_po.sum())} negativ: {int(daten_tgl.Wärmebilanz_ne.sum())} ')
## AUFRUFE
reset_daten(Kalibrierung='self', Datenlogger=1)
effizienz()
wärmefluss()
daten_tgl_resample()
wärmefluss_plot(welche_Kalibrierung(daten),nr=0)
# for item in daten_tgl.columns:
# print(item)
Datenquelle: Testo - Kalibrierung: self
Datenquelle: Testo Kalibrierung: self
Varianten
reset_daten(Kalibrierung='self', Datenlogger=1)
effizienz()
wärmefluss()
daten_tgl_resample()
wärmefluss_plot(welche_Kalibrierung(daten),nr=0)
reset_daten(Kalibrierung='testo', Datenlogger=1)
effizienz()
wärmefluss()
daten_tgl_resample()
wärmefluss_plot(welche_Kalibrierung(daten),nr=0)
reset_daten(Kalibrierung='self', Datenlogger=0)
effizienz()
wärmefluss()
daten_tgl_resample()
wärmefluss_plot(welche_Kalibrierung(daten),nr=0)
######################## STACK ########################
reset_daten(Kalibrierung='testo', Datenlogger=0)
effizienz()
wärmefluss()
daten_tgl_resample()
wärmefluss_plot(welche_Kalibrierung(daten),nr=0)
######################## STACK ########################
Datenquelle: Testo - Kalibrierung: self
Datenquelle: Testo Kalibrierung: self
Datenquelle: Testo - Kalibrierung: testo
Datenquelle: Testo Kalibrierung: testo
Datenquelle: Lüftung - Kalibrierung: self
Datenquelle: Lüftung Kalibrierung: self
Datenquelle: Lüftung - Kalibrierung: testo
Datenquelle: Lüftung Kalibrierung: testo
Plot Energie aus MCA
## reindex with NaN
daten_tgl = daten_tgl.reindex(pd.date_range(start=daten_tgl.index.min(), end=daten_tgl.index.max())).fillna(np.nan)
## remove NaN
#daten_tgl = daten_tgl.dropna(axis=0, subset=['T_Zuluft_rF'])
fig, ax = plt.subplots(figsize=(6,2))
# ax2 = ax.twinx()
# ax2.axhline(y=0, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
daten_tgl['Solar_Wert'].plot(ax=ax,color=colo('orange',1), linewidth=.8, label = 'Solar_Wert')
daten_tgl['Kessel_Wert'].plot(ax=ax,color=colo('blau',1.1), linewidth=.8, label = 'Kessel_Wert')
daten_tgl['Heizung_Wert'].plot(ax=ax,color=colo('blau',.7), linewidth=.8, label = 'Heizung_Wert')
daten_tgl['FriWa_Prim_Wert'].plot(ax=ax,color=colo('rot',1), linewidth=.8, label = 'FriWa_Prim_Wert')
daten_tgl['Speicherverluste_MCA_Wert'].plot(ax=ax,color=colo('grün',1), linewidth=.8, label = 'Speicherverluste_MCA_Wert')
daten_tgl['Kessel_Wert_neg'].plot(ax=ax,color=colo('blau',1.5), linewidth=.8, label = 'Kessel_Wert_neg')
# ax.set(ylim=[40,150])
# ax2.set(ylim=[-.025,.05])
ax.set_xlabel('')
plt.setp(ax.get_xticklabels(), rotation=0, ha="center", rotation_mode="anchor")
ax.get_xaxis().set_major_formatter(mdates.DateFormatter("%d.%m."))
ax.set(xlim=[pd.to_datetime(von),pd.to_datetime(bis)])
h0, l0 = ax.get_legend_handles_labels()
legend = plt.legend(h0, l0, ncol=3, loc=1)
set_legend_linewidth(legend)
daten_tgl.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 77 entries, 2017-12-06 to 2018-02-20
Freq: D
Columns: 163 entries, Solar_Wert to Fehler_LT
dtypes: float64(163)
memory usage: 98.7 KB
toggle NaN
## reindex with NaN for Liniplots
# daten_tgl = daten_tgl.reindex(pd.date_range(start=daten_tgl.index.min(), end=daten_tgl.index.max())).fillna(np.nan)
## remove NaN for Barplots
#daten_tgl = daten_tgl.dropna(axis=0, subset=['T_Zuluft_rF'])
Tagesansichten
Tageswerte
def tageswerte(t,m,y):
tag = str(t)
monat = str(m)
jahr = str(y)
daten_zw_feb = daten.loc[str(jahr)+'-'+str(monat)+'-'+str(tag)+' 00:00' : str(jahr)+'-'+str(monat)+'-'+str(tag)+' 23:59']
tagesbilanz = ''#str(round(float(bilanz_tgl[['Wärmebilanz']].loc[ str(jahr)+'-'+str(monat)+'-'+str(tag)+' 00:00' : str(jahr)+'-'+str(monat)+'-'+str(tag)+' 23:59'].values[0]),2))
fig, axes = plt.subplots(nrows=8, ncols=1, sharex=True , constrained_layout=False,figsize=(5.8,8.05))
axes[0].plot(daten_zw_feb['L_Zuluft_VPunkt'],color=colo('blau',1), linewidth=0.8, label='Zuluft')
axes[0].plot(daten_zw_feb['L_Zuluft_Druck'].mul(10),color=colo('grün',1), linewidth=0.8, label='Druck')
axes[0].axhline(y=820, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
axes[0].set(ylabel=r"\textbf{VS} ($m\textsuperscript{3}$)")
axes[0].set_ylim(700,1550)
axes[1].plot(daten_zw_feb['Lüftung'].div(240),color=colo('rot',1), linewidth=0.8, label='Lüftung Differenz')
axes[1].set(ylabel=r"\textbf{Lei} ($kW$)")
axes[1].set_ylim(-0.03,0.03)
axes[2].plot(daten_zw_feb['L_Seminarraum_1_CO2'],color=colo('grün',1), linewidth=0.8, label='Seminar 1')
axes[2].plot(daten_zw_feb['L_Seminarraum_2_CO2'],color=colo('gelb',1), linewidth=0.8, label='Seminar 2')
axes[2].set(ylabel=r"\textbf{CO\textsubscript{2}} ($ppm$)")
axes[2].set_ylim(400,1000)
axes[3].plot(daten_zw_feb['S_FriWa_Vpunkt_Prim'],color=colo('orange',1), linewidth=0.8, label='FriWa Prim')
axes[3].plot(daten_zw_feb['S_FriWa_Vpunkt_Sek'],color=colo('rot',1), linewidth=0.8, label='FriWa Sek')
axes[3].set(ylabel=r"\textbf{VS} ($m\textsuperscript{3}/h$)")
axes[3].set_ylim(0,100)
axes[4].plot(daten_zw_feb['Außenluft_WG'],color=colo('orange',1), linewidth=0.8, label='Außenluft')
axes[4].plot(daten_zw_feb['Zuluft_WG'],color=colo('rot',1), linewidth=0.8, label='Zuluft')
axes[4].plot(daten_zw_feb['Abluft_WG'],color=colo('grün',1), linewidth=0.8, label='Abluft')
axes[4].plot(daten_zw_feb['Fortluft_WG'],color=colo('blau',1), linewidth=0.8, label='Fortluft')
axes[4].set(ylabel=r"\textbf{WG} ($g/m\textsuperscript{3}$)")
axes[4].set_ylim(0.003,0.006)
axes[5].plot(daten_zw_feb['S_Solarstrahlung'],color=colo('gelb',1), linewidth=0.8, label='Solarstrahlung')
axes[5].set(ylabel=r"\textbf{Lei} ($W/m^{2}$)")
axes[5].set_ylim(0,500)
axes[6].plot(daten_zw_feb['L_Aussenlufttemperatur_1'],color=colo('blau',1), linewidth=0.8, label='Aussenluft')
axes[6].set(ylabel=r"\textbf{Tem} ($^\circ$C)")
axes[6].set_ylim(-5,5)
axes[7].plot(daten_zw_feb['Zuluft_C_vor_NE'],color=colo('grün',1), linewidth=0.8, label='Zuluft')
axes[7].plot(daten_zw_feb['Abluft_C'],color=colo('rot',1), linewidth=0.8, label='Abluft')
axes[7].set(ylabel=r"\textbf{Tem} ($^\circ$C)")
axes[7].set_ylim(10,25)
axes[0].set_title('Tageswerte: ' +str(tag)+'.'+str(monat)+'.'+str(jahr))
axes[0].set(xlim=[pd.to_datetime(str(jahr)+'-'+str(monat)+'-'+str(tag)+' 00:00'),pd.to_datetime(str(jahr)+'-'+str(monat)+'-'+str(tag)+' 23:59')])
axes[0].xaxis.set_major_formatter(mdates.DateFormatter('%H'))
fig.autofmt_xdate(rotation=0,ha='center')
for ax in axes:
ax.legend( ncol=6, loc=1, bbox_to_anchor=(1., 1.3))
ax.yaxis.get_label().set_fontsize(8)
plt.subplots_adjust(hspace=.2)
# plt.tight_layout()
plt.show()
tageswerte(1,2,2018)
Luftwerte
def luftwerte(t,m,y):
tag = str(t)
monat = str(m)
jahr = str(y)
daten_zw_feb = daten.loc[str(jahr)+'-'+str(monat)+'-'+str(tag)+' 00:00' : str(jahr)+'-'+str(monat)+'-'+str(tag)+' 23:59']
tagesbilanz = ''#str(round(float(bilanz_tgl[['Wärmebilanz']].loc[ str(jahr)+'-'+str(monat)+'-'+str(tag)+' 00:00' : str(jahr)+'-'+str(monat)+'-'+str(tag)+' 23:59'].values[0]),2))
fig, axes = plt.subplots(nrows=9, ncols=1, sharex=True , constrained_layout=False,figsize=(5.8,8.05))
axes[0].plot(daten_zw_feb['L_Zuluft_VPunkt'],color=colo('blau',1), linewidth=0.8, label='Zuluft')
axes[0].plot(daten_zw_feb['L_Zuluft_Druck'].mul(10),color=colo('grün',1), linewidth=0.8, label='Druck')
axes[0].axhline(y=820, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
axes[0].set(ylabel=r"\textbf{VS} ($m\textsuperscript{3}$)")
axes[0].set_ylim(700,1550)
axes[1].plot(daten_zw_feb['Lüftung'].div(240),color=colo('rot',1), linewidth=0.8, label='Lüftung Differenz')
axes[1].plot(daten_zw_feb['Lüftung_rein'].div(240),color=colo('blau',1), linewidth=0.8, label='Lüftung rein')
axes[1].plot(daten_zw_feb['Lüftung_raus'].div(240),color=colo('grün',1), linewidth=0.8, label='Lüftung raus')
axes[1].set(ylabel=r"\textbf{Lei} ($kW$)")
axes[1].set_ylim(-0.05,0.15)
axes[2].plot(daten_zw_feb['EÜG_Außenluft'],color=colo('grün',1), linewidth=0.8, label='EÜG_Außenluft')
axes[2].plot(daten_zw_feb['RWZ_Außenluft'],color=colo('gelb',1), linewidth=0.8, label='RWZ_Außenluft')
axes[2].set(ylabel=r"\textbf{Wirk} ($\%$)")
axes[2].set_ylim(0,100)
axes[3].plot(daten_zw_feb['Außenluft_Energie'],color=colo('blau',1), linewidth=0.8, label='Außenluft')
axes[3].plot(daten_zw_feb['Zuluft_Energie'],color=colo('orange',1), linewidth=0.8, label='Zuluft')
axes[3].plot(daten_zw_feb['Abluft_Energie'],color=colo('rot',1), linewidth=0.8, label='Abluft')
axes[3].plot(daten_zw_feb['Fortluft_Energie'],color=colo('grün',1), linewidth=0.8, label='Fortluft')
axes[3].set(ylabel=r"\textbf{En} ($kW/h$)")
axes[3].set_ylim(0,20)
axes[4].plot(daten_zw_feb['Außenluft_WG'],color=colo('blau',1), linewidth=0.8, label='Außenluft')
axes[4].plot(daten_zw_feb['Zuluft_WG'],color=colo('orange',1), linewidth=0.8, label='Zuluft')
axes[4].plot(daten_zw_feb['Abluft_WG'],color=colo('rot',1), linewidth=0.8, label='Abluft')
axes[4].plot(daten_zw_feb['Fortluft_WG'],color=colo('grün',1), linewidth=0.8, label='Fortluft')
axes[4].set(ylabel=r"\textbf{WG} ($g/m\textsuperscript{3}$)")
axes[4].set_ylim(0.002,0.006)
axes[5].plot(daten_zw_feb['Außenluft_C'],color=colo('blau',1), linewidth=0.8, label='Außenluft')
axes[5].plot(daten_zw_feb['Zuluft_C_vor_NE'],color=colo('orange',1), linewidth=0.8, label='Zuluft')
axes[5].plot(daten_zw_feb['Abluft_C'],color=colo('rot',1), linewidth=0.8, label='Abluft')
axes[5].plot(daten_zw_feb['Fortluft_C'],color=colo('grün',1), linewidth=0.8, label='Fortluft')
axes[5].set(ylabel=r"\textbf{Tem} ($^\circ$C)")
axes[5].set_ylim(-10,27)
axes[6].plot(daten_zw_feb['Außenluft_rF'],color=colo('blau',1), linewidth=0.8, label='Außenluft')
axes[6].plot(daten_zw_feb['Zuluft_rF_vor_NE'],color=colo('orange',1), linewidth=0.8, label='Zuluft')
axes[6].plot(daten_zw_feb['Abluft_rF'],color=colo('rot',1), linewidth=0.8, label='Abluft')
axes[6].plot(daten_zw_feb['Fortluft_rF'],color=colo('grün',1), linewidth=0.8, label='Fortluft')
axes[6].set(ylabel=r"\textbf{LF} ($\%$)")
axes[6].set_ylim(20,100)
axes[7].plot(daten_zw_feb['Wärmebilanz'],color=colo('grün',1), linewidth=0.8, label='Wärmebilanz')
axes[7].set(ylabel=r"\textbf{En} ($kW/h$)")
axes[7].axhline(y=0, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
axes[7].set_ylim(-5,5)
axes[8].plot(daten_zw_feb['S_Heizung_Energie'],color=colo('grau',1), linewidth=0.8, label='Heizung')
axes[8].plot(daten_zw_feb['Strom'],color=colo('gelb',1), linewidth=0.8, label='Strom')
axes[8].plot(daten_zw_feb['Lüftung'],color=colo('grün',1), linewidth=0.8, label='Lüftung')
# axes[8].plot(daten_zw_feb['Wärmespeicherkap'],color=colo('orange',1), linewidth=0.8, label='Kap')
axes[8].plot(daten_zw_feb['Wärme_durch_Personen'],color=colo('violet',1), linewidth=0.8, label='Pers')
axes[8].plot(daten_zw_feb['TMWV'],color=colo('rot',1), linewidth=0.8, label='TMWV')
axes[8].set(ylabel=r"\textbf{En} ($kW/h$)")
axes[8].axhline(y=0, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
# axes[8].set_ylim(-5,5)
axes[0].set_title('Luftwerte: ' +str(tag)+'.'+str(monat)+'.'+str(jahr))
axes[0].set(xlim=[pd.to_datetime(str(jahr)+'-'+str(monat)+'-'+str(tag)+' 00:00'),pd.to_datetime(str(jahr)+'-'+str(monat)+'-'+str(tag)+' 23:59')])
axes[0].xaxis.set_major_formatter(mdates.DateFormatter('%H'))
fig.autofmt_xdate(rotation=0,ha='center')
for ax in axes:
ax.legend( ncol=6, loc=1, bbox_to_anchor=(1., 1.3))
ax.yaxis.get_label().set_fontsize(8)
plt.subplots_adjust(hspace=.2)
# plt.tight_layout()
plt.show()
luftwerte(1,2,2018)
Bilanzen
def bilanz(t,m,y):
tag = str(t)
monat = str(m)
jahr = str(y)
daten_zw_feb = daten.loc[str(jahr)+'-'+str(monat)+'-'+str(tag)+' 00:00' : str(jahr)+'-'+str(monat)+'-'+str(tag)+' 23:59']
fig, axes = plt.subplots(nrows=4, ncols=1, sharex=True , constrained_layout=False,figsize=(5.8,8.05))
tagesbilanz = ''#str(round(float(bilanz_tgl[['Wärmebilanz']].loc[ str(jahr)+'-'+str(monat)+'-'+str(tag)+' 00:00' : str(jahr)+'-'+str(monat)+'-'+str(tag)+' 23:59'].values[0]),2))
# axes[0].plot(daten_zw_feb['Wärmebilanz'],color=colo('black',1), linewidth=0.8, label='Wärmebilanz')
axes[0].plot(daten_zw_feb['S_Heizung_Energie'],color=colo('grau',1), linewidth=0.8, label='Heizung')
# axes[0].plot(daten_zw_feb['Strom'],color=colo('gelb',1), linewidth=0.8, label='Strom')
axes[0].plot(daten_zw_feb['Lüftung'].mul(-1),color=colo('grün',1), linewidth=0.8, label='Lüftung')
# axes[0].plot(daten_zw_feb['Wärmespeicherkap'],color=colo('orange',1), linewidth=0.8, label='Kap')
axes[0].plot(daten_zw_feb['Wärme_durch_Personen'],color=colo('violet',1), linewidth=0.8, label='Pers')
axes[0].plot(daten_zw_feb['TMWV'].mul(-1),color=colo('rot',1), linewidth=0.8, label='TMWV')
axes[0].set(ylabel=r"\textbf{En} ($kW/h$)")
axes[0].axhline(y=0, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
axes[0].set_ylim(-5,10)
axes[1].plot(daten_zw_feb['L_Zuluft_Druck'],color=colo('grün',1), linewidth=0.8, label='L_Zuluft_Druck')
axes[1].axhline(y=83, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
axes[1].axhline(y=76, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
axes[1].set(ylabel=r"\textbf{En} ($kW/h$)")
axes[1].axhline(y=0, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
# axes[1].set_ylim(-5,5)
axes[2].plot(daten_zw_feb['Außenluft_Energie'],color=colo('blau',1), linewidth=0.8, label='Außenluft')
axes[2].plot(daten_zw_feb['Zuluft_Energie'],color=colo('orange',1), linewidth=0.8, label='Zuluft')
axes[2].plot(daten_zw_feb['Abluft_Energie'],color=colo('rot',1), linewidth=0.8, label='Abluft')
axes[2].plot(daten_zw_feb['Fortluft_Energie'],color=colo('grün',1), linewidth=0.8, label='Fortluft')
axes[2].set(ylabel=r"\textbf{En} ($kW/h$)")
axes[2].axhline(y=0, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
# axes[2].set_ylim(-5,5)
axes[3].plot(daten_zw_feb['L_Zuluft_VPunkt'],color=colo('blau',1), linewidth=0.8, label='L_Zuluft_Vpunkt')
axes[3].plot(daten_zw_feb['Vpunkt_extern'],color=colo('grün',1), linewidth=0.8, label='Vpunkt_extern')
axes[3].set(ylabel=r"\textbf{En} ($kW/h$)")
axes[3].axhline(y=0, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
# axes[3].set_ylim(-5,5)
axes[0].set_title('Bilanzen: ' +str(tag)+'.'+str(monat)+'.'+str(jahr))
axes[0].set(xlim=[pd.to_datetime(str(jahr)+'-'+str(monat)+'-'+str(tag)+' 00:00'),pd.to_datetime(str(jahr)+'-'+str(monat)+'-'+str(tag)+' 23:59')])
axes[0].xaxis.set_major_formatter(mdates.DateFormatter('%H'))
fig.autofmt_xdate(rotation=0,ha='center')
for ax in axes:
ax.legend( ncol=6, loc=1, bbox_to_anchor=(1., 1.1))
ax.yaxis.get_label().set_fontsize(8)
plt.subplots_adjust(hspace=.1)
# plt.tight_layout()
plt.show()
bilanz(1,2,2018)
MinMax
Miniplot für MINMAX
## nur für den ersten Aufruf
nr = 0
def plot_bilanzfehler():
bilanzsumme_po = daten['Wärmebilanz_po'].sum()/240
bilanzsumme_ne = daten['Wärmebilanz_ne'].sum()/240
fig, ax = plt.subplots(constrained_layout=True, figsize=(4,1.5))
plot_data = daten['Wärmebilanz'].resample("D").sum().div(240)
plot_data = plot_data.replace({ 0:np.nan})
plot_data.plot(ax=ax,color=colo('grün',1), linewidth=1, label = 'Nr: ' +str(nr)+' ('+str(int(bilanzsumme_ne))+'/'+str(int(bilanzsumme_po))+')', style='.-')
ax.axhline(y=0, linewidth=0.4, color=colo('black',.7), xmin=0.0001, xmax=1)
ax.set_ylabel(r'$kWh$')
ax.set_ylim(-150,150)
ax.set_yticks([-100,-50,50,100])
ax.set_xlabel('')
h0, l0 = ax.get_legend_handles_labels()
legend = plt.legend(h0, l0, ncol=1, loc=2)
set_legend_linewidth(legend)
## GANZ ALT
# date_form = DateFormatter("%d.")
# ax.xaxis.set_major_formatter(date_form)
# plt.xticks(rotation=0, ha='center')
# x_axis = ax.axes.get_xaxis()
# x_axis.set_visible(False)
## RESTE
ax.xaxis.set_minor_locator(plt.NullLocator())
# ax.yaxis.set_major_locator(plt.NullLocator())
ax.xaxis.set_major_formatter(plt.NullFormatter())
## Formatierung X-Achse
# ax = plt.gca()
# ax.xaxis.set_minor_locator(AutoMinorLocator(14))
# ax.xaxis.set_major_locator(mdates.DayLocator(interval=14))
# ax.xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.'))
# x_ticks = ax.xaxis.get_major_ticks()
# x_ticks[0].label.set_visible(False)
# plt.setp(ax.get_xticklabels(), rotation=0, ha="center", rotation_mode="anchor")
# ax.set_title('Nr: ' +str(nr)+' '+str(int(bilanzsumme))+'kWh')
# ax.set(xlim=[pd.to_datetime("31.01.18 00:00:00"),pd.to_datetime("20.02.18 23:00:00")])
ax.set(xlim=[eins,sechs])
plt.show()
# print(plot_data)
plot_bilanzfehler()
Berechnungen
außen_C = 0
zu_C = 0
ab_C = 0
fort_C = 0
außen_rF = 0
zu_rf = 0
ab_rF = 0
fort_rf = 0
by = 0 # Anteil der Luft, die durch den Bypass geht verändern in %, gemessen sind 45%
zu_Vp = 0 # Gesamtluftstrom verändern in %
# Temp
low_C = -1
high_C = 1.1
step_C = 2/1
# rel LF
low_rF = -5
high_rF = 6
step_rF = 10/1
# bypass & Vp
low_by = -10
high_by = 11
step_by = 20/1
# index
nr = 0
first_one = 0
grenzen = 1000 ## Betrag des Blanzfehlers ab wann die Variante "gut" ist
## einmal mit Standardwerten durchrechnen um ein Ausgangspunkt für Min und Max zu haben
title = ' außen_C='+str(außen_C) + ', fort_C='+str(fort_C) + ', außen_rF='+str(außen_rF) + ', fort_rf='+str(fort_rf) + ', by='+str(by) + ', zu_Vp='+str(zu_Vp) +')'
######################## STACK ########################
reset_daten(Kalibrierung='self', Datenlogger=1)
effizienz(außen_C=außen_C, fort_C=fort_C, außen_rF=außen_rF, fort_rf=fort_rf, by=by, zu_Vp=zu_Vp)
wärmefluss()
# daten_tgl_resample()
# wärmefluss_plot(welche_Kalibrierung(daten),nr=0)
######################## STACK ########################
nr = 0
print_md(f'<br>**{str(nr)}** | Wärmebilanz Summe: {int(daten.Wärmebilanz.sum()/240)} kWh | positiv: {int(daten.Wärmebilanz_po.sum()/240)} negativ: {int(daten.Wärmebilanz_ne.sum()/240)} | {title}')
plot_bilanzfehler()
## minmax ist für die Fehlerbalken in Lüftung (und Bilanz)
## Ausgangspubnkte für Min und Max anlegen
minmax = pd.DataFrame(columns=["Wärmebilanz"])
minmax['Wärmebilanz_org'] = daten.loc[eins : sechs]['Wärmebilanz'].resample("D").sum()/240
minmax['Wärmebilanz_min'] = 0
minmax['Wärmebilanz_max'] = 0
# minmax['Lüftung'] = daten['Lüftung'].resample("D").sum()/240
# minmax['Lüftung_min'] = 0
# minmax['Lüftung_max'] = 0
## bf speichert alle Varianten um die besten zu finden
bf = pd.DataFrame(columns=["Wärmebilanz_sum","Wärmebilanz_std","Wärmebilanz_po","Wärmebilanz_ne", "Lüftung_rein", "Lüftung_raus", "Lüftung", "titel"])
for außen_C in np.arange(low_C, high_C, step_C):
for fort_C in np.arange(low_C, high_C, step_C):
for außen_rF in np.arange(low_rF, high_rF, step_rF):
for fort_rf in np.arange(low_rF, high_rF, step_rF):
for by in np.arange(low_by, high_by, step_by):
for zu_Vp in np.arange(low_by, high_by, step_by):
## Berechnung
nr = nr +1
title = ' (außen_C='+str(außen_C) + ', fort_C='+str(fort_C) + ', außen_rF='+str(außen_rF) + ', fort_rf='+str(fort_rf) + ', by='+str(by) + ', zu_Vp='+str(zu_Vp)+')'
effizienz(außen_C=außen_C, fort_C=fort_C, außen_rF=außen_rF, fort_rf=fort_rf, by=by, zu_Vp=zu_Vp)
wärmefluss()
## Varianten in bf
bf.loc[nr] = [(int(daten['Wärmebilanz'].sum()/240)), daten['Wärmebilanz'].std(), int(daten['Wärmebilanz_po'].sum()/240), int(daten['Wärmebilanz_ne'].sum()/240), daten['Lüftung_rein'].mean(), daten['Lüftung_raus'].mean(), daten['Lüftung'].sum()/240, title]
## MinMax df
Wärmebilanz_sum = daten['Wärmebilanz'].sum()/240
if (Wärmebilanz_sum > -grenzen) & (Wärmebilanz_sum < grenzen):
## ersten Datensatz in min und max Felder setzen
if first_one == 0:
minmax['Wärmebilanz_min'] = daten.loc[eins : sechs]['Wärmebilanz'].resample("D").sum()/240
minmax['Wärmebilanz_max'] = daten.loc[eins : sechs]['Wärmebilanz'].resample("D").sum()/240
# minmax['Lüftung_min'] = daten.loc[eins : sechs]['Lüftung'].resample("D").sum()/240
# minmax['Lüftung_max'] = daten.loc[eins : sechs]['Lüftung'].resample("D").sum()/240
first_one = 1
## minmax für Wärmebilanz
minmax['Wärmebilanz'] = daten.loc[eins : sechs]['Wärmebilanz'].resample("D").sum()/240
minmax['Wärmebilanz_'+str(nr)] = minmax['Wärmebilanz']
minmax['Wärmebilanz_min'] = np.where( minmax['Wärmebilanz'] < minmax['Wärmebilanz_min'], minmax['Wärmebilanz'], minmax['Wärmebilanz_min'])
minmax['Wärmebilanz_max'] = np.where( minmax['Wärmebilanz'] > minmax['Wärmebilanz_max'], minmax['Wärmebilanz'], minmax['Wärmebilanz_max'])
# minmax für Lüftung
# Lüftung_tgl = daten.loc[eins : sechs]['Lüftung'].resample("D").sum()/240
# minmax['Lüftung_'+str(nr)] = Lüftung_tgl
# minmax['Lüftung_min'] = np.where(Lüftung_tgl < minmax['Lüftung_min'], Lüftung_tgl, minmax['Lüftung_min'])
# minmax['Lüftung_max'] = np.where(Lüftung_tgl > minmax['Lüftung_max'], Lüftung_tgl, minmax['Lüftung_max'])
# display(minmax.loc['2017-12-06'][['Wärmebilanz','Wärmebilanz_max','Wärmebilanz_min']])
# Ausgabe während der Berechnung
# print_md(str(nr) + ' ' +title+' Wärmebilanz: '+str(int(daten['Wärmebilanz'].sum()/240)))
print_md(f' <br> <br>**{str(nr)}** | Wärmebilanz Summe: {int(daten.Wärmebilanz.sum()/240)} kWh | positiv: {int(daten.Wärmebilanz_po.sum()/240)} negativ: {int(daten.Wärmebilanz_ne.sum()/240)} | {title}')
plot_bilanzfehler()
## leeren Zeilen rauswerfen
minmax = minmax.replace(0, np.nan)
minmax = minmax.dropna(how='all', axis=0)
minmax = minmax.replace(np.nan, 0)
# display(minmax)
#display(round(bf,4))
# round(bf,4).to_csv('Lueftung_kalibrieren_Varianten.csv')
Datenquelle: Testo - Kalibrierung: self
| Wärmebilanz Summe: -32 kWh | positiv: -502 negativ: 469 | außen_C=0, fort_C=0, außen_rF=0, fort_rf=0, by=0, zu_Vp=0)
1 | Wärmebilanz Summe: 99 kWh | positiv: -406 negativ: 505 | (außen_C=-1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=-5.0, by=-10.0, zu_Vp=-10.0)
2 | Wärmebilanz Summe: -325 kWh | positiv: -698 negativ: 372 | (außen_C=-1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=-5.0, by=-10.0, zu_Vp=10.0)
3 | Wärmebilanz Summe: 295 kWh | positiv: -315 negativ: 611 | (außen_C=-1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=-5.0, by=10.0, zu_Vp=-10.0)
4 | Wärmebilanz Summe: -82 kWh | positiv: -535 negativ: 452 | (außen_C=-1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=-5.0, by=10.0, zu_Vp=10.0)
5 | Wärmebilanz Summe: -215 kWh | positiv: -562 negativ: 347 | (außen_C=-1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=5.0, by=-10.0, zu_Vp=-10.0)
6 | Wärmebilanz Summe: -1004 kWh | positiv: -1192 negativ: 187 | (außen_C=-1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=5.0, by=-10.0, zu_Vp=10.0)
7 | Wärmebilanz Summe: -506 kWh | positiv: -750 negativ: 244 | (außen_C=-1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=5.0, by=10.0, zu_Vp=-10.0)
8 | Wärmebilanz Summe: -1244 kWh | positiv: -1369 negativ: 125 | (außen_C=-1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=5.0, by=10.0, zu_Vp=10.0)
9 | Wärmebilanz Summe: -798 kWh | positiv: -985 negativ: 186 | (außen_C=-1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=-5.0, by=-10.0, zu_Vp=-10.0)
10 | Wärmebilanz Summe: -1147 kWh | positiv: -1328 negativ: 181 | (außen_C=-1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=-5.0, by=-10.0, zu_Vp=10.0)
11 | Wärmebilanz Summe: -342 kWh | positiv: -655 negativ: 312 | (außen_C=-1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=-5.0, by=10.0, zu_Vp=-10.0)
12 | Wärmebilanz Summe: -639 kWh | positiv: -928 negativ: 288 | (außen_C=-1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=-5.0, by=10.0, zu_Vp=10.0)
13 | Wärmebilanz Summe: -556 kWh | positiv: -840 negativ: 284 | (außen_C=-1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=5.0, by=-10.0, zu_Vp=-10.0)
14 | Wärmebilanz Summe: -1084 kWh | positiv: -1320 negativ: 236 | (außen_C=-1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=5.0, by=-10.0, zu_Vp=10.0)
15 | Wärmebilanz Summe: -546 kWh | positiv: -828 negativ: 282 | (außen_C=-1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=5.0, by=10.0, zu_Vp=-10.0)
16 | Wärmebilanz Summe: -1031 kWh | positiv: -1270 negativ: 238 | (außen_C=-1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=5.0, by=10.0, zu_Vp=10.0)
17 | Wärmebilanz Summe: -1439 kWh | positiv: -1606 negativ: 166 | (außen_C=-1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=-5.0, by=-10.0, zu_Vp=-10.0)
18 | Wärmebilanz Summe: -2709 kWh | positiv: -2806 negativ: 97 | (außen_C=-1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=-5.0, by=-10.0, zu_Vp=10.0)
19 | Wärmebilanz Summe: -2255 kWh | positiv: -2340 negativ: 85 | (außen_C=-1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=-5.0, by=10.0, zu_Vp=-10.0)
20 | Wärmebilanz Summe: -3582 kWh | positiv: -3615 negativ: 33 | (außen_C=-1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=-5.0, by=10.0, zu_Vp=10.0)
21 | Wärmebilanz Summe: -3890 kWh | positiv: -3910 negativ: 19 | (außen_C=-1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=5.0, by=-10.0, zu_Vp=-10.0)
22 | Wärmebilanz Summe: -5840 kWh | positiv: -5847 negativ: 7 | (außen_C=-1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=5.0, by=-10.0, zu_Vp=10.0)
23 | Wärmebilanz Summe: -4819 kWh | positiv: -4831 negativ: 11 | (außen_C=-1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=5.0, by=10.0, zu_Vp=-10.0)
24 | Wärmebilanz Summe: -6905 kWh | positiv: -6911 negativ: 6 | (außen_C=-1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=5.0, by=10.0, zu_Vp=10.0)
25 | Wärmebilanz Summe: -6666 kWh | positiv: -6671 negativ: 5 | (außen_C=-1.0, fort_C=1.0, außen_rF=5.0, fort_rf=-5.0, by=-10.0, zu_Vp=-10.0)
26 | Wärmebilanz Summe: -8858 kWh | positiv: -8860 negativ: 2 | (außen_C=-1.0, fort_C=1.0, außen_rF=5.0, fort_rf=-5.0, by=-10.0, zu_Vp=10.0)
27 | Wärmebilanz Summe: -6865 kWh | positiv: -6871 negativ: 6 | (außen_C=-1.0, fort_C=1.0, außen_rF=5.0, fort_rf=-5.0, by=10.0, zu_Vp=-10.0)
28 | Wärmebilanz Summe: -8997 kWh | positiv: -9000 negativ: 3 | (außen_C=-1.0, fort_C=1.0, außen_rF=5.0, fort_rf=-5.0, by=10.0, zu_Vp=10.0)
29 | Wärmebilanz Summe: -8870 kWh | positiv: -8872 negativ: 2 | (außen_C=-1.0, fort_C=1.0, außen_rF=5.0, fort_rf=5.0, by=-10.0, zu_Vp=-10.0)
30 | Wärmebilanz Summe: -11898 kWh | positiv: -11898 negativ: 0 | (außen_C=-1.0, fort_C=1.0, außen_rF=5.0, fort_rf=5.0, by=-10.0, zu_Vp=10.0)
31 | Wärmebilanz Summe: -9527 kWh | positiv: -9530 negativ: 2 | (außen_C=-1.0, fort_C=1.0, außen_rF=5.0, fort_rf=5.0, by=10.0, zu_Vp=-10.0)
32 | Wärmebilanz Summe: -12661 kWh | positiv: -12662 negativ: 1 | (außen_C=-1.0, fort_C=1.0, außen_rF=5.0, fort_rf=5.0, by=10.0, zu_Vp=10.0)
33 | Wärmebilanz Summe: -10530 kWh | positiv: -10531 negativ: 1 | (außen_C=1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=-5.0, by=-10.0, zu_Vp=-10.0)
34 | Wärmebilanz Summe: -11898 kWh | positiv: -11898 negativ: 0 | (außen_C=1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=-5.0, by=-10.0, zu_Vp=10.0)
35 | Wärmebilanz Summe: -8007 kWh | positiv: -8011 negativ: 4 | (außen_C=1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=-5.0, by=10.0, zu_Vp=-10.0)
36 | Wärmebilanz Summe: -8997 kWh | positiv: -9000 negativ: 3 | (außen_C=1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=-5.0, by=10.0, zu_Vp=10.0)
37 | Wärmebilanz Summe: -7625 kWh | positiv: -7628 negativ: 3 | (außen_C=1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=5.0, by=-10.0, zu_Vp=-10.0)
38 | Wärmebilanz Summe: -8858 kWh | positiv: -8860 negativ: 2 | (außen_C=1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=5.0, by=-10.0, zu_Vp=10.0)
39 | Wärmebilanz Summe: -5985 kWh | positiv: -5993 negativ: 7 | (außen_C=1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=5.0, by=10.0, zu_Vp=-10.0)
40 | Wärmebilanz Summe: -6905 kWh | positiv: -6911 negativ: 6 | (außen_C=1.0, fort_C=-1.0, außen_rF=-5.0, fort_rf=5.0, by=10.0, zu_Vp=10.0)
41 | Wärmebilanz Summe: -5395 kWh | positiv: -5404 negativ: 8 | (außen_C=1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=-5.0, by=-10.0, zu_Vp=-10.0)
42 | Wärmebilanz Summe: -5840 kWh | positiv: -5847 negativ: 7 | (außen_C=1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=-5.0, by=-10.0, zu_Vp=10.0)
43 | Wärmebilanz Summe: -3439 kWh | positiv: -3463 negativ: 24 | (außen_C=1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=-5.0, by=10.0, zu_Vp=-10.0)
44 | Wärmebilanz Summe: -3582 kWh | positiv: -3615 negativ: 33 | (außen_C=1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=-5.0, by=10.0, zu_Vp=10.0)
45 | Wärmebilanz Summe: -2601 kWh | positiv: -2676 negativ: 75 | (außen_C=1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=5.0, by=-10.0, zu_Vp=-10.0)
46 | Wärmebilanz Summe: -2709 kWh | positiv: -2806 negativ: 97 | (außen_C=1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=5.0, by=-10.0, zu_Vp=10.0)
47 | Wärmebilanz Summe: -1188 kWh | positiv: -1371 negativ: 182 | (außen_C=1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=5.0, by=10.0, zu_Vp=-10.0)
48 | Wärmebilanz Summe: -1031 kWh | positiv: -1270 negativ: 238 | (außen_C=1.0, fort_C=-1.0, außen_rF=5.0, fort_rf=5.0, by=10.0, zu_Vp=10.0)
49 | Wärmebilanz Summe: -745 kWh | positiv: -1000 negativ: 254 | (außen_C=1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=-5.0, by=-10.0, zu_Vp=-10.0)
50 | Wärmebilanz Summe: -1084 kWh | positiv: -1320 negativ: 236 | (außen_C=1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=-5.0, by=-10.0, zu_Vp=10.0)
51 | Wärmebilanz Summe: -363 kWh | positiv: -684 negativ: 320 | (außen_C=1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=-5.0, by=10.0, zu_Vp=-10.0)
52 | Wärmebilanz Summe: -639 kWh | positiv: -928 negativ: 288 | (außen_C=1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=-5.0, by=10.0, zu_Vp=10.0)
53 | Wärmebilanz Summe: -544 kWh | positiv: -811 negativ: 267 | (außen_C=1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=5.0, by=-10.0, zu_Vp=-10.0)
54 | Wärmebilanz Summe: -1147 kWh | positiv: -1328 negativ: 181 | (außen_C=1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=5.0, by=-10.0, zu_Vp=10.0)
55 | Wärmebilanz Summe: -565 kWh | positiv: -796 negativ: 231 | (außen_C=1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=5.0, by=10.0, zu_Vp=-10.0)
56 | Wärmebilanz Summe: -1244 kWh | positiv: -1369 negativ: 125 | (außen_C=1.0, fort_C=1.0, außen_rF=-5.0, fort_rf=5.0, by=10.0, zu_Vp=10.0)
57 | Wärmebilanz Summe: -745 kWh | positiv: -934 negativ: 188 | (außen_C=1.0, fort_C=1.0, außen_rF=5.0, fort_rf=-5.0, by=-10.0, zu_Vp=-10.0)
58 | Wärmebilanz Summe: -1004 kWh | positiv: -1192 negativ: 187 | (außen_C=1.0, fort_C=1.0, außen_rF=5.0, fort_rf=-5.0, by=-10.0, zu_Vp=10.0)
59 | Wärmebilanz Summe: -9 kWh | positiv: -446 negativ: 436 | (außen_C=1.0, fort_C=1.0, außen_rF=5.0, fort_rf=-5.0, by=10.0, zu_Vp=-10.0)
60 | Wärmebilanz Summe: -82 kWh | positiv: -535 negativ: 452 | (außen_C=1.0, fort_C=1.0, außen_rF=5.0, fort_rf=-5.0, by=10.0, zu_Vp=10.0)
61 | Wärmebilanz Summe: 105 kWh | positiv: -396 negativ: 502 | (außen_C=1.0, fort_C=1.0, außen_rF=5.0, fort_rf=5.0, by=-10.0, zu_Vp=-10.0)
62 | Wärmebilanz Summe: -325 kWh | positiv: -698 negativ: 372 | (außen_C=1.0, fort_C=1.0, außen_rF=5.0, fort_rf=5.0, by=-10.0, zu_Vp=10.0)
63 | Wärmebilanz Summe: 303 kWh | positiv: -323 negativ: 627 | (außen_C=1.0, fort_C=1.0, außen_rF=5.0, fort_rf=5.0, by=10.0, zu_Vp=-10.0)
64 | Wärmebilanz Summe: -123 kWh | positiv: -598 negativ: 475 | (außen_C=1.0, fort_C=1.0, außen_rF=5.0, fort_rf=5.0, by=10.0, zu_Vp=10.0)
minmax
| Wärmebilanz | Wärmebilanz_org | Wärmebilanz_min | Wärmebilanz_max | Wärmebilanz_1 | Wärmebilanz_2 | Wärmebilanz_3 | Wärmebilanz_4 | Wärmebilanz_5 | Wärmebilanz_7 | Wärmebilanz_9 | Wärmebilanz_11 | Wärmebilanz_12 | Wärmebilanz_13 | Wärmebilanz_15 | Wärmebilanz_49 | Wärmebilanz_51 | Wärmebilanz_52 | Wärmebilanz_53 | Wärmebilanz_55 | Wärmebilanz_57 | Wärmebilanz_59 | Wärmebilanz_60 | Wärmebilanz_61 | Wärmebilanz_62 | Wärmebilanz_63 | Wärmebilanz_64 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Zeit | |||||||||||||||||||||||||||
| 2017-12-06 | 8.807480 | 13.932006 | -17.050925 | 26.641518 | 20.850065 | 6.076745 | 26.641518 | 13.237235 | 8.359138 | -8.988630 | -17.050925 | 0.461791 | -8.970999 | -4.236533 | -7.276015 | -12.056956 | 0.339246 | -8.970999 | -4.455124 | -10.970359 | -15.285226 | 13.435211 | 13.237235 | 22.124914 | 6.076745 | 25.813735 | 8.807480 |
| 2017-12-07 | -9.984975 | -5.711661 | -31.534487 | 11.839596 | 1.427336 | -16.477021 | 11.839596 | -4.144415 | -8.437374 | -19.479844 | -31.534487 | -12.413484 | -25.162863 | -20.737796 | -20.624410 | -28.440229 | -13.126906 | -25.162863 | -20.593129 | -21.624329 | -29.811075 | 0.304537 | -4.144415 | 3.713317 | -16.477021 | 10.393106 | -9.984975 |
| 2017-12-08 | -31.181968 | -22.420415 | -47.404869 | -5.685555 | -11.329265 | -31.201522 | -5.685555 | -24.487764 | -22.181574 | -39.622649 | -46.672130 | -31.745796 | -47.404869 | -36.193504 | -40.642864 | -44.530892 | -32.481099 | -47.404869 | -35.683778 | -41.897135 | -44.539248 | -18.180364 | -24.487764 | -9.276155 | -31.201522 | -7.389566 | -31.181968 |
| 2017-12-09 | -34.604205 | -29.713968 | -57.100840 | -13.619254 | -22.554337 | -42.166043 | -13.619254 | -31.254253 | -33.228969 | -42.701023 | -55.488320 | -38.792912 | -54.248902 | -48.967924 | -48.622798 | -57.100840 | -40.776945 | -54.248902 | -47.314582 | -45.708102 | -52.714215 | -24.578468 | -31.254253 | -21.672042 | -42.166043 | -13.878873 | -34.604205 |
| 2017-12-10 | 1.564406 | -0.680251 | -37.431973 | 13.494330 | -1.158480 | -16.221425 | 11.610651 | -0.514245 | -12.832390 | -12.380135 | -32.990602 | -12.854944 | -23.388789 | -29.927198 | -22.848879 | -37.431973 | -15.838995 | -23.388789 | -27.548087 | -16.017404 | -29.776082 | 2.056658 | -0.514245 | -2.108075 | -16.221425 | 13.494330 | 1.564406 |
| 2017-12-11 | -15.709988 | -14.511855 | -43.538466 | 1.073298 | -10.690650 | -26.610673 | 1.073298 | -12.609161 | -21.281865 | -27.806923 | -43.538466 | -22.637371 | -33.208822 | -33.700655 | -30.660932 | -40.934939 | -23.702549 | -33.208822 | -33.458817 | -30.258373 | -41.644086 | -9.821734 | -12.609161 | -9.351727 | -26.610673 | 0.761368 | -15.709988 |
| 2018-01-31 | -1.060245 | 3.386679 | -31.523828 | 13.618956 | 9.141111 | -3.758334 | 13.618956 | 1.941569 | -5.179634 | -24.718261 | -31.523828 | -13.094006 | -19.815740 | -16.525014 | -19.783182 | -24.065041 | -12.442122 | -19.815740 | -17.443661 | -26.186583 | -30.215601 | -0.787742 | 1.941569 | 9.749779 | -3.758334 | 13.372534 | -1.060245 |
| 2018-02-01 | -20.093513 | -16.592177 | -45.019270 | -1.769745 | -10.797520 | -26.989294 | -1.769745 | -16.120787 | -21.847260 | -33.451281 | -45.019270 | -26.402579 | -37.304009 | -34.381616 | -34.319695 | -41.879506 | -27.030381 | -37.304009 | -34.239995 | -35.655565 | -43.166083 | -13.597820 | -16.120787 | -9.415949 | -26.989294 | -2.416884 | -20.093513 |
| 2018-02-02 | -2.097789 | 3.925448 | -24.897170 | 17.969547 | 11.809422 | -5.263330 | 17.969547 | 2.194604 | -0.239134 | -16.205221 | -24.897170 | -8.836249 | -21.290542 | -14.533637 | -17.235252 | -22.517240 | -9.446908 | -21.290542 | -14.178461 | -18.627159 | -22.639761 | 5.172236 | 2.194604 | 13.027373 | -5.263330 | 17.170653 | -2.097789 |
| 2018-02-03 | 11.986634 | 9.467466 | -27.833627 | 21.192878 | 8.398781 | -3.655686 | 19.269722 | 9.640984 | -3.805244 | -5.655317 | -24.975830 | -5.685335 | -13.405465 | -20.477868 | -15.172351 | -27.833627 | -8.306531 | -13.405465 | -18.648081 | -9.323236 | -21.787370 | 9.370520 | 9.640984 | 7.492613 | -3.655686 | 21.192878 | 11.986634 |
| 2018-02-04 | -2.621757 | -6.362753 | -41.589928 | 11.113740 | -7.654784 | -25.024043 | 9.484712 | -4.061006 | -18.584329 | -13.792211 | -38.001585 | -13.794721 | -25.625340 | -34.245579 | -23.521768 | -41.589928 | -16.660093 | -25.625340 | -32.099587 | -17.116080 | -35.268111 | 0.257393 | -4.061006 | -8.173661 | -25.024043 | 11.113740 | -2.621757 |
| 2018-02-06 | -21.379334 | -15.285274 | -46.474135 | 1.411520 | -7.518790 | -30.308931 | 1.209631 | -19.428222 | -18.744565 | -27.826321 | -40.973952 | -25.900610 | -45.441357 | -37.672991 | -37.532721 | -46.474135 | -28.983260 | -45.441357 | -34.740832 | -31.356514 | -37.594384 | -9.869202 | -19.428222 | -7.280791 | -30.308931 | 1.411520 | -21.379334 |
| 2018-02-07 | -27.027422 | -20.131664 | -49.762462 | -4.671834 | -11.623248 | -32.964205 | -4.671834 | -24.279827 | -23.332804 | -35.821579 | -46.736994 | -31.904443 | -49.762462 | -41.005478 | -42.791114 | -49.747792 | -34.287319 | -49.762462 | -38.802609 | -39.009691 | -43.679226 | -16.438756 | -24.279827 | -11.132397 | -32.964205 | -4.776926 | -27.027422 |
| 2018-02-08 | -21.582404 | -17.452160 | -45.359603 | 2.852483 | -10.724288 | -34.899578 | 2.852483 | -18.305221 | -20.280575 | -24.110968 | -41.046836 | -21.724096 | -41.548143 | -36.976501 | -32.614950 | -45.359603 | -24.543560 | -41.548143 | -34.443253 | -27.107116 | -38.352551 | -7.291914 | -18.305221 | -9.641961 | -34.899578 | 2.497745 | -21.582404 |
| 2018-02-09 | -22.579961 | -15.383491 | -44.360353 | 2.891811 | -6.164854 | -30.613204 | 2.891811 | -19.349473 | -17.104718 | -26.980551 | -39.493831 | -23.614360 | -44.360353 | -34.756076 | -34.723728 | -43.468772 | -26.237844 | -44.360353 | -32.269124 | -30.136522 | -36.477261 | -8.398267 | -19.349473 | -5.486615 | -30.613204 | 2.632650 | -22.579961 |
| 2018-02-10 | 2.430944 | 0.200447 | -36.921809 | 15.927765 | -0.036576 | -16.647786 | 14.264396 | 0.777548 | -12.137629 | -11.187552 | -33.269321 | -10.892714 | -22.664676 | -29.183637 | -20.953933 | -36.921809 | -13.732149 | -22.664676 | -26.989358 | -14.752094 | -30.158373 | 4.160143 | 0.777548 | -0.750368 | -16.647786 | 15.927765 | 2.430944 |
| 2018-02-11 | 2.684115 | 1.096798 | -35.452533 | 15.183286 | 1.364683 | -13.598600 | 13.568464 | 1.181800 | -11.172135 | -12.994406 | -32.991731 | -12.002556 | -22.345568 | -27.816683 | -21.658572 | -35.452533 | -14.497001 | -22.345568 | -26.011561 | -16.544000 | -29.872095 | 3.029797 | 1.181800 | 0.671693 | -13.598600 | 15.183286 | 2.684115 |
| 2018-02-16 | -18.894474 | -11.094405 | -40.784139 | 3.297380 | -1.546430 | -20.224579 | 3.297380 | -14.247392 | -14.525038 | -33.632167 | -40.784139 | -24.945289 | -39.158397 | -29.593309 | -34.138374 | -38.258992 | -25.647521 | -39.158397 | -29.040577 | -36.045969 | -38.457707 | -10.473169 | -14.247392 | -0.383750 | -20.224579 | 2.416992 | -18.894474 |
| 2018-02-17 | -35.174996 | -28.132072 | -58.292879 | -13.771488 | -19.729091 | -40.408931 | -13.926380 | -33.144308 | -30.952924 | -42.630026 | -53.186016 | -40.428214 | -58.292879 | -49.194965 | -51.544353 | -57.734851 | -43.274479 | -58.292879 | -46.597395 | -45.979193 | -49.984126 | -24.829467 | -33.144308 | -19.465429 | -40.408931 | -13.771488 | -35.174996 |
| 2018-02-18 | -27.891772 | -22.532604 | -53.011154 | -5.398917 | -15.143183 | -36.880063 | -5.398917 | -24.890997 | -27.278271 | -38.266163 | -51.470622 | -33.121310 | -50.469362 | -44.244455 | -43.583445 | -53.011154 | -35.074544 | -50.469362 | -42.486166 | -41.203305 | -48.729087 | -17.816108 | -24.890997 | -14.425999 | -36.880063 | -5.629857 | -27.891772 |
| 2018-02-19 | -44.869652 | -35.145304 | -59.534463 | -14.958590 | -22.886359 | -47.303814 | -14.958590 | -37.631784 | -32.546124 | -47.137768 | -55.629139 | -39.529762 | -59.534463 | -46.184093 | -48.924173 | -54.556411 | -40.702154 | -59.534463 | -45.248145 | -49.086554 | -53.867232 | -26.643732 | -37.631784 | -20.517600 | -47.303814 | -16.928011 | -44.869652 |
| 2018-02-20 | -43.509022 | -32.448044 | -59.015952 | -13.698647 | -19.109033 | -42.668500 | -13.698647 | -36.031039 | -29.215616 | -47.140815 | -52.995823 | -39.321485 | -59.015952 | -43.645263 | -48.989763 | -52.253435 | -40.484389 | -59.015952 | -42.607982 | -49.244300 | -50.982179 | -25.866397 | -36.031039 | -16.840772 | -42.668500 | -15.731114 | -43.509022 |
Plot Min_Max
# reindex with NaN for Liniplots
minmax = minmax.reindex(pd.date_range(start=minmax.index.min(), end=minmax.index.max())).fillna(np.nan)
minmax['Date1'] = minmax.index
fig, ax = plt.subplots(constrained_layout=True)
ax.ticklabel_format(useLocale=True) ## dot as thousand separator
ax.fill_between(minmax['Date1'], minmax['Wärmebilanz_min'], minmax['Wärmebilanz_max'],edgecolor=colo('black',.1), facecolor=colo('grün',1.5), alpha=1, label = 'min - max')
ax.plot(minmax['Date1'], minmax['Wärmebilanz'],color=colo('grün',1), linewidth=0.5, label = 'Wärmebilanz')
ax.plot(minmax['Date1'], minmax['Wärmebilanz_org'],color=colo('blau',1), linewidth=0.5, label = 'Wärmebilanz')
# ax2 = ax.twinx()
# ax2.fill_between(minmax['Date1'], minmax['Lüftung_min'], minmax['Lüftung_max'],edgecolor='black', facecolor=colo('grey',1.5), alpha=1, label = 'min - max')
# ax2.plot(minmax['Date1'], minmax['Lüftung'],color=colo('grau',.7), linewidth=0.5, label = 'Lüftung')
## Achsen & Legende
ax.set_ylabel(r'\textbf{Bilanzfehler} ($kWh$)')
# ax.set(ylim=0)
# ax.set_yticks([0,100, 500, 1000,1500])
ax.set_xlabel('')
# ax.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1))) ## dot as thousand separator
h0, l0 = ax.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
legend = plt.legend(h0, l0, ncol=1, loc=1)
set_legend_linewidth(legend)
ax.axhline(y=0, linewidth=0.4, color=colo('black',.7), xmin=0.0001, xmax=1)
# plt.gcf().autofmt_xdate()
date_form = DateFormatter("%d.\n%m.")
ax.xaxis.set_major_formatter(date_form)
plt.xticks(rotation=0, ha='center')
ax.set(xlim=[eins,sechs])
# ax.set(xlim=[pd.to_datetime("2018-01-31"),pd.to_datetime("2018-02-20")])
# plt.savefig(output_folder + '/' + file_name + '_MINMAX_Übersicht.pdf')
plt.show()
# remove NaN for Barplots
minmax = minmax.dropna(axis=0, subset=['Wärmebilanz_max'])
Wärmebilanz_lower_error = minmax['Wärmebilanz_min'] #- minmax['Wärmebilanz']
Wärmebilanz_upper_error = minmax['Wärmebilanz_max'] #+ minmax['Wärmebilanz']
Wärmebilanz_error = [Wärmebilanz_lower_error, Wärmebilanz_upper_error]
# Lüftung_lower_error = minmax['Lüftung_min'] - minmax['Lüftung']
# Lüftung_upper_error = minmax['Lüftung_max'] + minmax['Lüftung']
# Lüftung_error = [Lüftung_lower_error, Lüftung_upper_error]
error_kw = dict(lw=0.5, capsize=1, capthick=0.5, ecolor=('black'))
fig, ax = plt.subplots(constrained_layout=True)
ax.ticklabel_format(useLocale=True) ## dot as thousand separator
minmax['Wärmebilanz'].plot.bar(position= 0, yerr=Wärmebilanz_error, error_kw=error_kw, color=colo('grün',1), edgecolor='black',linewidth = 0.3, width=0.3,ax=ax,stacked=True,alpha = 1)
# abs(minmax['Lüftung']).plot.bar(position= 1.5, yerr=Lüftung_error, error_kw=error_kw, color=colo('grau',1), edgecolor='black',linewidth = 0.3, width=0.3,ax=ax,stacked=True,alpha = 1)
count = len(minmax.index) -3 ## Tage der Kalibrierung abziehen
ax.axhline(y=0, linewidth=0.4, color=colo('black',1), xmin=0.0001, xmax=1)
ticklabels = ['']*count
ticklabels[::1] = [item.strftime('%d.\n %b') for item in minmax.index[::1]]
ax.set_xlim(-0.5,count)
ax.set_xticklabels(ticklabels, rotation=0)
ax.set_xticks(np.arange(0.2/2, count, step = 1))
ax.set_xlabel('')
Text(0.5, 0, '')
Plot Varianten
# def minmax_varianten():
fig, ax = plt.subplots(constrained_layout=False)
ax2 = ax.twinx()
ax2.spines['right'].set_position(('axes', 1.0))
ax3 = ax.twinx()
ax3.spines['right'].set_position(('axes', 1.15))
bf['Wärmebilanz_sum'].plot(ax=ax,color=colo('grün',1), linewidth=1, label = 'Wärmebilanz_sum',style='-')
bf['Wärmebilanz_std'].plot(ax=ax2,color=colo('rot',1), linewidth=.6, label = 'Wärmebilanz_std')
bf['Wärmebilanz_ne'].plot(ax=ax3,color=colo('blau',1), linewidth=1, label = 'Summe positiv')
bf['Wärmebilanz_po'].plot(ax=ax3,color=colo('orange',1), linewidth=1, label = 'Summe negativ')
ax.axhline(y=-150, linewidth=0.4, color=colo('grau',.7), xmin=0.0001, xmax=1)
ax.axhline(y=150, linewidth=0.4, color=colo('grau',.7), xmin=0.0001, xmax=1)
ax.axhline(y=0, linewidth=0.4, color=colo('black',.7), xmin=0.0001, xmax=1)
ax.set_ylabel(r'\textbf{Energie}')
ax2.set_ylabel(r'\textbf{Standardabweichung}')
ax3.set_ylabel(r'\textbf{Summe po / ne}')
ax.set_xlabel('Durchlauf Nr.')
ax.set_ylim(-1500,2000)
ax2.set_ylim(1.7,3.7)
ax3.set_ylim(-1000,3000)
h0, l0 = ax.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
h4, l4 = ax3.get_legend_handles_labels()
legend = plt.legend(h0+h2+h4, l0+l2+l4, ncol=2, loc=1)
set_legend_linewidth(legend)
ax.set_xlim(1,nr)
## nur die Besten der Besten
display(bf[bf['Wärmebilanz_sum'].between(-150,150)].sort_values(by=['Wärmebilanz_std'])[['Wärmebilanz_sum', 'Wärmebilanz_std', 'Wärmebilanz_po', 'Wärmebilanz_ne', 'titel']].style.set_properties(subset=['titel'], **{'width': '600px'}))
Bilanz Aufbereitung
