99_Utils If Abfrage klappt nicht.

Begonnen von OnkelTom83, 20 Dezember 2014, 11:15:34

Vorheriges Thema - Nächstes Thema

OnkelTom83

Hallo,

ich habe das Problem, das eine If-Abfrage nicht funktioniert.
Ich versuche einen Status dummy abzufragen der auf "on" steht. Aber egal wie ich die Abfrage drehe und Wende sie ist niemals true...


Variante A:
my $tmp = Value('ANLAGE_SCHARF');
  if( $tmp eq 'on'){
    fhem(" set AlarmTablet ttsSay hallo hier in der abfrage ");
  }

Variante B:
  if( "Value('ANLAGE_SCHARF')" eq 'on'){
    fhem("
      set AlarmTablet ttsSay Mach mal richtig Alarm hier!
    ");
  }


Die ttsSay angaben funktionieren.
Aber irgendwie springt das System nicht in die Abfrage rein.

Wo ist da der Fehler?
Im Log ist kein Fehler zu erkennen.

Hat jemand eine Idee?

vielen Dank
Christian

rudolfkoenig

Ueber welchen at/notify/watchdog/etc wird dieser Code aufgerufen? Ja, sowas braucht man.

OnkelTom83

Der ganze Ablauf ist folgender:
TFK wird ausgelöst, und ruft "sub TFKModChange($){" auf.
Innerhalb dieser Methode steckt dieser Aufruf "sub CheckAlarm(){"

Diese Methode soll dann nur Überprüfen ob die Variable ANLAGE_SCHARF auf on oder 1 oder... so steht.

Hier die folgenden Elemente der Reihenfolge nach:
TFK:
define f notify Fenster:tripped4:.* { \
TFKModChange($EVTPART1)\
}

-- Aufruf Funktioniert.

TFKModChange: (in der 99Utils.pm)
sub TFKModChange($){
  my ($status) = @_;
  CheckAlarm();
  if($status eq 'on'){
    fhem("
      set COUNTER ". (Value('COUNTER')+1) .";
     
    ");

  }elsif($status eq 'off'){
    if( (Value('COUNTER')) ge 1){
      fhem("set COUNTER ". (Value('COUNTER')-1) )
    }else{
      fhem("set COUNTER 0")
    }
  }
}

-- Aufruf Funktioniert.


CheckAlarm(in der 99Utils.pm):
sub CheckAlarm(){
my $tmp = Value("ANLAGE_SCHARF");
my $foo = 1;



  if( $foo eq 1){
    fhem(" set AlarmTablet ttsSay hallo hier in der abfrage ");
  }
  if( $tmp eq 1){
    fhem("
      set AlarmTablet ttsSay Mach mal richtig Alarm hier!
    ");
  }
}

In diese Methode komme ich hinein, jedoch funktioniert NUR die erste If-Abfrage, weil der $foo Wert warscheinlich statisch ist?!

Zwischenzeitlich habe ich den ANLAGE_STATUS auf 0 bzw 1 umgesetzt. (Im Post vorher war er auf "on")
Aktuell ist die Methode CheckAlarm so gebaut, das ich $foo abfragen kann und es läuft, jedoch $tmp = Value("ANLAGE_SCHARF")nicht.

Es steht definitv in ANLAGE_SCHARF eine 1 drin/ wird auch so mit Value("ANLAGE_SCHARF") ausgelesen, das habe ich geprüft.
Danke

rudolfkoenig

Aus Anhieb faellt mir keine Ursache ein, und sowas sollte prinzipiell funktionieren.

Ich wuerde in die Routine Debug Ausgaben der Art
Log 1, "Ausgabe 1: >$tmp<";
einstreuen, und das notify per "trigger Fenster tripped4:on" selbst ausloesen.

OnkelTom83

Ja das wundert mich auch, das eine Standardabfrage so nicht funktioniert.

Wie meinst du mit dem trigger Fenster tripped4:on selbst auslösen?

OnkelTom83

Hallo,

es funktioniert!

Ich habe festgestellt, das wenn man einen Dummy mit if(Value("DUMMYNAME") eq "xyz") abfragt auf gar keinen Fall on/off/1/0 reinschreiben sollte.
Steht bspw. hallo drin, funktioniert es....

Gruß

karl0123

Das stimmt nicht. Bei mir haben viele Dummys die Werte on oder off und die Abfragen klappen einwandfrei. Ich wüsste auch nicht, warum das nicht so sein sollte.