#!/bin/sh # Heizungsregler fuer 1 Mischer und 1 Heizungspumpe # Konfiguration einlesen . /etc/heizung.conf fkt_owread () { owread -s 127.0.0.1:3002 "$1" } fkt_owwrite () { owwrite -s 127.0.0.1:3002 "$1" "$2" } fkt_vl_rl_kvl_temp () { vl_ist_temp=$( fkt_owread $ow_adr_vl_ist_temp ) rl_ist_temp=$( fkt_owread $ow_adr_rl_ist_temp ) kvl_ist_temp=$( fkt_owread $ow_adr_kvl_ist_temp ) } while (true) do # Prüfung Dienst owserver ob USB Modul vorhanden if [ `owdir -s 127.0.0.1:3002 | grep 81` ] then sleep 5 else break fi #Aussentemperatur lesen a_temp=$( fkt_owread $ow_adr_a_temp ) a_temp_org=$a_temp # Integerzahl da nur so mit gt zu vergleichen a_temp=`echo $a_temp | awk '{print int($1)}'` # ist die Aussentemperatur groesser als die max Aussentemperatur dann Pumpe aus und Mischer zu if [ $a_temp -gt $a_temp_max ] then # echo "zu warm" echo "aus" > /tmp/status_heizung 2>/dev/null status_pumpe=$( fkt_owread $ow_adr_io_pumpe ) # wenn Pumpe noch an dann ausschalten if [ $status_pumpe != 0 ] then fkt_owwrite "$ow_adr_io_pumpe" "0" fi #Mischer zufahren #Umschalten auf Mischer zu fkt_owwrite "$ow_adr_io_mischer_auf_zu" "1" sleep 3 #Laufzeit Mischer bis Mischer zu fkt_owwrite "$ow_adr_io_mischer" "1" echo "zu" > /tmp/status_mischer 2>/dev/null sleep 100 fkt_owwrite "$ow_adr_io_mischer" "0" echo "aus" > /tmp/status_mischer 2>/dev/null sleep 500 continue fi #Umschaltung Tag/Nachtbetrieb / Nachtabsenkung bei Frost sonst Heizung aus im Nachtbetrieb # aktuelle Zeit holen akt_zeit_h_m=`date '+%H%M'` #Pruefung akt Zeit innerhalb einer Betriebszeit bz1=$( echo $akt_zeit_h_m $betriebszeiten | awk '{ n = split( $0 , arr ); for(i=2; i<=n; i++){o = split( arr[i],arri,"," ); if(arri[1] < arr[1] && arr[1] < arri[2]){print "1"} } }' ) #liefert "1" wenn innerhalb einer Betriebszeit if [ $bz1 ] then : else bz1="0" fi # Pruefung Tag/Nachtbetrieb if [ $bz1 = "1" ] then # Tagbetrieb echo "tag" > /tmp/status_heizung 2>/dev/null # Pumpe prüfen ob läuft sonst anschalten status_pumpe=$( fkt_owread $ow_adr_io_pumpe ) # wenn Pumpe aus dann einschalten if [ $status_pumpe -eq 0 ] then fkt_owwrite "$ow_adr_io_pumpe" "1" fi #Status Pumpe neu lesen status_pumpe=$( fkt_owread $ow_adr_io_pumpe ) fkt_vl_rl_kvl_temp vl_soll_temp=$( echo $a_temp | awk '{print 14.5*log(22-$1)}' ) #echo "VL Solltemperatur $vl_soll_temp" diff_temp=$( echo "$a_temp $vl_ist_temp" | awk '{print (14.5*log(22-$1))-$2}' ) stellzeit=$( echo "$a_temp $vl_ist_temp $rl_ist_temp $kvl_ist_temp" | awk '{print int(96*((14.5*log(22-$1))-$2)/($4-$3))}' ) #echo "Stellzeit: $stellzeit sec" echo $a_temp_org $vl_ist_temp $rl_ist_temp $kvl_ist_temp $vl_soll_temp $diff_temp $status_pumpe> /tmp/temp_heizung 2>/dev/null vl_ist_temp=`echo $vl_ist_temp | awk '{print int($1)}'` if [ $vl_ist_temp -lt 20 ] then stellzeit=10 fi if [ $stellzeit -gt 5 ] then # Umschalten auf Mischer auffahren fkt_owwrite "$ow_adr_io_mischer_auf_zu" "0" # Mischerlaufzeit start fkt_owwrite "$ow_adr_io_mischer" "1" # max Stellzeit 30s if [ $stellzeit -gt 30 ] then stellzeit=30 fi echo "auf" > /tmp/status_mischer 2>/dev/null sleep $stellzeit fkt_owwrite "$ow_adr_io_mischer" "0" echo "aus" > /tmp/status_mischer 2>/dev/null sleep 15 fi if [ $stellzeit -lt -5 ] then # Umschalten auf Mischer zufahren fkt_owwrite "$ow_adr_io_mischer_auf_zu" "1" # Mischerlaufzeit start fkt_owwrite "$ow_adr_io_mischer" "1" stellzeit=$( echo $stellzeit | awk '{print -1*$1}' ) # echo "kleiner 5 $stellzeit" # max Stellzeit 30s if [ $stellzeit -gt 30 ] then stellzeit=30 fi echo "zu" > /tmp/status_mischer 2>/dev/null sleep $stellzeit fkt_owwrite "$ow_adr_io_mischer" "0" echo "aus" > /tmp/status_mischer 2>/dev/null sleep 15 fi if [ 5 -gt $stellzeit -a $stellzeit -gt -5 ] then echo "aus" > /tmp/status_mischer 2>/dev/null sleep 15 fi # Ende Tagbetrieb else # Nachtbetrieb # Prüfung ob Aussentemperatur über Frostgrenze Entscheidung ob Eco-Betrieb oder Nachtabsenkung if [ $a_temp -gt $a_temp_frost ] then echo "eco" > /tmp/status_heizung 2>/dev/null #keine Nachtabsenkung sonder Heizung aus status_pumpe=$( fkt_owread $ow_adr_io_pumpe ) # wenn Pumpe noch an dann ausschalten if [ $status_pumpe -ne 0 ] then fkt_owwrite "$ow_adr_io_pumpe" "0" fi #Status Pumpe neu lesen status_pumpe=$( fkt_owread $ow_adr_io_pumpe ) #Mischer zufahren #Umschalten auf Mischer zu fkt_owwrite "$ow_adr_io_mischer_auf_zu" "1" sleep 3 #Laufzeit Mischer bis Mischer zu fkt_owwrite "$ow_adr_io_mischer" "1" echo "zu" > /tmp/status_mischer 2>/dev/null sleep 100 fkt_owwrite "$ow_adr_io_mischer" "0" echo "aus" > /tmp/status_mischer 2>/dev/null sleep 180 fkt_vl_rl_kvl_temp echo $a_temp_org $vl_ist_temp $rl_ist_temp $kvl_ist_temp "-" "-" $status_pumpe > /tmp/temp_heizung 2>/dev/null continue else echo "nacht" > /tmp/status_heizung 2>/dev/null # Nachtabsenkung # Pumpe prüfen ob läuft sonst anschalten status_pumpe=$( fkt_owread $ow_adr_io_pumpe ) # wenn Pumpe aus dann einschalten if [ $status_pumpe -eq 0 ] then fkt_owwrite "$ow_adr_io_pumpe" "1" fi #Status Pumpe neu lesen status_pumpe=$( fkt_owread $ow_adr_io_pumpe ) fkt_vl_rl_kvl_temp vl_soll_temp=$( echo $a_temp $delta_temp_absenk | awk '{print 14.5*log(22-$1)-$2}' ) diff_temp=$( echo "$a_temp $vl_ist_temp $delta_temp_absenk" | awk '{print (14.5*log(22-$1))-$2-$3}' ) stellzeit=$( echo "$a_temp $vl_ist_temp $rl_ist_temp $kvl_ist_temp $delta_temp_absenk" | awk '{print int(96*((14.5*log(22-$1))-$2-$5)/($4-$3))}' ) echo $a_temp_org $vl_ist_temp $rl_ist_temp $kvl_ist_temp $vl_soll_temp $diff_temp $status_pumpe > /tmp/temp_heizung 2>/dev/null if [ $stellzeit -gt 5 ] then # Umschalten auf Mischer auffahren fkt_owwrite "$ow_adr_io_mischer_auf_zu" "0" # Mischerlaufzeit start fkt_owwrite "$ow_adr_io_mischer" "1" # max Stellzeit 30s if [ $stellzeit -gt 30 ] then stellzeit=30 fi echo "auf" > /tmp/status_mischer 2>/dev/null sleep $stellzeit fkt_owwrite "$ow_adr_io_mischer" "0" echo "aus" > /tmp/status_mischer 2>/dev/null sleep 15 fi if [ $stellzeit -lt -5 ] then # Umschalten auf Mischer zufahren fkt_owwrite "$ow_adr_io_mischer_auf_zu" "1" # Mischerlaufzeit start fkt_owwrite "$ow_adr_io_mischer" "1" stellzeit=`echo $stellzeit | awk '{print -1*$1}'` # echo "kleiner 5 $stellzeit" # max Stellzeit 30s if [ $stellzeit -gt 30 ] then stellzeit=30 fi echo "zu" > /tmp/status_mischer 2>/dev/null sleep $stellzeit fkt_owwrite "$ow_adr_io_mischer" "0" echo "aus" > /tmp/status_mischer 2>/dev/null sleep 15 fi if [ 5 -gt $stellzeit -a $stellzeit -gt -5 ] then echo "aus" > /tmp/status_mischer 2>/dev/null sleep 15 fi fi fi done sleep 180 /sbin/reboot & exit 0