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