Viessmann Heizungssteuerung mit vcontrold

Begonnen von dougie, 24 März 2013, 11:16:26

Vorheriges Thema - Nächstes Thema

dougie


Moin Zusammen,

ich hatte gestern und heute etwas Zeit, um mal endlich nach dem Thema Viessmann Vitotronik zu schauen.

Was ich bislang geschafft habe:

- vcontrold auf dem RPi zu installieren und zu konfigurieren
- mit vclient ein paar Daten abzuholen

Sieht dann z.B. so aus:


pi@raspberrypi ~ $ vclient -h 127.0.0.1:1234 -c gettempA,gettempWW
gettempA:
0.700000 Grad Celsius
gettempWW:
53.599998 Grad Celsius
pi@raspberrypi ~ $


Wo ich hin möchte: die Heizungsmodi (Aus / Warmwasser / Warmwasser & Heizung) über fhem steuern.
Bislang hab ich noch keine genaue Ahnung wie das klappen könnte, aber vielleicht haben die Experten schon ne Idee?

VG
Ralf

Puschel74

Hallo,

Idee nicht direkt aber einen kleinen Hinweis.

Wenn FHEM ausfällt ist bei dir die gesamte Heizung aus.
Kein Warmwasser und keine Heizung mehr.
Bei sowas habe ich dann gerne ein zweites System in der Hinterhand damit Wohnung/Haus nicht einfriert.

Bedenke:
Manche Frauen haben kein Verständnis dafür warum wir uns Stunden-/Tagelang mit einem Computersystem beschäftigen solange alles
funktioniert.
Wehe es fällt mal was aus -- der WAF sinkt rapide in den Keller ;-)

Grüße
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

dougie


Da hast du natürlich völlig recht, aber derzeit steuere ich auch schon die Zirkulationspumpe via fhem und die Ausfälle haben sich inzwischen auf nahezu Null reduziert.
Was mich jetzt noch stört ist, das die Heizung auch Nachts, wenn nichts zu tun ist, die Kesseltemperatur hält. Das ist eigentlich unnötib und verbraucht nur Öl und Strom.

Ich hab mal etwas rumgespielt und kann jetzt Aussentemperatur, WarmWassertemp und Kesseltemp abfragen.

pi@raspberrypi ~ $ vclient -h 127.0.0.1:1234 -c gettempA,gettempWW,gettempK
gettempA:
4.200000 Grad Celsius
gettempWW:
52.200001 Grad Celsius
gettempK:
128.500000 Grad Celsius
pi@raspberrypi ~ $

LuckyDay

soweit bin ich auch, brauche aber erst noch ein Netzwerkabel im Heizraum,
das erfordert aber leider bei mir noch ein paar durchbrüche :(


du kannst das vcontrold über putty(telnet) ansprechen
bei fhem z.b. über ecmd , die class.def mußt du selber erstellen.

@ Puschel74
WAF wird überbewertet, einfach mal die nächste öl-gas-rechnung weiterleiten zum zahlen :)

dougie

...ich hab meinem RPi einfach ein WLAN Stick spendiert, das hält den Verkabelungsaufwand gering.

Aktuell kommuniziere ich mit dem RPi via Putty, und editiere "von oben" die vito.xml und fragte den Server via vclient ab.

Leider muss ich mir die ganzen Kommandos noch zusammen suchen. Ich hab die Anlagen ID 2098, da scheint es nicht so viel für zu geben (V200 KW2)

Edit:

Lästig, aber es wird...

pi@raspberrypi /etc $ vclient -h 127.0.0.1:1234 -c gettempA,gettempWW,gettempK,getBetriebArtA1M1,getBetriebArtSparA1M1,getBetriebArtPartyA1M1
gettempA:
4.100000 Grad Celsius
gettempWW:
52.799999 Grad Celsius
gettempK:
60.099998 Grad Celsius
getBetriebArtA1M1:
RED
getBetriebArtSparA1M1:
AUS
getBetriebArtPartyA1M1:
AUS
pi@raspberrypi /etc $

brmpfl

Moin,

eine vlt. doofe Frage:
Wie kommt Ihr mit dem RasPi an die Vitotronik ran?
:)
Hajo

dougie



Die Frage ist durchaus berechtigt. :-)

Schau mal hier; http://openv.wikispaces.com/

Und wegen der Optolink Schnittstelle hier: http://openv.wikispaces.com/Bauanleitung+USB

Ich hab inzwischen eine aktuelle Version der vcontrold.xml und der vito.xml gefunden und kann verschiedene Stati prima auslesen.
Was ich noch nicht hin bekommen habe ist, einen Status zu setzen. Irgendwas mache ich da noch falsch. Denke aber ich bin knapp davor.

VG
Ralf

Lars

Geniales Projekt. Bislang stand auf meiner Einkaufsliste ein Vitocom 100 Adapter, der ist jetzt erst mal gestrichen.
Am Wochenende stand ich noch vor der Heizung und fragte mich, warum die da ein V reingeschnitzt haben und was es mit den beiden "LEDs" auf sich hat.
Das ist jetzt also klar!

Jetzt fehlt nur noch ein FHEM Modul.

Gruß
Lars
FHEM Hauptsystem auf ESXi VM | dblog | 3 rPi für Nebensysteme | 2 Beaglebone Black Test- / Integrationssystem

salvadore

Hallo,
seit einigen Monaten haben wir ebenfalls die Steuerung, ID 2098 bei uns im Einstz. Ich wollte sie auch in FHEM einbinden aber bewusst mit der Einschränkung, nur Werte und Einstellungen abzufragen und nicht zu setzen. Im Beitrag Link folgende habe ich versucht, meine Lösung vorzustellen. Aus Stabilitätsgründen verwende ich aber die Linux-Variante mit vConnect, läuft seit Dez.2012 ohne Probleme. Vielleicht kann es jemand gebrauchen.

salvadore
FHEM 5.6, APU-Board, CUNO 1.x, RFXtrx433, 8 FHT80B, diverse FS20 Aktoren, Rasperry, div. DS18x-Sensoren, KD101, AB400R, HE877, ESA2000, Beaglebone Black Rev.C, Jeelink, PCA 301, PT8005,

dougie

Hey super! So langsam wird eine komplette Lösung draus! Sehr schön!

Ich habe inzwischen einen Bug in der vito.xml gefunden und korrigiert. Damit kann ich jetzt zumindest schon mal die Warmwasser-Solltemperatur schreiben.
Wie ich bei meiner Anlage aber den Betriebsmode einstelle, weill ich noch nicht. Da teste ich noch.

Hier mal das, was meine Anlage als Typ reported:

pi@raspberrypi ~ $ vclient -h 127.0.0.1:3002 -c getDevType
getDevType:
V200KW2 ID=2098 Protokoll:KW
pi@raspberrypi ~ $


Nachtrag: ich melde Erfolg! anbei erfolgreiche Umschaltung von Heizung&Warmwasser auf nur Warmwasser!

pi@raspberrypi ~ $ vclient -h 127.0.0.1:3002 -c 'detail setBetriebArtM1,debug on,setBetriebArtM1 WW'
detail setBetriebArtM1:
setBetriebArtM1: SEND 04;WAIT 05;SEND 01 F4 23 01 01;SEND BYTES BA;RECV 1 SR
        Bit (BP): 255
        Unit: BetriebsArt (BA)
          Type: enum
          Get-Calc: (null)
          Set-Calc: (null)
         Einheit: (null)
          Enum Bytes:00 Text:WW
          Enum Bytes:01 Text:RED
          Enum Bytes:02 Text:NORM
          Enum Bytes:04 Text:H+WW FS
          Enum Bytes:03 Text:H+WW
          Enum Bytes:05 Text:ABSCHALT
          Enum Bytes:<default> Text:UNKNOWN
        Unit: SetReturnStatus (SR)
          Type: enum
          Get-Calc: (null)
          Set-Calc: (null)
         Einheit: (null)
          Enum Bytes:00 Text:OK
          Enum Bytes:05 Text:SYNC (NOT OK)
          Enum Bytes:<default> Text:NOT OK
debug on:

setBetriebArtM1 WW:
DEBUG:Mon Mar 25 10:58:30 2013 : Befehl: setBetriebArtM1 WW
DEBUG:Mon Mar 25 10:58:30 2013 : konfiguriere serielle Schnittstelle /dev/ttyUSB0
DEBUG:Mon Mar 25 10:58:30 2013 : Process 3733 tries to aquire lock
DEBUG:Mon Mar 25 10:58:30 2013 : Process 3733 got lock
DEBUG:Mon Mar 25 10:58:30 2013 : WW -> 00
DEBUG:Mon Mar 25 10:58:30 2013 : >SEND: 04
DEBUG:Mon Mar 25 10:58:30 2013 : Warte auf 05
DEBUG:Mon Mar 25 10:58:31 2013 : <RECV: 05 (1420.0 ms)
DEBUG:Mon Mar 25 10:58:31 2013 : >SEND: 01
DEBUG:Mon Mar 25 10:58:31 2013 : >SEND: F4
DEBUG:Mon Mar 25 10:58:31 2013 : >SEND: 23
DEBUG:Mon Mar 25 10:58:31 2013 : >SEND: 01
DEBUG:Mon Mar 25 10:58:31 2013 : >SEND: 01
DEBUG:Mon Mar 25 10:58:31 2013 : >SEND: 00
DEBUG:Mon Mar 25 10:58:31 2013 : <RECV: 00 (130.0 ms)
DEBUG:Mon Mar 25 10:58:31 2013 : 00 -> OK
DEBUG:Mon Mar 25 10:58:31 2013 : Process 3733 released lock
DEBUG:Mon Mar 25 10:58:31 2013 : OK
OK
pi@raspberrypi ~ $ vclient -h 127.0.0.1:3002 -c 'detail getBetriebArtM1,debug on,getBetriebArtM1'
detail getBetriebArtM1:
getBetriebArtM1: SEND 04;WAIT 05;SEND 01 F7 23 01 01;RECV 1 BA
        RECV Timeout: 300 ms
        Retry: 3
        Bit (BP): 255
        Unit: BetriebsArt (BA)
          Type: enum
          Get-Calc: (null)
          Set-Calc: (null)
         Einheit: (null)
          Enum Bytes:00 Text:WW
          Enum Bytes:01 Text:RED
          Enum Bytes:02 Text:NORM
          Enum Bytes:04 Text:H+WW FS
          Enum Bytes:03 Text:H+WW
          Enum Bytes:05 Text:ABSCHALT
          Enum Bytes:<default> Text:UNKNOWN
debug on:

getBetriebArtM1:
DEBUG:Mon Mar 25 10:58:41 2013 : Befehl: getBetriebArtM1
DEBUG:Mon Mar 25 10:58:41 2013 : konfiguriere serielle Schnittstelle /dev/ttyUSB0
DEBUG:Mon Mar 25 10:58:41 2013 : Process 3735 tries to aquire lock
DEBUG:Mon Mar 25 10:58:41 2013 : Process 3735 got lock
DEBUG:Mon Mar 25 10:58:41 2013 : >SEND: 04
DEBUG:Mon Mar 25 10:58:41 2013 : Warte auf 05
DEBUG:Mon Mar 25 10:58:41 2013 : <RECV: 05 (170.0 ms)
DEBUG:Mon Mar 25 10:58:41 2013 : >SEND: 01
DEBUG:Mon Mar 25 10:58:41 2013 : >SEND: F7
DEBUG:Mon Mar 25 10:58:41 2013 : >SEND: 23
DEBUG:Mon Mar 25 10:58:41 2013 : >SEND: 01
DEBUG:Mon Mar 25 10:58:41 2013 : >SEND: 01
DEBUG:Mon Mar 25 10:58:41 2013 : <RECV: 00 (30.0 ms)
DEBUG:Mon Mar 25 10:58:41 2013 : 00 -> WW
DEBUG:Mon Mar 25 10:58:41 2013 : Process 3735 released lock
DEBUG:Mon Mar 25 10:58:41 2013 : WW
WW
pi@raspberrypi ~ $



Und hier noch die commands, die in der vito.xml gefehlt haben:

       <command name='getBetriebArtM1' protocmd='getaddr'>
                <addr>2301</addr>
                <len>1</len>
                <unit>BA</unit>
                <description>Betriebsart M1</description>
                <device ID="2053">
                    <addr>51</addr>
                    <len>1</len>
                    <unit>BA</unit>
                </device>
                <device ID="2098">
                    <addr>2301</addr>
                    <len>1</len>
                    <unit>BA</unit>
                </device>
        </command>
        <command name='setBetriebArtM1' protocmd='setaddr'>
                <!-- setBetriebArtM1 H+WW | WW | ABSCHALT -->
                <addr>2301</addr>
                <len>1</len>
                <unit>BA</unit>
                <description>Betriebsart M1</description>
                <device ID="2098">
                    <addr>2301</addr>
                    <len>1</len>
                    <unit>BA</unit>
                </device>
        </command>

dougie

Zitat von: salvadore schrieb am Mo, 25 März 2013 08:54Ich wollte sie auch in FHEM einbinden aber bewusst mit der Einschränkung, nur Werte und Einstellungen abzufragen und nicht zu setzen. Im Beitrag Link folgende habe ich versucht, meine Lösung vorzustellen. Aus Stabilitätsgründen verwende ich aber die Linux-Variante mit vConnect, läuft seit Dez.2012 ohne Probleme. Vielleicht kann es jemand gebrauchen.

Danke Salvadore!

Aber wie du schon sagst, unterstützt vConnect nur lesenden Zugriff. Mit vclient kann ich aber lesen UND schreiben. Daher muss ich mich noch mal in deine Skripte vertiefen, ob/wie ich das an vclient anpassen kann. Zudem benötige ich bei vclient den ser2net nicht, da schon integriert.
Ich denke die Bausteine sind jetzt alle da, ich muss sie nur noch passend zusammen setzen.

VG
Ralf

dougie


Ich hab mir das ShellSkript von salvadore so abgeändert, das ich jetzt ein fhem-konformes LogFile auf dem RPi habe, das mir jedes mal beim Aufruf (z.B. cron job) einen Datensatz wie unten erzeugt.

2013-03-26_09:38:46 Aussentemp: 0.400000
2013-03-26_09:38:46 WWistTemp: 47.900002
2013-03-26_09:38:46 WWsollTemp: 50.000000
2013-03-26_09:38:46 KistTemp: 50.299999
2013-03-26_09:38:46 KsollTemp: 66.400002
pi@raspberrypi ~ $


Was ich noch nicht begriffen habe ist, wie ich das in fhem zur Auswertung bekomme.

Zum Setzten des Betriebsmodus (also Aus / Warmwasser / Heizung & Warmwasser) würde ich drei extra Shell Skripte anlegen, und die dann aus fhem aus heraus aufrufen.

Habe ich da richtig gedacht?

VG
Ralf

salvadore

Hallo Ralph,
wie hast Du das Skript abgeändert?
In meinem letzten Beitrag Link hatte ich eine modifizierte Version vorgestellt, welche die Werte ins FHEM-Log schreibt. Bezgl. der Auswertung verwende ich folgenden Code:

##AussenfuehlerHeizung.cfg

define AussenfuehlerHeizungLog FileLog /var/log/fhem/heizung-%Y.log fakelog
attr AussenfuehlerHeizungLog logtype temp4:Temp,text
attr AussenfuehlerHeizungLog room hidden
 
define AussenfuehlerHeizung weblink fileplot AussenfuehlerHeizungLog:temp4:CURRENT
attr AussenfuehlerHeizung label "Aussenfuehler Heizung: Min $data{min1}, Max $data{max1}, Aktuell $data{currval1}"
attr AussenfuehlerHeizung room Heizung


Der Code für den Plot:

# temp4.gplot
# Display the measured temperature for Oregon sensors
#
# FileLog definition:
# define <filelogname> FileLog /var/log/fhem/<devname>-%Y.log <devname>
# Filelog example:
#
# Logfile record example:
# 2013-03-26_15:00:01 getTempA: 3.6
#
# Attribute 'small' is useful for gnuplot/-scroll only,
# if plotsize is less than 800,400
#set terminal png transparent small size <SIZE> crop

set terminal png transparent size <SIZE> crop

set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set y2tics
set title '<L1>'
set grid xtics y2tics

set y2label "Temperatur in C"

#FileLog 3:T\x3a|getTempA:0:

plot \
  "< egrep 'T:|getTempA:' <IN>"\
     using 1:4 axes x1y2 title 'ermittelte Temperaturen' with fsteps ls l2fill lw 2

Und so sieht es bei mir aus:

(siehe Anhang / see attachement)
FHEM 5.6, APU-Board, CUNO 1.x, RFXtrx433, 8 FHT80B, diverse FS20 Aktoren, Rasperry, div. DS18x-Sensoren, KD101, AB400R, HE877, ESA2000, Beaglebone Black Rev.C, Jeelink, PCA 301, PT8005,

dougie

Dank dir Salvadore!

Ich hab inzwischen eine cron job angelegt, der alle 5 Minuten das Skipt aufruft. (Skript im Anhang)
Ich frage nur die für mich wichtigen Werte ab und schreib die in das Log.


(siehe Anhang / see attachement)


Auch das fakelog habe ich in fhem so wie du es vorgemacht hast angelegt. Funktioniert auch prima!
Ein passendes gplot zu bauen wäre nicht das Problem, aber wie bekomme ich die Werte aus dem Log wieder in dummy-Variablen, mit denen ich innerhalb von fhem Aktionen auslösen kann?
Im Prinzip wäre es cool, wenn alle 5 Minuten für die von mir abgefragten Werte der Heizung Events generiert werden würden. Wobei... es müssten auch nicht unbedingt Events sein. Ich kann ja ein Macro in der 99_MyUtils periodisch aufrufen und die Variablen updaten.

Was mir noch fehlt: aktuell muss ich nach einem reboot vcontrold manuell mit

vcontrold -x /etc/vcontrold.xml

starten. Was muss ich tun, damit das automatisch geht. Mit update-rc.d geht das ja nur, wenn ein passendes script in /etc/init.d liegt ... richtig? Wie machst du das?

VG
Ralf

Billy

Hallo Ralf, habe zwar keine Viessmann aber dieses Problem
ZitatEin passendes gplot zu bauen wäre nicht das Problem, aber wie bekomme ich die Werte aus dem Log wieder in dummy-Variablen, mit denen ich innerhalb von fhem Aktionen auslösen kann?
wie folgt gelöst.
Ich schreibe die Daten ins Logfile für die plots (wie du auch)

und die Daten die ich in den Dummys brauche über einen System Befehl in die Dummys. In meinem Fall ein Perl Befehl!

system('/data/fhem/fhem.pl 7072 "set T2 '.$TT2.'"');

  --> Der Befehl schreibt in meinem Fall den Temperaturwert aus $TT1 in den Dummy T2 "define T2 dummy"

Ich nehme an das lässt sich im shell script auch erledigen.
Ob das auch eleganter geht wäre zu prüfen.

Ich habe mir auch Hilfe im Forum geholt siehe Beitrag
http://forum.fhem.de/index.php?t=msg&goto=67180&rid=22&srch=%27.%24TT1.%27#msg_67180

Gruss Billy

FHEM immer akt. auf 3 BeagleBoneBlack: 2xHMLAN 2xJeelink ;10x HM-CC-TC, 13x HM-CC-VD, 1x HM-ES-PMSw1-Pl, 3x HM-LC-SW1-PL2, viele ESP8266, Tasmota Scripting, Mqtt*