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

Nächste ÜberarbeitungBeide Seiten der Revision
hardware:channels:heating_control:gastherme_junkers_can_bus [2020/04/27 18:48] – angelegt trabanthardware:channels:heating_control:gastherme_junkers_can_bus [2020/05/15 20:12] – Updated trabant
Zeile 3: Zeile 3:
 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 meist die Typenbezeichnung -5 oder -6, z.B. also //ZWR 18-6//.
  
-Diese Modelle können mit einem Can-Bus-fähigen Regler ausgestattet werden. Dieser Bus ist nicht zu verwechseln mit dem der [[hardware:channels:heating_control:gastherme_buderus|Heatronic 3]]. Achtung: Das heizungsseitige Can-Bus Modul ist nicht standardmäßig eingebaut, sondern Teil des entsprechenden Raum- oder Außentemperaturreglers, konkret sind das die Regler TR200, TA250 und TA270. Ohne einen dieser Regler funktioniert es nicht.+Diese Modelle können mit einem Can-Bus-fähigen Regler ausgestattet werden. Dieser Bus ist nicht zu verwechseln mit dem der [[hardware:channels:heating_control:gastherme_buderus|Heatronic 3]]. Achtung: Das heizungsseitige Can-Bus Modul //BM1// ist nicht standardmäßig eingebaut, sondern Teil des entsprechenden Raum- oder Außentemperaturreglers, konkret sind das die Regler //TR200////TA250// und //TA270//. Ohne einen dieser Regler funktioniert es nicht.
  
 Zu Hardware und der Junkers-spezifischen Implementierung des Can-Protokolles siehe: [[https://www.mikrocontroller.net/topic/81265]] Zu Hardware und der Junkers-spezifischen Implementierung des Can-Protokolles siehe: [[https://www.mikrocontroller.net/topic/81265]]
Zeile 31: Zeile 31:
 </code> </code>
  
-Die Bitrate ist wichtig (muss zum Gegenüber passen!), der Parameter //listen-only// stellt sicher, dass wirklich nur mitgehört wird nichts den Bus durcheinander bringt. Wenn nun ein+<note important>Die Bitrate ist wichtig (muss zum Gegenüber passen!), der Parameter //listen-only// stellt sicher, dass wirklich nur mitgehört wird nichts den Bus durcheinander bringt.</note> Wenn nun ein
 <code> <code>
 ifconfig can0 ifconfig can0
Zeile 39: Zeile 39:
 candump can0 candump can0
 </code> </code>
-sollte nun die eingehenden Datenpakete zeigen, 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.rtf|Tabelle}}
-ausgewertet und via Skript an die VZ Middleware übergeben werden können. Beispielhaft dazu folgende Zeilen, die nur als Vorlage dienen können:+ausgewertet und via Skript an die VZ [[software:middleware|Middleware]] übergeben werden können. Beispielhaft dazu folgende Zeilen, die nur als Vorlage dienen können:
  
 <code shell can-vz.sh> <code shell can-vz.sh>
 #!/bin/bash #!/bin/bash
 +# calling the script with "test" parameter will display the values on screen instead of sending to VZ
 +
 export PATH=/usr/bin:/bin export PATH=/usr/bin:/bin
 echo "Can_Logger starting on `date`" echo "Can_Logger starting on `date`"
Zeile 52: Zeile 54:
 CANDUMP_IN[1]="200" CANDUMP_IN[1]="200"
 HUMAN_INFO[1]="Vorlauf Max" HUMAN_INFO[1]="Vorlauf Max"
-VZ_UUIDFOR[1]="80089ae0-xxxxxxxxxxxxxxxxxxxxxxxxxxx"+VZ_UUIDFOR[1]="80089ae0-fa81-11e9-bdc6-b99d5fa0fe8b"
 CANDUMP_IN[2]="252" CANDUMP_IN[2]="252"
 HUMAN_INFO[2]="Vorlauf Soll" HUMAN_INFO[2]="Vorlauf Soll"
-VZ_UUIDFOR[2]="af1863e0-xxxxxxxxxxxxxxxxxxxxxxxxxxx"+VZ_UUIDFOR[2]="af1863e0-fa81-11e9-8d30-337b7499db8e"
 CANDUMP_IN[3]="201" CANDUMP_IN[3]="201"
 HUMAN_INFO[3]="Vorlauf Ist" HUMAN_INFO[3]="Vorlauf Ist"
-VZ_UUIDFOR[3]="cbf99f10-xxxxxxxxxxxxxxxxxxxxxxxxxxx"+VZ_UUIDFOR[3]="cbf99f10-fa81-11e9-9709-d55e7ad0883e"
 CANDUMP_IN[4]="203" CANDUMP_IN[4]="203"
 HUMAN_INFO[4]="Warmwasser Ist" HUMAN_INFO[4]="Warmwasser Ist"
-VZ_UUIDFOR[4]="521a0ca0-xxxxxxxxxxxxxxxxxxxxxxxxxxx"+VZ_UUIDFOR[4]="521a0ca0-fa8d-11e9-970f-752aababd342"
 CANDUMP_IN[5]="20A" CANDUMP_IN[5]="20A"
 HUMAN_INFO[5]="Heizung Ein" HUMAN_INFO[5]="Heizung Ein"
-VZ_UUIDFOR[5]="a5958bf0-xxxxxxxxxxxxxxxxxxxxxxxxxxx"+VZ_UUIDFOR[5]="a5958bf0-fa8f-11e9-bf34-4f7c2163b201"
 CANDUMP_IN[6]="209" CANDUMP_IN[6]="209"
 HUMAN_INFO[6]="Brenner Ein" HUMAN_INFO[6]="Brenner Ein"
-VZ_UUIDFOR[6]="5ec31d30-xxxxxxxxxxxxxxxxxxxxxxxxxxx"+VZ_UUIDFOR[6]="5ec31d30-fa90-11e9-98b7-3b9f4a33ba29"
  
-VZ_UUIDFORBS="d403e120-xxxxxxxxxxxxxxxxxxxxxxxxxxx"+VZ_UUIDFORBS="d403e120-115a-11ea-b273-05a1540bacf1"
  
 typeset -i MAXP=6 typeset -i MAXP=6
Zeile 75: Zeile 77:
 typeset -i BR=0 typeset -i BR=0
  
-###########  M A I N  ############+############   M A I N   ############
  
-  while read LINE # Read line by line from "candump"+while read LINE 
 +do 
 +  while [[ ${P} -le ${MAXP} ]]
   do   do
-    while [[ ${P-le ${MAXP} ]] # check if the current line is on of the wanted measurement values +    if [[ "$( echo -e "${LINE}" | grep "${CANDUMP_IN[${P}]}" | wc -l )" -gt 0 ]] 
-    do +    then 
-        if [[ "$( echo -e "${LINE}"grep "${CANDUMP_IN[${P}]}" | wc -l )" -gt 0 ]]+      VAL="$( echo -e "ibase=16;obase=A;$( echo -e ${LINE} | cut -c14-15 )" | bc )" 
 +      if [[ ( "${CANDUMP_IN[${P}]}" == 20A ]] 
 +      then 
 +        VALUE=${VAL} 
 +      elif [[ ( "${CANDUMP_IN[${P}]}" == 209 ) ]] 
 +      then 
 +        VALUE=${VAL} 
 +        if [[ ( "${VAL}" == 1 ) && ( "${BR}" == ]]
         then         then
-          # if the candump line includes one of the wanted values, get the value from message +          BR=1 
-          VAL="$( echo -e "ibase=16;obase=A;$( echo -e ${LINE} | cut -c14-15 )" | bc )" +          if [[ "${1}" == "test" ]]
-          if [[ "${CANDUMP_IN[${P}]}" == 20A ) ]]+
           then           then
-            VALUE=${VAL} +            echo -e "$( date "+%H:%M:%S") - Brennerstart"
-          elif [[ ( "${CANDUMP_IN[${P}]}" == 209 ) ]] +
-          then +
-            VALUE=${VAL} +
-            if [[ ( "${VAL}" == 1 ) && ( "${BR}" == 0 ) ]] +
-            then +
-              BR=1 +
-              if [[ "${1}" == "test" ]] +
-              then +
-                 echo -e "$( date "+%H:%M:%S") - Brennerstart" +
-              else +
-                 R_BS="$( wget -O - -q "http://localhost/middleware/data/${VZ_UUIDFORBS}.json?operation=add" )" +
-              fi +
-            elif [[ ( "${VAL}" == 0 ) ]] +
-              then +
-              BR=0 +
-            fi+
           else           else
-            VALUE="$( echo "scale=1 ; ${VAL/ 2| bc )"+            R_BS="$( wget -4 -O - -q --post-data "" "http://localhost/middleware/data/${VZ_UUIDFORBS}.json" )"
           fi           fi
-          if [[ "${1}" == "test" ]]+        elif [[ "${VAL}" == 0 ) ]]
           then           then
-              echo -e "$( date "+%H:%M:%S") - ${HUMAN_INFO[${P}]}:  ${VALUE} (${LINE})" +          BR=0 
-          elif [[ $(echo "$VALUE > 80" | bc) -eq 1 ]] +        fi 
-          then +      else 
-              echo -e "$( date "+%H:%M:%S") - ${HUMAN_INFO[${P}]}:  Value ${VALUE} larger than 80, ignoring" +        VALUE="$( echo "scale=1 ; ${VAL} / 2" | bc )" 
-          else +      fi 
-              # Send the value to volkszaehler +      if [[ "${1}" == "test" ]] 
-              RESPONSE="$( wget -O - -q "http://localhost/middleware/data/${VZ_UUIDFOR[${P}]}.json?operation=add&value=${VALUE}" )" +      then 
-          fi+        echo -e "$( date "+%H:%M:%S") - ${HUMAN_INFO[${P}]}:  ${VALUE} (${LINE})" 
 +      elif [[ $(echo "$VALUE > 80" | bc) -eq 1 ]] 
 +      then 
 +        echo -e "$( date "+%H:%M:%S") - ${HUMAN_INFO[${P}]}:  Value ${VALUE} larger than 80, ignoring" 
 +      else 
 +        RESPONSE="$( wget -4 -O - -q --post-data "value=${VALUE}" "http://localhost/middleware/data/${VZ_UUIDFOR[${P}]}.json" )"
       fi       fi
-      P=${P}+1 +    fi 
-    done +    P=${P}+1 
-    P=1 +  done 
-  done < <( ${CANDUMPER} )+  P=1 
 +done < <( ${CANDUMPER} )
 </code> </code>
  
-Starten kann man das Ganze dann automatisch mittels systemd-service:+Starten kann man das Ganze dann automatisch mittels //systemd-service//, dazu folgende Datei nach  /etc/systemd/system/ kopieren:
 <code text canlogger.service> <code text canlogger.service>
 [Unit] [Unit]
Zeile 141: Zeile 141:
 WantedBy=multi-user.target WantedBy=multi-user.target
 </code> </code>
 +Dann sollte sich der Dienst per ''systemctl enable canlogger.service'' und ''systemctl start canlogger.service'' aktivieren lassen.
  
-Last not least ein Bild des Frontends, was den Erfolg und auch die verwendeten Kanaltypen zeigt:+Last not least ein Bild des [[software:frontends:frontend|Frontends]], was den Erfolg und auch die verwendeten [[software:middleware:einrichtung|Kanaltypen]] zeigt:
  
 {{ :hardware:channels:heating_control:can-vz.png | Frontend}} {{ :hardware:channels:heating_control:can-vz.png | Frontend}}
 +
 +<note important>Etwas sollte man noch beachten: Damit das heizungseitige Bus-Modul alle Informationen sendet, insbesondere //Brenner- und Heizung/Pumpe Ein// (also die Betriebsstundensensoren), muss der Drehschalter des TR/TA-Reglers auf Info stehen!</note>
hardware/channels/heating_control/gastherme_junkers_can_bus.txt · Zuletzt geändert: 2024/01/09 19:45 von trabant