April 2025 |
||||||
Mo |
Di |
Mi |
Do |
Fr |
Sa |
So |
1 |
2 |
3 |
4 |
5 |
6 |
|
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
||||
define OG.SZ.TempDes dummy
attr OG.SZ.TempDes group 4: Heizung
attr OG.SZ.TempDes room OG.Schlafzimmer
attr OG.SZ.TempDes setList state:20,21,22,23,24
attr OG.SZ.TempDes webCmd state
define OG.SZ.TH THRESHOLD OG.SZ.Temp:temperature:0.2:OG.SZ.TempDes:state HM_35F8F0_Sw_03
attr OG.SZ.TH group 4: Heizung
attr OG.SZ.TH number_format %.1f
attr OG.SZ.TH room OG.Schlafzimmer
attr OG.SZ.TH setOnDeactivated cmd1_gt
attr OG.SZ.TH state_cmd1_gt off
attr OG.SZ.TH state_cmd2_lt on
attr OG.SZ.TH state_format _m _dv _sc
define Mischer.OG.zu RPI_GPIO 18
attr Mischer.OG.zu direction output
attr Mischer.OG.zu eventMap on:1 off:0
attr Mischer.OG.zu group GPIO
attr Mischer.OG.zu poll_interval 1
attr Mischer.OG.zu room Heizung,System
define Mischer.OG.auf RPI_GPIO 17
attr Mischer.OG.auf direction output
attr Mischer.OG.auf eventMap on:1 off:0
attr Mischer.OG.auf group GPIO
attr Mischer.OG.auf poll_interval 1
attr Mischer.OG.auf room Heizung,System
define Heizung.OG.Pumpe RPI_GPIO 2
attr Heizung.OG.Pumpe alias Heizung.OG.Pumpe
attr Heizung.OG.Pumpe comment Pin3
attr Heizung.OG.Pumpe direction output
attr Heizung.OG.Pumpe group GPIO
attr Heizung.OG.Pumpe poll_interval 1
attr Heizung.OG.Pumpe room Heizung,System
define Heizung.OG.Mischer STELLMOTOR FhemDev
attr Heizung.OG.Mischer STMcalibrateDirection L
attr Heizung.OG.Mischer STMdebugToLog3 0
attr Heizung.OG.Mischer STMfhemDevRL Mischer.OG.auf
attr Heizung.OG.Mischer STMfhemDevSTART Mischer.OG.zu
attr Heizung.OG.Mischer STMinvertOut 0
attr Heizung.OG.Mischer STMlastDiffMax 1
attr Heizung.OG.Mischer STMmapOffCmd 0
attr Heizung.OG.Mischer STMmapOnCmd 0
attr Heizung.OG.Mischer STMmaxDriveSeconds 118
attr Heizung.OG.Mischer STMmaxTics 100
attr Heizung.OG.Mischer STMpollInterval 0.1
attr Heizung.OG.Mischer STMresetOtherDeviceAtCalibrate 0
attr Heizung.OG.Mischer STMrlType einzel
attr Heizung.OG.Mischer STMtimeTolerance 0.01
attr Heizung.OG.Mischer group Steuerung
attr Heizung.OG.Mischer room Heizung
define Heizung.OG.MischerCommands DOIF ([Heizung.OG.VorlaufIst:temperature.avg] < 10)\
(set Heizung.OG.Mischer 1)\
DOELSEIF ([Heizung.OG.VorlaufIst:temperature.avg] > 49)\
(set Heizung.OG.Mischer 1)\
DOELSEIF ([Heizung.OG.VorlaufIst:temperature.avg] < ([Heizung.OG.VorlaufSollClone]-10) and [Heizung.OG.Mischer:position]<97 and [Heizung.OG.Pumpe] eq "on")\
(set Heizung.OG.Mischer {([Heizung.OG.Mischer:position]+3)}) ## Cmd 3: Schnell oeffnen\
DOELSEIF ([Heizung.OG.VorlaufIst:temperature.avg] < ([Heizung.OG.VorlaufSollClone]-6) and [Heizung.OG.Mischer:position]<98 and [Heizung.OG.Pumpe] eq "on")\
(set Heizung.OG.Mischer {([Heizung.OG.Mischer:position]+2)}) ## Cmd 4: Ganz langsam oeffnen\
DOELSEIF ([Heizung.OG.VorlaufIst:temperature.avg] < ([Heizung.OG.VorlaufSollClone]-2) and [Heizung.OG.Mischer:position]<98 and [Heizung.OG.Pumpe] eq "on")\
(set Heizung.OG.Mischer {([Heizung.OG.Mischer:position]+1)}) ## Cmd 5: Noch ein bisschen\
DOELSEIF ([Heizung.OG.VorlaufIst:temperature.avg] > ([Heizung.OG.VorlaufSollClone]+5) and [Heizung.OG.Mischer:position]>3)\
(set Heizung.OG.Mischer {([Heizung.OG.Mischer:position]-2)}) ## Cmd 6: Viel zu heiss, schnell zu\
DOELSEIF ([Heizung.OG.VorlaufIst:temperature.avg] > ([Heizung.OG.VorlaufSollClone]+3) and [Heizung.OG.Mischer:position]>2)\
(set Heizung.OG.Mischer {([Heizung.OG.Mischer:position]-1)}) ## Cmd 7: Zu heiss, schnell zu\
DOELSEIF ([Heizung.OG.VorlaufIst:temperature.avg] > ([Heizung.OG.VorlaufSollClone]+1) and [Heizung.OG.Mischer:position]>2)\
(set Heizung.OG.Mischer {([Heizung.OG.Mischer:position]-1)}) ## Cmd 8: Noch ein bisschen\
DOELSEIF ([03:50])\
(set Heizung.OG.Mischer calibrate) ## Cmd 9: Calibrieren fuer Tagprogramm\
DOELSE()
attr Heizung.OG.MischerCommands cmdpause 0:0:30:60:90:60:120:180:0:0
attr Heizung.OG.MischerCommands do always
attr Heizung.OG.MischerCommands group Steuerung
attr Heizung.OG.MischerCommands room Heizung
attr Heizung.OG.MischerCommands wait 0,0,90,120,150,180,240,480,0,0
define FHEM FHEM2FHEM 192.168.1.39:7072 LOG:Heizung.*
attr FHEM room System
define Heizung.OG.VorlaufSollClone cloneDummy Heizung.OG.VorlaufSoll
attr Heizung.OG.VorlaufSollClone group Temperaturen
attr Heizung.OG.VorlaufSollClone room Heizung
attr Heizung.OG.VorlaufSollClone stateFormat {sprintf(ReadingsVal("Heizung.OG.VorlaufSollClone","temperature",30))}
define Heizung.OG.PumpenanforderungClone cloneDummy Heizung.OG.Pumpenanforderung
attr Heizung.OG.PumpenanforderungClone group Steuerung
attr Heizung.OG.PumpenanforderungClone room Heizung
attr Heizung.OG.PumpenanforderungClone stateFormat {sprintf(ReadingsVal("Heizung.OG.PumpenanforderungClone","status","off"))}
define Sensorencheck DOIF ([Heizung.OG.VorlaufIst:temperature] == 0) (set Pushover msg 'FHEM' 'Heizungssensoren ausgefallen - Neustart notwendig!')
attr Sensorencheck group Benachrichtigungen
attr Sensorencheck room System
define Heizung.OG.VorlaufIst GPIO4 28-80000026e279
attr Heizung.OG.VorlaufIst group Temperaturen
attr Heizung.OG.VorlaufIst model DS18B20
attr Heizung.OG.VorlaufIst room Heizung
attr Heizung.OG.VorlaufIst stateFormat {sprintf (ReadingsVal("Heizung.OG.VorlaufIst","temperature",0))}
attr Heizung.OG.VorlaufIst userReadings temperature.avg {movingAverage("Heizung.OG.VorlaufIst","temperature",300)}
sub movingAverage($$$){
my ($name,$reading,$avtime) = @_;
my $hash = $defs{$name};
my @new = my ($val,$time) = ($hash->{READINGS}{$reading}{VAL},$hash->{READINGS}{$reading}{TIME});
my ($cyear, $cmonth, $cday, $chour, $cmin, $csec) = $time =~ /(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+)/;
my $ctime = $csec+60*$cmin+3600*$chour;
my $num;
my $arr;
#-- initialize if requested
if( ($avtime eq "-1") ){
$hash->{READINGS}{$reading}{"history"}=undef;
}
#-- test for existence
if( !$hash->{READINGS}{$reading}{"history"}){
#Log 1,"ARRAY CREATED";
push(@{$hash->{READINGS}{$reading}{"history"}},\@new);
$num = 1;
$arr=\@{$hash->{READINGS}{$reading}{"history"}};
} else {
$num = int(@{$hash->{READINGS}{$reading}{"history"}});
$arr=\@{$hash->{READINGS}{$reading}{"history"}};
my $starttime = $arr->[0][1];
my ($syear, $smonth, $sday, $shour, $smin, $ssec) = $starttime =~ /(\d+)-(\d+)-(\d+)\s(\d+):(\d+):(\d+)/;
my $stime = $ssec+60*$smin+3600*$shour;
#-- correct for daybreak
$stime-=86400
if( $stime > $ctime);
if( ($num < 25)&&( ($ctime-$stime)<$avtime) ){
#Log 1,"ARRAY has $num elements, adding another one";
push(@{$hash->{READINGS}{$reading}{"history"}},\@new);
}else{
shift(@{$hash->{READINGS}{$reading}{"history"}});
push(@{$hash->{READINGS}{$reading}{"history"}},\@new);
}
}
#-- output and average
my $average = 0;
for(my $i=0;$i<$num;$i++){
$average+=$arr->[$i][0];
Log 4,"[$name moving average] Value = ".$arr->[$i][0]." Time = ".$arr->[$i][1];
}
$average=sprintf( "%5.3f", $average/$num);
#--average
Log 4,"[$name moving average] calculated over $num values is $average";
return $average;
}
define Heizung.OG.Neigung dummy
attr Heizung.OG.Neigung group 4: Heizung
attr Heizung.OG.Neigung room UG.Heizungskeller
attr Heizung.OG.Neigung setList state:0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,2.0
attr Heizung.OG.Neigung webCmd state
define Heizung.OG.Niveau dummy
attr Heizung.OG.Niveau group 4: Heizung
attr Heizung.OG.Niveau room UG.Heizungskeller
attr Heizung.OG.Niveau setList state:0,1,2,3,4,5,6
attr Heizung.OG.Niveau webCmd state
define Heizung.OG.Verstaerkung dummy
attr Heizung.OG.Verstaerkung group 4: Heizung
attr Heizung.OG.Verstaerkung room UG.Heizungskeller
attr Heizung.OG.Verstaerkung setList state:0.0,0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0
attr Heizung.OG.Verstaerkung webCmd state
define Heizung.OG.VorlaufMin dummy
attr Heizung.OG.VorlaufMin group 4: Heizung
attr Heizung.OG.VorlaufMin room UG.Heizungskeller
attr Heizung.OG.VorlaufMin setList state:25,26,27,28,29,30
attr Heizung.OG.VorlaufMin webCmd state
define Heizung.OG.VorlaufMax dummy
attr Heizung.OG.VorlaufMax group 4: Heizung
attr Heizung.OG.VorlaufMax room UG.Heizungskeller
attr Heizung.OG.VorlaufMax setList state:45,46,47,48,49,50
attr Heizung.OG.VorlaufMax webCmd state
define Heizung.OG.VorlaufSoll dummy
attr Heizung.OG.VorlaufSoll group 4: Heizung
attr Heizung.OG.VorlaufSoll room UG.Heizungskeller
attr Heizung.OG.VorlaufSoll userReadings temperature { ReadingsVal ("Heizung.OG.VorlaufSoll", "state",30);;;;}
define Heizung.OG.VorlaufSollRefresh at +*00:10:00 { prg_Vorlauf_OG() }
attr Heizung.OG.VorlaufSollRefresh group 4: Heizung
attr Heizung.OG.VorlaufSollRefresh room UG.Heizungskeller
sub
prg_Vorlauf_OG()
{
my $steil = ReadingsVal("Heizung.OG.Neigung","state","0.4");
my $kh = ReadingsVal("Heizung.OG.Niveau","state","1");
my $verst = ReadingsVal("Heizung.OG.Verstaerkung","state","1");
my $minvl = ReadingsVal("Heizung.OG.VorlaufMin","state","25");
my $maxvl = ReadingsVal("Heizung.OG.VorlaufMax","state","50");
my $sw = ReadingsVal("OG.KZ.TempDes","state","22");
my $iw = ReadingsVal("OG.KZ.Temp","temperature","20");
my $at = ReadingsVal("E_WS1","temperature","10");
my $t1 = ($at/(320-$at*4));
my $t2 = pow($sw,$t1);
my $maxabw = $sw-$iw;
my $swhk = (((0.55)*$steil*($t2)*((-$at+20)*2)+$sw+$kh)+($maxabw*$verst));
if ($swhk < $minvl) {$swhk=$minvl};
if ($swhk > $maxvl) {$swhk=$maxvl};
$swhk = int(100*$swhk+0.5)/100;
fhem ("set Heizung.OG.VorlaufSoll $swhk");
}
define OG.Heizung.Sommerbetrieb dummy
attr OG.Heizung.Sommerbetrieb devStateIcon on:weather_sun off:weather_frost
attr OG.Heizung.Sommerbetrieb group 4: Heizung
attr OG.Heizung.Sommerbetrieb room UG.Heizungskeller
attr OG.Heizung.Sommerbetrieb setList on off
define Heizung.OG.Pumpenanforderung dummy
attr Heizung.OG.Pumpenanforderung group 4: Heizung
attr Heizung.OG.Pumpenanforderung room UG.Heizungskeller
attr Heizung.OG.Pumpenanforderung userReadings status { ReadingsVal ("Heizung.OG.Pumpenanforderung", "state","off");;;;}
define Heizung.OG.PumpenanforderungCommands DOIF ([+0:01] and [OG.Heizung.Sommerbetrieb] eq "off" and \
([?HM_35F8F0_Sw_06] eq "on" or \
[?HM_35F8F0_Sw_03] eq "on" or\
[?HM_35F8F0_Sw_02] eq "on"))\
(set Heizung.OG.Pumpenanforderung on) ## 6 KZ, 3 SZ, 2 Bad\
DOELSE\
(set Heizung.OG.Pumpenanforderung off)
attr Heizung.OG.PumpenanforderungCommands group 4: Heizung
attr Heizung.OG.PumpenanforderungCommands room UG.Heizungskeller