Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:heating_control:senertec_dachs_hka

SenerTec Dachs HKA

Die Modellreihe „Dachs HKA“ sind Mikro-Blockheizkraftwerke von SenerTec.

Hardware

Die Steuerung der zweiten Generation „MSR2“ verfügt über eine Ethernetschnittstelle über die man Gerätedaten abrufen kann. Das unten gezeigte Script ist an einem G5.5 getestet, es sollte aber auch für alle andere Brennstoffarten funktionieren, solange es die selbe Steuerung ist.

Python Script

Getestet unter Python 3.6. Das Script per Cronjob aufrufen, es wird intern nach 15s wiederholt weil der Dachs gelegentlich nicht antwortet.
Die UUID sind an die jeweilige Konfiguration anzupassen.

# -*- coding: iso-8859-1 -*-
import os
import sys
import requests
import copy
from time import *
 
ZumDachs = (
#Betriebsdaten Dachs
#Format:1=String
#       2=Binär
#       3=Hex 4-stellig
#       4=Hex 2-stellig
#Key
#Text
#uuid
		[1,"Hka_Bd.Anforderung.ModulAnzahl",        "Anzahl der angeforderten Module",          ""],
		[4,"Hka_Bd.Anforderung.UStromF_Anf.bFlagSF","Anforderungen Stromfuehrung Bit Codiert",  ""],
		[4,"Hka_Bd.UStromF_Frei.bFreigabe",         "Freigabe Stromfuehrung Bit Codiert",       ""],
		[1,"Hka_Bd.bStoerung",			    "Aktuelle Stoerung Dachs = Wert + 100",     ""],
		[1,"Hka_Bd.bWarnung",			    "Aktueller Warncode Dachs = Wert + 600",    ""],
		[1,"Hka_Bd.UHka_Anf.Anforderung.fStrom",    "Anforderung Strom Flag",                   ""],
		[3,"Hka_Bd.UHka_Anf.usAnforderung",	    "Anforderung Dachs Bit Codiert",            ""],
		[3,"Hka_Bd.UHka_Frei.usFreigabe",	    "Freigabe Dachs Bit Codiert",               ""],
		[1,"Hka_Bd.ulArbeitElektr",		    "Erzeugte elektrische Arbeit kWh",          "b44a3af10-21ad-11e6-815a-cb474497d58e"],
		[1,"Hka_Bd.ulArbeitThermHka",		    "Erzeugte thermische Arbeit kWh",           "005837f0-21ae-11e6-8568-1b849bd56c27"],
		[1,"Hka_Bd.ulArbeitThermKon",		    "Erzeugte thermische Arbeit Kondenser kWh", "29f0ef60-21ae-11e6-a6fb-b10b93766e50"],
		[1,"Hka_Bd.ulBetriebssekunden",		    "Betriebsstunden Dachs Stunden",            "55749930-12ae-11e6-9aa9-2d1b06fad85e"],
		[1,"Hka_Bd.ulAnzahlStarts",		    "Anzahl Starts Dachs",                      ""],
		[1,"Hka_Bd_Stat.uchSeriennummer",	    "Seriennummer 10-stellig",                  ""],
		[1,"Hka_Bd_Stat.uchTeilenummer",	    "Teilenummer 10-stellig",                   ""],
		[1,"Hka_Bd_Stat.ulInbetriebnahmedatum",	    "Inbetriebnahme Sekunden seit 1.1.2000",    ""],
#
#Betriebsdaten 31.12.
		[1,"BD3112.Hka_Bd.ulBetriebssekunden",	"31.12:Betriebsstunden Dachs Stunden",            ""],
		[1,"BD3112.Hka_Bd.ulAnzahlStarts",	"31.12:Anzahl Starts Dachs",                      ""],
		[1,"BD3112.Hka_Bd.ulArbeitElektr",	"31.12:Erzeugte elektrische Arbeit kWh",          ""],
		[1,"BD3112.Hka_Bd.ulArbeitThermHka",	"31.12:Erzeugte thermische Arbeit kWh",           ""],
		[1,"BD3112.Hka_Bd.ulArbeitThermKon",	"31.12:Erzeugte thermische Arbeit Kondenser kWh", ""],
		[1,"BD3112.Ww_Bd.ulWwMengepA",		"31.12:Warmwassermenge pro Jahr m3",              ""],
#
#Daten 2. Warmeerzeuger
		[1,"Brenner_Bd.bIstStatus",		   "Status des SEplus Flag",                    ""],
		[1,"Brenner_Bd.bWarnung",		   "Warncode SEplus = Wert + 600",              ""],
		[4,"Brenner_Bd.UBrenner_Anf.usAnforderung","Anforderung Bit Codiert",                   ""],
		[4,"Brenner_Bd.UBrenner_Frei.bFreigabe",   "Freigabe Bit Codiert",                      ""],
		[1,"Brenner_Bd.ulAnzahlStarts",		   "Erzeugte thermische Arbeit kWh",            ""],
		[1,"Brenner_Bd.ulBetriebssekunden",	   "Erzeugte thermische Arbeit Kondenser kWh",  ""],
#
#Hydraulik Schema
		[1,"Hka_Ew.HydraulikNr.bSpeicherArt",	  "Speicherart",            ""],
		[1,"Hka_Ew.HydraulikNr.bWW_Art",	  "Brauchwasserbereitung",  ""],
		[1,"Hka_Ew.HydraulikNr.b2_Waermeerzeuger","2. Waermeerzeuger",      ""],
		[1,"Hka_Ew.HydraulikNr.bMehrmodul",	  "Mehrmodultechnik",       ""],
#
#Temperaturen
		[1,"Hka_Mw1.Temp.sAbgasHKA",		"Abgastemperatur Dachs C",        "4fb710c0-21aa-11e6-b664-d9a3367711f9"],
		[1,"Hka_Mw1.Temp.sAbgasMotor",		"Abgastemperatur Motor C",        "8639b840-21aa-11e6-a1f4-95a666850239"],
		[1,"Hka_Mw1.Temp.sKapsel",		"Kapseltemperatur C",             "a8e19160-21aa-11e6-861a-2d4575dff74c"],
		[1,"Hka_Mw1.Temp.sbAussen",		"Aussentemperatur C",             "f6945690-21a7-11e6-a657-afdacd3be8ba"],
		[1,"Hka_Mw1.Temp.sbFreigabeModul",	"Freigabe Modul C",               ""],
		[1,"Hka_Mw1.Temp.sbFuehler1",		"Temperatur Fuehler 1 (F1) C",    "dad0d4a0-21aa-11e6-75cb-bfb031667d12"],
		[1,"Hka_Mw1.Temp.sbFuehler2",		"Temperatur Fuehler 2 (F2) C",    "fcf04f20-21aa-11e6-af4a-e155fab6eb1b"],
		[1,"Hka_Mw1.Temp.sbGen",  		"Dachs Eintrittstemperatur C",    "5bb6cb20-21ab-11e6-86ed-77ef37378af7"],
		[1,"Hka_Mw1.Temp.sbMotor",		"Kuehlwassertemperatur Motor C",  "82e27440-21ab-11e6-8b73-2761738ed83a"],
		[1,"Hka_Mw1.Temp.sbRegler",		"Interne Reglertemperatur C",     "9e865c40-21ab-11e6-8cca-19daedb0826e"],
		[1,"Hka_Mw1.Temp.sbRuecklauf",		"Ruecklauftemperatur C",          "b965b1d0-21ab-11e6-b67b-cbfd5739138e"],
		[1,"Hka_Mw1.Temp.sbVorlauf",		"Vorlauftemperatur C",            "d6805bb0-21ab-11e6-95d6-55e2efeb7161"],
		[1,"Hka_Mw1.Temp.sbZS_Fuehler3",	"Temperatur Fuehler 3 (F3) C",    ""],
		[1,"Hka_Mw1.Temp.sbZS_Fuehler4",	"Temperatur Fuehler 4 (F4) C",    ""],
		[1,"Hka_Mw1.Temp.sbZS_Vorlauf1",	"Vorlauftemperatur Heizkreis 1 C","fad91320-21ab-11e6-bd6b-578fa070cc2e"],
		[1,"Hka_Mw1.Temp.sbZS_Vorlauf2",	"Vorlauftemperatur Heizkreis 2 C",""],
		[1,"Hka_Mw1.Temp.sbZS_Warmwasser",	"Temperatur Warmwasser C",        ""],
		[1,"Hka_Mw1.Solltemp.sbRuecklauf",	"Solltemperatur Ruecklauf C",     ""],
		[1,"Hka_Mw1.Solltemp.sbVorlauf",	"Solltemperatur Vorlauf C",       ""],
#
#Aktoren
		[1,"Hka_Mw1.Aktor.bWwPumpe",		"Brauchwasserladepumpe %",            ""],
		[1,"Hka_Mw1.Aktor.fFreiAltWaerm",	"Freigabe Waermeerzeuger Flag",       ""],
		[1,"Hka_Mw1.Aktor.fMischer1Auf",	"Mischer 1 Auf Flag",                 ""],
		[1,"Hka_Mw1.Aktor.fMischer1Zu",		"Mischer 1 Zu Flag",                  ""],
		[1,"Hka_Mw1.Aktor.fMischer2Auf",	"Mischer 2 Auf Flag",                 ""],
		[1,"Hka_Mw1.Aktor.fMischer2Zu",		"Mischer 2 Zu Flag",                  ""],
		[1,"Hka_Mw1.Aktor.fProgAus1",		"Programmierbarer Ausgang 1 Flag",    ""],
		[1,"Hka_Mw1.Aktor.fProgAus2",		"Programmierbarer Ausgang 2 Flag",    ""],
		[1,"Hka_Mw1.Aktor.fProgAus3",		"Programmierbarer Ausgang 2 Flag",    ""],
		[1,"Hka_Mw1.Aktor.fStoerung",		"Relais Stoerung Flag",               ""],
		[1,"Hka_Mw1.Aktor.fUPHeizkreis1",	"Pumpe Heizkreis 1 Flag",             "44e3e260-21dd-11e6-87c0-0fa390803568"],
		[1,"Hka_Mw1.Aktor.fUPHeizkreis2",	"Pumpe Heizkreis 2 Flag",             ""],
		[1,"Hka_Mw1.Aktor.fUPKuehlung",		"Interne Umwaelzpumpe Flag",          "753fba20-21dd-11e6-b3a8-6729e70303ef"],
		[1,"Hka_Mw1.Aktor.fUPVordruck",		"UP Vordruck Flag",                   ""],
		[1,"Hka_Mw1.Aktor.fUPZirkulation",	"Zirkulationspumpe Flag",             ""],
		[1,"Hka_Mw1.Aktor.fWartung",		"Relais Wartung Flag",                ""],
		[1,"Hka_Mw1.sWirkleistung",		"Aktuelle Wirkleistung _,_ _ kW",     "d73663e0-21ac-11e6-a0dc-23fd7dab6c31"],
		[1,"Hka_Mw1.ulMotorlaufsekunden",	"Motorlaufzeit seit Start Sekunden",  ""],
		[1,"Hka_Mw1.usDrehzahl",		"Motordrehzahl U/min",                ""],
#
#Tageslauf
		[2,"Laufraster15Min_aktTag.bDoppelstunde[0]", "15 Minuten Raster 2-4 Uhr Bit Codiert *",  ""],
		[2,"Laufraster15Min_aktTag.bDoppelstunde[1]", "15 Minuten Raster 4-6 Uhr Bit Codiert *",  ""],
		[2,"Laufraster15Min_aktTag.bDoppelstunde[2]", "15 Minuten Raster 6-8 Uhr Bit Codiert *",  ""],
		[2,"Laufraster15Min_aktTag.bDoppelstunde[3]", "15 Minuten Raster 8-10 Uhr Bit Codiert *", ""],
		[2,"Laufraster15Min_aktTag.bDoppelstunde[4]", "15 Minuten Raster 10-12 Uhr Bit Codiert *",""],
		[2,"Laufraster15Min_aktTag.bDoppelstunde[5]", "15 Minuten Raster 12-14 Uhr Bit Codiert *",""],
		[2,"Laufraster15Min_aktTag.bDoppelstunde[6]", "15 Minuten Raster 14-16 Uhr Bit Codiert *",""],
		[2,"Laufraster15Min_aktTag.bDoppelstunde[7]", "15 Minuten Raster 16-18 Uhr Bit Codiert *",""],
		[2,"Laufraster15Min_aktTag.bDoppelstunde[8]", "15 Minuten Raster 18-20 Uhr Bit Codiert *",""],
		[2,"Laufraster15Min_aktTag.bDoppelstunde[9]", "15 Minuten Raster 20-22 Uhr Bit Codiert *",""],
		[2,"Laufraster15Min_aktTag.bDoppelstunde[10]","15 Minuten Raster 22-0 Uhr Bit Codiert *", ""],
		[2,"Laufraster15Min_aktTag.bDoppelstunde[11]","15 Minuten Raster 0-2 Uhr Bit Codiert *",  ""],
#
#* Beispiel:
#		               02:00   03:00   04:00
#               bDoppelstunde[0] 1 1 0 0 | 0 1 1 0
#
#Mehrmodultechnik
		[1,"Mm[0].ModulSteuerung.fModulLaeuft",	   "Status Modul 1 Flag",         ""],
		[1,"Mm[0].ModulSteuerung.fModulVerfuegbar","Verfuegbarkeit Modul 1 Flag", ""],
		[1,"Mm[1].ModulSteuerung.fModulLaeuft",	   "Status Modul 2 Flag",         ""],
		[1,"Mm[1].ModulSteuerung.fModulVerfuegbar","Verfuegbarkeit Modul 2 Flag", ""],
		[1,"Mm[2].ModulSteuerung.fModulLaeuft",	   "Status Modul 3 Flag",         ""],
		[1,"Mm[2].ModulSteuerung.fModulVerfuegbar","Verfuegbarkeit Modul 3 Flag", ""],
		[1,"Mm[3].ModulSteuerung.fModulLaeuft",	   "Status Modul 4 Flag",         ""],
		[1,"Mm[3].ModulSteuerung.fModulVerfuegbar","Verfuegbarkeit Modul 4 Flag", ""],
		[1,"Mm[4].ModulSteuerung.fModulLaeuft",	   "Status Modul 5 Flag",         ""],
		[1,"Mm[4].ModulSteuerung.fModulVerfuegbar","Verfuegbarkeit Modul 5 Flag", ""],
		[1,"Mm[5].ModulSteuerung.fModulLaeuft",	   "Status Modul 6 Flag",         ""],
		[1,"Mm[5].ModulSteuerung.fModulVerfuegbar","Verfuegbarkeit Modul 6 Flag", ""],
		[1,"Mm[6].ModulSteuerung.fModulLaeuft",	   "Status Modul 7 Flag",         ""],
		[1,"Mm[6].ModulSteuerung.fModulVerfuegbar","Verfuegbarkeit Modul 7 Flag", ""],
		[1,"Mm[7].ModulSteuerung.fModulLaeuft",	   "Status Modul 8 Flag",         ""],
		[1,"Mm[7].ModulSteuerung.fModulVerfuegbar","Verfuegbarkeit Modul 8 Flag", ""],
		[1,"Mm[8].ModulSteuerung.fModulLaeuft",	   "Status Modul 9 Flag",         ""],
		[1,"Mm[8].ModulSteuerung.fModulVerfuegbar","Verfuegbarkeit Modul 9 Flag", ""],
		[1,"Mm[9].ModulSteuerung.fModulLaeuft",	   "Status Modul 10 Flag",        ""],
		[1,"Mm[9].ModulSteuerung.fModulVerfuegbar","Verfuegbarkeit Modul 10 Flag",""],
		[1,"Mm_MinMax.bModulBhMaxWart",		  "Modulnummer mit max h bis Wartung",""],
		[1,"Mm_MinMax.bModulBhMinWart",		  "Modulnummer mit min h bis Wartung",""],
		[1,"Mm_MinMax.sBhMaxWart",		  "Max h bis zur Wartung",            ""],
		[1,"Mm_MinMax.sBhMinWart",		  "Min h bis zur Wartung",            ""],
		[1,"Mm_MinMax.ModulBhMax.bModulNr",	  "Modulnummer mit max h",            ""],
		[1,"Mm_MinMax.ModulBhMax.ulWert",	  "Max h",                            ""],
		[1,"Mm_MinMax.ModulBhMin.bModulNr",	  "Modulnummer mit min h",            ""],
		[1,"Mm_MinMax.ModulBhMin.ulWert",	  "Min h",                            ""],
		[1,"Mm_MinMax.ModulStartMax.bModulNr",    "Modulnummer mit max Anzahl Starts",""],
		[1,"Mm_MinMax.ModulStartMax.ulWert",	  "Max Anzahl Starts",                ""],
		[1,"Mm_MinMax.ModulStartMin.bModulNr",    "Modulnummer mit min Anzahl Starts",""],
		[1,"Mm_MinMax.ModulStartMin.ulWert",	  "Min Anzahl Starts",                ""],
#
# Informationen ueber Wartung
		[1,"Wartung_Cache.fStehtAn",		 "Status Wartung Flag",                 ""],
		[1,"Wartung_Cache.ulBetriebssekundenBei","Betriebsstunden der letzten Wartung", ""],
		[1,"Wartung_Cache.ulZeitstempel",	 "letzte Wartung Sek seit 1.1.2000",    ""],
		[1,"Wartung_Cache.usIntervall",		 "Wartungsintervall Betriebsstunden",   ""]
)
 
Windows = False
username = "glt" # Gilt beim Dachs wohl immer
password = "geheim" # Hier das PW aus Reglermenü 7/2/11 eintragen!!! 
Dachs_url = "http://192.168.10.10:8080/getKey?k=" # Bitte anpassen
Dachs_url_end = "&_rnd=9619"
Mid1_url = "http://192.168.10.50/middleware.php/data/" # Bitte anpassen!!!
Mid2_url = "" #<uuid> erstmal leer
Mid3_url = ".json?operation=add&value="
Mid4_url = "" #<1|Sensor Wert> auch erstmal leer
if Windows: Dateiname = "S:\GLT\Logs\Dachsmeter\Dachsmeter-XX-XX-XX.csv"
else: Dateiname = "/NAS/Daten/GLT/Logs/Dachsmeter/Dachsmeter-XX-XX-XX.csv" # wohin mit der csv??
 
Trenner = ";"
Intervall = 15     # in Sekunden
 
def DachsAuslesen(text):
  url = Dachs_url + text + Dachs_url_end
  return str((requests.get(url, auth=(username, password)).content))
 
def middleware(uuid,wert):
  Mid2_url = uuid # Tut nicht not, sieht unten aber netter aus ;-))
  Mid4_url = wert # Tut nicht not, sieht unten aber netter aus ;-))
  url = Mid1_url + Mid2_url + Mid3_url + Mid4_url
  return str(requests.get(url).content) # wird noch nicht ausgewertet
 
# ToDo Fehlerbehandlung Datei!!
if not (os.path.isfile(Dateiname)) :
  #Erste Zeile in der Datei
  Datei = open(Dateiname,"a")
  Datei.write("Datum" + Trenner + "Zeit" + Trenner)
  for i in range(0,len(ZumDachs)):
    Datei.write(ZumDachs[i][2] + Trenner)
  if not Windows: Datei.write("\r") # warum auch immer das unterschiedlich sein muss
  Datei.write("\r\n")				# Leerzeilen in der csv sehen doof aus
  Datei.close()
Laufen = 1
while Laufen < 3: # 3 Durchgänge wegen 15 Sekunden-Takt
  lt = localtime()
  SecStart = (lt.tm_hour*3600) + (lt.tm_min*60 ) + (lt.tm_sec)
  Datei = open(Dateiname,"a")
  Datei.write(strftime("%d.%m.%Y", lt)
              + Trenner
              + strftime("%H:%M:%S", lt)
              + Trenner
              )
  for i in range(0,len(ZumDachs)):
    InDatei="NA"
    Ergebnis = DachsAuslesen(ZumDachs[i][1])
    wo = Ergebnis.find("=")
    if ZumDachs[i][0] == 1:
      InDatei = Ergebnis[wo+1:-5] # als String
    elif ZumDachs[i][0] == 2:
      InDatei = '{:08b}'.format(int(Ergebnis[wo+1:-5])) # Binär 8 Stellen
    elif ZumDachs[i][0] == 3:
      InDatei = '{:04x}'.format(int(Ergebnis[wo+1:-5])) # Hex 4 Stellen
    elif ZumDachs[i][0] == 4:
      InDatei = '{:02x}'.format(int(Ergebnis[wo+1:-5])) # Hex 2 Stellen
    if InDatei == "true": InDatei = "1" # Der Dachs gibt nicht binär
    elif InDatei == "false": InDatei = "0" #sondern text aus
    if not Windows: middleware(ZumDachs[i][3],InDatei)
    # ToDo: in SQL schreiben als text
    Datei.write(InDatei + Trenner)
  if not Windows: Datei.write("\r")
  Datei.write("\n")
  Datei.close()
 
  lt = localtime()
  SecEnd = (lt.tm_hour*3600) + (lt.tm_min*60 ) + (lt.tm_sec)
  if SecEnd < SecStart: SecEnd += (24*60*60) #0 Uhr
  if (Intervall-(SecEnd-SecStart))<0: SecEnd = SecStart + Intervall - 1
  if Windows: 
    print (strftime("Ausgefuehrt: Am %d.%m.%Y um %H:%M:%S\r\n", lt))
    print ("Laufzeit: ",SecEnd-SecStart," Sekunden")
#  else:
#    print (strftime("Ausgefuehrt: Am %d.%m.%Y um %H:%M:%S\n", lt))
#    print ("Laufzeit: ",SecEnd-SecStart," Sekunden")
  sleep (Intervall-(SecEnd-SecStart))
  Laufen += 1
hardware/channels/heating_control/senertec_dachs_hka.txt · Zuletzt geändert: 2018/03/04 12:45 von jau