73_DoorBird: Improved changelog readout Contribution by: enrikm
git-svn-id: https://svn.fhem.de/fhem/trunk@21267 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
@@ -48,11 +48,13 @@ use utf8;
|
|||||||
use JSON;
|
use JSON;
|
||||||
use HttpUtils;
|
use HttpUtils;
|
||||||
use Encode;
|
use Encode;
|
||||||
|
use FHEM::Meta;
|
||||||
use Cwd;
|
use Cwd;
|
||||||
use MIME::Base64;
|
use MIME::Base64;
|
||||||
use Crypt::NaCl::Sodium qw( :utils );
|
use Crypt::NaCl::Sodium qw( :utils );
|
||||||
use Crypt::Argon2 qw/argon2i_raw/;
|
use Crypt::Argon2 qw/argon2i_raw/;
|
||||||
use IO::Socket;
|
use IO::Socket;
|
||||||
|
use IO::String;
|
||||||
use LWP::UserAgent;
|
use LWP::UserAgent;
|
||||||
use constant false => 0;
|
use constant false => 0;
|
||||||
use constant true => 1;
|
use constant true => 1;
|
||||||
@@ -94,6 +96,7 @@ sub DoorBird_Initialize($)
|
|||||||
"disable:1,0 " .
|
"disable:1,0 " .
|
||||||
"loglevel:slider,0,1,5 " .
|
"loglevel:slider,0,1,5 " .
|
||||||
$readingFnAttributes;
|
$readingFnAttributes;
|
||||||
|
return FHEM::Meta::InitMod( __FILE__, $hash );
|
||||||
}
|
}
|
||||||
####END####### Initialize module ###############################################################################END#####
|
####END####### Initialize module ###############################################################################END#####
|
||||||
|
|
||||||
@@ -1985,7 +1988,6 @@ sub DoorBird_FW_detailFn($$$$) {
|
|||||||
<td id="ImageCell" width="430px" height="300px" align="center">
|
<td id="ImageCell" width="430px" height="300px" align="center">
|
||||||
' . $ImageHtmlCode . '
|
' . $ImageHtmlCode . '
|
||||||
</td>
|
</td>
|
||||||
|
|
||||||
<td id="ImageCell" width="435px" height="300px" align="center">
|
<td id="ImageCell" width="435px" height="300px" align="center">
|
||||||
' . $VideoHtmlCode . '<BR>
|
' . $VideoHtmlCode . '<BR>
|
||||||
</td>
|
</td>
|
||||||
@@ -2014,7 +2016,6 @@ sub DoorBird_FW_detailFn($$$$) {
|
|||||||
<tr>
|
<tr>
|
||||||
<td align="center" colspan="5"><b>History of events - Last download: ' . $hash->{helper}{HistoryTime} . '</b></td>
|
<td align="center" colspan="5"><b>History of events - Last download: ' . $hash->{helper}{HistoryTime} . '</b></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td align="center" colspan="2"><b>Doorbell</b></td>
|
<td align="center" colspan="2"><b>Doorbell</b></td>
|
||||||
<td align="center"></td>
|
<td align="center"></td>
|
||||||
@@ -2254,15 +2255,14 @@ sub DoorBird_FirmwareStatus($) {
|
|||||||
Log3 $name, 5, $name. " : DoorBird_FirmwareStatus - Checking firmware status on doorbird page";
|
Log3 $name, 5, $name. " : DoorBird_FirmwareStatus - Checking firmware status on doorbird page";
|
||||||
|
|
||||||
my $FirmwareVersionUnit = ReadingsVal($name, "FIRMWARE" , 0 );
|
my $FirmwareVersionUnit = ReadingsVal($name, "FIRMWARE" , 0 );
|
||||||
|
my $FirmwareDevice = ReadingsVal($name, "DEVICE-TYPE", "unknown");
|
||||||
|
|
||||||
### Download website of changelocks
|
### Download website of changelocks
|
||||||
my $html = GetFileFromURL("https://www.doorbird.com/changelog");
|
my $html = GetFileFromURL("https://www.doorbird.com/changelog");
|
||||||
|
|
||||||
### Get the latest firmware number
|
### Get the latest firmware number for this product
|
||||||
my $result;
|
my $versions = DoorBird_parseChangelog($hash, $html);
|
||||||
if ($html =~ /(?<=Firmware version )(.*)(?=\n=====)/) {
|
my $result = DoorBird_findNewestFWVersion($hash, $versions, $FirmwareDevice);
|
||||||
$result = $1;
|
|
||||||
}
|
|
||||||
|
|
||||||
### Log Entry for debugging purposes
|
### Log Entry for debugging purposes
|
||||||
Log3 $name, 5, $name. " : DoorBird_FirmwareStatus - result : " . $result;
|
Log3 $name, 5, $name. " : DoorBird_FirmwareStatus - result : " . $result;
|
||||||
@@ -4061,6 +4061,95 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
return($err, $data);
|
return($err, $data);
|
||||||
}
|
}
|
||||||
####END####### Blocking Get ####################################################################################END#####
|
####END####### Blocking Get ####################################################################################END#####
|
||||||
|
|
||||||
|
|
||||||
|
###START###### Processing Change Log ##########################################################################START####
|
||||||
|
# Changelog parser for DoorBird changelog as of 2020-02-22 (or earlier) containing multiple product lines.
|
||||||
|
# Returns a hash ref containing the newest version number for each product name or prefix found.
|
||||||
|
#
|
||||||
|
# Prefixes are denoted by a trailing 'x', as in the original changelog. Note:
|
||||||
|
# this means that still multiple versions matching a single product could be in the hash,
|
||||||
|
# e. g. for different prefixes all matching the final product name.
|
||||||
|
|
||||||
|
sub DoorBird_parseChangelog($$)
|
||||||
|
{
|
||||||
|
my ($hash, $data) = @_;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
|
||||||
|
my $lines = IO::String->new($data);
|
||||||
|
my $all_versions;
|
||||||
|
my $version;
|
||||||
|
|
||||||
|
### For all lines do
|
||||||
|
while(my $line = <$lines>) {
|
||||||
|
|
||||||
|
### If the line contains the keywords "Firmware version " followed by a number then obtain it
|
||||||
|
if ($line =~ /^Firmware version (\d{6})$/) {
|
||||||
|
$version = $1;
|
||||||
|
}
|
||||||
|
|
||||||
|
### If the line contains the keywords "Products affected: " then obtain it
|
||||||
|
elsif ($line =~ /^Products affected: (.*)$/) {
|
||||||
|
|
||||||
|
### If version is already obtained from the changelog
|
||||||
|
if (defined($version)) {
|
||||||
|
|
||||||
|
### Split the product names into an array
|
||||||
|
my @products = split(/,\s*/, $1);
|
||||||
|
|
||||||
|
### For each product name mentioned in the changelog
|
||||||
|
foreach my $product (@products) {
|
||||||
|
### Apparently the line of the "Products affected" in current changelog file is not closed with an \r so we ignore this array - entry
|
||||||
|
next if $product =~ /Preceding version: /;
|
||||||
|
|
||||||
|
### If the Product version for the firmware ha snot yet been defined or the already obtaine version number is older than the current value
|
||||||
|
if (!defined($all_versions->{$product}) or 0 + $all_versions->{$product} < 0 + $version) {
|
||||||
|
|
||||||
|
### Log Entry for debugging purposes
|
||||||
|
Log3 $name, 5, $name. " : DoorBird_parseChangelog - found firmware version : " . $version . " for " . $product;
|
||||||
|
|
||||||
|
### Save latest firmware version
|
||||||
|
$all_versions->{$product} = $version;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
undef $version;
|
||||||
|
}
|
||||||
|
### If version cannot be found
|
||||||
|
else
|
||||||
|
{
|
||||||
|
### Log Entry for debugging purposes
|
||||||
|
Log3 $name, 3, $name. " : DoorBird_parseChangelog - Products without version found in changelog, ignored.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $all_versions;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Find newest firmware version for this device by name or prefix.
|
||||||
|
# The versions hash ref expected as second argument should match the format returned from DoorBird_parseChangelog().
|
||||||
|
sub DoorBird_findNewestFWVersion($$$)
|
||||||
|
{
|
||||||
|
my ($hash, $versions, $product_name) = @_;
|
||||||
|
my $name = $hash->{NAME};
|
||||||
|
my $newest = 0;
|
||||||
|
|
||||||
|
### For all version entries
|
||||||
|
foreach my $product (sort keys %$versions)
|
||||||
|
{
|
||||||
|
### Optional prefix matching
|
||||||
|
my $prefix = $product;
|
||||||
|
$prefix =~ s/x$//;
|
||||||
|
|
||||||
|
### If the installed product name is (partial) identical with the product name given in the changelog file entry
|
||||||
|
if (length($prefix) <= length($product_name) and $prefix eq substr($product_name, 0, length($prefix)) and 0 + $newest < 0 + $versions->{$product}) {
|
||||||
|
$newest = $versions->{$product};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $newest;
|
||||||
|
}
|
||||||
|
####END####### Processing Change Log ###########################################################################END#####
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|
||||||
###START###### Description for fhem commandref ################################################################START####
|
###START###### Description for fhem commandref ################################################################START####
|
||||||
@@ -4068,7 +4157,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
=item device
|
=item device
|
||||||
=item summary Connects fhem to the DoorBird IP door station
|
=item summary Connects fhem to the DoorBird IP door station
|
||||||
=item summary_DE Verbindet fhem mit der DoorBird IP Türstation
|
=item summary_DE Verbindet fhem mit der DoorBird IP Türstation
|
||||||
|
|
||||||
=begin html
|
=begin html
|
||||||
|
|
||||||
<a name="DoorBird"></a>
|
<a name="DoorBird"></a>
|
||||||
@@ -4094,7 +4182,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<BR>
|
<BR>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
@@ -4102,7 +4189,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
@@ -4112,7 +4198,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<ul>
|
<ul>
|
||||||
<table>
|
<table>
|
||||||
@@ -4123,15 +4208,11 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
</table>
|
</table>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<BR>
|
<BR>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr><td><a name="DoorBirdSet"></a><b>Set</b></td></tr>
|
<tr><td><a name="DoorBirdSet"></a><b>Set</b></td></tr>
|
||||||
<tr><td><ul>The set function is able to change or activate the following features as follows:</ul></td></tr>
|
<tr><td><ul>The set function is able to change or activate the following features as follows:</ul></td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr><td><ul><code>set Light_On </code></ul></td><td> : Activates the IR lights of the DoorBird unit. The IR - light deactivates automatically by the default time within the Doorbird unit </td></tr>
|
<tr><td><ul><code>set Light_On </code></ul></td><td> : Activates the IR lights of the DoorBird unit. The IR - light deactivates automatically by the default time within the Doorbird unit </td></tr>
|
||||||
<tr><td><ul><code>set Live_Audio <on:off> </code></ul></td><td> : Activate/Deactivate the Live Audio Stream of the DoorBird on or off and toggles the direct link in the <b>hidden</b> Reading <code>.AudioURL</code> </td></tr>
|
<tr><td><ul><code>set Live_Audio <on:off> </code></ul></td><td> : Activate/Deactivate the Live Audio Stream of the DoorBird on or off and toggles the direct link in the <b>hidden</b> Reading <code>.AudioURL</code> </td></tr>
|
||||||
@@ -4140,8 +4221,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
<tr><td><ul><code>set Restart </code></ul></td><td> : Sends the command to restart (reboot) the Doorbird unit </td></tr>
|
<tr><td><ul><code>set Restart </code></ul></td><td> : Sends the command to restart (reboot) the Doorbird unit </td></tr>
|
||||||
<tr><td><ul><code>set Transmit_Audio <Path> </code></ul></td><td> : Converts a given audio file and transmits the stream to the DoorBird speaker. Requires a datapath to audio file to be converted and send. The user "fhem" needs to have write access to this directory.<BR> </td></tr>
|
<tr><td><ul><code>set Transmit_Audio <Path> </code></ul></td><td> : Converts a given audio file and transmits the stream to the DoorBird speaker. Requires a datapath to audio file to be converted and send. The user "fhem" needs to have write access to this directory.<BR> </td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr><td><a name="DoorBirdGet"></a><b>Get</b></td></tr>
|
<tr><td><a name="DoorBirdGet"></a><b>Get</b></td></tr>
|
||||||
<tr><td>
|
<tr><td>
|
||||||
@@ -4155,8 +4234,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
<tr><td><ul><code>get Image_Request </code></ul></td><td> : Downloads the current Image of the camera of DoorBird unit. </td></tr>
|
<tr><td><ul><code>get Image_Request </code></ul></td><td> : Downloads the current Image of the camera of DoorBird unit. </td></tr>
|
||||||
<tr><td><ul><code>get Info_Request </code></ul></td><td> : Downloads the current internal setup such as relay configuration, firmware version etc. of the DoorBird unit. The obtained relay adresses will be used as options for the <code>Open_Door</code> command. </td></tr>
|
<tr><td><ul><code>get Info_Request </code></ul></td><td> : Downloads the current internal setup such as relay configuration, firmware version etc. of the DoorBird unit. The obtained relay adresses will be used as options for the <code>Open_Door</code> command. </td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr><td><a name="DoorBirdAttr"></a><b>Attributes</b></td></tr>
|
<tr><td><a name="DoorBirdAttr"></a><b>Attributes</b></td></tr>
|
||||||
<tr><td>
|
<tr><td>
|
||||||
@@ -4165,7 +4242,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
</ul>
|
</ul>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -4190,21 +4266,18 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
<td>
|
<td>
|
||||||
<code>PollingTimeout</code> : </td><td>Timeout in seconds before download requests are terminated in cause of no reaction by DoorBird unit. Might be required to be adjusted due to network speed.<BR>
|
<code>PollingTimeout</code> : </td><td>Timeout in seconds before download requests are terminated in cause of no reaction by DoorBird unit. Might be required to be adjusted due to network speed.<BR>
|
||||||
The default value is 10s.<BR>
|
The default value is 10s.<BR>
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<code>UdpPort</code> : </td><td>Port number to be used to receice UDP datagrams. Ports are pre-defined by firmware.<BR>
|
<code>UdpPort</code> : </td><td>Port number to be used to receice UDP datagrams. Ports are pre-defined by firmware.<BR>
|
||||||
The default value is port 6524<BR>
|
The default value is port 6524<BR>
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<code>SessionIdSec</code> : </td><td>Time in seconds for how long the session Id shall be valid, which is required for secure Video and Audio transmission. The DoorBird kills the session Id after 10min = 600s automatically. In case of use with CCTV recording units, this function must be disabled by setting to 0.<BR>
|
<code>SessionIdSec</code> : </td><td>Time in seconds for how long the session Id shall be valid, which is required for secure Video and Audio transmission. The DoorBird kills the session Id after 10min = 600s automatically. In case of use with CCTV recording units, this function must be disabled by setting to 0.<BR>
|
||||||
The default value is 540s = 9min.<BR>
|
The default value is 540s = 9min.<BR>
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -4265,8 +4338,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
=end html
|
=end html
|
||||||
|
|
||||||
|
|
||||||
=begin html_DE
|
=begin html_DE
|
||||||
|
|
||||||
<a name="DoorBird"></a>
|
<a name="DoorBird"></a>
|
||||||
@@ -4292,7 +4363,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<BR>
|
<BR>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
@@ -4300,7 +4370,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
@@ -4310,7 +4379,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<ul>
|
<ul>
|
||||||
<table>
|
<table>
|
||||||
@@ -4321,14 +4389,11 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
</table>
|
</table>
|
||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<BR>
|
<BR>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr><td><a name="DoorBirdSet"></a><b>Set</b></td></tr>
|
<tr><td><a name="DoorBirdSet"></a><b>Set</b></td></tr>
|
||||||
<tr><td><ul>Die Set - Funktion ist in der lage auf der DoorBird - Anlage die folgenden Einstellungen vorzunehmen bzw. zu de-/aktivieren:</ul><BR></td></tr>
|
<tr><td><ul>Die Set - Funktion ist in der lage auf der DoorBird - Anlage die folgenden Einstellungen vorzunehmen bzw. zu de-/aktivieren:</ul><BR></td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr><td><ul><code>set Light_On </code></ul></td><td> : Schaltet das IR lichht der DoorBird Anlage ein. Das IR Licht schaltet sich automatisch nach der in der DoorBird - Anlage vorgegebenen Default Zeit wieder aus. </td></tr>
|
<tr><td><ul><code>set Light_On </code></ul></td><td> : Schaltet das IR lichht der DoorBird Anlage ein. Das IR Licht schaltet sich automatisch nach der in der DoorBird - Anlage vorgegebenen Default Zeit wieder aus. </td></tr>
|
||||||
<tr><td><ul><code>set Live_Audio <on:off> </code></ul></td><td> : Aktiviert/Deaktiviert den Live Audio Stream der DoorBird - Anlage Ein oder Aus und wechselt den direkten link in dem <b>versteckten</b> Reading <code>.AudioURL.</code> </td></tr>
|
<tr><td><ul><code>set Live_Audio <on:off> </code></ul></td><td> : Aktiviert/Deaktiviert den Live Audio Stream der DoorBird - Anlage Ein oder Aus und wechselt den direkten link in dem <b>versteckten</b> Reading <code>.AudioURL.</code> </td></tr>
|
||||||
@@ -4337,8 +4402,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
<tr><td><ul><code>set Restart </code></ul></td><td> : Sendet das Kommando zum rebooten der DoorBird - Anlage. </td></tr>
|
<tr><td><ul><code>set Restart </code></ul></td><td> : Sendet das Kommando zum rebooten der DoorBird - Anlage. </td></tr>
|
||||||
<tr><td><ul><code>set Transmit_Audio <Path> </code></ul></td><td> : Konvertiert die angegebene Audio-Datei und sendet diese zur Ausgabe an die DoorBird - Anlage. Es benötigt einen Dateipfad zu der Audio-Datei zu dem der User "fhem" Schreibrechte braucht (z.B.: /opt/fhem/audio). </td></tr>
|
<tr><td><ul><code>set Transmit_Audio <Path> </code></ul></td><td> : Konvertiert die angegebene Audio-Datei und sendet diese zur Ausgabe an die DoorBird - Anlage. Es benötigt einen Dateipfad zu der Audio-Datei zu dem der User "fhem" Schreibrechte braucht (z.B.: /opt/fhem/audio). </td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr><td><a name="DoorBirdGet"></a><b>Get</b></td></tr>
|
<tr><td><a name="DoorBirdGet"></a><b>Get</b></td></tr>
|
||||||
<tr><td><ul>Die Get - Funktion ist in der lage von der DoorBird - Anlage die folgenden Informationen und Daten zu laden:<BR><BR></ul></td></tr>
|
<tr><td><ul>Die Get - Funktion ist in der lage von der DoorBird - Anlage die folgenden Informationen und Daten zu laden:<BR><BR></ul></td></tr>
|
||||||
@@ -4348,8 +4411,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
<tr><td><ul><code>get Image_Request </code></ul></td><td> : Lädt das gegenwärtige Bild der DoorBird - Kamera herunter.</td></tr>
|
<tr><td><ul><code>get Image_Request </code></ul></td><td> : Lädt das gegenwärtige Bild der DoorBird - Kamera herunter.</td></tr>
|
||||||
<tr><td><ul><code>get Info_Request </code></ul></td><td> : Lädt das interne Setup (Firmware Version, Relais Konfiguration etc.) herunter. Die übermittelten Relais-Adressen werden als Option für das Kommando <code>Open_Door</code> verwendet.</td></tr>
|
<tr><td><ul><code>get Info_Request </code></ul></td><td> : Lädt das interne Setup (Firmware Version, Relais Konfiguration etc.) herunter. Die übermittelten Relais-Adressen werden als Option für das Kommando <code>Open_Door</code> verwendet.</td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr><td><a name="DoorBirdAttr"></a><b>Attributes</b></td></tr>
|
<tr><td><a name="DoorBirdAttr"></a><b>Attributes</b></td></tr>
|
||||||
<tr><td>
|
<tr><td>
|
||||||
@@ -4358,7 +4419,6 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
</ul>
|
</ul>
|
||||||
</td></tr>
|
</td></tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -4454,9 +4514,7 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
</ul>
|
</ul>
|
||||||
</ul>
|
</ul>
|
||||||
=end html_DE
|
=end html_DE
|
||||||
|
|
||||||
=encoding utf8
|
=encoding utf8
|
||||||
|
|
||||||
=for :application/json;q=META.json 73_DoorBird.pm
|
=for :application/json;q=META.json 73_DoorBird.pm
|
||||||
{
|
{
|
||||||
"abstract": "Connects fhem to the DoorBird IP door station",
|
"abstract": "Connects fhem to the DoorBird IP door station",
|
||||||
@@ -4487,6 +4545,7 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
"Alien::Sodium": 0,
|
"Alien::Sodium": 0,
|
||||||
"Crypt::Argon2": 0,
|
"Crypt::Argon2": 0,
|
||||||
"Crypt::NaCl::Sodium": 0,
|
"Crypt::NaCl::Sodium": 0,
|
||||||
|
"IO::String": 0,
|
||||||
"Cwd": 0,
|
"Cwd": 0,
|
||||||
"Data::Dumper": 0,
|
"Data::Dumper": 0,
|
||||||
"Encode": 0,
|
"Encode": 0,
|
||||||
@@ -4522,5 +4581,4 @@ sub DoorBird_BlockGet($$$$) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
=end :application/json;q=META.json
|
=end :application/json;q=META.json
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
Reference in New Issue
Block a user