Läuft: Heizung mit eBus-Schnittstelle

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

Vorheriges Thema - Nächstes Thema

TiPpFeHlEr

@R2D2

naja damit wird der poll deaktiviert, ob das Gut ist weiss ich nicht. ----> warten wir mal auf John

@John

bin mit meine RecoVair etwas weiter
hatte Erfolg beim setzen des Modus Wärmerückgewinnung  8)

pi@ospi ~ $ ebusctl -p 8889 hex 08b509040e8c0300
00

pi@ospi ~ $ ebusctl -p 8889 hex 08b509030d8c03
0100

#########################################################################
Wärmerückgewinnung MOdus
#########################################################################
00 = Auto; 01 = Aktivieren; 02 = Aus
setzen = ebusctl -p 8888 hex 38b509040e8c03[00-02]
ebusctl -p 8889 hex 08b509040e8c03[00-02]

lesen =  ebusctl -p 8888 hex 38b509030d8c03
ebusctl -p 8889 hex 08b509030d8c03
#########################################################################


mfg maik

TiPpFeHlEr

hi R2D2,

habe ich schon gelesen  ;)

leider besitzt meine keinen DurchflussSensor > schon ausgelesen > 020000
also immer 0000

leider.

TiPpFeHlEr

weist du zufällig wie der 4 stellige hex Wert umgerechnet wird?

pi@ospi ~ $ ebusctl -p 8888 hex 08b509030dc500
04afde307e

pi@ospi ~ $ ebusctl -p 8888 hex 08b509030dc600
047fef5700

pi@ospi ~ $ ebusctl -p 8888 hex 08b509030df500
04feffffff

pi@ospi ~ $ ebusctl -p 8888 hex 08b509030df600
04294d5e01


wie man sieht ist mein PrEnergySumHc1,PrEnergySumCH1_DK fast am Ende angelangt  8) 04feffffff

TiPpFeHlEr

hi R2D2,

hmmm....

interessant ist das sich der Wert nicht ändert (seit gestern) obwohl die Heizung lief.
pi@ospi ~ $ ebusctl -p 8888 hex 08b509030df500
04feffffff

pi@ospi ~ $ ebusctl -p 8888 hex 08b509030df600
04294d5e01


bei Warmwasser allerdings hat sich der Wert geändert
pi@ospi ~ $ ebusctl -p 8888 hex 08b509030dc500
04bea8357e

pi@ospi ~ $ ebusctl -p 8888 hex 08b509030dc600
0437f25700


mfg maik

john30

Zitat von: TiPpFeHlEr am 30 September 2016, 16:37:49
ebusd & ebusd2 laufen, und lassen sich separat ansprechen! ;D
Das klingt gut!

Du könntest jetzt noch den zweiten ebusd auf eine freie Masteradresse setzen, dann würden sich die zwei nicht mehr gegenseitig unterbrechen (Arbitrierung). Dazu in der /etc/default/ebusd in einer der beiden Zeilen ein "-a ff" eintragen. Oder hast Du noch ein vrnetdialog im System?

Zitat von: TiPpFeHlEr am 30 September 2016, 16:37:49
nun weiss ich auch warum ich den VR32 einsetzen musste , die RecoVair hat die gleiche EBUS Adresse wie meine Therme 08/03.
Korrekt. Genau das ist ja der Sinn und Zweck eines VR32: entkoppeln :-)

Zitat von: TiPpFeHlEr am 30 September 2016, 16:37:49
pi@ospi ~ $ ebusctl -p 8889 info
version: ebusd 2.1.28b50d2
signal: acquired
symbol rate: 24
masters: 3
messages: 7
address 03: master #11
address 08: slave #11, scanned "MF=Vaillant;ID=recoV;SW=0217;HW=0203"
address 10: master #2
address 31: master #8, ebusd
address 36: slave #8

Ah, der Slave 15 zum master #2 ist noch nicht idenfiziert. Wie sieht der denn aus?

Zitat von: TiPpFeHlEr am 30 September 2016, 16:37:49
hattest du schon Erfolg mit dem auslesen deiner RecoVair??
Bin noch nicht sehr weit gekommen. Bis jetzt nur den Ertrag und ein paar Temperaturen identifiziert. work in progress :-)

Zitat von: TiPpFeHlEr am 30 September 2016, 16:37:49
hattest du nicht ein script mit dem ich alle möglichen Speicherbereiche automatisch ansprechen kann, und dann schauen bei welchem etwas zurück kam?
Es ist doch sehr mühselig alle von Hand durchzutesten  ::)
Ja das ist es. Anbei das Skript. Aufruf z.B. mit "./allregisters.sh -p 8889 -a 08", womit die erste 512 Vaillant Register auf ebusd mit Port 8889 und dem Slave mit Adresse 0x08 ausgelesen werden. Ergebnis z.B. wie folgt:
0 = 038c0100
1 = 03e40000
2 = 03de0000
3 = 03600100
4 = 03b30100
5 = 0200c8
6 = 0200c8
...

Das sind jetzt z.B. die Temperaturfühler meiner recovair. Ich habe übrigens ein deutlich älteres Modell, weshalb die beiden sich vermutlich in der CSV stark unterscheiden werden...

VG John
author of ebusd

john30

Zitat von: R2D2_ am 30 September 2016, 20:55:46
pi@jessie:~ $ ebusctl scan result
08;Vaillant;BAI00;0518;7401;21;11;39;0010009352;3100;006295;N3
15;Vaillant;47000;0126;6002;21;11;27;0020108127;0082;013965;N9

Dein scan result passt nicht zu dem, was ebusd an CSV gelesen hat.
Kannst Du mir mal bitte Deine ebusd.log sowie alle Dateien aus /etc/ebusd per PN zukommen lassen?
Das mit dem Polling ist auch merkwürdig und so nicht gedacht.

VG John
author of ebusd

john30

Zitat von: TiPpFeHlEr am 01 Oktober 2016, 11:19:19
deine Hard und Software-Versionen sind also die gleichen wie meine !? cool
das heißt bei den BAIs leider überhaupt nichts. Hier gibt es einen zweiten Level von Softwareversion, der eigentlich relevant ist. Nachdem vrdialog das über den Produktcode zuordnet, macht das ebusd genauso.

VG John
author of ebusd

john30

Zitat von: R2D2_ am 02 Oktober 2016, 13:04:14
@john: benötige noch Deine email-Adresse per PN ... oder falls jemand diese hat, mir bitte per PN mitteilen ...
Hast Du inzwischen.

Zitat von: R2D2_ am 02 Oktober 2016, 13:04:14
Mir ist aufgefallen, dass der Duchfluss-Sensor / die Abfrage desselben nicht immer den aktuellen Wert zurückliefert, sondern "020000" = 0
ebusctl r -h 08b509030dfb00
oder
ebusctl r PrimaryCircuitFlowRate

Nach längerer Laufzeit der Pumpe ist dann eine Abfrage möglich. Kann einer was dazu sagen ?
Sind das zufällig etwa 5 Minuten?
Dann solltest Du das caching im ebusd beim read ausschalten mit "read -f ...".
Hintergrund ist, dass ebusd alles, was aus dem cache beantwortet werden kann, per default mit einem Maximalalter von 5 Minuten daraus zieht, um den Bus nicht unnötig zu belasten.
author of ebusd

john30

Zitat von: R2D2_ am 30 September 2016, 20:55:46
pi@jessie:~ $ ebusctl scan result
08;Vaillant;BAI00;0518;7401;21;11;39;0010009352;3100;006295;N3
15;Vaillant;47000;0126;6002;21;11;27;0020108127;0082;013965;N9


ZitatDein scan result passt nicht zu dem, was ebusd an CSV gelesen hat.
Kannst Du mir mal bitte Deine ebusd.log sowie alle Dateien aus /etc/ebusd per PN zukommen lassen?
Das mit dem Polling ist auch merkwürdig und so nicht gedacht.

So, Rätsel gelöst: das war ein kleiner feiner Bug, den ich vor 14 Tagen eingebaut habe. Mit aktuellem git code sollte es jetzt wieder regulär klappen und Deine Änderung an der 08.bai.csv damit auch wieder hinfällig sein. Allerdings musst Du das Polling aktiv lassen, sonst kann ebusd den Produktcode nicht rausfinden...
author of ebusd

john30

Zitat von: R2D2_ am 02 Oktober 2016, 14:16:49
Warum kann der nachfolgende Wert nicht mehr geschrieben werden ?
r,,HwcOPMode,Betriebsart Warmwasserkreis,,,,"4200",,,UCH,,,"operation mode of the domestic hot water circuit set implicitly (0 = off, 1 = on, 2 = auto, 3 = auto sunday, 4 = party, 6 = one time tank loading, 7 = holiday)"
Das darfst Du mich nicht fragen, so stehts halt in der MDB drin, also ein nur-Lesen Wert. Du kannst das zum Probieren auch auf "r;w" erweitern, aber ich würde mal schätzen, dass das nicht die richtige Stellschraube ist. Das suggeriert zumindest auch der Kommentar "...set implicitly". Ich schätze, die Enstellung müsstest Du woanders tätigen, also entweder direkt an der BAI oder in einem anderen Register der 470. Vermutlich sogar über die Timer (woraus dann auto/auto sunday kommen könnte) bzw. über die quick commands party/load/save (für party/one time tank loading) und 470/HwcCircuitActive (für off/on).
author of ebusd

TiPpFeHlEr

#1810
hi John,

ZitatDu könntest jetzt noch den zweiten ebusd auf eine freie Masteradresse setzen, dann würden sich die zwei nicht mehr gegenseitig unterbrechen (Arbitrierung). Dazu in der /etc/default/ebusd in einer der beiden Zeilen ein "-a ff" eintragen. Oder hast Du noch ein vrnetdialog im System?
hab ich gemacht ;)

ZitatAh, der Slave 15 zum master #2 ist noch nicht idenfiziert. Wie sieht der denn aus?
es gibt an diesem ebus keinen!
habe mal zum Test einen weiteren VRC 470 an diesen ebus angeschlossen.
######################################################
################### mit VRC 470 ######################
######################################################
pi@ospi ~ $ ebusctl -p 8889 scan full
done


pi@ospi ~ $ ebusctl -p 8889 info
version: ebusd 2.1.28b50d2
signal: acquired
symbol rate: 39
masters: 4
messages: 257
address 03: master #11
address 04: slave #25
address 08: slave #11, scanned "MF=Vaillant;ID=recoV;SW=0217;HW=0203"
address 10: master #2
address 15: slave #2, scanned "MF=Vaillant;ID=47000;SW=0128;HW=6002", loaded "vaillant/15.470.csv"
address 33: master #13
address 38: slave #13, scanned "MF=Vaillant;ID=V32  ;SW=0117;HW=9802"
address ff: master #25, ebusd


pi@ospi ~ $ ebusctl -p 8889 scan result
08;Vaillant;recoV;0217;0203;21;14;44;0010016040;0006;005637;N0
15;Vaillant;47000;0128;6002;21;11;39;0020108127;0082;021111;N1
38;Vaillant;V32  ;0117;9802;21;14;25;0020139895;0082;007745;N1

########################################################
#################### ohne VRC 470 ######################
########################################################
pi@ospi ~ $ ebusctl -p 8889 scan full
done


pi@ospi ~ $ ebusctl -p 8889 info
version: ebusd 2.1.28b50d2
signal: acquired
symbol rate: 23
masters: 4
messages: 8
address 03: master #11
address 04: slave #25
address 08: slave #11, scanned "MF=Vaillant;ID=recoV;SW=0217;HW=0203"
address 10: master #2
address 33: master #13
address 38: slave #13, scanned "MF=Vaillant;ID=V32  ;SW=0117;HW=9802"
address ff: master #25, ebusd


pi@ospi ~ $ ebusctl -p 8889 scan result
08;Vaillant;recoV;0217;0203;21;14;44;0010016040;0006;005637;N0
38;Vaillant;V32  ;0117;9802;21;14;25;0020139895;0082;007745;N1
########################################################


ZitatBin noch nicht sehr weit gekommen. Bis jetzt nur den Ertrag und ein paar Temperaturen identifiziert. work in progress :-)
;D

ZitatJa das ist es. Anbei das Skript. Aufruf z.B. mit "./allregisters.sh -p 8889 -a 08", womit die erste 512 Vaillant Register auf ebusd mit Port 8889 und dem Slave mit Adresse 0x08 ausgelesen werden. Ergebnis z.B. wie folgt:
DANKE  ;)
werde es gleich mal durchlaufen lassen!!!!

FEHLER
pi@ospi ~ $ sudo sh ebusregister.sh
ebusregister.sh: 14: ebusregister.sh: Syntax error: Bad for loop variable



mfg maik

TiPpFeHlEr

so,

script musste ich ändern
#!/bin/sh
port=8889
if [ "x$1" = "x-p" ]; then
  shift
  port=$1
  shift
fi
addr=08
if [ "x$1" = "x-a" ]; then
  shift
  addr=$1
  shift
fi
for i in $(seq 0 1024)
do
  h=`printf "%4.4X" $i`
  ret=`echo "hex ${addr}b509030d${h##??}${h%%??}"|nc localhost $port|head -n 1`
  echo $i "=" $ret
done



damit gehts!

Ergebniss bis jetzt
901 = 023504
902 = 020080
903 = 020080
904 = 020080
905 = 02b004
906 = 0101
907 = 0101
908 = 0100

sonst alles 00 (0-1024)

TiPpFeHlEr

@John

wieviele Register gibt es eigentlich?? lasse grade mal von 0-9999 durchlaufen,  :o
da kommt doch ne ganze menge zurück, ob die Daten dann auch brauchbar sind.... mal sehen

wenns fertig ist, bräuchte man nur noch nan script das alle register abfragt die nicht mit "00" beantwortet wurden. Also die, die  Daten lieferten. damit das suchen nach Änderungen wesentlich schneller geht.

mfg maik


john30

Zitat von: TiPpFeHlEr am 02 Oktober 2016, 18:20:22
wieviele Register gibt es eigentlich?? lasse grade mal von 0-9999 durchlaufen,  :o
ich würde sagen, primäre Register liegen im Bereich 0x0000-0x07ff, weil bei vielen Geräten 0x08xx/0x10xx/0x18xx etc. die gleichen Infos wie im primären Register liegen aber für nen anderen Heizkreis oder eine andere Periode. Mehr als 0x78xx hab ich bisher nirgends gesehen, also hat sich der Hersteller vermutlich das oberste Bit für die Zukunft reserviert.

Zitat von: TiPpFeHlEr am 02 Oktober 2016, 18:20:22
wenns fertig ist, bräuchte man nur noch nan script das alle register abfragt die nicht mit "00" beantwortet wurden. Also die, die  Daten lieferten. damit das suchen nach Änderungen wesentlich schneller geht.
sowas lässt sich ganz banal mit grep lösen, z.B. ./allregister.sh|egrep -v "ERR: read timeout|= 00$"
author of ebusd

TiPpFeHlEr

Zitat von: john30 am 03 Oktober 2016, 10:18:12
sowas lässt sich ganz banal mit grep lösen, z.B. ./allregister.sh|egrep -v "ERR: read timeout|= 00$"
das bedeutet er fragt das register ab, und prüft ob etwas anderes zurück kommt als "ERR: read timeout|= 00$", dies bedeutet aber er muss das register trotzdem abfragen. dies führt wieder zu sehr langen abfrage zeiten.
schöner wäre das er aus einer Liste die Register nimmt die er nur abragen soll.

habe jetze mal 2x die Register zu verschiedenen Zeiten abgefragt, und mögliche Temp's gefunden
zb.


EA0D 02902b 02b91b
EB0D 02432d 02d015


leider habe ich es noch nicht geschaft diese in Temp umzurechnen.

ich hänge mal eine ods an in der mann die Auslesungen sehen und vergleichen kann.
A= Werte die sich geändert haben (x=Änderung)
B= Registernummer (DEZ)
C= Register (HEX)
D= Wert von gestern
E= Wert von heute

mfg maik