mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-03 23:06:37 +00:00
10_EnOcean: GP teach-in modified
git-svn-id: https://svn.fhem.de/fhem/trunk@19651 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
32424a97a7
commit
c3a133a9bc
@ -6417,11 +6417,11 @@ sub EnOcean_Set($@)
|
|||||||
if ($setChannelName eq "?") {
|
if ($setChannelName eq "?") {
|
||||||
$channelName = "none";
|
$channelName = "none";
|
||||||
if ($channelType == 1 && defined $EnO_gpValueData{$signalType}{name}) {
|
if ($channelType == 1 && defined $EnO_gpValueData{$signalType}{name}) {
|
||||||
$channelName = $EnO_gpValueData{$signalType}{name};
|
$channelName = $EnO_gpValueData{$signalType}{name};
|
||||||
} elsif ($channelType == 2 && defined $EnO_gpValueFlag{$signalType}{name}) {
|
} elsif ($channelType == 2 && defined $EnO_gpValueFlag{$signalType}{name}) {
|
||||||
$channelName = $EnO_gpValueFlag{$signalType}{name};
|
$channelName = $EnO_gpValueFlag{$signalType}{name};
|
||||||
} elsif ($channelType == 3 && defined $EnO_gpValueEnum{$signalType}{name}) {
|
} elsif ($channelType == 3 && defined $EnO_gpValueEnum{$signalType}{name}) {
|
||||||
$channelName = $EnO_gpValueEnum{$signalType}{name};
|
$channelName = $EnO_gpValueEnum{$signalType}{name};
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$channelName = $setChannelName;
|
$channelName = $setChannelName;
|
||||||
@ -12150,7 +12150,7 @@ sub EnOcean_Parse($$)
|
|||||||
my $channelName;
|
my $channelName;
|
||||||
my $channelType;
|
my $channelType;
|
||||||
my $cntr = 0;
|
my $cntr = 0;
|
||||||
my $dataOutboundDefLen = 0;
|
my $teachInDataLen = 0;
|
||||||
my @gpDef;
|
my @gpDef;
|
||||||
my $signalType;
|
my $signalType;
|
||||||
#Log3 $name, 2, "EnOcean $name parse GPTI header: $header data: $data start";
|
#Log3 $name, 2, "EnOcean $name parse GPTI header: $header data: $data start";
|
||||||
@ -12173,23 +12173,42 @@ sub EnOcean_Parse($$)
|
|||||||
}
|
}
|
||||||
#Log3 $name, 2, "EnOcean $name parse GPTI channel: $channel channelType: $channelType signalType: $signalType data: $data";
|
#Log3 $name, 2, "EnOcean $name parse GPTI channel: $channel channelType: $channelType signalType: $signalType data: $data";
|
||||||
|
|
||||||
######
|
|
||||||
if ($channelType == 0) {
|
if ($channelType == 0) {
|
||||||
# teach-in information
|
# teach-in information
|
||||||
|
$data =~ m/^(.{8})(.*)$/;
|
||||||
|
$teachInDataLen = unpack('C', pack('B8', $1)) * 8;
|
||||||
|
$data = $2;
|
||||||
if ($signalType == 1) {
|
if ($signalType == 1) {
|
||||||
# outbound channel description
|
# outbound channels description following
|
||||||
$channelDir = "O";
|
$channelDir = "O";
|
||||||
$data =~ m/^(.{8})(.*)$/;
|
|
||||||
$dataOutboundDefLen = unpack('C', pack('B8', $1));
|
|
||||||
$data = $2;
|
|
||||||
|
|
||||||
} elsif ($signalType == 2) {
|
} elsif ($signalType == 2) {
|
||||||
# produkt ID
|
# produkt ID
|
||||||
$data =~ m/^(.{32})(.*)$/;
|
$data =~ m/^(.{$teachInDataLen})(.*)$/;
|
||||||
$attr{$name}{productID} = EnOcean_convBitToHex($1);
|
$attr{$name}{productID} = EnOcean_convBitToHex($1);
|
||||||
$data = $2;
|
$data = $2;
|
||||||
|
} elsif ($signalType == 3) {
|
||||||
|
######
|
||||||
|
# Connected GSI Sensor IDs
|
||||||
|
my $gsiIdDataLen = $teachInDataLen - 16;
|
||||||
|
$data =~ m/^(.{8})(.{8})(.{$gsiIdDataLen})(.*)$/;
|
||||||
|
$attr{$name}{gsiSocket} = unpack('C', pack('B8', $1));
|
||||||
|
my ($sensors, $gsiIdData) = (unpack('C', pack('B8', $2)), $3);
|
||||||
|
$data = $4;
|
||||||
|
my $gsiSensorName;
|
||||||
|
for (my $i = 0; $i <= $sensors; $i++) {
|
||||||
|
$gsiIdData =~ m/^(.{8})(.{16})(.{24})(.*)$/;
|
||||||
|
$gsiSensorName = sprintf "gsiSensor-%03d", $i;
|
||||||
|
$attr{$name}{$gsiSensorName} = sprintf "%02s:%04s:%06s", EnOcean_convBitToHex($1), EnOcean_convBitToHex($2), EnOcean_convBitToHex($3);
|
||||||
|
$gsiIdData = $4;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
if ($teachInDataLen == 0) {
|
||||||
|
Log3 $name, 2, "EnOcean $name parse GPTI teach-in info signalType: $signalType not supported";
|
||||||
|
} else {
|
||||||
|
$data =~ m/^(.{$teachInDataLen})(.*)$/;
|
||||||
|
Log3 $name, 2, "EnOcean $name parse GPTI teach-in info signalType: $signalType data: " . EnOcean_convBitToHex($1) . " not supported";
|
||||||
|
$data = $2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} elsif ($channelType == 1) {
|
} elsif ($channelType == 1) {
|
||||||
@ -12848,7 +12867,7 @@ sub EnOcean_Parse($$)
|
|||||||
my $channelDef;
|
my $channelDef;
|
||||||
my $channelName;
|
my $channelName;
|
||||||
my $channelType;
|
my $channelType;
|
||||||
my $dataOutboundDefLen = 0;
|
my $teachInDataLen = 0;
|
||||||
my $gpData;
|
my $gpData;
|
||||||
my @gpDef;
|
my @gpDef;
|
||||||
my $gpIdx;
|
my $gpIdx;
|
||||||
@ -16584,6 +16603,9 @@ sub EnOcean_gpConvDataToValue($$$$$) {
|
|||||||
|
|
||||||
if ($channelType == 3) {
|
if ($channelType == 3) {
|
||||||
# enumeration
|
# enumeration
|
||||||
|
if (defined $EnO_gpValueEnum{$signalType}{unit}) {
|
||||||
|
$readingUnit = $EnO_gpValueEnum{$signalType}{unit};
|
||||||
|
}
|
||||||
if (defined $EnO_gpValueEnum{$signalType}{enum}{$data}) {
|
if (defined $EnO_gpValueEnum{$signalType}{enum}{$data}) {
|
||||||
$readingValue = $EnO_gpValueEnum{$signalType}{enum}{$data};
|
$readingValue = $EnO_gpValueEnum{$signalType}{enum}{$data};
|
||||||
$readingFormat = '%s';
|
$readingFormat = '%s';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user