Läuft: Heizung mit eBus-Schnittstelle

Begonnen von Prof. Dr. Peter Henning, 29 November 2014, 13:36:59

Vorheriges Thema - Nächstes Thema

koef2

Hallo Christian,

habe es in der bai00.cfg mal mit und ohne -f eingetragen.

Ab und zu erhält er Werte nun für Datum und Aussentemperatur.

werde Poti nochmal prüfen und auch USB-Kabel. Ggfs. auch den ebus nur als Linie. Ich hbae es etwas mehr als STern und oben direkt angezapt mit dem ebus koppler. Evtl. kommt es dadurch und usb Kabel parallen zu Netzwerkkabel zu Problemen.

Ich schau Mal weiter morgen.

Deine Anregungen waren sehr hilfreich.

Schönen ABend noch

Viele Grüße
Kai

koef2

Hallo zusammen,

weitere Erfolgsmeldungen:

  • USB Schnittstelle führt zu err-meldungen, ggfs, weil Rechner sehr alt und USB Maus rumzickte
  • Auslesen/Erfassung weiterer Daten Datum, Uhrzeit, Warmwassertemp, Speichertemp funktioniert

Mein Lösungsweg dank der Anregungen von CS-Online:
Alle Daten, die in /var/log/ebsud.log stehen, sind ohne error regelmäßig erfassbar

Auszug /var/log/ebusd.log
2017-08-17 22:00:47.920 [update notice] update bai Mode QQ=10: standby
2017-08-17 22:00:57.699 [update notice] update bai Status01 QQ=10: 32.5;31.5;18.625;33.0;50.5;off
2017-08-17 22:00:57.965 [update notice] update bai Mode QQ=10: standby
2017-08-17 22:01:07.792 [update notice] update bai Status01 QQ=10: 32.5;31.5;18.812;33.0;50.5;off
2017-08-17 22:01:08.059 [update notice] update bai Mode QQ=10: standby
2017-08-17 22:01:08.315 [update notice] update bai Status02 QQ=10: auto;60;75.0;70;65.0
2017-08-17 22:01:17.836 [update notice] update bai Status01 QQ=10: 32.5;31.5;18.812;33.0;50.5;off
2017-08-17 22:01:18.104 [update notice] update bai Mode QQ=10: standby
2017-08-17 22:01:27.929 [update notice] update bai Status01 QQ=10: 32.5;31.5;18.625;33.0;50.5;off
2017-08-17 22:01:28.196 [update notice] update bai Mode QQ=10: standby
2017-08-17 22:01:38.017 [update notice] update bai Status01 QQ=10: 32.5;31.5;18.625;33.0;50.5;off
2017-08-17 22:01:38.284 [update notice] update bai Mode QQ=10: standby
2017-08-17 22:01:38.557 [update notice] update bai DateTime QQ=10: valid;21:57:07;17.08.2017;18.625
2017-08-17 22:01:38.813 [update notice] update bai Status02 QQ=10: auto;60;75.0;70;65.0


Auszulesen sind ohne Probleme DateTime Status01 und Status02. Die Inhalte Informationen zum Aufbau/Auslesen erhält man indirekt aus /etc/ebusd/vaillant/hcmode.inc.

# type (r[1-9];w;u),circuit,name,[comment],[QQ],ZZ,PBSB,[ID],field1,part (m/s),datatypes/templates,divider/values,unit,comment
# HC Betriebsart,,,,,,,,,,,,,
*r,,,,,,"B504",,,,,,,
r,,Mode,Betriebsart,,,B510,00,mode,,UCH,0=off;1=standby;2=heat;3=water,,
r,,DateTime,Datum Uhrzeit,,,,00,,,dcfstate;btime;bdate;temp2,,,
r,,Status,Status,,,B511,03,,,temp;press;press;HEX:4,,,
r,,Status01,Vorlauftemperatur/Rücklauftemperatur/Aussentemperatur/WW Temperatur/Speichertemperatur/Pumpenstatus,,,B511,01,,,temp1;temp1;temp2;temp1;temp1;pumpstate,,,
r,,Status02,Betriebsart/Maximaltemperatur/ReglerCurrentTEMP/Maximaltemperatur/ReglerCurrentTemp,,,B511,02,,,hwcmode;temp0;temp1;temp0;temp1,,,
r,,Status16,Aussentemperatur,,,,16,,,temp,,,


Will man bei mir die Aussentemperatur über status01 haben, so kann man es vorab mal mi ebusctl Befehl ausprobieren
ebusctl r status01
Das liefert dann den ganzen Output.
32.5;31.5;18.625;33.0;50.0;off
An dritter Stelle steht die Aussentemperatur "18.625".
Auslesen erfolgt nun über die ANgaben aus hwmode.inc
r,,Status01,Vorlauftemperatur/Rücklauftemperatur/Aussentemperatur/WW Temperatur/Speichertemperatur/Pumpenstatus,,,B511,01,,,temp1;temp1;temp2;temp1;temp1;pumpstate,,,

ebusctl r status01 temp2.0

Das liefert 18.625

Wichtig: Für die Warmwassertemperatur müsste z. B. eingeben werden
ebusctl r status01 temp1.3; weil vorher schon 2 mal temp1 in der Zeile auftaucht (ist temp1.0 und temp1.1).

Zurück zur Aussentemperatur.

Einträge in /opt/fhem/FHEM/bai00.cfg für Aussentemperatur

get Aussentemp cmd {"r -m 10 status01 temp2.0\n"}
get Aussentemp expect "\d+\.\d+\n\n"
get Aussentemp postproc { sprintf("%5.1f",$_) }

"-m 10" bedeutet glaube ich, dass wenn in den letzten 10 x 300s schon abgefragt wurde und der Wert vorliegt, nicht neu abgefragt wird.

Eintrag für fhem.cfg

define Aussentemp ECMDDevice bai00.class
attr Aussentemp IODev EBUS
attr Aussentemp group Vaillant
attr Aussentemp icon sani_supply_temp
attr Aussentemp room Vaillant


So erhalte ich ein paar Daten mehr. Der Befehl "ebusd r OPTIONEN" hilft wirklich - wie cs-online ebreits schrieb - die richtigen Einstellungen zu finden.

Nun werde ich dan mal das Ganze auf den Raspi überspielen und weiter konfiguerien.

Tolles Forum und tolle Software. Danke dafür!!!

Viele Grüße
Kai
Koef2

koef2

und nicht vergessen in fhem.cfg in den Timer auch Aussentemperatur einzufügen, sonst ruft er keine Daten ab.

# Abfrage Timersteuerung  al1 10 Min Temp
define EBUS.TimerTemp at +*00:10:00 get Aussentemp Aussentemp;;get Vorlauf Vorlauf;;get Ruecklauf Ruecklauf;;get PumpeWatt PumpeWatt;; get Fanspeed Fanspeed
attr EBUS.TimerTemp group VaillantControl
attr EBUS.TimerTemp icon time_timer
attr EBUS.TimerTemp room Vaillant
attr EBUS.TimerTemp verbose 0


cs-online

Guten Morgen,

es geht voran, Glückwunsch ;-) ist halt beim Einstieg zäh, aber eben klasse, wenn man erstmal blickt, wie es geht.

Grüsse Christian
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

koef2

HAllo zusammen,

Umzug der Testumgebung auf dem Laptop auf einen RAspi3 war erfolgreich.

Und nicht vergessen "/bin/setserial /dev/ttyUSB0" --> Latency-Problems. Ich nutze ebusd 2.4. in 3.0pre scheint das automatisch zu funktionieren.

Ich hatte aber immer noch Probleme Werte, welche nicht in den Standardaussendungen der Vaillant waren, nur jede 6 Anfrage funktionierte.

Aufgrund der Lantenzprobleme habe ich die Paramter für den ebusd mir angeschaut und damit gespielt.

In /etc/default/ebusd habe ich beim ebusd Aufruf ergänzt:
Zitat-latency=33500 --acquireretries=10 --acquiretimeout=99500 --receivetimeout=99500 --sendretries=10

Das erhöht wohl die Anzahl der Anfragen an Master und Slaves und auch das Warten zwischen den einzelnen Retries.

Werde nun erstmal weiter testen und ggfs. mir das Ebuskabel vornhemen.

Viele Grüße
Kai
Koef2

Prof. Dr. Peter Henning

Was sollte denn mit dem Kabel nicht stimmen ?

LG

pah

koef2

Hallo Peter,

im Forum stand irgendwo auch, dass Empfangen funktioniert, aber bei Sendeproblemen auf dme ebusd sowohl ebus-Pegel-Poti nochmals justiert werden soll als auch Kabelleitungen überprüft werden sollen.

Allerdings, wenn der Empfang auf dem Kabelt funktioniert, sollte das Senden der Datenpakte nicht schlechter gehen. Ist ja schließlich drahtgebunden ;)

Viele Grüße
Kai
Koef2

Prof. Dr. Peter Henning

Zitatsollte das Senden der Datenpakte nicht schlechter gehe
Das stimmt so nicht. Beim Senden werden relativ große Ströme gezogen - und wenn das Kabel zu hochohmig ist, fällt daran zuviel Spannung ab.

Gemessen werden muss also, wenn der Sendetransistor durchgeschaltet ist, die Spannung am Empfänger.

LG

pah

koef2

Hallo zusammen,

nachdem die ganze Sache bei mir zufridenstellend läuft noch ein paar Infos.

Problem war, dass wenn der Raspi allein lief ohne LAN (kein weiterer Server und Gateway), alle Messdaten auf den Wert 0 gingen. Im log von ebusd /etc/var/ebusd.log konnte ich aber erkennen, dass broadcast richtige aufgenommen wurden. Nur FHEM im log /opt/fhem/log/fhem-Monat-Jahr.log war zu erkennen "attempt to write to disconnected device".

Im LAN war dhcp abgeschaltet und ich hatte unter hosts alle Server usw. zumindest eingetragen, damit der eine IP-Anwort bekommt.
Schließlich hat der Aufruf des ebus als ECDM Device mit folgender Änderung funktioniert:
Zitat#define EBUS ECMD telnet 192.168.20.102:8888
define EBUS ECMD telnet 127.0.1.1:8888

Die erste Zeile mit dem ursprünglichen Inhalt und die 2. Zeile mit der Änderung.
Nach dem fhem Neustart hat es dann auch als alleinstehender Rechner funktioniert. 127.0.1.1 muss aber in der /etc/hosts stehen !!!.

Weiterhin liegen mittels ebus ja auch Datum und Uhrzeit vor.
Mit folgendem Skript "ebustime2raspi" mit "+x" executable Rechten, welches crond regelmäßig aufruft übergebe ich die Uhrzeit an den Raspi:
#!/bin/sh
#Umwandeln Datumsformat udn Zeit ebus fuer date Befehl, da dcf77 von Vaillant Heizung
echo "PRG EBUS Time Date wandeln und Systemzeit setzen"
# date MMDDhhmmssYY
#Abfage ebus
EbusDateTime=$(/usr/bin/ebusctl r -f DateTime)
#EbusDateTime=$(/usr/bin/ebusctl r -f DatevTimes) # Debugeintrag fuer Fehler
echo "ebus date time: "$EbusDateTime"\n"
#
# Datum und Uhrzeit mit Trenenr ";"  splitten mit set und Datum und Uhrzeit in eigene Hilfsvariablen
IFS=";"
set -- $EbusDateTime
HilfDate=$(echo "$3")
HilfTime=$(echo "$2")
#Trenner Datum "." Trenner Uhrzeit ":"
echo "HilfDate: "$HilfDate" und HilfTime: "$HilfTime"\n"
#
# Datum umwandeln in Tag Monat und Datum
#DD.MM.YYYY --> MMDDYY
IFS="."
set -- $HilfDate
HilfDD=$(echo "$1")
HilfMM=$(echo "$2")
HilfYYYY=$(echo "$3")
echo "HilfDD: "$HilfDD" HilfMM: "$HilfMM" HilfYYYY: "$HilfYYYY"\n"
# Entferne erste beiden Zahlen YYYY zu YY
# Zusammensetzen Datum
DateDatumZeit="$HilfMM""$HilfDD""$HilfYYYY"
# 4 stelliges JAhr in 2 stelliges wandeln --> loesche ersten beiden Stellen
HilfYY=$(echo "$HilfYYYY"  | awk '{print substr($0,3)}')
DateDatumZeit="$HilfMM""$HilfDD""$HilfYY"
echo "DateDatumZeit: "$DateDatumZeit"\n"
#
#Uhrzeit Auseinanadernehmen und umwandeln
#hh:mm:ss --> hhmmss
IFS=":"
set -- $HilfTime
Hilfhh=$(echo "$1")
Hilfmm=$(echo "$2")
Hilfss=$(echo "$3")
#endgueltiger string MMDDhhmmYY
DateDatumZeit="$HilfMM""$HilfDD""$Hilfhh""$Hilfmm""$HilfYY"
echo "DateDatumZeit: "$DateDatumZeit"\n"
# Abfrage ob Buchtabe udnd Zeichen enthält
#DateDatumZeit=$(echo "----") #zum Debuggen, denn das ist Fehlerstring keeen Zeit udn Datum uebermittelt
# wenn ERR Antwort oben, dann ist dieser String leer
case "$DateDatumZeit" in
'----')
        echo "no date time found, problem vaillant dcf77 -->invalid --> no time sync with date neccessary";;
"")
        echo "ebus readin ERR --> string empty --> invalid --> no time sync with date neccessary";;
*)
        echo "time date string found --> write time and date to raspi with date"
        # Datum schreiben
        /bin/date $DateDatumZeit;;
esac
#
exit 0


Prinzip: nutze set mit IFS-"Trenner" und übergebe in einzelen Variablen und setze die neu zusammen. Mit "date" Zeit des RAspi neu setzen. Wenn ebusctl nur "--.--.--" liefert, ist die Heizungssteuerung zwar da, aber liefert keinen Wert. Das wird zu "----" nach dem wandeln der VAriablen. Wenn ebusctl eine "ERR" liefert, ist beim ebusctl Aufruf etwas schief gelaufen. In beiden Fällen wird in der case-Abfrage nichts passieren. In allen andere Fällen wird das Datum und Uhrzeit geschrieben.
Vielleicht müssen noch mehr Fehler berücksichtig werden. Ggfs. kan man es auch schöner programmieren/skripten.

Eintrag mittels crontab -e:
*/5 * * * * /root/bin/ebustime2raspi
@reboot /root/bin/ebustime2raspi


So muss ich nicht über andere Server ins Internet gehen, um Datum und Uhrzeit zu erhalten.

Viele Grüße
Kai
Koef2

cs-online

hmmm.... ich habe meinen Raspi direkt an der Fritzbox, so daß ich FHEM auch von außerhalb nutzen kann (um Warmwasser für die Badewanne zu machen, z.b.), ich habe solche Probleme noch nie gehabt. Interessant finde ich aber die Variante,

EbusDateTime=$(/usr/bin/ebusctl r -f DateTime)

direkt ohne den Umweg über ein FHEM-Device... Funktioniert das auch innerhalb von FHEM über Perl ?
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

koef2

Hallo,

die FHEM ECMD Devices werden ja in der FHEM/bai00.cfg so konfiguriert, dass der ebus-Befehl dort angegeben wird. Dort ruft Perl den Ebusbefehl eigentlich auf.

CS-Online hatte mir den Tipp gegeben, bevor etwas in FHEM konfiguriert wird, es direkt mit dem ebusctl Befehl auszuprobieren. Auch für den Pegelabgleich des ebusd werden ja direkt die Befehle benutzt. Das ebus-Paket von John30 unter Linux sind ja alles Linuxbefehle. Es gibt auch Anwender, die so direkt mit den ebus-Befehlen unter Linux ihre Datenbanken pflegen und auch auswerten.

Ist als direkt auf dem Raspi nutzbar, da das ebus-deb-Paket eingespielt wurde.

Viele Grüße
Kai
koef2

micha_pr

Hallo,

hat einer eine Idee, wie ich per ebusd die Raumtemperatur einstellen kann (also den Setpoint)?

Die Abfrage geht, das Setzen der Tag-Temperatur auch, aber leider nicht die (vom Handrad einstellbare) abweichende Raumtemperatur.

Es ist eine Vaillant Ecotec (type 470) - in den 470-er files finde ich keinen Parameter mit write Option

ebusctl read ActualRoomTempDesiredHc1
ebusctl read DisplayedHc1RoomTempDesired
ebusctl read Hc1DayTemp

- alles kein Problen, wie gesagt.... aber wie stelle ich die Temperatur mal kurzzeitig auf 22Grad - wenn die Hc1DayTemp auf 20 Grad steht. oder umgekehrt wenn sie auf 22 Grad steht - wie kann ich sie dann runterstellen?

Habe schon viel gesucht und probiert - Ihr seid eine meiner letzten Hoffnungen :)

Vielen Dank!

Micha

TiPpFeHlEr

#2307
Hi micha_pr,

also du kannst nur den Wert für "Raumsoll" hinterlegen, mittels
w -c 470 Hc1DayTemp

in der 15.470 ist diese Zeile verantwortlich
r;w,,Hc1DayTemp,HC1_DaySetTemp,,,,"2700",,,temp1,,,day setpoint,,,
hier steht r;w also lesen und schreiben.

die Kurzfristige geänderte Raumsoll Temp die der Regler beim nächsten Schaltpunkt wieder zurücksetzt und wieder die hinterlegte benutzt, kannst du meines Wissens nicht separat einstellen. Da dies Der 470er intern macht.?


in meiner bai00.cfg siehts so aus zum lesen und schreiben.
wobei "Value("RaumSollTemp")" bei mir ein dummy Knopf ist .

# RaumIstTemp
get RaumTemp cmd {"r -f RoomTemp \n"}
get RaumTemp expect "\d+\n\n"
get RaumTemp postproc { sprintf("%5.1f",$_) }
#
#
#
# RaumSollTempSchreiben
get RaumSollTempSchreiben cmd {"w -c 470 Hc1DayTemp ".Value("RaumSollTemp")."\n"}
get RaumSollTempSchreiben expect ".*\n\n"
get RaumSollTempSchreiben postproc  { $_ }
#
# RaumSoll lesen
get RaumSoll cmd {"r -f Hc1DayTemp \n"}
get RaumSoll expect "\d+\n\n"
get RaumSoll postproc { sprintf("%5.1f",$_) }
#


ActualRoomTempDesiredHc1 & DisplayedHc1RoomTempDesired

sind interne Werte, diese werden durch den 470er auf die gewünschte Raumsolltemp gesetzt, bei Sommer oder Frostschutz Betrieb werden diese Werte intern auf zb. 5°C gesetzt ohne die Raumsolltemp zu ändern, ob mann diese auch von aussen schreiben kann glaube ich nicht, habs noch nicht probiert.


in fhem habe ich dazu folgendes definiert

#
define RaumTemp ECMDDevice bai00.class
attr RaumTemp IODev EBUS
attr RaumTemp group Vaillant
attr RaumTemp icon temp_inside
attr RaumTemp room Vaillant
attr RaumTemp stateFormat {sprintf("%.1f",ReadingsVal("RaumTemp","RaumTemp",0)-1.8)." °C"}
attr RaumTemp userReadings RaumTemp(("RaumTemp","RaumTemp",0)-1.8)
attr RaumTemp verbose 0
#
define RaumSollTemp dummy
attr RaumSollTemp alias Raum Soll
attr RaumSollTemp group VaillantControl
attr RaumSollTemp icon temp_control
attr RaumSollTemp room Vaillant,Heizung
attr RaumSollTemp setList state:knob,min:15,max:26,step:1,linecap:round,fgColor:red
attr RaumSollTemp verbose 0
attr RaumSollTemp webCmd state

define RaumSollTempSchreiben_Click notify RaumSollTemp {fhem("get RaumSollTempSchreiben RaumSollTempSchreiben")}
attr RaumSollTempSchreiben_Click group heatingControl
attr RaumSollTempSchreiben_Click room Vaillant

define RaumSollTempSchreiben ECMDDevice bai00.class
attr RaumSollTempSchreiben IODev EBUS
attr RaumSollTempSchreiben group heatingControl
attr RaumSollTempSchreiben room Vaillant
attr RaumSollTempSchreiben stateFormat RaumSollTempSchreiben
attr RaumSollTempSchreiben verbose 0
#
define RaumSoll ECMDDevice bai00.class
attr RaumSoll IODev EBUS
attr RaumSoll group 1
attr RaumSoll icon temp_inside
attr RaumSoll room hidden
attr RaumSoll stateFormat {sprintf("%.1f",ReadingsVal("RaumSoll","RaumSoll",0))." °C"}
attr RaumSoll verbose 0


mfg maik

cs-online

für die Wunschtemperatur, die nur temporär gilt gibt es quick veto, die wird spätestens beim Datumswechsel wieder gelöscht bzw. deaktiviert. vielleicht hilft das ja...
FHEM auf RPI 4 4GB, HM-WLAN-Gateway, einige HM-Aktoren,2x EBUSD an Heizung+Solar, ESP8266/32 am Strom-,Gas-,Wasserzähler, in WLAN-Steckdosen und Relaisleisten, Sonoff S20+S26,Shelly1/2/2.5, Lacrosse-Gateway und Sensoren,Sduino,Alexa-Fhem,Huawei PV+Speicher, alles auf einem RPI und da geht noch mehr

TiPpFeHlEr

@ cs-online

r,,Hc1QuickVetoTemp,Quick Veto Temperatur Heizkreis 1,,,,"3C00",,,temp1,,,manual override setpoint of the first heating circuit,,,


ist nicht beschreibbar ??
hast du schonmal getestet was passiert wenn du diesen Wert über den ebus setzt??

mfg maik