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

hardware:channels:heating_control:gastherme_junkers_can_bus [2020/04/27 18:48]
trabant angelegt
hardware:channels:heating_control:gastherme_junkers_can_bus [2020/05/15 20:12] (aktuell)
trabant Updated
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: 2020/05/15 20:12 von trabant