mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-05-01 20:20:10 +00:00

git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@1305 2b470e98-0d58-463d-a4d8-8e2adae1ed80
124 lines
2.6 KiB
Perl
Executable File
124 lines
2.6 KiB
Perl
Executable File
#################################################################################
|
|
# 46_TRX_ELSE.pm
|
|
# Modul for FHEM for unkown RFXTRX messages
|
|
#
|
|
# This script is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
#
|
|
##################################
|
|
#
|
|
# values for "set global verbose"
|
|
# 4: log unknown protocols
|
|
# 5: log decoding hexlines for debugging
|
|
#
|
|
# $Id$
|
|
package main;
|
|
|
|
use strict;
|
|
use warnings;
|
|
use Switch;
|
|
|
|
# Debug this module? YES = 1, NO = 0
|
|
my $TRX_ELSE_debug = 0;
|
|
|
|
my $time_old = 0;
|
|
|
|
sub
|
|
TRX_ELSE_Initialize($)
|
|
{
|
|
my ($hash) = @_;
|
|
|
|
$hash->{Match} = "^.*";
|
|
$hash->{DefFn} = "TRX_ELSE_Define";
|
|
$hash->{UndefFn} = "TRX_ELSE_Undef";
|
|
$hash->{ParseFn} = "TRX_ELSE_Parse";
|
|
$hash->{AttrList} = "IODev do_not_notify:1,0 loglevel:0,1,2,3,4,5,6";
|
|
|
|
Log 1, "TRX_ELSE: Initialize" if ($TRX_ELSE_debug == 1);
|
|
}
|
|
|
|
#####################################
|
|
sub
|
|
TRX_ELSE_Define($$)
|
|
{
|
|
my ($hash, $def) = @_;
|
|
my @a = split("[ \t][ \t]*", $def);
|
|
|
|
my $a = int(@a);
|
|
#print "a0 = $a[0]";
|
|
return "wrong syntax: define <name> TRX_ELSE code" if(int(@a) != 3);
|
|
|
|
my $name = $a[0];
|
|
my $code = $a[2];
|
|
|
|
$hash->{CODE} = $code;
|
|
#$modules{TRX_ELSE}{defptr}{$name} = $hash;
|
|
$modules{TRX_ELSE}{defptr}{$code} = $hash;
|
|
AssignIoPort($hash);
|
|
|
|
return undef;
|
|
}
|
|
|
|
#####################################
|
|
sub
|
|
TRX_ELSE_Undef($$)
|
|
{
|
|
my ($hash, $name) = @_;
|
|
delete($modules{TRX_ELSE}{defptr}{$name});
|
|
return undef;
|
|
}
|
|
|
|
|
|
my $DOT = q{_};
|
|
|
|
sub
|
|
TRX_ELSE_Parse($$)
|
|
{
|
|
my ($hash, $msg) = @_;
|
|
|
|
my $time = time();
|
|
if ($time_old ==0) {
|
|
Log 5, "TRX_ELSE: decoding delay=0 hex=$msg";
|
|
} else {
|
|
my $time_diff = $time - $time_old ;
|
|
Log 5, "TRX_ELSE: decoding delay=$time_diff hex=$msg";
|
|
}
|
|
$time_old = $time;
|
|
|
|
# convert to binary
|
|
my $bin_msg = pack('H*', $msg);
|
|
#Log 1, "TRX_ELSE: 2 hex=$hexline";
|
|
|
|
# convert string to array of bytes. Skip length byte
|
|
my @rfxcom_data_array = ();
|
|
foreach (split(//, substr($bin_msg,1))) {
|
|
push (@rfxcom_data_array, ord($_) );
|
|
}
|
|
|
|
my $num_bytes = ord(substr($msg,0,1));
|
|
|
|
if ($num_bytes < 3) {
|
|
return;
|
|
}
|
|
|
|
my $type = $rfxcom_data_array[0];
|
|
|
|
Log 1, "TRX_ELSE: num_bytes=$num_bytes hex=$msg type=$type" if ($TRX_ELSE_debug == 1);
|
|
my $res = "";
|
|
if ($type == 0x02) {
|
|
my $subtype = $rfxcom_data_array[1];
|
|
my $msg = $rfxcom_data_array[2];
|
|
if (($msg != 0x00) && ($msg != 0x01)) {
|
|
Log 0, "TRX_ELSE: error transmit NACK=".sprintf("%02x",$msg);
|
|
}
|
|
} else {
|
|
Log 0, "TRX_ELSE: hex=$msg";
|
|
}
|
|
|
|
|
|
return "";
|
|
}
|
|
|
|
1;
|