#!/bin/bash # canlogger.sh V3.1 # calling the script with "test" parameter will display the values on screen instead of sending to VZ export PATH=/usr/bin:/bin case "$1" in test) echo "CAN Logger V3.1 starting on `date` in testing mode" ;; prod) echo "CAN Logger V3.1 starting on `date` in production mode" ;; *) echo "Usage: canlogger.sh {test|prod}" echo " testing mode will display values on screen" echo " production mode will send the values to the VZ Middleware" exit 3 ;; esac CANDUMPER="candump can0" MAIL_SENDER="mailfrom@address.com" MAIL_RECIPIENT="mailto@address.com" CANDUMP_IN[1]="200" HUMAN_INFO[1]="Vorlauf Max" VZ_UUIDFOR[1]="80089ae0-fa81-11e9-bdc6-b99d5fa0fe8b" CANDUMP_IN[2]="252" HUMAN_INFO[2]="Vorlauf Soll" VZ_UUIDFOR[2]="af1863e0-fa81-11e9-8d30-337b7499db8e" CANDUMP_IN[3]="201" HUMAN_INFO[3]="Vorlauf Ist" VZ_UUIDFOR[3]="cbf99f10-fa81-11e9-9709-d55e7ad0883e" CANDUMP_IN[4]="203" HUMAN_INFO[4]="Warmwasser Ist" VZ_UUIDFOR[4]="521a0ca0-fa8d-11e9-970f-752aababd342" CANDUMP_IN[5]="20A" HUMAN_INFO[5]="Heizung Ein" VZ_UUIDFOR[5]="a5958bf0-fa8f-11e9-bf34-4f7c2163b201" CANDUMP_IN[6]="209" HUMAN_INFO[6]="Brenner Ein" VZ_UUIDFOR[6]="5ec31d30-fa90-11e9-98b7-3b9f4a33ba29" CANDUMP_IN[7]="251" HUMAN_INFO[7]="Leistung Soll" VZ_UUIDFOR[7]="81f3ed90-7f7b-11ed-90c6-b747fd43b61f" CANDUMP_IN[8]="207" 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" typeset -i MAXP=9 typeset -i P=1 typeset -i BR=0 typeset FC="00" while read LINE do while [[ ${P} -le ${MAXP} ]] do if [[ "$( echo -e "${LINE}" | grep "${CANDUMP_IN[${P}]}" | wc -l )" -gt 0 ]] then HEXCODE="$( echo -e ${LINE} | cut -c14-18 | sed 's/ //' )" DECVAL="$( echo -e "ibase=16;obase=A;${HEXCODE}" | bc )" if [[ ( "${CANDUMP_IN[${P}]}" == 206 ) ]] then case "$1" in test) echo -e "$( date "+%H:%M:%S") - ${HUMAN_INFO[${P}]}: ${HEXCODE} (${LINE})" ;; prod) if [[ ( "${HEXCODE}" != "$FC" ) ]] then FC=${HEXCODE} echo "Anlage prüfen: Fehler ${FC}" | mailx -r "${MAIL_SENDER} (Junkers Therme)" -s "Therme Fehler" ${MAIL_RECIPIENT} fi ;; esac break elif [[ '[20A,20B,20C,250,253,254]' =~ "${CANDUMP_IN[${P}]}" ]] then VALUE=${DECVAL} elif [[ ( "${CANDUMP_IN[${P}]}" == 209 ) ]] then VALUE=${DECVAL} if [[ ( "${DECVAL}" -eq 1 ) && ( "${BR}" -eq 0 ) ]] then BR=1 case "$1" in test) echo -e "$( date "+%H:%M:%S") - Brennerstart" ;; prod) RESPONSE="$( wget -4 -O - -q --post-data "" "http://localhost/middleware/data/${VZ_UUIDFORBS}.json" )" if [[ ! ${RESPONSE} == *rows*1* ]] then echo "Error posting to Middleware: ${RESPONSE}" fi ;; esac elif [[ ( "${DECVAL}" -eq 0 ) ]] then BR=0 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 VALUE="$( echo "scale=1 ; ${DECVAL} / 2" | bc )" fi case "$1" in test) echo -e "$( date "+%H:%M:%S") - ${HUMAN_INFO[${P}]}: ${VALUE} (${LINE})" ;; prod) RESPONSE="$( wget -4 -O - -q --post-data "value=${VALUE}" "http://localhost/middleware/data/${VZ_UUIDFOR[${P}]}.json" )" if [[ ! ${RESPONSE} == *rows*1* ]] then echo "Error posting to Middleware: ${RESPONSE}" fi ;; esac fi P=${P}+1 done P=1 done < <( ${CANDUMPER} )