2015-10-22 20:55:30 +00:00
##############################################
2016-02-04 22:07:44 +00:00
# $Id$
2019-02-20 21:46:10 +00:00
#
2015-10-22 20:55:30 +00:00
# The file is part of the SIGNALduino project
2019-02-20 21:46:10 +00:00
# see http://www.fhemwiki.de/wiki/SIGNALduino to support debugging of unknown signal data
2015-10-22 20:55:30 +00:00
# The purpos is to use it as addition to the SIGNALduino
#
2022-01-17 20:46:03 +00:00
# 2015-2018 S.Butzek
# 2018-2020 S.Butzek, HomeAutoUser, elektron-bbs
2015-10-22 20:55:30 +00:00
package main ;
use strict ;
use warnings ;
use POSIX ;
2022-01-17 20:46:03 +00:00
use List::Util qw( any ) ; # for any function
use lib::SD_Protocols ; # for any function
2019-02-20 21:46:10 +00:00
2022-01-17 20:46:03 +00:00
my @ bitcountlength = ( 0 , 0 , 0 ) ; # array min|default|max
2015-10-22 20:55:30 +00:00
#####################################
2022-01-17 20:46:03 +00:00
sub SIGNALduino_un_Initialize {
2015-10-22 20:55:30 +00:00
my ( $ hash ) = @ _ ;
2020-04-07 21:20:33 +00:00
$ hash - > { Match } = '^[u]\d+(?:.\d)?#.*' ;
2022-01-17 20:46:03 +00:00
$ hash - > { DefFn } = \ & SIGNALduino_un_Define ;
$ hash - > { UndefFn } = \ & SIGNALduino_un_Undef ;
$ hash - > { AttrFn } = \ & SIGNALduino_un_Attr ;
$ hash - > { SetFn } = \ & SIGNALduino_un_Set ;
$ hash - > { ParseFn } = \ & SIGNALduino_un_Parse ;
$ hash - > { AttrList } = 'IODev do_not_notify:0,1 stateFormat showtime:0,1 ignore:0,1 ' . $ readingFnAttributes ;
return ;
2015-10-22 20:55:30 +00:00
}
#####################################
2022-01-17 20:46:03 +00:00
sub SIGNALduino_un_Define {
2015-10-22 20:55:30 +00:00
my ( $ hash , $ def ) = @ _ ;
my @ a = split ( "[ \t][ \t]*" , $ def ) ;
2022-01-17 20:46:03 +00:00
return ' wrong syntax: define <name> SIGNALduino_un <code> <optional IODEV> (' . int ( @ a ) . ')' if ( int ( @ a ) < 3 || int ( @ a ) > 4 ) ;
2015-10-22 20:55:30 +00:00
2022-01-17 20:46:03 +00:00
$ hash - > { lastMSG } = '' ;
$ hash - > { bitMSG } = '' ;
$ hash - > { STATE } = 'Defined' ;
2019-02-20 21:46:10 +00:00
my $ name = $ hash - > { NAME } ;
2022-01-17 20:46:03 +00:00
2019-02-20 21:46:10 +00:00
my $ iodevice = $ a [ 3 ] if ( $ a [ 3 ] ) ;
$ modules { SIGNALduino_un } { defptr } { $ a [ 2 ] } = $ hash ;
2022-01-17 20:46:03 +00:00
2019-02-20 21:46:10 +00:00
my $ ioname = $ modules { SIGNALduino_un } { defptr } { ioname } if ( exists $ modules { SIGNALduino_un } { defptr } { ioname } && not $ iodevice ) ;
$ iodevice = $ ioname if not $ iodevice ;
2022-01-17 20:46:03 +00:00
2019-02-20 21:46:10 +00:00
### Attributes ###
if ( $ init_done == 1 ) {
2022-01-17 20:46:03 +00:00
$ attr { $ name } { stateFormat } = "{ReadingsVal('$name', 'state', '').' | '.ReadingsTimestamp('$name', 'state', '-');}" if ( not defined ( $ attr { $ name } { stateformat } ) ) ;
2019-02-20 21:46:10 +00:00
}
2022-01-17 20:46:03 +00:00
2019-02-20 21:46:10 +00:00
AssignIoPort ( $ hash , $ iodevice ) ;
2022-01-17 20:46:03 +00:00
return ;
2015-10-22 20:55:30 +00:00
}
#####################################
2022-01-17 20:46:03 +00:00
sub SIGNALduino_un_Undef {
2015-10-22 20:55:30 +00:00
my ( $ hash , $ name ) = @ _ ;
2019-02-20 21:46:10 +00:00
delete ( $ modules { SIGNALduino_un } { defptr } { $ hash - > { DEF } } ) if ( $ hash && $ hash - > { DEF } ) ;
delete ( $ modules { SIGNALduino_un } { defptr } { ioname } ) if ( exists $ modules { SIGNALduino_un } { defptr } { ioname } ) ;
2022-01-17 20:46:03 +00:00
return ;
2015-10-22 20:55:30 +00:00
}
2019-02-20 21:46:10 +00:00
#####################################
2015-10-22 20:55:30 +00:00
sub SIGNALduino_un_hex2bin {
2022-01-17 20:46:03 +00:00
my $ h = shift ;
my $ hlen = length ( $ h ) ;
my $ blen = $ hlen * 4 ;
return unpack ( "B$blen" , pack ( "H$hlen" , $ h ) ) ;
2015-10-22 20:55:30 +00:00
}
#####################################
2022-01-17 20:46:03 +00:00
sub SIGNALduino_un_Parse {
my ( $ hash , $ msg ) = @ _ ;
my @ a = split ( "" , $ msg ) ;
my $ name = 'SIGNALduino_unknown' ; # $hash->{NAME};
my $ ioname = $ hash - > { NAME } ;
Log3 $ hash , 4 , "$name incomming msg: $msg" ;
#my $rawData=substr($msg,2);
my ( $ protocol , $ rawData ) = split ( "#" , $ msg ) ;
my $ dummyreturnvalue = 'Unknown, please report' ;
$ protocol =~ s/^[uP](\d+)/$1/ ; # extract protocol
Log3 $ hash , 4 , "$name rawData: $rawData" ;
Log3 $ hash , 4 , "$name Protocol: $protocol" ;
my $ hlen = length ( $ rawData ) ;
my $ blen = $ hlen * 4 ;
my $ bitData = unpack ( "B$blen" , pack ( "H$hlen" , $ rawData ) ) ;
Log3 $ hash , 4 , "$name converted to bits: $bitData" ;
if ( $ protocol == 21 && length ( $ bitData ) >= 32 ) ##Einhell doorshutter
{
Log3 $ hash , 4 , "$name / Einhell doorshutter received" ;
my $ id = oct ( "0b" . substr ( $ bitData , 0 , 28 ) ) ;
my $ dir = oct ( "0b" . substr ( $ bitData , 28 , 2 ) ) ;
my $ channel = oct ( "0b" . substr ( $ bitData , 30 , 3 ) ) ;
Log3 $ hash , 4 , "$name found doorshutter from Einhell. id=$id, channel=$channel, direction=$dir" ;
} elsif ( $ protocol == 23 && length ( $ bitData ) >= 32 ) ##Perl Sensor
{
my $ SensorTyp = 'perl NC-7367?' ;
my $ id = oct ( "0b" . substr ( $ bitData , 4 , 4 ) ) ;
my $ channel = SIGNALduino_un_bin2dec ( substr ( $ bitData , 9 , 3 ) ) + 1 ;
my $ temp = oct ( "0b" . substr ( $ bitData , 20 , 8 ) ) / 10 ;
my $ bat = int ( substr ( $ bitData , 8 , 1 ) ) eq "1" ? 'ok' : 'critical' ; # Eventuell falsch!
my $ sendMode = int ( substr ( $ bitData , 4 , 1 ) ) eq "1" ? 'auto' : 'manual' ; # Eventuell falsch!
my $ type = SIGNALduino_un_bin2dec ( substr ( $ bitData , 0 , 4 ) ) ;
Log3 $ hash , 4 , "$name decoded protocolid: 7 ($SensorTyp / type=$type) mode=$sendMode, sensor id=$id, channel=$channel, temp=$temp, bat=$bat\n" ;
}
##############################################################################################
# version 1) message with u..# without development y attribut -> Unknown code u..# , help me!
# version 2) message with u..# and development y attribut -> no message for Unknown code
##############################################################################################
my $ value = AttrVal ( $ ioname , 'development' , '' ) ;
my @ delevopmentargs = split ( ',' , $ value ) ;
if ( $ value =~ m/([umyp]$protocol|1)/g ) { # check for u|m|y|p|1 development (u|m|y|p downwards compatibility)
### Help Device + Logfile ###
Log3 $ hash , 5 , "$name: $ioname Protocol $1$protocol found in AttrVal development!" ;
my $ def ;
my $ devicedef = $ name . '_' . $ protocol ;
$ def = $ modules { SIGNALduino_un } { defptr } { $ devicedef } if ( ! $ def ) ;
$ modules { SIGNALduino_un } { defptr } { ioname } = $ ioname ;
if ( ! $ def ) {
Log3 $ ioname , 1 , "$ioname: $name UNDEFINED sensor " . $ devicedef . ' detected' ;
return "UNDEFINED $devicedef SIGNALduino_un $devicedef" ;
}
my $ hash = $ def ;
my $ name = $ hash - > { NAME } ;
$ hash - > { lastMSG } = $ rawData ;
$ hash - > { bitMSG } = $ bitData ;
my $ bitcount = length ( $ bitData ) ;
$ bitcountlength [ 1 ] = $ bitcount if ( $ bitcountlength [ 1 ] == 0 ) ; # to first receive
if ( $ bitcount != $ bitcountlength [ 1 ] ) { # comparison
if ( $ bitcount gt $ bitcountlength [ 1 ] ) {
$ bitcountlength [ 2 ] = $ bitcount ;
$ bitcountlength [ 0 ] = $ bitcountlength [ 1 ] ;
}
if ( $ bitcount lt $ bitcountlength [ 1 ] ) {
$ bitcountlength [ 0 ] = $ bitcount ;
$ bitcountlength [ 2 ] = $ bitcountlength [ 1 ] ;
}
$ bitcountlength [ 1 ] = $ bitcount ;
readingsSingleUpdate ( $ hash , 'bitCountLength' , "$bitcountlength[0] to $bitcountlength[2]" , 0 ) ;
}
my $ hexcount = length ( $ rawData ) ;
my $ bitDataInvert = $ bitData ;
$ bitDataInvert =~ tr /01/ 10 / ; # invert message and check if it is possible to deocde now
my $ rawDataInvert = lib::SD_Protocols:: binStr2hexStr ( $ bitDataInvert ) ;
my $ seconds = ReadingsAge ( $ name , 'state' , 0 ) ;
readingsBeginUpdate ( $ hash ) ;
readingsBulkUpdate ( $ hash , 'state' , $ rawData , 0 ) ;
readingsBulkUpdate ( $ hash , 'bitMsg' , $ bitData ) ;
readingsBulkUpdate ( $ hash , 'bitMsg_invert' , $ bitDataInvert ) ;
readingsBulkUpdate ( $ hash , 'bitCount' , $ bitcount ) ;
readingsBulkUpdate ( $ hash , 'hexMsg' , $ rawData ) ;
readingsBulkUpdate ( $ hash , 'hexMsg_invert' , $ rawDataInvert ) ;
readingsBulkUpdate ( $ hash , 'hexCount_or_nibble' , $ hexcount ) ;
readingsBulkUpdate ( $ hash , 'lastInputDev' , $ ioname ) ;
readingsBulkUpdate ( $ hash , 'past_seconds' , $ seconds ) ;
readingsEndUpdate ( $ hash , 1 ) ; # Notify is done by Dispatch
### Example Logfile ###
# 2018-09-24_17:32:53 SIGNALduino_unknown_85 UserInfo: Temp 22.4 Hum 52
# 2018-09-24_17:34:25 SIGNALduino_unknown_85 bitMsg: 11110011101110100011100111111110110110111110111110100110001100101000
# 2018-09-24_17:34:25 SIGNALduino_unknown_85 bitMsg_invert: 00001100010001011100011000000001001001000001000001011001110011010111
# 2018-09-24_17:34:25 SIGNALduino_unknown_85 bitCount: 68
# 2018-09-24_17:34:25 SIGNALduino_unknown_85 hexMsg: F3BA39FEDBEFA6328
# 2018-09-24_17:34:25 SIGNALduino_unknown_85 hexMsg_invert: 0C45C601241059CD7
# 2018-09-24_17:34:25 SIGNALduino_unknown_85 hexCount or nibble: 17
# 2018-09-24_17:34:25 SIGNALduino_unknown_85 lastInputDev: sduino_dummy
return $ name ;
} else {
### nothing - Info ###
my $ value = AttrVal ( $ ioname , 'development' , '' ) ; # read attr development from IODev
if ( $ value ne '' ) {
$ value . = ',' ; # some definitions already exist, so prepend a new one
}
$ value . = "u$protocol" ;
Log3 $ hash , 4 , "$name $ioname Protocol:$protocol | To help decode or debug, please add u$protocol! (attr $ioname development $value)" if ( $ protocol ) ; # To help decode or debug, please add u84! (attr sduino_dummy development u84)
}
############################
Log3 $ hash , 4 , $ dummyreturnvalue ;
return ;
2015-10-22 20:55:30 +00:00
}
2019-02-20 21:46:10 +00:00
#####################################
2022-01-17 20:46:03 +00:00
sub SIGNALduino_un_Set {
2019-02-20 21:46:10 +00:00
my ( $ hash , $ name , @ a ) = @ _ ;
2022-01-17 20:46:03 +00:00
my $ ret = 'UserInfo' ;
if ( $ a [ 0 ] ne '?' ) {
my $ input = join " " , @ a [ 1 .. ( scalar ( @ a ) - 1 ) ] ; # Teile der Eingabe zusammenfassen
return "wrong argument! please use $ret argument and one comment." if ( $ a [ 0 ] ne 'UserInfo' || not $ a [ 1 ] ) ;
readingsBeginUpdate ( $ hash ) ;
readingsBulkUpdate ( $ hash , 'state' , 'UserMSG' , 0 ) ;
readingsBulkUpdate ( $ hash , 'UserMSG' , $ input ) if ( defined ( $ input ) ) ;
readingsEndUpdate ( $ hash , 1 ) ; # Notify is done by Dispatch
return ; # because user is in same windows without message, better to use
2019-02-20 21:46:10 +00:00
}
2022-01-17 20:46:03 +00:00
2019-02-20 21:46:10 +00:00
return $ ret ;
}
2015-10-22 20:55:30 +00:00
2019-02-20 21:46:10 +00:00
#####################################
2022-01-17 20:46:03 +00:00
sub SIGNALduino_un_Attr {
2015-10-22 20:55:30 +00:00
my @ a = @ _ ;
# Make possible to use the same code for different logical devices when they
# are received through different physical devices.
2022-01-17 20:46:03 +00:00
return if ( $ a [ 0 ] ne 'set' || $ a [ 2 ] ne 'IODev' ) ;
2015-10-22 20:55:30 +00:00
my $ hash = $ defs { $ a [ 1 ] } ;
my $ iohash = $ defs { $ a [ 3 ] } ;
2019-02-20 21:46:10 +00:00
my $ cde = $ hash - > { DEF } ;
2022-01-17 20:46:03 +00:00
2019-02-20 21:46:10 +00:00
#delete($modules{SIGNALduino_un}{defptr}{$cde});
#$modules{SIGNALduino_un}{defptr}{$iohash->{NAME} . "." . $cde} = $hash;
2022-01-17 20:46:03 +00:00
return ;
2015-10-22 20:55:30 +00:00
}
2019-02-20 21:46:10 +00:00
#####################################
2022-01-17 20:46:03 +00:00
sub SIGNALduino_un_binaryToNumber {
my $ binstr = shift ;
my $ fbit = shift ;
my $ lbit = $ fbit ;
$ lbit = shift if @ _ ;
return oct ( "0b" . substr ( $ binstr , $ fbit , ( $ lbit - $ fbit ) + 1 ) ) ;
2016-02-22 21:09:54 +00:00
}
2019-02-20 21:46:10 +00:00
#####################################
2022-01-17 20:46:03 +00:00
sub SIGNALduino_un_binaryToBoolean {
return int ( SIGNALduino_un_binaryToNumber ( @ _ ) ) ;
2016-02-22 21:09:54 +00:00
}
2019-02-20 21:46:10 +00:00
#####################################
2022-01-17 20:46:03 +00:00
sub SIGNALduino_un_bin2dec {
2015-10-22 20:55:30 +00:00
my $ h = shift ;
my $ int = unpack ( "N" , pack ( "B32" , substr ( "0" x 32 . $ h , - 32 ) ) ) ;
return sprintf ( "%d" , $ int ) ;
}
2019-02-20 21:46:10 +00:00
#####################################
2022-01-17 20:46:03 +00:00
sub SIGNALduino_un_binflip {
2015-10-22 20:55:30 +00:00
my $ h = shift ;
my $ hlen = length ( $ h ) ;
my $ i = 0 ;
2022-01-17 20:46:03 +00:00
my $ flip = '' ;
2015-10-22 20:55:30 +00:00
for ( $ i = $ hlen - 1 ; $ i >= 0 ; $ i - - ) {
$ flip = $ flip . substr ( $ h , $ i , 1 ) ;
}
return $ flip ;
}
1 ;
= pod
2016-10-01 22:22:51 +00:00
= item summary Helper module for SIGNALduino
= item summary_DE Unterst & uumltzungsmodul f & uumlr SIGNALduino
2015-10-22 20:55:30 +00:00
= begin html
< a name = "SIGNALduino_un" > </a>
<h3> SIGNALduino_un </h3>
<ul>
2019-02-20 21:46:10 +00:00
The SIGNALduino_un module is a testing and debugging module to decode some devices , it will catch only all messages from the signalduino which can ' t be send to another module . <br>
2022-01-17 20:46:03 +00:00
It can create one help devices after define development attribute on SIGNALduino device . You get a hint from Verbose 4 in the FHEM Log .
2015-10-22 20:55:30 +00:00
<br> <br>
2022-01-17 20:46:03 +00:00
<u> example: </u> <code> SIGNALduino_unknown sduino_dummy Protocol:40 | To help decode or debug , please add u40 ! ( attr sduino_dummy development u40 ) </code>
<br> <br> <br>
2015-10-22 20:55:30 +00:00
< a name = "SIGNALduino_undefine" > </a>
<b> Define </b>
<ul>
2019-02-20 21:46:10 +00:00
<code> define & lt ; name & gt ; SIGNALduino_un & lt ; code & gt ; </code> <br>
2015-10-22 20:55:30 +00:00
<br>
You can define a Device , but currently you can do nothing with it .
2019-02-20 21:46:10 +00:00
The function of this module is only to output some logging at verbose 4 or higher at FHEM - logfile or logging to help device . May some data is decoded correctly but it ' s also possible that this does not work .
The Module will try to process all messages , which where not handled by other modules . <br> <br>
2022-01-17 20:46:03 +00:00
Created devices / logfiles must be deleted manually after removing the protocol from the attribute <code> development</co de > . ( example: u40 , y84 )
2015-10-22 20:55:30 +00:00
</ul>
2022-01-17 20:46:03 +00:00
<br> <br>
2015-10-22 20:55:30 +00:00
< a name = "SIGNALduino_unset" > </a>
2019-02-20 21:46:10 +00:00
<b> Set </b>
2022-01-17 20:46:03 +00:00
<ul> UserInfo "comment" - the user can put comments in the logfile which are arranged to his bits of the device <br>
( example: to write off the digital display of the thermometer at the time of reception or states of switches ... )
</ul>
<br> <br>
2015-10-22 20:55:30 +00:00
< a name = "SIGNALduino_unget" > </a>
2022-01-17 20:46:03 +00:00
<b> Get </b>
<ul> N /A</ ul >
<br> <br>
2015-10-22 20:55:30 +00:00
< a name = "SIGNALduino_unattr" > </a>
<b> Attributes </b>
<ul>
2019-02-20 21:46:10 +00:00
<li> < a href = "#ignore" > ignore </a> </li>
2022-01-17 20:46:03 +00:00
<li> < a href = "#stateFormat" > stateFormat </a> </li>
<li> < a href = "#verbose" > verbose </a> </li>
2019-02-20 21:46:10 +00:00
</ul>
<br> <br>
2022-01-17 20:46:03 +00:00
2019-02-20 21:46:10 +00:00
< a name = "SIGNALduino_un_readings" > </a>
<b> Generated readings </b>
<ul>
2022-01-17 20:46:03 +00:00
<li> bitCount ( Length of the signal , binary ) </li>
<li> bitCountLength ( Length range of all received signals of the protocol ) </li>
<li> bitMsg </li>
<li> bitMsg_invert ( Message binary , inverted ) </li>
<li> hexCount_or_nibble ( Length of the signal , hexadecimal ) </li>
<li> hexMsg </li>
<li> hexMsg_invert ( Message hexadecimal , inverted ) </li>
<li> lastInputDev ( Device at the last reception ) </li>
<li> past_seconds ( Duration in seconds since the readings were last updated ) </li>
2015-10-22 20:55:30 +00:00
</ul>
</ul>
= end html
= begin html_DE
< a name = "SIGNALduino_un" > </a>
<h3> SIGNALduino_un </h3>
<ul>
2019-02-20 21:46:10 +00:00
Das SIGNALduino_un Modul ist ein Hilfsmodul um unbekannte Nachrichten zu debuggen und analysieren zu k & ouml ; nnen . <br> <br>
Das Modul legt nur eine Hilfsger & aumlt an mit Logfile der Bits sobald man das Attribut <code> development </code> im Empf & auml ; nger Device auf das entsprechende unbekannte Protokoll setzt . <br>
2022-01-17 20:46:03 +00:00
Einen entsprechenden Hinweis erhalten Sie ab Verbose 4 im FHEM Log .
2015-10-22 20:55:30 +00:00
<br> <br>
2022-01-17 20:46:03 +00:00
<u> Beispiel: </u> <code> SIGNALduino_unknown sduino_dummy Protocol:40 | To help decode or debug , please add u40 ! ( attr sduino_dummy development u40 ) </code>
<br> <br> <br>
2015-10-22 20:55:30 +00:00
< a name = "SIGNALduino_undefine" > </a>
<b> Define </b>
2019-02-20 21:46:10 +00:00
<ul>
2015-10-22 20:55:30 +00:00
<code> define & lt ; name & gt ; SIGNALduino_un & lt ; code & gt ; </code> <br>
<br>
2019-02-20 21:46:10 +00:00
Es ist m & ouml ; glich ein Ger & auml ; t manuell zu definieren , aber damit passiert & uuml ; berhaupt nichts .
2015-10-22 20:55:30 +00:00
<br>
2019-02-20 21:46:10 +00:00
Die einzigste Funktion dieses Modules ist , ab Verbose 4 Logmeldungen & uumlber die Empfangene Nachricht ins FHEM - Log zu schreiben oder in das Logfile des Hilfsger & aumltes . <br>
2022-01-17 20:46:03 +00:00
Dabei kann man sich leider nicht darauf verlassen , dass die Nachricht korrekt dekodiert wurde . Dieses Modul wird alle Nachrichten verarbeiten , welche von anderen Modulen nicht verarbeitet werden . <br>
<br>
Angelegte Ger & auml ; te / Logfiles müssen manuell gelöscht werden nachdem aus dem Attribut <code>development</co de > des SIGNALduinos das zu untersuchende Protokoll entfernt wurde . ( Beispiel: u40 , y84 )
</ul>
<br> <br>
2015-10-22 20:55:30 +00:00
< a name = "SIGNALduino_unset" > </a>
2019-02-20 21:46:10 +00:00
<b> Set </b>
2022-01-17 20:46:03 +00:00
<ul> UserInfo "Kommentar" - somit kann der User in das Logfile des Hilfsger & aumlt Kommentare setzen welche zeitlich zu seinen Bits des Ger & aumltes eingeordnet werden <br>
( Beispiel: um die Digitalanzeige des Thermometers abzuschreiben zum Zeitpunkt des Empfangs oder Zustände von Schaltern ... )
</ul>
<br> <br>
2015-10-22 20:55:30 +00:00
< a name = "SIGNALduino_unget" > </a>
2022-01-17 20:46:03 +00:00
<b> Get </b>
<ul> N /A</ ul >
<br> <br>
2015-10-22 20:55:30 +00:00
< a name = "SIGNALduino_unattr" > </a>
<b> Attributes </b>
<ul>
2019-02-20 21:46:10 +00:00
<li> < a href = "#ignore" > ignore </a> </li>
<li> < a href = "#stateFormat" > stateFormat </a> </li>
2022-01-17 20:46:03 +00:00
<li> < a href = "#verbose" > verbose </a> </li>
2019-02-20 21:46:10 +00:00
</ul>
<br> <br>
2022-01-17 20:46:03 +00:00
2019-02-20 21:46:10 +00:00
< a name = "SIGNALduino_un_readings" > </a>
<b> Generierte Readings </b>
<ul>
2022-01-17 20:46:03 +00:00
<li> bitCount ( L & auml ; nge des Signals , binär ) </li>
<li> bitCountLength ( L & auml ; ngenbereich aller empfangen Signale des Protokolles ) </li>
<li> bitMsg </li>
<li> bitMsg_invert ( Nachricht bin & auml ; r , invertiert ) </li>
<li> hexCount_or_nibble ( L & auml ; nge des Signals , hexadezimal ) </li>
<li> hexMsg </li>
<li> hexMsg_invert ( Nachricht hexadezimal , invertiert ) </li>
<li> lastInputDev ( Device beim letzten Empfang ) </li>
<li> past_seconds ( Dauer in Sekunden seit der letzten Aktualisierung der Readings ) </li>
2015-10-22 20:55:30 +00:00
</ul>
</ul>
= end html_DE
= cut