2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-07 16:59:18 +00:00

00_SIGNALduino: Missing module like Digest::CRC does not prevent loading the module

git-svn-id: https://svn.fhem.de/fhem/trunk@25549 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
sidey79 2022-01-23 10:59:59 +00:00
parent 6f4c496f7b
commit 763f38dd29
2 changed files with 35 additions and 13 deletions

View File

@ -1,5 +1,5 @@
# $Id$
# v3.5.2 - https://github.com/RFD-FHEM/RFFHEM/tree/master
# v3.5.3 - https://github.com/RFD-FHEM/RFFHEM/tree/master
# The module is inspired by the FHEMduino project and modified in serval ways for processing the incoming messages
# see http://www.fhemwiki.de/wiki/SIGNALDuino
# It was modified also to provide support for raw message handling which can be send from the SIGNALduino
@ -14,9 +14,9 @@
package main;
use strict;
use warnings;
#use version 0.77; our $VERSION = version->declare('v3.5.2');
#use version 0.77; our $VERSION = version->declare('v3.5.3');
my $missingModulSIGNALduino = '';
my $missingModulSIGNALduino = ' ';
use DevIo;
require "99_Utils.pm" if (!defined $modules{"Utils"} || !exists $modules{"Utils"}{"LOADED"} ); ## no critic
@ -24,8 +24,8 @@ use Carp;
no warnings 'portable';
eval {use Data::Dumper qw(Dumper);1};
eval {use Digest::CRC;1 or $missingModulSIGNALduino .= 'Digest::CRC '};
eval {use JSON;1 or $missingModulSIGNALduino .= 'JSON '};
use constant HAS_JSON => defined eval { require JSON; JSON->import; };
eval {use Scalar::Util qw(looks_like_number);1};
eval {use Time::HiRes qw(gettimeofday);1} ;
@ -38,7 +38,7 @@ use List::Util qw(first);
use constant {
SDUINO_VERSION => '3.5.2', # Datum wird automatisch bei jedem pull request aktualisiert
SDUINO_VERSION => '3.5.3', # Datum wird automatisch bei jedem pull request aktualisiert
SDUINO_INIT_WAIT_XQ => 1.5, # wait disable device
SDUINO_INIT_WAIT => 2,
SDUINO_INIT_MAXRETRY => 3,
@ -295,15 +295,17 @@ sub SIGNALduino_Initialize {
Log3 'SIGNALduino', 4, qq[SIGNALduino_Initialize: rfmode list: @rfmode];
}
$hash->{DefFn} = \&SIGNALduino_Define;
$hash->{UndefFn} = \&SIGNALduino_Undef;
# Provider
$hash->{ReadFn} = \&SIGNALduino_Read;
$hash->{WriteFn} = \&SIGNALduino_Write;
$hash->{ReadyFn} = \&SIGNALduino_Ready;
# Normal devices
$hash->{DefFn} = \&SIGNALduino_Define;
$hash->{FingerprintFn} = \&SIGNALduino_FingerprintFn;
$hash->{UndefFn} = \&SIGNALduino_Undef;
$hash->{GetFn} = \&SIGNALduino_Get;
$hash->{SetFn} = \&SIGNALduino_Set;
$hash->{AttrFn} = \&SIGNALduino_Attr;
@ -1065,7 +1067,7 @@ sub SIGNALduino_Get_FhemWebList {
sub SIGNALduino_Get_availableFirmware {
my ($hash, @a) = @_;
if ($missingModulSIGNALduino =~ m/JSON/ )
if ( !HAS_JSON )
{
$hash->{logMethod}->($hash->{NAME}, 1, "$hash->{NAME}: get $a[0] failed. Please install Perl module JSON. Example: sudo apt-get install libjson-perl");
return "$a[0]: \n\nFetching from github is not possible. Please install JSON. Example:<br><code>sudo apt-get install libjson-perl</code>";
@ -2940,7 +2942,8 @@ sub SIGNALduino_Parse_MN {
my $method = $hash->{protocolObject}->getProperty($id,'method',undef);
my @methodReturn = defined $method ? $method->($hash->{protocolObject},$rawData) : ($rawData);
if ($#methodReturn != 0) {
$hash->{logMethod}->($name, 4, qq{$name: Parse_MN, Error! method $methodReturn[1]});
my $vl = $methodReturn[1] =~ /missing\smodule/xms ? 1 : 4;
$hash->{logMethod}->($name, $vl, qq{$name: Parse_MN, Error! method $methodReturn[1]});
next mnIDLoop;
}
$dmsg = sprintf('%s%s',$hash->{protocolObject}->checkProperty($id,'preamble',''),$methodReturn[0]);
@ -3958,6 +3961,7 @@ sub SIGNALduino_githubParseHttpResponse {
}
elsif($data ne '' && defined($hardware)) # wenn die Abfrage erfolgreich war ($data enthaelt die Ergebnisdaten des HTTP Aufrufes)
{
my $json_array = decode_json($data);
#print Dumper($json_array);
if ($param->{command} eq 'queryReleases') {

View File

@ -13,7 +13,9 @@ package lib::SD_Protocols;
use strict;
use warnings;
use Carp qw(croak carp);
use Digest::CRC;
use constant HAS_DigestCRC => defined eval { require Digest::CRC; };
use constant HAS_JSON => defined eval { require JSON; };
our $VERSION = '2.05';
use Storable qw(dclone);
use Scalar::Util qw(blessed);
@ -142,7 +144,11 @@ sub LoadHashFromJson {
my $json_text = do { local $/ = undef; <$json_fh> };
close $json_fh or croak "Can't close '$filename' after reading";
use JSON;
if (!HAS_JSON)
{
croak("Perl Module JSON not availble. Needs to be installed.");
}
my $json = JSON->new;
$json = $json->relaxed(1);
my $ver = $json->incr_parse($json_text);
@ -1819,7 +1825,13 @@ sub ConvBresser_6in1 {
my $hexLength = length ($hexData);
return ( 1, 'ConvBresser_6in1, hexData is to short' ) if ( $hexLength < 36 ); # check double, in def length_min set
return ( 1,'ConvBresser_6in1, missing module , please install modul Digest::CRC' )
if (!HAS_DigestCRC);
my $crc = substr( $hexData, 0, 4 );
my $ctx = Digest::CRC->new(width => 16, poly => 0x1021);
my $calcCrc = sprintf( "%04X", $ctx->add( pack 'H*', substr( $hexData, 4, 30 ) )->digest );
@ -1858,6 +1870,9 @@ sub ConvPCA301 {
'ConvPCA301, Usage: Input #1, $hexData needs to be at least 24 chars long'
) if ( length($hexData) < 24 ); # check double, in def length_min set
return ( 1,'ConvPCA301, missing module , please install modul Digest::CRC' )
if (!HAS_DigestCRC);
my $checksum = substr( $hexData, 20, 4 );
my $ctx = Digest::CRC->new(
width => 16,
@ -1980,6 +1995,9 @@ sub ConvLaCrosse {
return ( 1,'ConvLaCrosse, Usage: Input #1, $hexData needs to be at least 8 chars long' )
if ( length($hexData) < 8 ) ; # check number of length for this sub to not throw an error
return ( 1,'ConvLaCrosse, missing module , please install modul Digest::CRC' )
if (!HAS_DigestCRC);
my $ctx = Digest::CRC->new( width => 8, poly => 0x31 );
my $calcCrc = $ctx->add( pack 'H*', substr( $hexData, 0, 8 ) )->digest;
my $checksum = sprintf( "%d", hex( substr( $hexData, 8, 2 ) ) );