FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: AET_FHEM am 02 März 2017, 15:26:09

Titel: if Problem
Beitrag von: AET_FHEM am 02 März 2017, 15:26:09
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?
Titel: Antw:if Problem
Beitrag von: Thorsten Pferdekaemper am 02 März 2017, 15:29:02
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
Titel: Antw:if Problem
Beitrag von: Wernieman am 02 März 2017, 15:56:22
Ist das aus FHEM-Webansicht oder aus der config Kopiert?
Titel: Antw:if Problem
Beitrag von: CoolTux am 02 März 2017, 16:15:08
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.
Titel: Antw:if Problem
Beitrag von: Wernieman am 02 März 2017, 19:27:36
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 ...
Titel: Antw:if Problem
Beitrag 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?
Titel: Antw:if Problem
Beitrag von: Thorsten Pferdekaemper am 03 März 2017, 08:18:03
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
Titel: Antw:if Problem
Beitrag von: CoolTux am 03 März 2017, 08:44:49
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
Titel: Antw:if Problem
Beitrag von: AET_FHEM am 03 März 2017, 10:49:15
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...

Titel: Antw:if Problem
Beitrag von: CoolTux am 03 März 2017, 10:58:49
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
Titel: Antw:if Problem
Beitrag von: AET_FHEM am 03 März 2017, 11:01:34
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 ...
Titel: Antw:if Problem
Beitrag von: CoolTux am 03 März 2017, 11:11:58
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
Titel: Antw:if Problem
Beitrag von: AET_FHEM am 03 März 2017, 11:23:53
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



Titel: Antw:if Problem
Beitrag von: CoolTux am 03 März 2017, 11:31:32
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?
Titel: Antw:if Problem
Beitrag von: AET_FHEM am 03 März 2017, 11:42:01
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
Titel: Antw:if Problem
Beitrag von: CoolTux am 03 März 2017, 11:46:29
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.
Titel: Antw:if Problem
Beitrag von: AET_FHEM am 03 März 2017, 11:56:16
Ja ist gut werd ich versuchen!
Muss auch was essen, bis dann
Titel: Antw:if Problem
Beitrag von: Wernieman am 03 März 2017, 13:47:20
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, ....
Titel: Antw:if Problem
Beitrag von: dev0 am 03 März 2017, 14:00:39
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>
Titel: Antw:if Problem
Beitrag von: CoolTux am 03 März 2017, 14:26:29
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
Titel: Antw:if Problem
Beitrag von: AET_FHEM am 03 März 2017, 14:29:11
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...
Titel: Antw:if Problem
Beitrag von: AET_FHEM am 03 März 2017, 14:31:56
@CoolTux
erledigt :-) bis jetzt bin ich noch ganz bei Dir  ;D
-> das war einfach
Titel: Antw:if Problem
Beitrag von: Thorsten Pferdekaemper am 03 März 2017, 14:49:09
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
Titel: Antw:if Problem
Beitrag von: AET_FHEM am 03 März 2017, 15:04:06
:-) 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....
Titel: Antw:if Problem
Beitrag von: AET_FHEM am 03 März 2017, 15:06:13
@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 ??
Titel: Antw:if Problem
Beitrag von: CoolTux am 03 März 2017, 15:13:27
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.
Titel: Antw:if Problem
Beitrag von: Thorsten Pferdekaemper am 03 März 2017, 15:36:38
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
Titel: Antw:if Problem
Beitrag von: AET_FHEM am 08 März 2017, 14:14:24
Danke CoolTux
Vorheizen funktioniert!!!

Alles Super, und mal wieder was dazu gelernt :-) !

--> Sometimes you have to change a running system...