Benutzer-Werkzeuge

Webseiten-Werkzeuge


hardware:channels:heating_control:gastherme_junkers_can_bus

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
hardware:channels:heating_control:gastherme_junkers_can_bus [2023/09/13 13:19] – Adernbelegung dokumentiert trabanthardware:channels:heating_control:gastherme_junkers_can_bus [2023/12/03 16:59] – Skript und Doku aktualisiert, V3, siehe Nachtrag trabant
Zeile 32: Zeile 32:
 </code> </code>
  
-Im nächsten Schritt die Clientprogramme, die auf dem Socket-Can aufsetzten, installieren mittels:+Im nächsten Schritt die Clientprogramme installieren, die auf dem Socket-Can aufsetzten, sowie den GNU Rechner ''bc'' und den BSD Mailer ''mailx'' (falls noch nicht vorhanden):
  
 <code> <code>
-apt-get install can-utils+apt-get install can-utils bc bsd-mailx
 </code> </code>
  
Zeile 53: Zeile 53:
 </code> </code>
 sollte nun die eingehenden Datenpakete ausgeben, die nun anhand dieser sollte nun die eingehenden Datenpakete ausgeben, die nun anhand dieser
-{{:hardware:channels:heating_control:can_tabelle.rtf|Tabelle}} +{{:hardware:channels:heating_control:can_tabelle.xlsx|Tabelle}} 
-ausgewertet und via Skript an die VZ [[software:middleware|Middleware]] übergeben werden können. Beispielhaft dazu folgende Zeilendie nur als Vorlage dienen können und an die konkrete Umgebung angepasst werden müssen:+ausgewertet und via Skript an die VZ [[software:middleware|Middleware]] übergeben werden können. Beispielhaft dazu das folgende Skript //canlogger.sh//das nur als Vorlage dienen kann und an die konkrete Umgebung angepasst werden muss. 
 + 
 +Im Header werden dazu alle Werte mit Can-ID (''CANDUMP_IN''), Beschreibung (''HUMAN_INFO''), sowie die //UUID// des Volkszählers, unter der die gelesenen Werte gespeichert werden sollen (''VZ_UUIDFOR''), mit Ordnungszahl definiert. 
 + 
 +<note tip>Zusätzlich gibt es die Möglichkeit, mit der Variable ''VZ_UUIDFORBS'' und einem Middleware-Kanal vom Typ //Allgemeiner Impulszähler// die Anzahl der Brennerstarts zu zählen. Gerade bei der Optimierung von Heizungsanlagen kann dies hilfreich sein.</note> 
 + 
 +Die Variable ''MAXP'' muss der höchsten verwendeten Zahl entsprechen, also der Anzahl der verwendeten Kanäle plus, falls gewünscht, dem Eintrag für die Versendung einer Heatronic-Fehlermeldung per Email. 
 + 
 +<note important>Die Verwendung der E-Mail Funktion setzt neben dem bei den Installationsvoraussetzungen bereits genannten BSD client //mailx// auch ein funktionierendes Mailsystem mit oder ohne Internet-Anbindung voraus (z.B. //sendmail//, //postfix//, oder //exim//).</note> 
 + 
 +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> <code shell canlogger.sh>
 #!/bin/bash #!/bin/bash
-# canlogger.sh V2+# canlogger.sh V3
 # calling the script with "test" parameter will display the values on screen instead of sending to VZ # calling the script with "test" parameter will display the values on screen instead of sending to VZ
  
Zeile 65: Zeile 75:
 case "$1" in case "$1" in
     test)     test)
-        echo "CAN Logger V2 starting on `date` in testing mode"+        echo "CAN Logger V3 starting on `date` in testing mode"
         ;;         ;;
  
     prod)     prod)
-        echo "CAN Logger V2 starting on `date` in production mode"+        echo "CAN Logger V3 starting on `date` in production mode"
         ;;         ;;
  
Zeile 106: Zeile 116:
 HUMAN_INFO[7]="Leistung Soll" HUMAN_INFO[7]="Leistung Soll"
 VZ_UUIDFOR[7]="81f3ed90-7f7b-11ed-90c6-b747fd43b61f" VZ_UUIDFOR[7]="81f3ed90-7f7b-11ed-90c6-b747fd43b61f"
-CANDUMP_IN[8]="206+CANDUMP_IN[8]="207
-HUMAN_INFO[8]="Fehlercode"+HUMAN_INFO[8]="Aussentemperatur" 
 +VZ_UUIDFOR[8]="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" 
 +CANDUMP_IN[9]="206" 
 +HUMAN_INFO[9]="Fehlercode"
  
 VZ_UUIDFORBS="d403e120-115a-11ea-b273-05a1540bacf1" VZ_UUIDFORBS="d403e120-115a-11ea-b273-05a1540bacf1"
  
-typeset -i MAXP=8+typeset -i MAXP=9
 typeset -i P=1 typeset -i P=1
 typeset -i BR=0 typeset -i BR=0
Zeile 122: Zeile 135:
     if [[ "$( echo -e "${LINE}" | grep "${CANDUMP_IN[${P}]}" | wc -l )" -gt 0 ]]     if [[ "$( echo -e "${LINE}" | grep "${CANDUMP_IN[${P}]}" | wc -l )" -gt 0 ]]
     then     then
-      HEXCODE="$( echo -e ${LINE} | cut -c14-15 )"+      HEXCODE="$( echo -e ${LINE} | cut -c14-18 | sed 's/ //' )"
       DECVAL="$( echo -e "ibase=16;obase=A;${HEXCODE}" | bc )"       DECVAL="$( echo -e "ibase=16;obase=A;${HEXCODE}" | bc )"
       if [[ ( "${CANDUMP_IN[${P}]}" == 206 ) ]]       if [[ ( "${CANDUMP_IN[${P}]}" == 206 ) ]]
Zeile 134: Zeile 147:
             then             then
               FC=${HEXCODE}               FC=${HEXCODE}
-              echo "Hilfe! Fehlercode ${FC}" | mailx -r "${MAIL_SENDER} (Junkers Therme)" -s "Therme Fehler" ${MAIL_RECIPIENT}+              echo "Anlage prüfen: Fehler ${FC}" | mailx -r "${MAIL_SENDER} (Junkers Therme)" -s "Therme Fehler" ${MAIL_RECIPIENT}
             fi             fi
             ;;             ;;
         esac         esac
         break         break
-      elif [[ ( "${CANDUMP_IN[${P}]}" == 251 ) ]] +      elif [[ '[20A,20B,20C,250,253,254]="${CANDUMP_IN[${P}]}" ]]
-      then +
-        VALUE="$( echo "scale=2 ; ${DECVAL} / 255 * 100" | bc )" +
-      elif [[ ( "${CANDUMP_IN[${P}]}" == 20A ) ]]+
       then       then
         VALUE=${DECVAL}         VALUE=${DECVAL}
Zeile 156: Zeile 166:
               ;;               ;;
             prod)             prod)
-              R_BS="$( wget -4 -O - -q --post-data "" "http://localhost/middleware/data/${VZ_UUIDFORBS}.json" )" +              RESPONSE="$( wget -4 -O - -q --post-data "" "http://localhost/middleware/data/${VZ_UUIDFORBS}.json" )" 
-              if [[ ! ${R_BS} == *rows*1* ]]+              if [[ ! ${RESPONSE} == *rows*1* ]]
               then                then 
-                echo "Error posting to Middleware: ${R_BS}"+                echo "Error posting to Middleware: ${RESPONSE}"
               fi               fi
               ;;               ;;
Zeile 167: Zeile 177:
           BR=0           BR=0
         fi         fi
 +      elif [[ ( "${CANDUMP_IN[${P}]}" == 251 ) ]]
 +      then
 +        VALUE="$( echo "scale=2 ; ${DECVAL} / 255 * 100" | bc )"
 +      elif [[ ( "${CANDUMP_IN[${P}]}" == 207 ) ]]
 +      then
 +        [[ ${HEXCODE} =~ ^F...$ ]] && DECVAL="$( echo -e "ibase=16;obase=A; ${HEXCODE} - FFFF" | bc )"
 +        VALUE="$( echo "scale=2 ; ${DECVAL} / 100" | bc )"
       else       else
         VALUE="$( echo "scale=1 ; ${DECVAL} / 2" | bc )"         VALUE="$( echo "scale=1 ; ${DECVAL} / 2" | bc )"
Zeile 190: Zeile 207:
 </code> </code>
  
-Starten kann man das Ganze dann automatisch mittels //systemd-service//, dazu folgende Datei nach  /etc/systemd/system/ kopieren:+Wenn man das Skript dann auf dem VZ-System abgelegt hat, z.B. unter ''/home/pi/bin/'', kann man es dann auch automatisch mittels //systemd-service// starten, dazu folgende Datei nach ''/etc/systemd/system/'' kopieren:
 <code text canlogger.service> <code text canlogger.service>
 [Unit] [Unit]
Zeile 207: Zeile 224:
 WantedBy=multi-user.target WantedBy=multi-user.target
 </code> </code>
 +<note tip>Bitte beachten dass der Pfad im ExecStart Statement auch dem tatsächlichen Pfad des Programmes entspricht.
 +</note>
 Dann sollte sich der Dienst per ''systemctl enable canlogger.service'' und ''systemctl start canlogger.service'' aktivieren lassen. Dann sollte sich der Dienst per ''systemctl enable canlogger.service'' und ''systemctl start canlogger.service'' aktivieren lassen.
  
Zeile 218: Zeile 237:
 - Skript bereinigt und aktualisiert, es versendet jetzt auch eine E-Mail im Falle eines Fehlercodes der Junkers-Heatronic. Dies setzt ein funktionierendes Mailsystem sowie gültige eingetragene Mail-Adressen im Skript voraus. - Skript bereinigt und aktualisiert, es versendet jetzt auch eine E-Mail im Falle eines Fehlercodes der Junkers-Heatronic. Dies setzt ein funktionierendes Mailsystem sowie gültige eingetragene Mail-Adressen im Skript voraus.
  
 +//**Nachtrag 03.12.2023**// 
 +- 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.txt · Zuletzt geändert: 2024/01/09 19:45 von trabant