Hauptmenü

if Problem

Begonnen von AET_FHEM, 02 März 2017, 15:26:09

Vorheriges Thema - Nächstes Thema

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

AET_FHEM

Ja ist gut werd ich versuchen!
Muss auch was essen, bis dann

Wernieman

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, ....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

dev0

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>

CoolTux

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
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

AET_FHEM

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...

AET_FHEM

@CoolTux
erledigt :-) bis jetzt bin ich noch ganz bei Dir  ;D
-> das war einfach

Thorsten Pferdekaemper

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
FUIP

AET_FHEM

:-) 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....

AET_FHEM

@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 ??

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Thorsten Pferdekaemper

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
FUIP

AET_FHEM

Danke CoolTux
Vorheizen funktioniert!!!

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

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