Hallo zusammen,
=> ich hab da so ein kleines if Problem
ich hab ein Notify
25_Bad_HZ_DY:* {
my $valtemp = "$EVENT";;
my $device = "25_Bad_HZ";;
my $cmd1 = 'set '.$device.' desiredTemperature '.$valtemp;;
my $cmd2 = 'set '.$device.' desiredTemperature eco';;
my $cmd3 = 'set 25_Bad_HZ_DY '$BadCurrentTemp;;
my $BadCurrentTemp=ReadingsVal("25_Bad_HZ","desiredTemperature","");;
my $BadCurrentMode=ReadingsVal("25_Bad_HZ","mode","");;
if ("$EVENT" eq "vorheizen") {
if(ReadingsVal('25_Bad_HZ', 'temperature', 0) < 18.0 && Value("25_Bad_FK") eq "closed") {
fhem("set 25_Bad_HZ desiredTemperature 18");
fhem("define Bad_Heizung_auto at +00:30:00 set 25_Bad_HZ_DY auto");
}else {
fhem($cmd3)}
}else {
if( Value("25_Bad_FK") ne "open" && Value("Familie") eq "present") {fhem($cmd1)};;
if( Value("25_Bad_FK") ne "open" && Value("Familie") ne "present") {fhem($cmd2)};;
}
}
Dieser soll wenn der Dummy 25_Bad_HZ_DY vorheizen sagt soll dieser Befehl schauen ob das Fenster zu ist und ob die Heizung im Bad unter 18 eingestellt ist wenn Ja dann soll er Bad auf 18 Heizen und define Bad_Heizung_aut ... (automatische Rückstellung)
--> wenn Fenster offen oder die Temperatur ist schon höher eingestellt soll er den Dummy auf den Wert vom regler (25_Bad_HZ) einstellen und den befehl beenden ....
wenn nicht "vorheizen" dann soll er schauen ob Fenster offen und Familie zuhause und dem entsprechend reagieren....
=> mit dem if und elsif blick ich einfach nicht 100% durch, mit doif habe ich mich auch versucht aber das verstehe ich noch weniger ... :( --> von euch kann mir bestimmt einer weiter helfen?
Hi,
ich sehe hier vor Allem manchmal ";", manchmal ";;". Nur eins davon ist richtig. ...und bevor Beschwerden kommen: Nein, ich weiß auch nicht aus dem FF wann welches stimmt.
Gruß,
Thorsten
Ist das aus FHEM-Webansicht oder aus der config Kopiert?
So etwas großes würde ich erstmal in eine 99_myUtils packen. Das ist ja Kraut und Rüben, da sieht man nicht viel.
Hast Du HomeMatic? Ich habe auch eine Vorheizen Geschichte für unseren Sohn wenn wir ihn abends waschen.
Was ich auch nicht verstehe,
Du trikerst auf alle "25_Bad_HZ_DY:*", schrängst dann beim ersten IF aber auf "vorheizen" ein. Bei der guten Auswahl der Tricker kann man sich aber gleich ein IF sparen ...
Hey,
Danke mal für die Antworten ;D
wie Kraut und Rüben :o
ja weiß auch nicht wann ; oder ;; --> das find ich immer nach versuchen heraus ???
=> nein Hab kein Homematic ich hab Max
=> ja stimmt ein if könnte ich mir sparen und Fenster Kontrolle und vorheizen in ein if packen
aber muss doch auch so funktionieren...?
--> oder wie würdet ihr das lösen?
Zitat von: AET_FHEM am 03 März 2017, 07:55:26--> oder wie würdet ihr das lösen?
Zu allererst einmal hast Du nicht gesagt, was davon funktioniert und was nicht. Wenn wir wüssten, was falsch läuft, dann könnten wir auch helfen.
Dann würde ich das ganze mal ordentlich einrücken, damit man die Ebenen besser sieht. Möglicherweise musst Du es dafür in eine eigene Routine z.B. in der 99_myUtils.pm verschieben.
Dann, das ganze Stück für Stück aufbauen und nicht alles auf einmal. D.h. erstmal eine Bedingung und ein if, dann den else-Zweig dazu etc. Wenn man in sowas viel Übung hat, dann bekommt man auch komplexere Strukturen hin, aber nicht am Anfang.
Gruß,
Thorsten
Zitat von: AET_FHEM am 03 März 2017, 07:55:26
Hey,
Danke mal für die Antworten ;D
wie Kraut und Rüben :o
ja weiß auch nicht wann ; oder ;; --> das find ich immer nach versuchen heraus ???
=> nein Hab kein Homematic ich hab Max
=> ja stimmt ein if könnte ich mir sparen und Fenster Kontrolle und vorheizen in ein if packen
aber muss doch auch so funktionieren...?
--> oder wie würdet ihr das lösen?
Ein einfaches Semikolon ist immer richtig. Vorausgesetzt Du hälst Dich an die Hinweise das man die cfg Datei niemals nicht direkt bearbeiten soll.
Man kann und sollte es auch, alles über die Weböberfläche machen!!
Punkt zwei, wenn ich Dich jetzt richtig verstanden habe, dann willst Du so wie ich einfach das Badezimmer Vorheizen, also bis auf eine bestimmte Gradzahl. Dabei soll geschaut werden ob Fenster oder Tür offen sind, ob überhault Heizsaison ist oder ob nicht schon die Zieltemperatur erreicht oder gar überschritten ist? Korrekt? Denn das ist was ich habe und da könnte ich Dich etwas unterstützen.
Grüße
Hey CoolTux
Genau sowas suche ich,
-> wie hast du das über eine seperate 99_myUtil?
Ich hab mich schon etwas dran versucht aber soweit bin ich noch nicht drin, und eigentlich wollte ich weg von dem das ich für alles ein separates notify erstellen => ich hatte das schon am laufen mit einem separaten Notify!
-> der Grundgedanke ist das ich eigentlich meinen ganzen code etwas vereinfachen will zB.: Fensterkontakt offen/zu nicht zwei notify für jedes (wie ich es bis jetzt habe sondern nur eins --> wo drauf reagiert) langsam aber sicher wird meine fhem.cfg etwas unübersichtlich ???
=> ich hab ein Bad Heizung Dummy dieser soll die Temperatur im Bad regeln und auch vorheizen
-> wenn ich eine Zahl eingebe soll der Dummy checken ob das Fenster zu ist und dann die Temperatur im Bad ändern, wenn ich vorheizen sage soll der Dummy checken ob Fenster zu und ob die Temperatur im Bad unter 18 ist und dann für 30 Minuten Heizen
-> Kann ich mir auch gut als separates 99_myUtil vorstellen ...
-->Dummy Eingabe
--> Check Fenster offen
-->Was eingegeben Zahl oder Vorheizen
--> .....
ich mach alles nur über die Weboberfläche, da ich schon mal Probleme hatte mit falschen Formatierungen...
Das ist meine 99_myUtils. Zu mindest der Teil zum Thema Vorheizen. Bitte nicht gleich erschrecken. Wir können das beide gerne zusammen Stück für Stück durchgehen. Du musst nur Willsens sein dabei lernen zu wollen.
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.
package main;
use strict;
use warnings;
use POSIX;
sub myUtils_HeatingControl_Initialize($$) {
my ($hash) = @_;
}
###########################################
### Badezimmer Vorheizen
sub VorHeizenTuerFensterWatchDog($) {
my ($name) = @_;
if( $name eq "TuerKontaktBadZ" ) {
indoorMessage("Achtung, das Badezimmer wird vorgeheizt und es wurde vergessen die Tür zu schließen.");
}
elsif( $name eq "structureFensterBadezimmer" ) {
indoorMessage("Achtung, das Badezimmer wird vorgeheizt. Bitte das Badfenster wieder schließen.");
}
}
sub BadezimmerVorheizenEnde() {
my $solltemp = ReadingsVal( "BadezimmerVorheizenDummy", "desired-temp", "21.0" );
my $isttemp = ReadingsVal( "TempFeuchtSensorBadezimmer", "temperature", "Fegefeuer" );
if( ReadingsVal( "setTemperaturTemplateDummy", "state", "HeizungAUS" ) eq "HeizungAUS" ) {
fhem "set HeizungsThermostatBadezimmer_Clima controlManu 12";
} else {
fhem "set HeizungsThermostatBadezimmer_Clima controlMode auto";
}
indoorMessage("Das Badezimmer wurde auf $isttemp Grad vorgeheizt und kann nun mollig warm verwendet werden.");
indoorMessage("Das Badezimmer wurde auf $isttemp Grad vorgeheizt und kann nun mollig warm verwendet werden.","MotoGIsabel") if( Value( "rr_Isabel" ) eq "home" || Value( "rr_Isabel" ) eq "awoken" );
fhem "set HeizungsThermostatBadezimmer_Clima burstXmit";
}
sub BadezimmerVorheizen($$) {
my ($name,$event) = @_;
my $solltemp = ReadingsVal( "BadezimmerVorheizenDummy", "desired-temp", "21.0" );
my $isttemp = ReadingsVal( "TempFeuchtSensorBadezimmer", "temperature", "Fegefeuer" );
if( $name eq "BadezimmerVorheizenDummy" ) {
if( ReadingsVal( "setTemperaturTemplateDummy", "state", "Sommer" ) ne "Sommer" ) {
if( ReadingsVal( "TempFeuchtSensorBadezimmer", "temperature", "19.0" ) < "$solltemp" && Value( "structureFensterTuerBadezimmer" ) eq "geschlossen" && ReadingsVal( "setTemperaturTemplateDummy", "state", "Sommer" ) ne "Sommer" ) {
fhem "set HeizungsThermostatBadezimmer_Clima controlManu $solltemp; set HeizungsThermostatBadezimmer_Clima burstXmit";
indoorMessage("Das Badezimmer wird jetzt auf $solltemp Grad vorgeheizt.");
indoorMessage("Das Badezimmer wird nun auf $solltemp Grad vorgeheizt.","MotoGIsabel") if( Value( "rr_Isabel" ) eq "home" || Value( "rr_Isabel" ) eq "awoken" );
}
elsif( Value( "structureFensterTuerBadezimmer" ) eq "offen" ) {
my @monitored=devspec2array("(.*KontaktBadZ.*):FILTER=STATE!=closed");
my $cnt_devs=@monitored;
my $i = 0;
my $msgtext = "";
foreach(@monitored) {
$msgtext .= AttrVal($_,"alias",$_);
if ($i < $cnt_devs - 2) {
$msgtext .= ", ";
}
if ($i == $cnt_devs - 2) {
$msgtext .= " und ";
}
$i++;
}
indoorMessage("$msgtext ist noch offen. Bitte zu erst schließen und dann das vorheizen erneut probieren.");
fhem "set BadezimmerVorheizenDummy off";
} else {
indoorMessage("Die Temperatur im Badezimmer beträgt $isttemp Grad und es ist somit warm genug.");
fhem "set BadezimmerVorheizenDummy off";
}
} else {
indoorMessage("Es ist Sommer und die Heizung somit ausgeschalten.");
fhem "set BadezimmerVorheizenDummy off";
}
}
if( $name eq "TempFeuchtSensorBadezimmer" && ReadingsVal( "TempFeuchtSensorBadezimmer", "temperature", "25.0" ) >= "$solltemp" ) {
fhem "set BadezimmerVorheizenDummy off";
}
}
Ausgelöst wird das ganze über einen Dummy und ein Notify
Dummy
Internals:
CFGFN
NAME BadezimmerVorheizenDummy
NR 296
STATE off
TYPE dummy
Helper:
Dblog:
Userstate:
Logdb:
TIME 1488477208.47695
VALUE off
Readings:
2017-02-03 07:41:54 desired-temp 21.0
2017-03-02 18:53:28 state off
2017-03-02 18:53:28 userState off
Attributes:
alias Vorheizen
devStateIcon on:sani_heating_timer@red:off off:sani_heating_timer:on desired-temp:sani_heating_temp
event-on-change-reading state,userState
group Heizungsregler
readingList desired-temp
room Badezimmer
setList on:noArg off:noArg desired-temp:20.0,20.5,21.0,21.5,22.0
userReadings userState { ReadingsVal($name,"state","unknown ") }
webCmd desired-temp
Notify
Internals:
CFGFN
DEF BadezimmerVorheizenDummy:(on|off)|TempFeuchtSensorBadezimmer:temperature:.* {
if( ($NAME eq "BadezimmerVorheizenDummy" || $NAME eq "TempFeuchtSensorBadezimmer") && Value( "BadezimmerVorheizenDummy" ) eq "on" ) {
BadezimmerVorheizen($NAME,$EVENT);
}
elsif( $NAME eq "BadezimmerVorheizenDummy" && Value( "BadezimmerVorheizenDummy" ) eq "off" ) {
BadezimmerVorheizenEnde();
}
}
NAME notifyHeatingControl
NR 297
NTFY_ORDER 50-notifyHeatingControl
REGEXP BadezimmerVorheizenDummy:(on|off)|TempFeuchtSensorBadezimmer:temperature:.*
STATE 2017-03-03 10:51:57
TYPE notify
Readings:
2017-02-06 06:58:05 state active
Attributes:
comment Sub befindet sich im File 99_myUtils_HeatingControl.pm
Ach und kleines DOIF noch
Internals:
CFGFN
DEF ([TuerKontaktBadZ] eq "open" and [?BadezimmerVorheizenDummy] eq "on") ( {VorHeizenTuerFensterWatchDog("$DEVICE")} )
DOELSEIF
([structureFensterBadezimmer] ne "geschlossen" and [?BadezimmerVorheizenDummy] eq "on") ( {VorHeizenTuerFensterWatchDog("$DEVICE")} )
DOELSE
()
NAME doifBadtuerBadfensterVorheizenWatchdog
NR 431
NTFY_ORDER 50-doifBadtuerBadfensterVorheizenWatchdog
STATE cmd_3
TYPE DOIF
Readings:
2017-03-03 10:28:59 Device TuerKontaktBadZ
2017-02-15 07:08:37 cmd 3
2017-02-15 07:08:37 cmd_event TuerKontaktBadZ
2017-02-15 07:08:37 cmd_nr 3
2017-03-03 10:28:59 e_TuerKontaktBadZ_STATE closed
2017-03-01 21:39:04 e_structureFensterBadezimmer_STATE geschlossen
2017-02-15 07:08:37 state cmd_3
2017-03-02 18:46:57 wait_timer no timer
Condition:
0 InternalDoIf($hash,'TuerKontaktBadZ','STATE') eq "open" and InternalDoIf($hash,'BadezimmerVorheizenDummy','STATE') eq "on"
1 InternalDoIf($hash,'structureFensterBadezimmer','STATE') ne "geschlossen" and InternalDoIf($hash,'BadezimmerVorheizenDummy','STATE') eq "on"
Devices:
0 TuerKontaktBadZ
1 structureFensterBadezimmer
all TuerKontaktBadZ structureFensterBadezimmer
Do:
0:
0 {VorHeizenTuerFensterWatchDog("$DEVICE")}
1:
0 {VorHeizenTuerFensterWatchDog("$DEVICE")}
2:
0
Helper:
event closed,userState: closed
globalinit 1
last_timer 0
sleepdevice TuerKontaktBadZ
sleepsubtimer 0
sleeptimer -1
timerdev TuerKontaktBadZ
timerevent closed,userState: closed
triggerDev TuerKontaktBadZ
timerevents:
closed
userState: closed
timereventsState:
state: closed
userState: closed
triggerEvents:
closed
userState: closed
triggerEventsState:
state: closed
userState: closed
Gib einfach Bescheid wenn Du Lust hast und Dich dafür füllst.
Grüße
Ja ich will ;D
=> habs nur mal überflogen und sieht gut aus auch mit den ausgaben wäre toll wenn wir das zusammen durchgehen könnten ...
Dann schaffen wir erstmal die Voraussetzungen
Unser Rezept:
Fensterkontakte und Tuerkontakt für das Badezimmer so benennen das sie Eindeutig sind und gut erkennbar vom Wortbild. Wir wollen nachher danach suchen können.
1x structure FensterTuerBadezimmer Fensterkontakt1 Fensterkontakt2 ... Tuerkontakt
1x Dummy Vorheizen, So anlegen wie ich das gemacht habe am besten
Dann folgende Devices hier mit list Devicename einstellen in Codetags
Thermostat und zwar nur den Clima Channel. Glaube sowas gibt es bei Max auch.
Temperaturfühler Device für das Badezimmer
BadfensterKontakt einzeln
Badfensterstructure
BadTuerKontakt
Grüße
OK
-> Dummy angelegt 25_DY_BadezimmerVorheizen
-> Fenster KOntakt = 25_Bad_Fenster (nur Fensterkontakt kein Türkontakt (noch nicht :-))
Fenster Dummy => der reagiert auf den richtigen Fensterkontakt 25_Bad_FK
Internals:
NAME 25_Bad_Fenster
NR 740
STATE geschlossen
TYPE dummy
Readings:
2017-03-03 07:49:09 state geschlossen
Attributes:
Fenster_structure Fenster
devStateIcon offen:fts_window_1w_open@red tilted:fts_window_1w_tilt@red geschlossen:fts_window_1w@green
event-on-change-reading state
group Fenster
room 02_Security,25_Bad
userattr Fenster_structure Fenster_structure_map structexclude
Heizung Controller Bad temperatur und einstellung
Internals:
DEF WallMountedThermostat 070dd4
IODev cm
LASTInputDev cm
MSGCNT 7055
NAME 25_Bad_HZ
NR 712
RSSI -45
STATE 15.0 °C
TYPE MAX
addr 070dd4
backend cm
cm_MSGCNT 7055
cm_TIME 2017-03-03 11:19:00
rferror 0
type WallMountedThermostat
Readings:
2017-03-03 11:19:00 RSSI -45
2016-04-17 16:07:26 TimeInformationHour 0
2017-03-03 10:35:07 battery ok
2016-10-06 09:24:29 comfortTemperature 21
2017-03-03 11:19:00 desiredTemperature 15.0
2017-03-03 10:35:07 displayActualTemperature 1
2016-10-06 09:24:31 ecoTemperature 15.0
2016-09-15 14:38:44 firmware 1.0
2016-09-15 14:38:43 groupid 0
2016-10-06 09:24:29 maximumTemperature on
2016-10-06 09:24:29 measurementOffset 0
2016-10-06 09:24:29 minimumTemperature off
2017-03-03 10:35:07 mode manual
2017-03-03 10:35:06 msgcnt 23
2017-03-03 11:19:00 state 15.0 °C
2017-03-03 11:19:00 temperature 18.1
2016-09-15 14:38:44 testresult 255
2016-10-06 09:24:29 windowOpenDuration 15
2016-10-06 09:24:29 windowOpenTemperature 12
Internals:
interfaces thermostat;temperature;battery
Attributes:
IODev cm
event-on-change-reading *
group Heizung
icon max_wandthermostat
room 25_Bad
sortby 1
userattr Heizung Heizung_map structexclude
Gibt es einen Grund wieso Du einen Dummy hast der den Status des eigentlichen Fensterkontaktes dar stellt?
Hast Du noch einen externen Fühler, also ausser den Thermostat Fühler?
Stellst Du irgendwo noch da ob die Heizung überhaupt aktiv ist oder nicht?
Wieso ich einen Dummy hab
weil der Max Fensterkontakt jede stunde meldet Fenster jetzt geschlossen und ich bekomm eine Meldung aufs Handy mit dem Dummy hab ich nur kontrolliert ist es zu dann schick mir nichts ist es offen dann schick mir ne Meldung und setzte den Dummy auf zu ....
ich hab noch ein Dummy der mir sagt ob die Heizung läuft
HeiZung
Internals:
NAME HeiZung
NR 406
STATE on
TYPE dummy
Readings:
2017-03-03 05:00:02 state on
Attributes:
devStateIcon off:general_aus@red on:icoHeizungAn@green
group Heizung
icon icoHEIZUNG
room 01_Heizung
setList state:on,off
webCmd state
hab sonst keinen Temperatur fühler
Setze mal das event-on-change-reading auf .* und nicht nur *
Dann sollte sich Dein zusätzlicher Dummy erledigt haben. Den Rest bereite ich vor. Dauert bisschen, muß erstmal Haushalt machen und das Mittag für die Kinder. Melde mich dann wieder.
Ja ist gut werd ich versuchen!
Muss auch was essen, bis dann
Nur mal eine Frage am Rande:
Warum soll es besser sein, alles in einem notify zu verarbeiten, anstatt 2? Ich mag lieber 2 (oder 3..) übersichtliche notify, als ein ujnübersichtliches.
Außerdem ist (sollte fhem) ein event-bassiertes System sein, ....
Zitat von: Wernieman am 03 März 2017, 13:47:20
Warum soll es besser sein, alles in einem notify zu verarbeiten
<offtopic>
Ich persönlich findes es übersichtlicher und schneller, wenn ein Notify nur eine Sub in einer 99_xxxUtils.pm aufruft und ich die entsprechende Datei mit einem Editor auf meinem Arbeitsplatzrechner editiere (über cifs/nfs). Wenn man allerdings Spaghetti-Code schreibt, dann wäre es, aus Performancesicht, besser mehrere Notifies mit sehr eng gefaster regexp zu benutzen.
</offtopic>
lege eine Datei unter fhem/FHEM/ an
touch 99_myUtils_HeatingControl.pm
Gebe der Datei die selben Rechte wie den anderen Moduldateien
chown fhem:dialout 99_myUtils_HeatingControl.pm
chmod 644 99_myUtils_HeatingControl.pm
Fülle die Datei mit Leben
package main;
use strict;
use warnings;
use POSIX;
sub myUtils_HeatingControl_Initialize($$) {
my ($hash) = @_;
}
###########################################
### Badezimmer Vorheizen
sub BadezimmerVorheizenEnde() {
}
Wenn Du das hast machen wir weiter
Hey,
ist halt Geschmackssache :-)
-> oder ist auch ein Ding der Größe der fhem.cfg je größer desto un durchsichtiger wirds...
-> bis jetzt habe ich das auch so gehandhabt und immer geschaut das ich etwas Struktur drin hatte, aber mittlerweile wird es wirklich zu unübersichtlich und ein notify pro Aktion wäre in meinen Augen übersichtlicher und manchmal auch einfacher bei Fehler suche .... (oder auch nicht!)
aber du hast schon recht es muss auch in einem notify übersichtlich bleiben...
@CoolTux
erledigt :-) bis jetzt bin ich noch ganz bei Dir ;D
-> das war einfach
Zitat von: AET_FHEM am 03 März 2017, 14:29:11-> oder ist auch ein Ding der Größe der fhem.cfg je größer desto un durchsichtiger wirds...
Ich würde mich nicht um die fhem.cfg kümmern. Normalerweise muss man in diese Datei nie hineinschauen und man muss auch nie etwas darin ändern.
Gruß,
Thorsten
:-) ja eigentlich schon aber es ist doch schöner wenn die Struktur passt :)
=> hatte letztens einen Fehler da wurde ein Anführungsstrichen nicht geschlossen
--> war ganz schön blöd das zieht sich halt durch die halbe fhem.cfg
=> naja und bisschen dazulernen ist ja immer gut....
@CoolTux
meine 99_myUtils_HeatingControl.pm
sieht jetzt so aus :-)
package main;
use strict;
use warnings;
use POSIX;
sub myUtils_HeatingControl_Initialize($$) {
my ($hash) = @_;
}
###########################################
### Badezimmer Vorheizen
sub VorHeizenTuerFensterWatchDog($) {
my ($name) = @_;
if( $name eq "25_Bad_FK" ) {
indoorMessage("Achtung, Badezimmer Vorheizen nicht möglich Fenster im Bad offen!");
}
#elsif( $name eq "structureFensterBadezimmer" ) {
# indoorMessage("Achtung, das Badezimmer wird vorgeheizt. Bitte das Badfenster wieder schließen.");
#}
}
sub BadezimmerVorheizenEnde()
{
Log 1, "----> Ende Bad vorheizen!";
}
sub BadezimmerVorheizen()
{
Log 1, "----> Das Bad wird vorgeheizt!";
}
1;
wie funktioniert bei dir indoorMessage ??
Jetzt erweitern wir das ganze etwas
package main;
use strict;
use warnings;
use POSIX;
sub myUtils_HeatingControl_Initialize($$) {
my ($hash) = @_;
}
###########################################
### Badezimmer Vorheizen
sub BadezimmerVorheizenEnde() {
my $solltemp = ReadingsVal( "25_Bad_HZ", "desiredTemperature", "21.0" );
my $isttemp = ReadingsVal( "25_Bad_HZ", "temperature", "Fegefeuer" );
## Hier musst Du entscheiden ob Du eine Bedingung prüfen willst
## wenn nicht dann einfach nur den fhem Befehl zum ausschalten des Thermostates
if( ReadingsVal( "setTemperaturTemplateDummy", "state", "HeizungAUS" ) eq "HeizungAUS" ) {
fhem "Hier set befehl wenn Heizung aus sein soll";
} else {
fhem "Hier set Befehl wenn Heizung an sein soll AUTO Mode";
}
}
sub BadezimmerVorheizen($$) {
my ($name,$event) = @_;
my $solltemp = ReadingsVal( "25_Bad_HZ", "desiredTemperature", "21.0" );
my $isttemp = ReadingsVal( "25_Bad_HZ", "temperature", "Fegefeuer" );
if( $name eq "25_DY_BadezimmerVorheizen" ) {
if( Value( "HeiZung" ) ne "off" ) {
if( $isttemp < $solltemp && Value( "25_Bad_Fenster" ) eq "geschlossen" ) {
fhem "HIER set Befehl zum setzen der ZielTemperatur eingeben Beispiel (set HeizungBad $solltemp)";
indoorMessage("Das Badezimmer wird jetzt auf $solltemp Grad vorgeheizt.");
indoorMessage("Das Badezimmer wird nun auf $solltemp Grad vorgeheizt.","MotoGIsabel") if( Value( "rr_Isabel" ) eq "home" || Value( "rr_Isabel" ) eq "awoken" );
}
elsif( Value( "25_Bad_Fenster" ) eq "offen" ) {
my @monitored=devspec2array("(.*KontaktBadZ.*):FILTER=STATE!=closed");
my $cnt_devs=@monitored;
my $i = 0;
my $msgtext = "";
foreach(@monitored) {
$msgtext .= AttrVal($_,"alias",$_);
if ($i < $cnt_devs - 2) {
$msgtext .= ", ";
}
if ($i == $cnt_devs - 2) {
$msgtext .= " und ";
}
$i++;
}
indoorMessage("$msgtext ist noch offen. Bitte zu erst schließen und dann das vorheizen erneut probieren.");
fhem "set 25_DY_BadezimmerVorheizen off";
} else {
indoorMessage("Die Temperatur im Badezimmer beträgt $isttemp Grad und es ist somit warm genug.");
fhem "set 25_DY_BadezimmerVorheizen off";
}
} else {
indoorMessage("Die Heizung ist ausgeschalten.");
fhem "set 25_DY_BadezimmerVorheizen off";
}
}
if( $name eq "25_Bad_HZ" && ReadingsVal( "25_Bad_HZ", "temperature", "25.0" ) >= "$solltemp" ) {
fhem "set BadezimmerVorheizenDummy off";
}
}
1;
Schaue erstmal das Du verstehst was der Code genau macht.
Und ganz ganz wichtig. Bitte am Ende der Datei als letztes Zeichen die 1; nicht vergessen.
Zitat von: AET_FHEM am 03 März 2017, 15:04:06
:-) ja eigentlich schon aber es ist doch schöner wenn die Struktur passt :)
Das meinte ich ja: Kümmer Dich nicht drum. Wenn Du es Dir nie anschaust, dann ist auch egal, wie es aussieht. FHEM sorgt schon dafür, dass es past.
Zitat
=> hatte letztens einen Fehler da wurde ein Anführungsstrichen nicht geschlossen
--> war ganz schön blöd das zieht sich halt durch die halbe fhem.cfg
Genau deshalb sollte man nichts an der fhem.cfg ändern. So etwas kann auch passieren, wenn man brav alles in FHEMWEB macht, aber es ist unwahrscheinlicher.
Gruß,
Thorsten
Danke CoolTux
Vorheizen funktioniert!!!
Alles Super, und mal wieder was dazu gelernt :-) !
--> Sometimes you have to change a running system...