hardware:channels:heating_control:gastherme_junkers_can_bus
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
hardware:channels:heating_control:gastherme_junkers_can_bus [2020/04/27 18:48] – angelegt trabant | hardware:channels:heating_control:gastherme_junkers_can_bus [2024/01/09 19:45] (aktuell) – Korrektur Ausgabe Aussentemperatur zw. -1 und 1 trabant | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
===== Junkers Gastherme mit Heatronic 2 und Can-Bus-Regler ===== | ===== Junkers Gastherme mit Heatronic 2 und Can-Bus-Regler ===== | ||
- | Die Modelle mit //Heatronic 2// wurden zwischen Ende der 90er Jahre und 2010 gebaut und haben meist die Typenbezeichnung -5 oder -6, z.B. also //ZWR 18-6//. | + | Die Modelle mit //Heatronic 2// wurden zwischen Ende der 90er Jahre und 2010 gebaut und haben oft die Typenbezeichnung -5 oder -6, z.B. also //ZWR 18-6//, dazu kommen etliche Brennwertgeräte aus dieser Zeit. Im Zweifelsfall lohnt ein Blick in die Installationsanleitung. |
- | Diese Modelle können mit einem Can-Bus-fähigen Regler ausgestattet werden. Dieser Bus ist nicht zu verwechseln mit dem der [[hardware: | + | Diese Modelle können mit einem Can-Bus-fähigen Regler ausgestattet werden. Dieser Bus ist nicht zu verwechseln mit dem der [[hardware: |
Zu Hardware und der Junkers-spezifischen Implementierung des Can-Protokolles siehe: [[https:// | Zu Hardware und der Junkers-spezifischen Implementierung des Can-Protokolles siehe: [[https:// | ||
- | Auf der Volkszähler-Seite wird natürlich ebenso ein Can-Bus-Modul benötigt, zu empfehlen ist das [[http:// | + | Auf der Volkszähler-Seite wird natürlich ebenso ein Can-Bus-Modul benötigt, zu empfehlen ist das [[https://www.skpang.co.uk/ |
- | Verbunden werden die Busmodule von der Heizung (oder auch dem Regler) mit dem Raspberry mittels einer dreiadrigen Leitung, Can-High, Can-Low und Ground. Da der Bus sowohl an der Heizung als auch am Regler bereits terminiert ist, sollte es nur eine kurze Stichleitung von ca. 30cm sein. Irgendwelche elektronischen Probleme mit der Kommunikation | + | Verbunden werden die Busmodule von der Heizung (oder auch dem Regler) mit dem Raspberry mittels einer dreiadrigen Leitung, |
+ | |||
+ | Hier die Belegung auf der Junkers Seite (Klemme BM1 und TA/TR) sowie des PiCan (2/3), jeweils entsprechend der jeweiligen Anleitung des Herstellers und ohne Gewähr: | ||
+ | <code text> | ||
+ | Junkers --- PiCan --- empfohlene Adernfarbe | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Keinesfalls dürfen die Anschlüsse für 24V+ (Junkers Klemme 1) sowie 12V+ (PiCan Pin 4) verbunden werden. | ||
+ | |||
+ | <note warning> | ||
Damit der Raspberry mit dem Board kommunizieren kann, muss im /// | Damit der Raspberry mit dem Board kommunizieren kann, muss im /// | ||
Zeile 19: | Zeile 32: | ||
</ | </ | ||
- | Im nächsten Schritt die Clientprogramme, | + | Im nächsten Schritt die Clientprogramme |
< | < | ||
- | apt-get install can-utils | + | apt-get install can-utils |
</ | </ | ||
Zeile 31: | Zeile 44: | ||
</ | </ | ||
- | Die Bitrate ist wichtig (muss zum Gegenüber passen!), der Parameter // | + | <note important> |
< | < | ||
ifconfig can0 | ifconfig can0 | ||
Zeile 39: | Zeile 52: | ||
candump can0 | candump can0 | ||
</ | </ | ||
- | sollte nun die eingehenden Datenpakete | + | sollte nun die eingehenden Datenpakete |
- | {{: | + | {{: |
- | ausgewertet und via Skript an die VZ Middleware übergeben werden können. Beispielhaft dazu folgende | + | ausgewertet und via Skript an die VZ [[software: |
- | <code shell can-vz.sh> | + | Im Header werden dazu alle Werte mit Can-ID ('' |
+ | |||
+ | <note tip> | ||
+ | |||
+ | Die Variable '' | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | Das Skript sollte die Werte des BM1 und des TA/TR, soweit sie in der Tabelle auch enthalten sind, dann korrekt umrechnen. Die im Skript bereits eingetragenen Werte sind Beispiele aus dem Anwendungsfall des Autors. | ||
+ | |||
+ | <code shell canlogger.sh> | ||
#!/bin/bash | #!/bin/bash | ||
+ | # canlogger.sh V3.1 | ||
+ | # calling the script with " | ||
+ | |||
export PATH=/ | export PATH=/ | ||
- | echo "Can_Logger | + | |
+ | case " | ||
+ | test) | ||
+ | | ||
+ | ;; | ||
+ | |||
+ | prod) | ||
+ | echo "CAN Logger V3.1 starting on `date` in production mode" | ||
+ | ;; | ||
+ | |||
+ | *) | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | exit 3 | ||
+ | ;; | ||
+ | esac | ||
CANDUMPER=" | CANDUMPER=" | ||
+ | |||
+ | MAIL_SENDER=" | ||
+ | MAIL_RECIPIENT=" | ||
CANDUMP_IN[1]=" | CANDUMP_IN[1]=" | ||
HUMAN_INFO[1]=" | HUMAN_INFO[1]=" | ||
- | VZ_UUIDFOR[1]=" | + | VZ_UUIDFOR[1]=" |
CANDUMP_IN[2]=" | CANDUMP_IN[2]=" | ||
HUMAN_INFO[2]=" | HUMAN_INFO[2]=" | ||
- | VZ_UUIDFOR[2]=" | + | VZ_UUIDFOR[2]=" |
CANDUMP_IN[3]=" | CANDUMP_IN[3]=" | ||
HUMAN_INFO[3]=" | HUMAN_INFO[3]=" | ||
- | VZ_UUIDFOR[3]=" | + | VZ_UUIDFOR[3]=" |
CANDUMP_IN[4]=" | CANDUMP_IN[4]=" | ||
HUMAN_INFO[4]=" | HUMAN_INFO[4]=" | ||
- | VZ_UUIDFOR[4]=" | + | VZ_UUIDFOR[4]=" |
CANDUMP_IN[5]=" | CANDUMP_IN[5]=" | ||
HUMAN_INFO[5]=" | HUMAN_INFO[5]=" | ||
- | VZ_UUIDFOR[5]=" | + | VZ_UUIDFOR[5]=" |
CANDUMP_IN[6]=" | CANDUMP_IN[6]=" | ||
HUMAN_INFO[6]=" | HUMAN_INFO[6]=" | ||
- | VZ_UUIDFOR[6]=" | + | VZ_UUIDFOR[6]=" |
+ | CANDUMP_IN[7]=" | ||
+ | HUMAN_INFO[7]=" | ||
+ | VZ_UUIDFOR[7]=" | ||
+ | CANDUMP_IN[8]=" | ||
+ | HUMAN_INFO[8]=" | ||
+ | VZ_UUIDFOR[8]=" | ||
+ | CANDUMP_IN[9]=" | ||
+ | HUMAN_INFO[9]=" | ||
- | VZ_UUIDFORBS=" | + | VZ_UUIDFORBS=" |
- | typeset -i MAXP=6 | + | typeset -i MAXP=9 |
typeset -i P=1 | typeset -i P=1 | ||
typeset -i BR=0 | typeset -i BR=0 | ||
+ | typeset FC=" | ||
- | ########### | + | while read LINE |
- | + | do | |
- | while read LINE # Read line by line from " | + | while [[ ${P} -le ${MAXP} ]] |
do | do | ||
- | | + | if [[ "$( echo -e " |
- | do | + | then |
- | | + | |
- | then | + | |
- | # if the candump line includes one of the wanted values, get the value from message | + | if [[ ( " |
- | VAL="$( echo -e " | + | then |
- | if [[ ( " | + | case "$1" in |
- | then | + | |
- | | + | echo -e "$( date " |
- | | + | ;; |
- | | + | |
- | VALUE=${VAL} | + | if [[ ( "${HEXCODE}" |
- | if [[ ( "${VAL}" == 1 ) && ( "${BR}" | + | |
then | then | ||
- | | + | |
- | | + | |
- | then | + | fi |
- | | + | ;; |
- | | + | esac |
- | R_BS="$( wget -O - -q " | + | break |
+ | elif [[ ' | ||
+ | then | ||
+ | VALUE=${DECVAL} | ||
+ | elif [[ ( " | ||
+ | then | ||
+ | VALUE=${DECVAL} | ||
+ | if [[ ( "${DECVAL}" | ||
+ | then | ||
+ | | ||
+ | case " | ||
+ | test) | ||
+ | | ||
+ | | ||
+ | | ||
+ | RESPONSE="$( wget -4 -O - -q --post-data "" | ||
+ | if [[ ! ${RESPONSE} == *rows*1* ]] | ||
+ | then | ||
+ | echo "Error posting to Middleware: ${RESPONSE}" | ||
fi | fi | ||
- | | + | ;; |
- | then | + | esac |
- | BR=0 | + | |
- | fi | + | |
- | else | + | |
- | VALUE=" | + | |
- | fi | + | |
- | if [[ " | + | |
then | then | ||
- | echo -e "$( date "+%H: | + | BR=0 |
- | elif [[ $(echo "$VALUE > 80" | + | fi |
- | then | + | elif [[ ( "${CANDUMP_IN[${P}]}" == 251 ) ]] |
- | echo -e "$( date " | + | then |
- | | + | |
- | # Send the value to volkszaehler | + | elif [[ ( "${CANDUMP_IN[${P}]}" |
- | RESPONSE=" | + | then |
- | fi | + | [[ ${HEXCODE} =~ ^F...$ |
+ | VALUE=" | ||
+ | else | ||
+ | VALUE=" | ||
fi | fi | ||
- | P=${P}+1 | + | |
- | | + | test) |
- | P=1 | + | echo -e "$( date " |
- | done < <( ${CANDUMPER} ) | + | ;; |
+ | prod) | ||
+ | RESPONSE=" | ||
+ | if [[ ! ${RESPONSE} == *rows*1* ]] | ||
+ | then | ||
+ | echo "Error posting to Middleware: ${RESPONSE}" | ||
+ | fi | ||
+ | ;; | ||
+ | esac | ||
+ | | ||
+ | P=${P}+1 | ||
+ | | ||
+ | P=1 | ||
+ | done < <( ${CANDUMPER} ) | ||
</ | </ | ||
- | Starten kann man das Ganze dann automatisch mittels systemd-service: | + | Wenn man das Skript |
<code text canlogger.service> | <code text canlogger.service> | ||
[Unit] | [Unit] | ||
Zeile 132: | Zeile 215: | ||
[Service] | [Service] | ||
ExecStartPre=/ | ExecStartPre=/ | ||
- | ExecStart=/ | + | ExecStart=/ |
ExecStopPost=/ | ExecStopPost=/ | ||
ExecReload= | ExecReload= | ||
Zeile 141: | Zeile 224: | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
</ | </ | ||
+ | <note tip> | ||
+ | </ | ||
+ | Dann sollte sich der Dienst per '' | ||
- | Last not least ein Bild des Frontends, was den Erfolg und auch die verwendeten Kanaltypen zeigt: | + | Last not least ein Bild des [[software: |
{{ : | {{ : | ||
+ | |||
+ | <note important> | ||
+ | |||
+ | // | ||
+ | - Skript bereinigt und aktualisiert, | ||
+ | |||
+ | // | ||
+ | - Skript kann jetzt ohne Anpassung alle Werte des BM1 (Hex Werte beginnend mit 20) und des TA/TR (Hex Werte beginnend mit 25) korrekt umrechnen, soweit diese in der Tabelle enthalten sind. |
hardware/channels/heating_control/gastherme_junkers_can_bus.1588006096.txt.gz · Zuletzt geändert: 2020/04/27 18:48 von trabant