FHEM Forum

FHEM => Frontends => Thema gestartet von: betateilchen am 26 September 2013, 12:18:47

Titel: wieso startet eine Anzeige im Frontend die Set-Routine?
Beitrag von: betateilchen am 26 September 2013, 12:18:47
Gegeben ist folgender Modulcode:


package main;

use strict;
use warnings;

sub PIFACE_Define($$);
sub PIFACE_Undefine($$);
sub PIFACE_Set($@);

sub
PIFACE_Initialize($)
{
my ($hash) = @_;
$hash->{DefFn} = "PIFACE_Define";
$hash->{UndefFn} = "PIFACE_Undefine";
$hash->{SetFn} = "PIFACE_Set";
$hash->{AttrList} = $readingFnAttributes;
}


sub
PIFACE_Define($$){
my ($hash, $def) = @_;
my @a = split("[ \t][ \t]*", $def);
my $name = $hash->{NAME};

Log3($name, 3, "PIFACE $name: created");
readingsSingleUpdate($hash, "state", "active",1);

return undef;
}

sub
PIFACE_Undefine($$){
my($hash, $name) = @_;
RemoveInternalTimer($hash);
return;
}

sub
PIFACE_Set($@){
my ($hash, @a) = @_;
my $name = $hash->{NAME};
my $port = $a[1];
my $val  = $a[2];

Log3($name, 3, "PIFACE $name: set started with port: $port val: $val");
return;
}

1;


Eine Entity wird mit

define myPi PIFACE

korrekt angelegt.

Nun passiert folgendes - für mich völlig unverständlich: Sobald "myPi" irgendwo im Frontend angezeigt wird (z.B. beim Klick auf den Room "Unsorted" oder beim Klick auf die Detailanzeige selbst) wird die Set-Routine des Moduls durchlaufen, was zu völlig absurdem Verhalten führt.


2013.09.26 12:08:45 1: Including fhem.cfg
2013.09.26 12:08:45 3: telnetPort: port 7072 opened
2013.09.26 12:08:45 3: WEB: port 8083 opened
2013.09.26 12:08:45 3: PIFACE myPi: created
2013.09.26 12:08:45 1: Including ./log/fhem.save
2013.09.26 12:08:45 3: PIFACE myPi: set started with port: ? val:
2013.09.26 12:08:52 3: PIFACE myPi: set started with port: ? val:


Es handelt sich um die einzige Definition in einem ansonsten minimalistischen und aktuellen fhem 5.4


attr global altitude 40
attr global autoload_undefined_devices 1
attr global latitude 51.4316
attr global logfile ./log/fhem-%Y-%m.log
attr global longitude 6.8866
attr global modpath .
attr global motd none
attr global nofork 1
attr global statefile ./log/fhem.save
attr global userattr devStateIcon devStateStyle icon sortby webCmd
attr global verbose 3

define telnetPort telnet 7072 global

define WEB FHEMWEB 8083 global
attr WEB stylesheetPrefix dark

define Logfile FileLog ./log/fhem-%Y-%m.log fakelog

define myPi PIFACE


Bestimmt hab ich nur eine Kleinigkeit falsch gemacht - es ist ja nicht mein erstes Modul - aber ich komme nicht drauf, was da schiefläuft.
Bitte um Hilfe - ich grüble darüber jetzt schon seit gestern.

Danke!
Titel: Aw: wieso startet eine Anzeige im Frontend die Set-Routine?
Beitrag von: justme1968 am 26 September 2013, 12:36:15
set wird mit ? aufgerufen damit das web frontend die liste der set kommandos bekommt. get und attr müssen auch augerufen werden.

gruss
  andre
Titel: Aw: wieso startet eine Anzeige im Frontend die Set-Routine?
Beitrag von: betateilchen am 26 September 2013, 13:10:55
jetzt, wo Du es sagst... Danke!

Das bedeutet aber auch, dass dieser Aufruf zu Zeitpunkten stattfindet, wo er gar nicht nötig wäre.
Eigentlich würde doch (nach meinem Verständnis) der Aufruf bei Generierung der Detailansicht völlig ausreichen.
Denn immer dann, wenn ich die Detailansicht bekomme, erfolgt der Aufruf noch einmal.


---