FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: AR@WR am 09 März 2017, 21:38:02

Titel: Unerwünschte Aufrufe der X_Set Funktion
Beitrag von: AR@WR am 09 März 2017, 21:38:02
Moin, moin,

ich habe in einem Modul in der Initialize Funktion folgenden Eintrag:

  $hash->{SetFn}    = "NMEA_Set";


Die Set Funktion befindet sich noch in der Testphase:

sub NMEA_Set($$$$$)
{
  my ($hash, $dev, $para, $valve, $heat_mode) = @_;
Log 3, "***** Set **$para** to $valve at $dev ** $heat_mode";
 
  return undef;
}


und loggt ordnungsgemäß die Werte bei einem Aufruf des set Befehls, wie z.B set Heizkessel ValveSum 123.
Allerdings zeigt das Logfile, daß die Set Funktion auch ohne mein Zutun aufgerufen wird:

2017.03.09 21:13:31 3: ***** Set **?** to  at Heizkessel **
2017.03.09 21:13:31 3: ***** Set **?** to  at Heizkessel **
2017.03.09 21:13:31 3: ***** Set **?** to  at Heizkessel **
2017.03.09 21:14:01 3: ***** Set **?** to  at Heizkessel **
2017.03.09 21:14:01 3: ***** Set **?** to  at Heizkessel **
2017.03.09 21:14:01 3: ***** Set **?** to  at Heizkessel **
2017.03.09 21:14:31 3: ***** Set **?** to  at Heizkessel **
2017.03.09 21:14:31 3: ***** Set **?** to  at Heizkessel **
2017.03.09 21:14:31 3: ***** Set **?** to  at Heizkessel **


Woher kommen diese Aufrufe ?

Der gleichmäßige Zeitabstand läßt mich vermuten, daß es irgendwie mit dem zyklischen Aufruf der GetUpdate Funktion zu tun hat.
Diese ruft sich nämlich immer wieder selbst durch einen Timer auf:

InternalTimer(gettimeofday()+$hash->{INTERVAL}, "NMEA_GetUpdate", $hash, 1);


und das INTERVAL ist auf 30 gesetzt. In der GetUpdate Funktion werden Daten über eine serielle Schnittstelle angefordert und dann in Readings geschrieben:


  readingsBulkUpdate($hash,"Heizung-Vorlauf",$a[2]/1000);
  readingsBulkUpdate($hash,"Heizung-Ruecklauf",$a[3]/1000);


Ich sehe aber nicht, wie das mit den unerwünschten Aufrufen der NMEA_Set Funktion zusammenhängen könnte.
Irgendeine Idee ?

Gruß

Arno
Titel: Antw:Unerwünschte Aufrufe der X_Set Funktion
Beitrag von: justme1968 am 09 März 2017, 21:52:41
mit set ? fragt fhem die im modul verfügbaren kommandos ab. z.b. für fhemweb.

du solltest die im wiki beschrieben 'unknown argument ... choose one of ...' antwort zurückgeben.

gruss
  andre
Titel: Antw:Unerwünschte Aufrufe der X_Set Funktion
Beitrag von: AR@WR am 09 März 2017, 21:59:11
Hallo Andre,

fragt fhem die im Modul verfügbaren Kommandos regelmäßg immer wieder ab ?
Und werden die dabei auch aufgerufen ?

Gruß

Arno
Titel: Antw:Unerwünschte Aufrufe der X_Set Funktion
Beitrag von: viegener am 09 März 2017, 22:33:48
Kann es sein, dass Du die Seite mit den Device-Details im Browser offen hast?
Titel: Antw:Unerwünschte Aufrufe der X_Set Funktion
Beitrag von: betateilchen am 09 März 2017, 22:45:41
Schau doch einfach mal in die DevelopmentGuideLines.

Die set Befehle werden beim Aufruf nicht ausgeführt. es wird nur geprüft, welche Werte ggf. in die dropdown-Listen im Frontend gefüllt werden müssen und wie die Meldung zur korrekten Nutzung der set-Befehle im Frontend im Fehlerfall aussehen soll.

Schau Dir mal eines der bestehenden Module an, dann siehst Du, wie man damit umgeht.


sub btIP_Set {

  my ($hash, @a) = @_;
  my $name = $a[0];

  my $usage= "Unknown argument, choose one of reread:noArg ovClear ovEnable ovDisable";
  my $ret = undef;

  given ($a[1]) {
 
     when ("ovClear") {
        if ($a[2] eq "all") {
           delete $defs{$name}{fhem}{override};
        } else {
           delete $defs{$name}{fhem}{override}{$a[2]};
        }
     }
     when ("ovDisable") {
        $defs{$name}{fhem}{override}{$a[2]} = 0;
     }
     when ("ovEnable") {
        $defs{$name}{fhem}{override}{$a[2]} = 1;
     }
     when ("reread") {
        btIP_readLayout($hash);
     }
     default {
        $ret = $usage;
     }
  }
  return $ret;
}


Wenn diese _SetFn mit "?" aufgerufen wird, wird über den Weg "default" die $usage zurückgegeben.
Titel: Antw:Unerwünschte Aufrufe der X_Set Funktion
Beitrag von: AR@WR am 09 März 2017, 23:21:15
Also es hängt definitiv mit dem Timer zusammen.
Habe das Interval auf 35 s geändert und die set Aufrufe kommen jetzt in diesem Abstand.

Allerdings nur, wenn ich eine Seite im Browser offen habe, auf dieses Device in irgendeiner Form zu sehen ist (Danke für diese Frage).
Ich hatte mich schon gewundert, warum manchmal zwei Aufrufe zur gleichen Zeit erfolgen und manchmal drei.
Es hat wahrscheinlich damit zu tun, daß der Inhalt dieser Seiten dann im Rhythmus des Timers aufgefrischt wird.

Setzt fhem denn jedes Mal, wenn es Daten eines Device im Browser anzeigt, eine set-Anfrage ab ?
Titel: Antw:Unerwünschte Aufrufe der X_Set Funktion
Beitrag von: betateilchen am 09 März 2017, 23:30:40
Ja. Und mit get passiert genau das Gleiche.
Titel: Antw:Unerwünschte Aufrufe der X_Set Funktion
Beitrag von: AR@WR am 09 März 2017, 23:39:51
Habe jetzt probeweise die Zeile

  return "Unknown argument $para, choose one of Params"; 


in die Set Funktion eingefügt (statt   return undef;) und jetzt habe ich auf der Device-Detail Seite auch den set Button mit einem Eintrag Params in seiner  Drop-Down-Box.
Der hatte nämlich vorher gefehlt.

Mir war nicht klar, daß außer mir auch noch fhem den set Befehl benutzt.
Werde daher eine entsprechende Abfrage in die NMEA_Set Funktion einbauen, damit ich nicht das Fragezeichen über die Schnittstelle nach außen schicke sondern nur die von mir stammenden Daten.

Vielen Dank für Eure Hilfe.
Titel: Antw:Unerwünschte Aufrufe der X_Set Funktion
Beitrag von: Thorsten Pferdekaemper am 10 März 2017, 11:40:41
Hi,
das hier ist sozusagen das Anfänger-Dokument für Modulentwickler:
https://wiki.fhem.de/wiki/DevelopmentModuleIntro
Gruß,
   Thorsten