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
hardware:channels:heating_control:gastherme_junkers_can_bus [2023/11/03 09:35] – Notwendige Prerequisite Programme ergänzt (bc/mailx) trabanthardware:channels:heating_control:gastherme_junkers_can_bus [2024/01/09 19:45] (aktuell) – Korrektur Ausgabe Aussentemperatur zw. -1 und 1 trabant
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.1
 # 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.1 starting on `date` in testing mode"
         ;;         ;;
  
     prod)     prod)
-        echo "CAN Logger V2 starting on `date` in production mode"+        echo "CAN Logger V3.1 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 | sed -e 's/^-\./-0./' -e 's/^\./0./' )"
       else       else
         VALUE="$( echo "scale=1 ; ${DECVAL} / 2" | bc )"         VALUE="$( echo "scale=1 ; ${DECVAL} / 2" | bc )"
Zeile 220: 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.1699000505.txt.gz · Zuletzt geändert: 2023/11/03 09:35 von trabant