Zweistufiges Modul write Funktion

Begonnen von Phunkafizer, 12 Januar 2016, 23:36:15

Vorheriges Thema - Nächstes Thema

Phunkafizer

Hallo,

ich versuche als Aufwärmübung ein Geräte Modul zu schreiben. Ich habe einen IT Schalter definiert, aber meine write Funktion wird beim Schalten nicht aufgerufen. Was fehlt noch?

Gruß
Stefan


##############################################
# 10_connair.pm 2016-01-11 Stefan Seegel <post@seegel-systeme.de>
# dev for connair, brennenstuhl brematic or connair-clone: www.seegel-systeme.de
package main;
use strict;
use warnings;

my $clientsSlowRF = ":FS20:";

my %matchListSlowRF = (
    "G:IT"        => "^i......\$"
);

sub connair_Initialize($) {
my ($hash) = @_;
$hash->{DefFn}   = "connair_Define";
$hash->{SetFn}     = "connair_Set";
$hash->{AttrList}  = "setList ". $readingFnAttributes;
$hash->{WriteFn} = "connair_Write";
#$hash->{ReadyFn} = "CUL_Ready";
}

sub connair_Define($$) {
my ($hash, $def) = @_;
my @param = split("[ \t][ \t]*", $def);

$hash->{Clients} = $clientsSlowRF;
$hash->{MatchList} = \%matchListSlowRF;

if (int(@param) != 3) {
my $msg = "wrong syntax: define <name> connair host";
Log3 undef, 2, $msg;
return $msg;
}

$hash->{host} = $param[2];

return undef;
}

sub connair_Set($@) {
return undef;
}

sub connair_Write($$$) {
my ($hash,$fn,$msg) = @_;

Log3 $hash->{name}, 3, "Writing to connair! $msg";
}

1;

=pod
=begin html
=end html
=cut

rudolfkoenig

Dein Modul bietet sich an als "phyisisches" Modul (wie CUL/FHZ/FHEM2FHEM) fuer FS20 Geraete (clientsSlowRF), und will "i....." Nachrichten generieren, die von einem IT Modul vestanden werden sollen. Da clientsSlowRF und matchListSlowRF nicht synchron sind, wird das in bestimmten Faellen nicht funktionieren.

Die Write Funktion wird nicht aufgerufen, weil du in keinem (FS20?) Geraet, dessen IODev auf dein Modul zeigt, eine Aktion ausgeloest hast.

Phunkafizer

So, kleines Stück weitergekommen, ich habe  X_Get implementiert weil sonst das IT Modul schimpft wenn da nichts zurückkommt (warum?). Es kommt aber immer noch nichts in meinem Modul bei X_Write an wenn ich den IT Taster anklicke.

Meine config:

define con1 connair raspy.fritz.box
define schalter1 IT 000000000F FF F0


Im Log:

2016.01.13 20:48:07 5: Cmd: >set schalter1 on<
2016.01.13 20:48:07 2: IT set schalter1 on
2016.01.13 20:48:07 3: CONCOM raw CONMSG is000000000FFF
2016.01.13 20:48:07 4: Answer from con1:   raw => is000000000FFF
2016.01.13 20:48:07 5: Triggering schalter1 (1 changes)
2016.01.13 20:48:07 5: Notify loop for schalter1 on
2016.01.13 20:48:07 4: eventTypes: IT schalter1 on -> on



##############################################
# 10_connair.pm 2016-01-11
# dev for connair, brennenstuhl brematic or connair-clone
package main;
use strict;
use warnings;

my $clientsSlowRF = ":IT:";

my %matchListSlowRF = (
    "G:IT"        => "^i......\$"
);

sub connair_Initialize($) {
my ($hash) = @_;
$hash->{DefFn}   = "connair_Define";
$hash->{SetFn}     = "connair_Set";
$hash->{GetFn}     = "connair_Get";
$hash->{AttrList}  = "setList ". $readingFnAttributes;
$hash->{WriteFn} = "connair_Write";
}

sub connair_Define($$) {
my ($hash, $def) = @_;
my @param = split("[ \t][ \t]*", $def);

$hash->{Clients} = $clientsSlowRF;
$hash->{MatchList} = \%matchListSlowRF;

if (int(@param) != 3) {
my $msg = "wrong syntax: define <name> connair host";
Log3 undef, 2, $msg;
return $msg;
}

$hash->{host} = $param[2];

return undef;
}

sub connair_Set($@) {
return undef;
}

sub connair_Get($@) {
  my ($hash, $name, $cmd, $msg) = @_;
my $arg = join(" ", $msg);

my $getlist = "raw";

if ($cmd eq "raw") {
Log3 $hash->{NAME}, 3, "CONCOM $cmd CONMSG $msg";
}
else {
Log3 $hash->{NAME}, 3, "unknown command $msg";
return "Unknown argument $cmd, choose one of ".$getlist;
}

return "$name $cmd => $msg";
}

sub connair_Write($$$) {
my ($hash,$fn,$msg) = @_;

Log3 $hash->{name}, 2, "Writing to connair! $msg";
}

1;

=pod
=begin html

=end html
=cut