mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-03-10 03:06:37 +00:00
42_npmjs: add new module
git-svn-id: https://svn.fhem.de/fhem/trunk@18422 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
6d326f6f5c
commit
d99bc81abc
@ -1,5 +1,6 @@
|
||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||
# Do not insert empty lines here, update check depends on it.
|
||||
- new: 42_npmjs: Module to update Node.js modules via NPM package manager
|
||||
- feature: 98_Hyperion: add set active/inactive
|
||||
- bugfix: 22_HOMEMODE: fix zero devider in HOMEMODE_ContactOpenCheck
|
||||
fix trigger alarm only if alarm triggers have changed
|
||||
|
864
fhem/FHEM/42_npmjs.pm
Normal file
864
fhem/FHEM/42_npmjs.pm
Normal file
@ -0,0 +1,864 @@
|
||||
###############################################################################
|
||||
# $Id$
|
||||
#
|
||||
# Based on 42_AptToDate.pm by CoolTux
|
||||
|
||||
package main;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my $version = "0.9.0";
|
||||
|
||||
sub npmjs_Initialize($) {
|
||||
|
||||
my ($hash) = @_;
|
||||
|
||||
$hash->{SetFn} = "FHEM::npmjs::Set";
|
||||
$hash->{GetFn} = "FHEM::npmjs::Get";
|
||||
$hash->{DefFn} = "FHEM::npmjs::Define";
|
||||
$hash->{NotifyFn} = "FHEM::npmjs::Notify";
|
||||
$hash->{UndefFn} = "FHEM::npmjs::Undef";
|
||||
$hash->{AttrFn} = "FHEM::npmjs::Attr";
|
||||
$hash->{AttrList} =
|
||||
"disable:1,0 "
|
||||
. "disabledForIntervals "
|
||||
. "upgradeListReading:1,0 "
|
||||
. "npmglobal:1,0 "
|
||||
. $readingFnAttributes;
|
||||
|
||||
foreach my $d ( sort keys %{ $modules{npmjs}{defptr} } ) {
|
||||
my $hash = $modules{npmjs}{defptr}{$d};
|
||||
$hash->{VERSION} = $version;
|
||||
}
|
||||
}
|
||||
|
||||
# define package
|
||||
package FHEM::npmjs;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use POSIX;
|
||||
|
||||
# wird für den Import der FHEM Funktionen aus der fhem.pl benötigt
|
||||
use GPUtils qw(GP_Import);
|
||||
|
||||
use Data::Dumper; #only for Debugging
|
||||
|
||||
my $missingModul = "";
|
||||
eval "use JSON;1" or $missingModul .= "JSON ";
|
||||
|
||||
## Import der FHEM Funktionen
|
||||
BEGIN {
|
||||
GP_Import(
|
||||
qw(readingsSingleUpdate
|
||||
readingsBulkUpdate
|
||||
readingsBulkUpdateIfChanged
|
||||
readingsBeginUpdate
|
||||
readingsEndUpdate
|
||||
ReadingsTimestamp
|
||||
defs
|
||||
modules
|
||||
Log3
|
||||
Debug
|
||||
CommandAttr
|
||||
attr
|
||||
AttrVal
|
||||
ReadingsVal
|
||||
Value
|
||||
IsDisabled
|
||||
deviceEvents
|
||||
init_done
|
||||
gettimeofday
|
||||
InternalTimer
|
||||
RemoveInternalTimer)
|
||||
);
|
||||
}
|
||||
|
||||
my @fhem_modules = ( "alexa-fhem", "tradfri-fhem" );
|
||||
|
||||
sub Define($$) {
|
||||
|
||||
my ( $hash, $def ) = @_;
|
||||
my @a = split( "[ \t][ \t]*", $def );
|
||||
|
||||
return "too few parameters: define <name> npmjs <HOST>"
|
||||
if ( @a != 3 );
|
||||
return "Cannot define npmjs device. Perl modul ${missingModul}is missing."
|
||||
if ($missingModul);
|
||||
|
||||
my $name = $a[0];
|
||||
my $host = $a[2];
|
||||
|
||||
$hash->{VERSION} = $version;
|
||||
$hash->{HOST} = $host;
|
||||
$hash->{NOTIFYDEV} = "global,$name";
|
||||
|
||||
readingsSingleUpdate( $hash, "state", "initialized", 1 )
|
||||
if ( ReadingsVal( $name, 'state', 'none' ) ne 'none' );
|
||||
CommandAttr( undef,
|
||||
$name
|
||||
. ' devStateIcon npm.updates.available:security@red npm.is.up.to.date:security@green .*in.progress:system_fhem_reboot@orange errors:message_attention@red'
|
||||
) if ( AttrVal( $name, 'devStateIcon', 'none' ) eq 'none' );
|
||||
|
||||
Log3 $name, 3, "npmjs ($name) - defined";
|
||||
|
||||
$modules{npmjs}{defptr}{ $hash->{HOST} } = $hash;
|
||||
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub Undef($$) {
|
||||
|
||||
my ( $hash, $arg ) = @_;
|
||||
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
if ( exists( $hash->{".fhem"}{subprocess} ) ) {
|
||||
my $subprocess = $hash->{".fhem"}{subprocess};
|
||||
$subprocess->terminate();
|
||||
$subprocess->wait();
|
||||
}
|
||||
|
||||
RemoveInternalTimer($hash);
|
||||
|
||||
delete( $modules{npmjs}{defptr}{ $hash->{HOST} } );
|
||||
Log3 $name, 3, "Sub npmjs ($name) - delete device $name";
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub Attr(@) {
|
||||
|
||||
my ( $cmd, $name, $attrName, $attrVal ) = @_;
|
||||
my $hash = $defs{$name};
|
||||
|
||||
if ( $attrName eq "disable" ) {
|
||||
if ( $cmd eq "set" and $attrVal eq "1" ) {
|
||||
RemoveInternalTimer($hash);
|
||||
|
||||
readingsSingleUpdate( $hash, "state", "disabled", 1 );
|
||||
Log3 $name, 3, "npmjs ($name) - disabled";
|
||||
}
|
||||
|
||||
elsif ( $cmd eq "del" ) {
|
||||
Log3 $name, 3, "npmjs ($name) - enabled";
|
||||
}
|
||||
}
|
||||
|
||||
elsif ( $attrName eq "disabledForIntervals" ) {
|
||||
if ( $cmd eq "set" ) {
|
||||
return
|
||||
"check disabledForIntervals Syntax HH:MM-HH:MM or 'HH:MM-HH:MM HH:MM-HH:MM ...'"
|
||||
unless ( $attrVal =~ /^((\d{2}:\d{2})-(\d{2}:\d{2})\s?)+$/ );
|
||||
Log3 $name, 3, "npmjs ($name) - disabledForIntervals";
|
||||
readingsSingleUpdate( $hash, "state", "disabled", 1 );
|
||||
}
|
||||
|
||||
elsif ( $cmd eq "del" ) {
|
||||
Log3 $name, 3, "npmjs ($name) - enabled";
|
||||
readingsSingleUpdate( $hash, "state", "active", 1 );
|
||||
}
|
||||
}
|
||||
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub Notify($$) {
|
||||
|
||||
my ( $hash, $dev ) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
return if ( IsDisabled($name) );
|
||||
|
||||
my $devname = $dev->{NAME};
|
||||
my $devtype = $dev->{TYPE};
|
||||
my $events = deviceEvents( $dev, 1 );
|
||||
return if ( !$events );
|
||||
|
||||
Log3 $name, 5, "npmjs ($name) - Notify: " . Dumper $events; # mit Dumper
|
||||
|
||||
if (
|
||||
(
|
||||
(
|
||||
grep /^DEFINED.$name$/,
|
||||
@{$events}
|
||||
or grep /^DELETEATTR.$name.disable$/,
|
||||
@{$events}
|
||||
or grep /^ATTR.$name.disable.0$/,
|
||||
@{$events}
|
||||
)
|
||||
and $devname eq 'global'
|
||||
and $init_done
|
||||
)
|
||||
or (
|
||||
(
|
||||
grep /^INITIALIZED$/,
|
||||
@{$events}
|
||||
or grep /^REREADCFG$/,
|
||||
@{$events}
|
||||
or grep /^MODIFIED.$name$/,
|
||||
@{$events}
|
||||
)
|
||||
and $devname eq 'global'
|
||||
)
|
||||
)
|
||||
{
|
||||
|
||||
if (
|
||||
ref(
|
||||
eval { decode_json( ReadingsVal( $name, '.upgradeList', '' ) ) }
|
||||
) eq "HASH"
|
||||
)
|
||||
{
|
||||
$hash->{".fhem"}{npm}{packages} =
|
||||
eval { decode_json( ReadingsVal( $name, '.upgradeList', '' ) ) }
|
||||
->{packages};
|
||||
}
|
||||
elsif (
|
||||
ref(
|
||||
eval { decode_json( ReadingsVal( $name, '.updatedList', '' ) ) }
|
||||
) eq "HASH"
|
||||
)
|
||||
{
|
||||
$hash->{".fhem"}{npm}{updatedpackages} =
|
||||
eval { decode_json( ReadingsVal( $name, '.updatedList', '' ) ) }
|
||||
->{packages};
|
||||
}
|
||||
|
||||
if ( ReadingsVal( $name, 'nodejsVersion', 'none' ) ne 'none' ) {
|
||||
ProcessUpdateTimer($hash);
|
||||
|
||||
}
|
||||
else {
|
||||
$hash->{".fhem"}{npm}{cmd} = 'getNodeVersion';
|
||||
AsynchronousExecuteNpmCommand($hash);
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
sub Set($$@) {
|
||||
|
||||
my ( $hash, $name, @aa ) = @_;
|
||||
|
||||
my ( $cmd, @args ) = @aa;
|
||||
|
||||
if ( $cmd eq 'outdated' ) {
|
||||
return "usage: $cmd" if ( @args != 0 );
|
||||
|
||||
$hash->{".fhem"}{npm}{cmd} = $cmd;
|
||||
|
||||
}
|
||||
elsif ( $cmd eq 'update' ) {
|
||||
return "usage: $cmd" if ( @args != 0 );
|
||||
|
||||
$hash->{".fhem"}{npm}{cmd} = $cmd;
|
||||
|
||||
}
|
||||
else {
|
||||
my $list = "outdated:noArg";
|
||||
$list .= " update:noArg"
|
||||
if ( defined( $hash->{".fhem"}{npm}{packages} )
|
||||
and scalar keys %{ $hash->{".fhem"}{npm}{packages} } > 0 );
|
||||
|
||||
return "Unknown argument $cmd, choose one of $list";
|
||||
}
|
||||
|
||||
AsynchronousExecuteNpmCommand($hash);
|
||||
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub Get($$@) {
|
||||
|
||||
my ( $hash, $name, @aa ) = @_;
|
||||
|
||||
my ( $cmd, @args ) = @aa;
|
||||
|
||||
if ( $cmd eq 'showUpgradeList' ) {
|
||||
return "usage: $cmd" if ( @args != 0 );
|
||||
|
||||
my $ret = CreateUpgradeList( $hash, $cmd );
|
||||
return $ret;
|
||||
|
||||
}
|
||||
elsif ( $cmd eq 'showUpdatedList' ) {
|
||||
return "usage: $cmd" if ( @args != 0 );
|
||||
|
||||
my $ret = CreateUpgradeList( $hash, $cmd );
|
||||
return $ret;
|
||||
|
||||
}
|
||||
elsif ( $cmd eq 'nodejsVersion' ) {
|
||||
return "usage: $cmd" if ( @args != 0 );
|
||||
|
||||
$hash->{".fhem"}{npm}{cmd} = 'getNodeVersion';
|
||||
AsynchronousExecuteNpmCommand($hash);
|
||||
}
|
||||
else {
|
||||
my $list = "";
|
||||
$list .= " showUpgradeList:noArg"
|
||||
if ( defined( $hash->{".fhem"}{npm}{packages} )
|
||||
and scalar keys %{ $hash->{".fhem"}{npm}{packages} } > 0 );
|
||||
$list .= " showUpdatedList:noArg"
|
||||
if ( defined( $hash->{".fhem"}{npm}{updatedpackages} )
|
||||
and scalar keys %{ $hash->{".fhem"}{npm}{updatedpackages} } > 0 );
|
||||
|
||||
return "Unknown argument $cmd, choose one of $list";
|
||||
}
|
||||
}
|
||||
|
||||
###################################
|
||||
sub ProcessUpdateTimer($) {
|
||||
|
||||
my $hash = shift;
|
||||
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
RemoveInternalTimer($hash);
|
||||
InternalTimer(
|
||||
gettimeofday() + 14400,
|
||||
"FHEM::npmjs::ProcessUpdateTimer",
|
||||
$hash, 0
|
||||
);
|
||||
Log3 $name, 4, "npmjs ($name) - stateRequestTimer: Call Request Timer";
|
||||
|
||||
if ( !IsDisabled($name) ) {
|
||||
if ( exists( $hash->{".fhem"}{subprocess} ) ) {
|
||||
Log3 $name, 2,
|
||||
"npmjs ($name) - update in progress, process aborted.";
|
||||
return 0;
|
||||
}
|
||||
|
||||
readingsSingleUpdate( $hash, "state", "ready", 1 )
|
||||
if ( ReadingsVal( $name, 'state', 'none' ) eq 'none'
|
||||
or ReadingsVal( $name, 'state', 'none' ) eq 'initialized' );
|
||||
|
||||
if (
|
||||
ToDay() ne (
|
||||
split(
|
||||
' ', ReadingsTimestamp( $name, 'outdated', '1970-01-01' )
|
||||
)
|
||||
)[0]
|
||||
)
|
||||
{
|
||||
$hash->{".fhem"}{npm}{cmd} = 'outdated';
|
||||
AsynchronousExecuteNpmCommand($hash);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub CleanSubprocess($) {
|
||||
|
||||
my $hash = shift;
|
||||
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
delete( $hash->{".fhem"}{subprocess} );
|
||||
Log3 $name, 4, "npmjs ($name) - clean Subprocess";
|
||||
}
|
||||
|
||||
use constant POLLINTERVAL => 1;
|
||||
|
||||
sub AsynchronousExecuteNpmCommand($) {
|
||||
|
||||
require "SubProcess.pm";
|
||||
my ($hash) = shift;
|
||||
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
my $subprocess = SubProcess->new( { onRun => \&OnRun } );
|
||||
$subprocess->{npm} = $hash->{".fhem"}{npm};
|
||||
$subprocess->{npm}{host} = $hash->{HOST};
|
||||
$subprocess->{npm}{debug} =
|
||||
( AttrVal( $name, 'verbose', 0 ) > 3 ? 1 : 0 );
|
||||
$subprocess->{npm}{npmglobal} =
|
||||
( AttrVal( $name, 'npmglobal', 1 ) == 1 ? 1 : 0 );
|
||||
my $pid = $subprocess->run();
|
||||
|
||||
readingsSingleUpdate( $hash, 'state',
|
||||
'command \'npm ' . $hash->{".fhem"}{npm}{cmd} . '\' in progress', 1 );
|
||||
|
||||
if ( !defined($pid) ) {
|
||||
Log3 $name, 1, "npmjs ($name) - Cannot execute command asynchronously";
|
||||
|
||||
CleanSubprocess($hash);
|
||||
readingsSingleUpdate( $hash, 'state',
|
||||
'Cannot execute command asynchronously', 1 );
|
||||
return undef;
|
||||
}
|
||||
|
||||
Log3 $name, 4, "npmjs ($name) - execute command asynchronously (PID= $pid)";
|
||||
|
||||
$hash->{".fhem"}{subprocess} = $subprocess;
|
||||
|
||||
InternalTimer( gettimeofday() + POLLINTERVAL,
|
||||
"FHEM::npmjs::PollChild", $hash, 0 );
|
||||
Log3 $hash, 4, "npmjs ($name) - control passed back to main loop.";
|
||||
}
|
||||
|
||||
sub PollChild($) {
|
||||
|
||||
my $hash = shift;
|
||||
|
||||
my $name = $hash->{NAME};
|
||||
my $subprocess = $hash->{".fhem"}{subprocess};
|
||||
my $json = $subprocess->readFromChild();
|
||||
|
||||
if ( !defined($json) ) {
|
||||
Log3 $name, 5,
|
||||
"npmjs ($name) - still waiting (" . $subprocess->{lasterror} . ").";
|
||||
InternalTimer( gettimeofday() + POLLINTERVAL,
|
||||
"FHEM::npmjs::PollChild", $hash, 0 );
|
||||
return;
|
||||
}
|
||||
else {
|
||||
Log3 $name, 4, "npmjs ($name) - got result from asynchronous parsing.";
|
||||
$subprocess->wait();
|
||||
Log3 $name, 4, "npmjs ($name) - asynchronous finished.";
|
||||
|
||||
CleanSubprocess($hash);
|
||||
PreProcessing( $hash, $json );
|
||||
}
|
||||
}
|
||||
|
||||
######################################
|
||||
# Begin Childprocess
|
||||
######################################
|
||||
|
||||
sub OnRun() {
|
||||
|
||||
my $subprocess = shift;
|
||||
|
||||
my $response = ExecuteNpmCommand( $subprocess->{npm} );
|
||||
|
||||
my $json = eval { encode_json($response) };
|
||||
if ($@) {
|
||||
Log3 'npmjs OnRun', 3, "npmjs - JSON error: $@";
|
||||
$json = "{\"jsonerror\":\"$@\"}";
|
||||
}
|
||||
|
||||
$subprocess->writeToParent($json);
|
||||
}
|
||||
|
||||
sub ExecuteNpmCommand($) {
|
||||
|
||||
my $cmd = shift;
|
||||
|
||||
my $npm = {};
|
||||
$npm->{debug} = $cmd->{debug};
|
||||
|
||||
my $cmdPrefix = "";
|
||||
my $cmdSuffix = "";
|
||||
|
||||
if ( $cmd->{host} ne 'localhost' ) {
|
||||
$cmdPrefix = 'ssh ' . $cmd->{host} . ' \'';
|
||||
$cmdSuffix = '\'';
|
||||
}
|
||||
|
||||
$npm->{nodejsversion} = $cmdPrefix . 'echo n | node --version' . $cmdSuffix;
|
||||
if ( $cmd->{npmglobal} == 0 ) {
|
||||
$npm->{npmupdate} =
|
||||
$cmdPrefix . 'echo n | npm update --unsafe-perm' . $cmdSuffix;
|
||||
$npm->{npmoutdated} =
|
||||
$cmdPrefix . 'echo n | npm outdated --parseable' . $cmdSuffix;
|
||||
}
|
||||
else {
|
||||
$npm->{npmupdate} =
|
||||
$cmdPrefix . 'echo n | sudo npm update -g --unsafe-perm' . $cmdSuffix;
|
||||
$npm->{npmoutdated} =
|
||||
$cmdPrefix . 'echo n | sudo npm outdated -g --parseable' . $cmdSuffix;
|
||||
}
|
||||
|
||||
my $response;
|
||||
|
||||
if ( $cmd->{cmd} eq 'outdated' ) {
|
||||
$response = NpmOutdated($npm);
|
||||
}
|
||||
elsif ( $cmd->{cmd} eq 'getNodeVersion' ) {
|
||||
$response = GetNodeVersion($npm);
|
||||
}
|
||||
elsif ( $cmd->{cmd} eq 'update' ) {
|
||||
$response = NpmUpdate($npm);
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
sub GetNodeVersion($) {
|
||||
|
||||
my $cmd = shift;
|
||||
|
||||
my $update = {};
|
||||
my $v = `$cmd->{nodejsversion} 2>/dev/null`;
|
||||
|
||||
if ( defined($v) && $v =~ /^v(\d+\.\d+\.\d+)/ ) {
|
||||
$update->{nodejsversion} = $1;
|
||||
}
|
||||
else {
|
||||
$update->{error} = 'Node.js not installed';
|
||||
}
|
||||
|
||||
return $update;
|
||||
}
|
||||
|
||||
sub NpmUpdate($) {
|
||||
|
||||
my $cmd = shift;
|
||||
|
||||
my $update = {};
|
||||
my $p = `$cmd->{npmupdate}`;
|
||||
|
||||
$update->{'state'} = 'done';
|
||||
return $update;
|
||||
}
|
||||
|
||||
sub NpmOutdated($) {
|
||||
|
||||
my $cmd = shift;
|
||||
|
||||
my $updates = {};
|
||||
my $p = `$cmd->{npmoutdated}`;
|
||||
|
||||
foreach my $line ( split /\n/, $p ) {
|
||||
chomp($line);
|
||||
print qq($line\n) if ( $cmd->{debug} == 1 );
|
||||
|
||||
if ( $line =~ m/^.*:((.*)@(.*)):((.*)@(.*)):((.*)@(.*))$/ ) {
|
||||
my $update = {};
|
||||
my $package = $2;
|
||||
$update->{current} = $6;
|
||||
$update->{new} = $9;
|
||||
$updates->{packages}->{$package} = $update;
|
||||
}
|
||||
}
|
||||
|
||||
$updates->{'state'} = 'done';
|
||||
return $updates;
|
||||
}
|
||||
|
||||
####################################################
|
||||
# End Childprocess
|
||||
####################################################
|
||||
|
||||
sub PreProcessing($$) {
|
||||
|
||||
my ( $hash, $json ) = @_;
|
||||
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
my $decode_json = eval { decode_json($json) };
|
||||
if ($@) {
|
||||
Log3 $name, 2, "npmjs ($name) - JSON error: $@";
|
||||
return;
|
||||
}
|
||||
|
||||
Log3 $hash, 4, "npmjs ($name) - JSON: $json";
|
||||
|
||||
if ( $hash->{".fhem"}{npm}{cmd} eq 'outdated' ) {
|
||||
$hash->{".fhem"}{npm}{packages} = $decode_json->{packages};
|
||||
readingsSingleUpdate( $hash, '.upgradeList', $json, 0 );
|
||||
}
|
||||
elsif ( $hash->{".fhem"}{npm}{cmd} eq 'update' ) {
|
||||
$hash->{".fhem"}{npm}{updatedpackages} = $decode_json->{packages};
|
||||
readingsSingleUpdate( $hash, '.updatedList', $json, 0 );
|
||||
}
|
||||
|
||||
if ( defined( $decode_json->{warning} )
|
||||
or defined( $decode_json->{error} ) )
|
||||
{
|
||||
$hash->{".fhem"}{npm}{'warnings'} = $decode_json->{warning}
|
||||
if ( defined( $decode_json->{warning} ) );
|
||||
$hash->{".fhem"}{npm}{errors} = $decode_json->{error}
|
||||
if ( defined( $decode_json->{error} ) );
|
||||
}
|
||||
else {
|
||||
delete $hash->{".fhem"}{npm}{'warnings'};
|
||||
delete $hash->{".fhem"}{npm}{errors};
|
||||
}
|
||||
|
||||
WriteReadings( $hash, $decode_json );
|
||||
}
|
||||
|
||||
sub WriteReadings($$) {
|
||||
|
||||
my ( $hash, $decode_json ) = @_;
|
||||
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
Log3 $hash, 4, "npmjs ($name) - Write Readings";
|
||||
Log3 $hash, 5, "npmjs ($name) - " . Dumper $decode_json;
|
||||
Log3 $hash, 5,
|
||||
"npmjs ($name) - Packages: " . scalar keys %{ $decode_json->{packages} };
|
||||
|
||||
readingsBeginUpdate($hash);
|
||||
|
||||
if ( $hash->{".fhem"}{npm}{cmd} eq 'outdated' ) {
|
||||
readingsBulkUpdate(
|
||||
$hash,
|
||||
'outdated',
|
||||
(
|
||||
defined( $decode_json->{'state'} )
|
||||
? 'fetched ' . $decode_json->{'state'}
|
||||
: 'fetched error'
|
||||
)
|
||||
);
|
||||
$hash->{helper}{lastSync} = ToDay();
|
||||
}
|
||||
|
||||
readingsBulkUpdateIfChanged( $hash, 'updatesAvailable',
|
||||
scalar keys %{ $decode_json->{packages} } )
|
||||
if ( $hash->{".fhem"}{npm}{cmd} eq 'outdated' );
|
||||
readingsBulkUpdateIfChanged( $hash, 'upgradeListAsJSON',
|
||||
eval { encode_json( $hash->{".fhem"}{npm}{packages} ) } )
|
||||
if ( AttrVal( $name, 'upgradeListReading', 'none' ) ne 'none' );
|
||||
readingsBulkUpdate( $hash, 'update', 'successful' )
|
||||
if ( $hash->{".fhem"}{npm}{cmd} eq 'update'
|
||||
and not defined( $hash->{".fhem"}{npm}{'errors'} )
|
||||
and not defined( $hash->{".fhem"}{npm}{'warnings'} ) );
|
||||
readingsBulkUpdateIfChanged( $hash, "nodejsVersion",
|
||||
$decode_json->{'nodejsversion'} )
|
||||
if ( $hash->{".fhem"}{npm}{cmd} eq 'getNodeVersion' );
|
||||
|
||||
if ( defined( $decode_json->{error} ) ) {
|
||||
readingsBulkUpdate( $hash, 'state',
|
||||
$hash->{".fhem"}{npm}{cmd} . ' Errors (get showErrorList)' );
|
||||
readingsBulkUpdate( $hash, 'state', 'errors' );
|
||||
}
|
||||
elsif ( defined( $decode_json->{warning} ) ) {
|
||||
readingsBulkUpdate( $hash, 'state',
|
||||
$hash->{".fhem"}{npm}{cmd} . ' Warnings (get showWarningList)' );
|
||||
readingsBulkUpdate( $hash, 'state', 'warnings' );
|
||||
}
|
||||
else {
|
||||
|
||||
readingsBulkUpdate(
|
||||
$hash, 'state',
|
||||
(
|
||||
(
|
||||
scalar keys %{ $decode_json->{packages} } > 0
|
||||
or scalar keys %{ $hash->{".fhem"}{npm}{packages} } > 0
|
||||
)
|
||||
? 'npm updates available'
|
||||
: 'npm is up to date'
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
readingsEndUpdate( $hash, 1 );
|
||||
|
||||
ProcessUpdateTimer($hash)
|
||||
if ( $hash->{".fhem"}{npm}{cmd} eq 'getNodeVersion' );
|
||||
}
|
||||
|
||||
sub CreateUpgradeList($$) {
|
||||
|
||||
my ( $hash, $getCmd ) = @_;
|
||||
|
||||
my $packages;
|
||||
$packages = $hash->{".fhem"}{npm}{packages}
|
||||
if ( $getCmd eq 'showUpgradeList' );
|
||||
$packages = $hash->{".fhem"}{npm}{updatedpackages}
|
||||
if ( $getCmd eq 'showUpdatedList' );
|
||||
|
||||
my $ret = '<html><table><tr><td>';
|
||||
$ret .= '<table class="block wide">';
|
||||
$ret .= '<tr class="even">';
|
||||
$ret .= "<td><b>Packagename</b></td>";
|
||||
$ret .= "<td><b>Current Version</b></td>"
|
||||
if ( $getCmd eq 'showUpgradeList' );
|
||||
$ret .= "<td><b>Over Version</b></td>" if ( $getCmd eq 'showUpdatedList' );
|
||||
$ret .= "<td><b>New Version</b></td>";
|
||||
$ret .= "<td></td>";
|
||||
$ret .= '</tr>';
|
||||
|
||||
if ( ref($packages) eq "HASH" ) {
|
||||
|
||||
my $linecount = 1;
|
||||
foreach my $package ( keys( %{$packages} ) ) {
|
||||
if ( $linecount % 2 == 0 ) {
|
||||
$ret .= '<tr class="even">';
|
||||
}
|
||||
else {
|
||||
$ret .= '<tr class="odd">';
|
||||
}
|
||||
|
||||
$ret .= "<td>$package</td>";
|
||||
$ret .= "<td>$packages->{$package}{current}</td>";
|
||||
$ret .= "<td>$packages->{$package}{new}</td>";
|
||||
|
||||
$ret .= '</tr>';
|
||||
$linecount++;
|
||||
}
|
||||
}
|
||||
|
||||
$ret .= '</table></td></tr>';
|
||||
$ret .= '</table></html>';
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
#### my little helper
|
||||
sub ToDay() {
|
||||
|
||||
my ( $sec, $min, $hour, $mday, $month, $year, $wday, $yday, $isdst ) =
|
||||
localtime( gettimeofday() );
|
||||
|
||||
$month++;
|
||||
$year += 1900;
|
||||
|
||||
my $today = sprintf( '%04d-%02d-%02d', $year, $month, $mday );
|
||||
|
||||
return $today;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=pod
|
||||
=item device
|
||||
=item summary Module to control Node.js installation and update
|
||||
=item summary_DE Modul zur Bedienung der Node.js Installation und Updates
|
||||
|
||||
=begin html
|
||||
|
||||
<a name="npmjs" id="npmjs"></a>
|
||||
<h3>
|
||||
Node.js installation and update
|
||||
</h3>
|
||||
<ul>
|
||||
<u><b>npmjs - controls Node.js installation and updates</b></u><br>
|
||||
This module informs about outdated Node.js packages using NPM package manager.<br>
|
||||
Global installations will be controlled by default and require sudo permissions like this:<br>
|
||||
<li>fhem ALL=NOPASSWD: /usr/bin/npm
|
||||
</li><br>
|
||||
<a name="npmjsdefine" id="npmjsdefine"></a><b>Define</b>
|
||||
<ul>
|
||||
<br>
|
||||
<code>define <name> npmjs <HOST></code><br>
|
||||
<br>
|
||||
Example:
|
||||
<ul>
|
||||
<br>
|
||||
<code>define fhemServerNpm npmjs localhost</code><br>
|
||||
</ul><br>
|
||||
This command creates an npmjs instance named 'fhemServerNpm' to run commands on host 'localhost'.<br>
|
||||
Afterwards all information about installation and update state will be fetched. This will take a moment.
|
||||
</ul><br>
|
||||
<br>
|
||||
<a name="npmjsreadings" id="npmjsreadings"></a><b>Readings</b>
|
||||
<ul>
|
||||
<li>state - update status about the server
|
||||
</li>
|
||||
<li>nodejsVersion - installed Node.js version
|
||||
</li>
|
||||
<li>outdated - status about last update status sync
|
||||
</li>
|
||||
<li>update - status about last upgrade
|
||||
</li>
|
||||
<li>updatesAvailable - number of available updates
|
||||
</li>
|
||||
</ul><br>
|
||||
<br>
|
||||
<a name="npmjsset" id="npmjsset"></a><b>Set</b>
|
||||
<ul>
|
||||
<li>outdated - fetch information about update state
|
||||
</li>
|
||||
<li>update - trigger update process. this will take a moment
|
||||
</li><br>
|
||||
</ul><br>
|
||||
<br>
|
||||
<a name="npmjsget" id="npmjsget"></a><b>Get</b>
|
||||
<ul>
|
||||
<li>showUpgradeList - list about available updates
|
||||
</li>
|
||||
<li>getNodeVersion - fetch Node.js version information
|
||||
</li><br>
|
||||
</ul><br>
|
||||
<br>
|
||||
<a name="npmjsattribut" id="npmjsattribut"></a><b>Attributes</b>
|
||||
<ul>
|
||||
<li>disable - disables the device
|
||||
</li>
|
||||
<li>upgradeListReading - add Upgrade List Reading as JSON
|
||||
</li>
|
||||
<li>npmglobal - work on global or user installation. Defaults to 1=global
|
||||
</li>
|
||||
<li>disabledForIntervals - disable device for interval time (13:00-18:30 or 13:00-18:30 22:00-23:00)
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
=end html
|
||||
|
||||
=begin html_DE
|
||||
|
||||
<a name="npmjs" id="npmjs"></a>
|
||||
<h3>
|
||||
Node.js Installation und Update
|
||||
</h3>
|
||||
<ul>
|
||||
<u><b>npmjs - Bedienung der Node.js Installation und Updates</b></u><br>
|
||||
Das Modul prüft die zu aktualisierenden Node.js Pakete über den NPM Paket Manager.<br>
|
||||
Standardmäßig werden globale Installationen bedient und erfordern sudo Berechtigungen wie diese:<br>
|
||||
<li>fhem ALL=NOPASSWD: /usr/bin/npm update
|
||||
</li><br>
|
||||
<a name="npmjsdefine" id="npmjsdefine"></a><b>Define</b>
|
||||
<ul>
|
||||
<br>
|
||||
<code>define <name> npmjs <HOST></code><br>
|
||||
<br>
|
||||
Beispiel:
|
||||
<ul>
|
||||
<br>
|
||||
<code>define fhemServer npmjs localhost</code><br>
|
||||
</ul><br>
|
||||
Der Befehl erstellt eine npmjs Instanz mit dem Namen 'fhemServerNpm', um Kommandos auf dem Host 'localhost' auszuführen.<br>
|
||||
Anschließend werden die alle Informationen über den Installations- und Update Status geholt. Dies kann einen Moment dauern.
|
||||
</ul><br>
|
||||
<br>
|
||||
<a name="npmjsreadings" id="npmjsreadings"></a><b>Readings</b>
|
||||
<ul>
|
||||
<li>state - update Status des Servers, liegen neue Updates an oder nicht
|
||||
</li>
|
||||
<li>nodejsVersion - installierte Node.js Version
|
||||
</li>
|
||||
<li>outdated - status des letzten update sync.
|
||||
</li>
|
||||
<li>update - status des letzten update Befehles
|
||||
</li>
|
||||
<li>updatesAvailable - Anzahl der verfügbaren Paketupdates
|
||||
</li>
|
||||
</ul><br>
|
||||
<br>
|
||||
<a name="npmjsset" id="npmjsset"></a><b>Set</b>
|
||||
<ul>
|
||||
<li>outdated - holt aktuelle Informationen über den Updatestatus
|
||||
</li>
|
||||
<li>update - führt den upgrade Prozess aus
|
||||
</li><br>
|
||||
</ul><br>
|
||||
<br>
|
||||
<a name="npmjsget" id="npmjsget"></a><b>Get</b>
|
||||
<ul>
|
||||
<li>showUpgradeList - Paketiste aller zur Verfügung stehender Updates
|
||||
</li>
|
||||
<li>getNodeVersion - Hole die NodeJS Versions-Information
|
||||
</li><br>
|
||||
</ul><br>
|
||||
<br>
|
||||
<a name="npmjsattribut" id="npmjsattribut"></a><b>Attributes</b>
|
||||
<ul>
|
||||
<li>disable - Deaktiviert das Device
|
||||
</li>
|
||||
<li>upgradeListReading - fügt die Upgrade Liste als ein zusäiches Reading im JSON Format ein.
|
||||
</li>
|
||||
<li>npmglobal - wechselt zwischen Global- und Benutzer-Installation. Standard ist 1=global
|
||||
</li>
|
||||
<li>disabledForIntervals - Deaktiviert das Device für eine bestimmte Zeit (13:00-18:30 or 13:00-18:30 22:00-23:00)
|
||||
</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
=end html_DE
|
||||
|
||||
=cut
|
@ -24,12 +24,13 @@ FHEM/00_FHZ.pm rudolfkoenig SlowRF
|
||||
FHEM/00_HMLAN.pm martinp876 HomeMatic
|
||||
FHEM/00_HMUARTLGW.pm mgernoth HomeMatic
|
||||
FHEM/00_HXB.pm neubert Sonstige Systeme
|
||||
FHEM/00_HXBDevice.pm neubert Sonstige Systeme
|
||||
FHEM/00_KM271.pm physikus Sonstiges
|
||||
FHEM/00_LIRC.pm rudolfkoenig Sonstiges
|
||||
FHEM/00_MAXLAN.pm rudolfkoenig/orphan MAX
|
||||
FHEM/00_MQTT.pm hexenmeister MQTT
|
||||
FHEM/00_MQTT2_SERVER.pm rudolfkoenig MQTT
|
||||
FHEM/00_MQTT2_CLIENT.pm rudolfkoenig MQTT
|
||||
FHEM/00_MQTT2_SERVER.pm rudolfkoenig MQTT
|
||||
FHEM/00_MYSENSORS.pm Hauswart/Beta-User Bastelecke/MySensors
|
||||
FHEM/00_NetzerI2C.pm klausw Sonstige Systeme
|
||||
FHEM/00_Neuron.pm klausw Sonstige Systeme
|
||||
@ -45,8 +46,8 @@ FHEM/00_ZWCUL.pm rudolfkoenig ZWave
|
||||
FHEM/00_ZWDongle.pm rudolfkoenig ZWave
|
||||
FHEM/01_FHEMWEB.pm rudolfkoenig Frontends/FHEMWEB
|
||||
FHEM/02_FRAMEBUFFER.pm kaihs Frontends
|
||||
FHEM/02_HTTPSRV.pm neubert Frontends
|
||||
FHEM/02_FTUISRV.pm viegener Frontends/TabletUI
|
||||
FHEM/02_HTTPSRV.pm neubert Frontends
|
||||
FHEM/02_RSS.pm neubert Frontends/RSS
|
||||
FHEM/09_BS.pm neubert SlowRF
|
||||
FHEM/09_CUL_FHTTK.pm matscher SlowRF
|
||||
@ -55,37 +56,35 @@ FHEM/10_CUL_HM.pm martinp876 HomeMatic
|
||||
FHEM/10_CUL_IR.pm odroegehorn SlowRF
|
||||
FHEM/10_DUOFERNSTICK telekatz Sonstige Systeme
|
||||
FHEM/10_EIB.pm andi291 KNX/EIB
|
||||
FHEM/10_KNX.pm andi291 KNX/EIB
|
||||
FHEM/10_EnOcean.pm klaus-schauer EnOcean
|
||||
FHEM/10_EQ3BT.pm dominikkarall Sonstige Systeme
|
||||
FHEM/10_FBDECT.pm rudolfkoenig FRITZ!Box
|
||||
FHEM/10_FRM.pm jensb Sonstige Systeme
|
||||
FHEM/10_FS20.pm rudolfkoenig SlowRF
|
||||
FHEM/00_HXBDevice.pm neubert Sonstige Systeme
|
||||
FHEM/10_IT.pm dancer0705/bjoernh InterTechno
|
||||
FHEM/10_Itach_IR ulimaass Sonstige Systeme
|
||||
FHEM/10_KNX.pm andi291 KNX/EIB
|
||||
FHEM/10_KOPP_FC.pm raspii Sonstige Systeme
|
||||
FHEM/10_MAX.pm rudolfkoenig/orphan MAX
|
||||
FHEM/10_MQTT2_DEVICE.pm rudolfkoenig MQTT
|
||||
FHEM/10_MQTT_BRIDGE hexenmeister MQTT
|
||||
FHEM/10_MQTT_DEVICE hexenmeister MQTT
|
||||
FHEM/10_MQTT_GENERIC_BRIDGE hexenmeister MQTT
|
||||
FHEM/10_MQTT2_DEVICE.pm rudolfkoenig MQTT
|
||||
FHEM/10_MYSENSORS_DEVICE Hauswart/Beta-User Bastelecke/MySensors
|
||||
FHEM/10_NeuronPin.pm klausw Sonstige Systeme
|
||||
FHEM/10_OWServer.pm neubert/mfr69bs 1Wire
|
||||
FHEM/10_pilight_ctrl.pm risiko Sonstige Systeme
|
||||
FHEM/10_RESIDENTS.pm loredo Automatisierung
|
||||
FHEM/10_SOMFY.pm viegener Sonstige Systeme
|
||||
FHEM/10_UNIRoll.pm C_Herrmann SlowRF
|
||||
FHEM/10_ZWave.pm rudolfkoenig ZWave
|
||||
FHEM/10_RESIDENTS.pm loredo Automatisierung
|
||||
FHEM/10_pilight_ctrl.pm risiko Sonstige Systeme
|
||||
FHEM/11_FHT.pm rudolfkoenig SlowRF
|
||||
FHEM/11_FHT8V.pm rudolfkoenig SlowRF
|
||||
FHEM/11_OWDevice.pm neubert/mfr69bs 1Wire
|
||||
FHEM/11_OWX_CCC.pm pahenning 1Wire
|
||||
FHEM/11_OWX_FRM.pm pahenning 1Wire
|
||||
FHEM/11_OWX_SER.pm pahenning 1Wire
|
||||
FHEM/11_OWX_TCP.pm pahenning 1Wire
|
||||
FHEM/11_OWX_FRM.pm pahenning 1Wire
|
||||
FHEM/11_OWX_CCC.pm pahenning 1Wire
|
||||
FHEM/14_Hideki.pm Sidey/Ralf9 Sonstige Systeme
|
||||
FHEM/12_HMS.pm rudolfkoenig SlowRF
|
||||
FHEM/12_HProtocolGateway.pm eisler Sonstige Systeme
|
||||
FHEM/12_HProtocolTank.pm eisler Sonstige Systeme
|
||||
@ -95,36 +94,40 @@ FHEM/14_CUL_REDIRECT.pm dancer0705/bjoernh Sonstiges
|
||||
FHEM/14_CUL_TCM97001.pm dancer0705/bjoernh Sonstiges
|
||||
FHEM/14_CUL_TX.pm rudolfkoenig SlowRF
|
||||
FHEM/14_CUL_WS.pm rudolfkoenig SlowRF
|
||||
FHEM/14_Hideki.pm Sidey/Ralf9 Sonstige Systeme
|
||||
FHEM/14_SD_RSL.pm Sidey/Ralf9 Sonstige Systeme
|
||||
FHEM/14_SD_WS.pm Sidey/Ralf9 Sonstige Systeme
|
||||
FHEM/14_SD_WS07.pm Sidey/Ralf9 Sonstige Systeme
|
||||
FHEM/14_SD_WS09.pm Sidey/pejonp Sonstige Systeme
|
||||
FHEM/14_SD_WS_Maverick.pm Sidey79/Cruizer Sonstige Systeme
|
||||
FHEM/14_SIGNALduino_un.pm Sidey Sonstige Systeme
|
||||
FHEM/15_CUL_EM.pm rudolfkoenig SlowRF
|
||||
FHEM/16_CUL_RFR.pm rudolfkoenig SlowRF
|
||||
FHEM/16_STACKABLE_CC.pm rudolfkoenig SlowRF
|
||||
FHEM/17_EGPM2LAN.pm alexus Sonstiges
|
||||
FHEM/14_SD_WS.pm Sidey/Ralf9 Sonstige Systeme
|
||||
FHEM/14_SD_WS_Maverick.pm Sidey79/Cruizer Sonstige Systeme
|
||||
FHEM/14_SD_WS07.pm Sidey/Ralf9 Sonstige Systeme
|
||||
FHEM/14_SD_WS09.pm Sidey/pejonp Sonstige Systeme
|
||||
FHEM/14_SD_RSL.pm Sidey/Ralf9 Sonstige Systeme
|
||||
FHEM/17_SIS_PMS.pm painseeker Sonstiges
|
||||
FHEM/18_CUL_HOERMANN.pm rudolfkoenig SlowRF
|
||||
FHEM/19_Revolt.pm yoda_gh SlowRF
|
||||
FHEM/19_VBUSIF.pm Tobias/pejonp Sonstige Systeme
|
||||
FHEM/20_FRM_AD.pm jensb Sonstige Systeme
|
||||
FHEM/20_FRM_ROTENC.pm ntruchsess Sonstige Systeme
|
||||
FHEM/20_FRM_I2C.pm ntruchsess Sonstige Systeme
|
||||
FHEM/20_FRM_IN.pm jensb Sonstige Systeme
|
||||
FHEM/20_FRM_LCD.pm ntruchsess Sonstige Systeme (deprecated)
|
||||
FHEM/20_FRM_OUT.pm jensb Sonstige Systeme
|
||||
FHEM/20_FRM_PWM.pm jensb Sonstige Systeme
|
||||
FHEM/20_FRM_RBG.pm ntruchsess Sonstige Systeme
|
||||
FHEM/20_FRM_ROTENC.pm ntruchsess Sonstige Systeme
|
||||
FHEM/20_FRM_SERVO.pm ntruchsess Sonstige Systeme
|
||||
FHEM/20_FRM_STEPPER.pm ntruchsess Sonstige Systeme
|
||||
FHEM/20_OWFS.pm mfr69bs 1Wire (deprecated)
|
||||
FHEM/20_X10.pm neubert SlowRF
|
||||
FHEM/20_ROOMMATE.pm loredo Automatisierung
|
||||
FHEM/20_GUEST.pm loredo Automatisierung
|
||||
FHEM/20_N4HBUS.pm okoerber Sonstige Systeme
|
||||
FHEM/20_OWFS.pm mfr69bs 1Wire (deprecated)
|
||||
FHEM/20_ROOMMATE.pm loredo Automatisierung
|
||||
FHEM/20_X10.pm neubert SlowRF
|
||||
FHEM/21_HEOSGroup CoolTux Multimedia
|
||||
FHEM/21_HEOSMaster CoolTux Multimedia
|
||||
FHEM/21_HEOSPlayer CoolTux Multimedia
|
||||
FHEM/21_N4HMODULE.pm okoerber Sonstige Systeme
|
||||
FHEM/21_VBUSDEV.pm Tobias/pejonp Sonstige Systeme
|
||||
FHEM/21_OWAD.pm pahenning 1Wire
|
||||
FHEM/21_OWCOUNT.pm pahenning 1Wire
|
||||
FHEM/21_OWID.pm pahenning 1Wire
|
||||
@ -135,9 +138,7 @@ FHEM/21_OWTEMP.pm mfr69bs 1Wire (deprecated)
|
||||
FHEM/21_OWTHERM.pm pahenning 1Wire
|
||||
FHEM/21_OWVAR.pm pahenning 1Wire
|
||||
FHEM/21_SONOSPLAYER Reinerlein Multimedia
|
||||
FHEM/21_HEOSMaster CoolTux Multimedia
|
||||
FHEM/21_HEOSPlayer CoolTux Multimedia
|
||||
FHEM/21_HEOSGroup CoolTux Multimedia
|
||||
FHEM/21_VBUSDEV.pm Tobias/pejonp Sonstige Systeme
|
||||
FHEM/22_ALL3076.pm sachag Sonstiges
|
||||
FHEM/22_HOMEMODE.pm DeeSPe Automatisierung
|
||||
FHEM/23_ALL4027.pm sachag Sonstiges
|
||||
@ -145,41 +146,41 @@ FHEM/23_KOSTALPIKO.pm john CodeSchnipsel
|
||||
FHEM/23_LUXTRONIK2.pm tupol Heizungssteuerung/Raumklima (link als PM an tupol)
|
||||
FHEM/23_WEBIO.pm sachag Sonstiges
|
||||
FHEM/23_WEBIO_12DIGITAL.pm sachag Sonstiges
|
||||
FHEM/24_NetIO230B.pm rudolfkoenig/orphan Sonstiges
|
||||
FHEM/24_Iluminize.pm VolkerKettenbach Sonstige Systeme
|
||||
FHEM/24_NetIO230B.pm rudolfkoenig/orphan Sonstiges
|
||||
FHEM/24_TPLinkHS110.pm VolkerKettenbach Sonstige Systeme
|
||||
FHEM/26_tahoma.pm mike3436 Sonstige Systeme
|
||||
FHEM/30_DUOFERN telekatz Sonstige Systeme
|
||||
FHEM/30_ENECSYSGW.pm akw Sonstige Systeme
|
||||
FHEM/30_HUEBridge.pm justme1968 Beleuchtung
|
||||
FHEM/30_LIGHTIFY.pm justme1968 Beleuchtung
|
||||
FHEM/30_MilightBridge.pm mattwire Beleuchtung
|
||||
FHEM/30_ENECSYSGW.pm akw Sonstige Systeme
|
||||
FHEM/30_pilight_contact.pm risiko Sonstige Systeme
|
||||
FHEM/30_pilight_dimmer.pm risiko Sonstige Systeme
|
||||
FHEM/30_pilight_switch.pm risiko Sonstige Systeme
|
||||
FHEM/30_pilight_temp.pm risiko Sonstige Systeme
|
||||
FHEM/30_pilight_raw.pm risiko Sonstige Systeme
|
||||
FHEM/30_pilight_smoke.pm risiko Sonstige Systeme
|
||||
FHEM/30_pilight_contact.pm risiko Sonstige Systeme
|
||||
FHEM/30_pilight_switch.pm risiko Sonstige Systeme
|
||||
FHEM/30_pilight_temp.pm risiko Sonstige Systeme
|
||||
FHEM/31_Aurora.pm justme1968 Beleuchtung
|
||||
FHEM/31_ENECSYSINV.pm akw Sonstige Systeme
|
||||
FHEM/31_HUEDevice.pm justme1968 Beleuchtung
|
||||
FHEM/31_LightScene.pm justme1968 Automatisierung
|
||||
FHEM/31_MilightDevice.pm mattwire Beleuchtung
|
||||
FHEM/31_Nello.pm neumann Sonstige Systeme
|
||||
FHEM/31_PLAYBULB.pm CoolTux Beleuchtung
|
||||
FHEM/31_MilightDevice.pm mattwire Beleuchtung
|
||||
FHEM/31_ENECSYSINV.pm akw Sonstige Systeme
|
||||
FHEM/31_LightScene.pm justme1968 Automatisierung
|
||||
FHEM/32_SYSSTAT.pm justme1968 Unterstuetzende Dienste
|
||||
FHEM/32_mailcheck.pm justme1968 Automatisierung
|
||||
FHEM/32_speedtest.pm justme1968 Sonstiges
|
||||
FHEM/32_SYSSTAT.pm justme1968 Unterstuetzende Dienste
|
||||
FHEM/32_TechemHKV.pm herrmannj Heizungssteuerung/Raumklima
|
||||
FHEM/32_TechemWZ.pm herrmannj Sonstiges
|
||||
FHEM/32_TechemSD.pm herrmannj Sonstiges
|
||||
FHEM/32_TechemWZ.pm herrmannj Sonstiges
|
||||
FHEM/32_WifiLight.pm herrmannj Beleuchtung
|
||||
FHEM/32_yowsup.pm justme1968 Unterstuetzende Dienste
|
||||
FHEM/32_withings.pm markus-m Sonstiges
|
||||
FHEM/32_yowsup.pm justme1968 Unterstuetzende Dienste
|
||||
FHEM/33_readingsChange.pm rudolfkoenig Automatisierung
|
||||
FHEM/33_readingsGroup.pm justme1968 Frontends/readingsGroup readingsHistory
|
||||
FHEM/33_readingsHistory.pm justme1968 Frontends/readingsGroup readingsHistory
|
||||
FHEM/33_readingsProxy.pm justme1968 Automatisierung
|
||||
FHEM/32_speedtest.pm justme1968 Sonstiges
|
||||
FHEM/34_ESPEasy.pm dev0 Bastelecke/ESP8266
|
||||
FHEM/34_NUT.pm creideiki Sonstige Systeme
|
||||
FHEM/34_panStamp.pm justme1968 Sonstige Systeme
|
||||
@ -190,40 +191,41 @@ FHEM/36_EC3000.pm justme1968 Sonstige Systeme
|
||||
FHEM/36_EleroDrive.pm HCS Sonstige Systeme
|
||||
FHEM/36_EleroStick.pm HCS Sonstige Systeme
|
||||
FHEM/36_EleroSwitch.pm HCS Sonstige Systeme
|
||||
FHEM/36_EMT7110.pm HCS Sonstige Systeme
|
||||
FHEM/36_JeeLink.pm justme1968 Sonstige Systeme
|
||||
FHEM/36_KeyValueProtocol.pm HCS Sonstige Systeme
|
||||
FHEM/36_PCA301.pm justme1968 Sonstige Systeme
|
||||
FHEM/36_PrecipitationSensor.pm HCS Sonstige Systeme
|
||||
FHEM/36_LaCrosse.pm HCS Sonstige Systeme
|
||||
FHEM/36_LaCrosseGateway.pm HCS Sonstige Systeme
|
||||
FHEM/36_EMT7110.pm HCS Sonstige Systeme
|
||||
FHEM/36_Level.pm HCS Sonstige Systeme
|
||||
FHEM/36_PCA301.pm justme1968 Sonstige Systeme
|
||||
FHEM/36_PrecipitationSensor.pm HCS Sonstige Systeme
|
||||
FHEM/36_Shelly.pm pahenning Sonstige Systeme
|
||||
FHEM/36_Vallox.pm Skjall http://forum.fhem.de/index.php/topic,71325.0.html
|
||||
FHEM/36_WMBUS.pm kaihs Sonstige Systeme
|
||||
FHEM/37_NotifyAndroidTV.pm justme1968 Multimedia
|
||||
FHEM/37_SHC.pm rr2000 Sonstige Systeme
|
||||
FHEM/37_SHCdev.pm rr2000 Sonstige Systeme
|
||||
FHEM/37_Spotify.pm neumann Multimedia
|
||||
FHEM/37_dash_dhcp.pm justme1968 Sonstige Systeme
|
||||
FHEM/37_fakeRoku.pm justme1968 Multimedia
|
||||
FHEM/37_harmony.pm justme1968 Multimedia
|
||||
FHEM/37_NotifyAndroidTV.pm justme1968 Multimedia
|
||||
FHEM/37_plex.pm justme1968 Multimedia
|
||||
FHEM/37_SHC.pm rr2000 Sonstige Systeme
|
||||
FHEM/37_SHCdev.pm rr2000 Sonstige Systeme
|
||||
FHEM/37_Spotify.pm neumann Multimedia
|
||||
FHEM/38_BEOK.pm Wzut Heizungssteuerung/Raumklima
|
||||
FHEM/38_Broadlink.pm daniel2311 http://forum.fhem.de/index.php/topic,71972.0.html
|
||||
FHEM/38_netatmo.pm markus-m http://forum.fhem.de/index.php/topic,53500.0.html
|
||||
FHEM/38_CO20.pm markus-m Sonstiges
|
||||
FHEM/38_JawboneUp.pm domschl Sonstiges
|
||||
FHEM/38_netatmo.pm markus-m http://forum.fhem.de/index.php/topic,53500.0.html
|
||||
FHEM/39_alexa.pm justme1968 Frontends/Sprachsteuerung
|
||||
FHEM/39_siri.pm justme1968 Frontends/Sprachsteuerung
|
||||
FHEM/39_Talk2Fhem.pm Phill Frontends/Sprachsteuerung
|
||||
FHEM/40_RFXCOM.pm wherzig RFXTRX
|
||||
FHEM/41_OREGON.pm Sidey/Ralf9 Sonstiges
|
||||
FHEM/42_AptToDate.pm CoolTux Sonstige Systeme
|
||||
FHEM/42_Nextion.pm viegener Bastelecke
|
||||
FHEM/42_npmjs.pm loredo Sonstige Systeme
|
||||
FHEM/42_RFXMETER.pm wherzig RFXTRX
|
||||
FHEM/42_SMARTMON.pm hexenmeister Unterstuetzende Dienste
|
||||
FHEM/42_SYSMON.pm hexenmeister Unterstuetzende Dienste
|
||||
FHEM/42_Nextion.pm viegener Bastelecke
|
||||
FHEM/42_AptToDate.pm CoolTux Sonstige Systeme
|
||||
FHEM/43_RFXX10REC.pm wherzig RFXTRX
|
||||
FHEM/44_ROLLO.pm KernSani Unterstuetzende Dienste
|
||||
FHEM/44_S7.pm charlie71 Sonstige Systeme
|
||||
@ -237,17 +239,17 @@ FHEM/44_S7_S7Client.pm charlie71 Sonstige Systeme
|
||||
FHEM/44_TEK603.pm eisler Sonstige Systeme
|
||||
FHEM/45_Plugwise.pm icinger Sonstige Systeme
|
||||
FHEM/45_TRX.pm KernSani RFXTRX
|
||||
FHEM/46_Aqicn.pm CoolTux Sonstige Systeme
|
||||
FHEM/46_PW_Circle.pm icinger Sonstige Systeme
|
||||
FHEM/46_PW_Scan.pm icinger Sonstige Systeme
|
||||
FHEM/46_PW_Sense.pm icinger Sonstige Systeme
|
||||
FHEM/46_PW_Switch.pm icinger Sonstige Systeme
|
||||
FHEM/46_SmartPi.pm CoolTux Sonstige Systeme
|
||||
FHEM/46_TeslaPowerwall2AC.pm CoolTux Solaranlagen
|
||||
FHEM/46_TRX_ELSE.pm KernSani RFXTRX
|
||||
FHEM/46_TRX_LIGHT.pm KernSani RFXTRX
|
||||
FHEM/46_TRX_SECURITY.pm KernSani RFXTRX
|
||||
FHEM/46_TRX_WEATHER.pm KernSani RFXTRX
|
||||
FHEM/46_SmartPi.pm CoolTux Sonstige Systeme
|
||||
FHEM/46_TeslaPowerwall2AC.pm CoolTux Solaranlagen
|
||||
FHEM/46_Aqicn.pm CoolTux Sonstige Systeme
|
||||
FHEM/47_OBIS.pm icinger Sonstige Systeme
|
||||
FHEM/49_IPCAM.pm mfr69bs Sonstiges
|
||||
FHEM/49_SSCAM.pm DS_Starter Sonstiges
|
||||
@ -255,20 +257,20 @@ FHEM/49_SSCamSTRM.pm DS_Starter Sonstiges
|
||||
FHEM/49_TBot_List.pm viegener Unterstuetzende Dienste
|
||||
FHEM/50_HP1000.pm loredo Heizungssteuerung/Raumklima
|
||||
FHEM/50_MOBILEALERTSGW.pm MarkusF Sonstige Systeme
|
||||
FHEM/50_WS300.pm Dirk SlowRF
|
||||
FHEM/50_TelegramBot.pm viegener Unterstuetzende Dienste
|
||||
FHEM/50_WS300.pm Dirk SlowRF
|
||||
FHEM/51_I2C_BH1750.pm arnoaugustin Einplatinencomputer (bitte auch PM)
|
||||
FHEM/51_I2C_BMP180.pm Dirk Einplatinencomputer
|
||||
FHEM/51_MOBILEALERTS.pm MarkusF Sonstige Systeme
|
||||
FHEM/51_Netzer.pm klausw Sonstige Systeme
|
||||
FHEM/51_RPI_GPIO.pm klausw Einplatinencomputer
|
||||
FHEM/52_I2C_BME280 klausw Sonstige Systeme
|
||||
FHEM/52_I2C_DS1307 ntruchsess Sonstige Systeme
|
||||
FHEM/52_I2C_EEPROM.pm klausw Sonstige Systeme
|
||||
FHEM/52_I2C_EMC1001.pm eisler Sonstige Systeme
|
||||
FHEM/52_I2C_HDC1008.pm yoda_gh Sonstige Systeme
|
||||
FHEM/52_I2C_LCD ntruchsess Sonstige Systeme
|
||||
FHEM/52_I2C_BME280 klausw Sonstige Systeme
|
||||
FHEM/52_I2C_K30 yoda_gh Sonstige Systeme
|
||||
FHEM/52_I2C_LCD ntruchsess Sonstige Systeme
|
||||
FHEM/52_I2C_LM75A clumsy Sonstige Systeme
|
||||
FHEM/52_I2C_MCP23008 klausw Sonstige Systeme
|
||||
FHEM/52_I2C_MCP23017 klausw Sonstige Systeme
|
||||
@ -290,12 +292,12 @@ FHEM/57_CALVIEW.pm chris1284 Unterstuetzende Dienste/Kalend
|
||||
FHEM/59_HCS.pm hjr Automatisierung (oder auch PM)
|
||||
FHEM/59_LuftdatenInfo igami Bastelecke
|
||||
FHEM/59_OPENWEATHER.pm tupol Unterstuetzende Dienste/Wettermodule (Link als PM an tupol)
|
||||
FHEM/59_Twilight.pm jeschkec Unterstuetzende Dienste/Wettermodule
|
||||
FHEM/59_PROPLANTA.pm tupol Unterstuetzende Dienste/Wettermodule (Link als PM an tupol)
|
||||
FHEM/59_WWO.pm baumrasen Unterstuetzende Dienste/Wettermodule
|
||||
FHEM/59_Twilight.pm jeschkec Unterstuetzende Dienste/Wettermodule
|
||||
FHEM/59_Weather.pm neubert Unterstuetzende Dienste/Wettermodule
|
||||
FHEM/59_Wunderground.pm loredo Unterstuetzende Dienste/Wettermodule
|
||||
FHEM/59_WUup.pm mahowi Unterstuetzende Dienste/Wettermodule
|
||||
FHEM/59_WWO.pm baumrasen Unterstuetzende Dienste/Wettermodule
|
||||
FHEM/60_allergy.pm markus-m Unterstuetzende Dienste
|
||||
FHEM/60_EM.pm rudolfkoenig SlowRF
|
||||
FHEM/61_EMWZ.pm rudolfkoenig SlowRF
|
||||
@ -305,15 +307,23 @@ FHEM/64_ESA2000.pm stromer-12 SlowRF
|
||||
FHEM/66_ECMD.pm neubert Sonstige Systeme
|
||||
FHEM/67_ECMDDevice.pm neubert Sonstige Systeme
|
||||
FHEM/70_BRAVIA.pm vuffiraa Multimedia
|
||||
FHEM/70_DoorPi.pm pahenning Automatisierung
|
||||
FHEM/70_EGPM.pm alexus Sonstiges
|
||||
FHEM/70_ENIGMA2.pm loredo Multimedia
|
||||
FHEM/70_Jabber.pm BioS Unterstuetzende Dienste
|
||||
FHEM/70_JSONMETER.pm tupol Sonstiges (Link als PM an tupol)
|
||||
FHEM/70_KODI.pm vbs Multimedia
|
||||
FHEM/70_LaMetric2.pm loredo Multimedia
|
||||
FHEM/70_MEDIAPORTAL.pm Reinerlein Multimedia
|
||||
FHEM/70_PHTV.pm loredo Multimedia
|
||||
FHEM/70_NEUTRION.pm michael.winkler Multimedia
|
||||
FHEM/70_ONKYO_AVR.pm delmar Multimedia
|
||||
FHEM/70_PHTV.pm loredo Multimedia
|
||||
FHEM/70_PIONEERAVR.pm 50watt Multimedia
|
||||
FHEM/70_Pushalot.pm Talkabout Unterstuetzende Dienste
|
||||
FHEM/70_Pushbullet.pm fhainz Unterstuetzende Dienste
|
||||
FHEM/70_PushNotifier.pm xusader Unterstuetzende Dienste
|
||||
FHEM/70_Pushover.pm loredo Unterstuetzende Dienste
|
||||
FHEM/70_Pushsafer.pm markusbloch Unterstuetzende Dienste
|
||||
FHEM/70_SCIVT.pm rudolfkoenig/orphan Sonstiges
|
||||
FHEM/70_SISPM.pm real-wusel Sonstiges
|
||||
FHEM/70_SML.pm bentele Sonstiges
|
||||
@ -322,17 +332,9 @@ FHEM/70_TellStick.pm real-wusel Sonstiges
|
||||
FHEM/70_USBWX.pm wherzig Sonstiges
|
||||
FHEM/70_VIERA.pm teevau Sonstiges
|
||||
FHEM/70_VolumeLink.pm rapster Multimedia
|
||||
FHEM/70_WINCONNECT.pm michael.winkler Sonstige Systeme
|
||||
FHEM/70_WS3600.pm Josch Sonstiges
|
||||
FHEM/70_XBMC.pm vbs Multimedia
|
||||
FHEM/70_KODI.pm vbs Multimedia
|
||||
FHEM/70_NEUTRION.pm michael.winkler Multimedia
|
||||
FHEM/70_WINCONNECT.pm michael.winkler Sonstige Systeme
|
||||
FHEM/70_Pushbullet.pm fhainz Unterstuetzende Dienste
|
||||
FHEM/70_Pushover.pm loredo Unterstuetzende Dienste
|
||||
FHEM/70_PushNotifier.pm xusader Unterstuetzende Dienste
|
||||
FHEM/70_Pushalot.pm Talkabout Unterstuetzende Dienste
|
||||
FHEM/70_Pushsafer.pm markusbloch Unterstuetzende Dienste
|
||||
FHEM/70_DoorPi.pm pahenning Automatisierung
|
||||
FHEM/70_ZoneMinder.pm delmar Sonstige Systeme
|
||||
FHEM/71_ONKYO_AVR_ZONE.pm loredo Multimedia
|
||||
FHEM/71_PHILIPS_AUDIO.pm ra666ack Multimedia
|
||||
@ -340,40 +342,40 @@ FHEM/71_YAMAHA_AVR.pm markusbloch Multimedia
|
||||
FHEM/71_YAMAHA_BD.pm markusbloch Multimedia
|
||||
FHEM/71_YAMAHA_NP.pm ra666ack Multimedia
|
||||
FHEM/71_ZM_Monitor.pm delmar Sonstige Systeme
|
||||
FHEM/72_FB_CALLMONITOR.pm markusbloch Unterstuetzende Dienste
|
||||
FHEM/72_FB_CALLLIST.pm markusbloch Frontends
|
||||
FHEM/72_FB_CALLMONITOR.pm markusbloch Unterstuetzende Dienste
|
||||
FHEM/72_FRITZBOX.pm tupol FRITZBOX (link als PM an tupol)
|
||||
FHEM/72_TA_CMI_JSON.pm delmar Sonstige Systeme
|
||||
FHEM/72_XiaomiDevice.pm markus-m Sonstige Systeme
|
||||
FHEM/73_AMADCommBridge.pm CoolTux Sonstige Systeme
|
||||
FHEM/73_AutoShuttersControl.pm CoolTux Automatisierung
|
||||
FHEM/73_ElectricityCalculator.pm Sailor http://forum.fhem.de/index.php/topic,57106.0.html
|
||||
FHEM/73_GardenaSmartBridge.pm CoolTux Sonstige Systeme
|
||||
FHEM/73_GasCalculator Sailor http://forum.fhem.de/index.php/topic,47909.0.html
|
||||
FHEM/73_km200.pm Sailor http://forum.fhem.de/index.php/topic,25540.0.html
|
||||
FHEM/73_PRESENCE.pm markusbloch Unterstuetzende Dienste
|
||||
FHEM/73_MPD.pm Wzut Multimedia
|
||||
FHEM/73_AMADCommBridge.pm CoolTux Sonstige Systeme
|
||||
FHEM/73_GardenaSmartBridge.pm CoolTux Sonstige Systeme
|
||||
FHEM/73_AutoShuttersControl.pm CoolTux Automatisierung
|
||||
FHEM/74_NUKIBridge.pm CoolTux Sonstige Systeme
|
||||
FHEM/73_PRESENCE.pm markusbloch Unterstuetzende Dienste
|
||||
FHEM/74_AMADDevice.pm CoolTux Sonstige Systeme
|
||||
FHEM/74_GardenaSmartDevice.pm CoolTux Sonstige Systeme
|
||||
FHEM/74_HOMBOT.pm CoolTux sonstige Systeme
|
||||
FHEM/74_HusqvarnaAutomower.pm krannich Sonstige Systeme
|
||||
FHEM/74_NUKIDevice.pm CoolTux Sonstige Systeme
|
||||
FHEM/74_Nmap.pm igami Unterstuetzende Dienste
|
||||
FHEM/74_XiaomiBTLESens CoolTux Sonstige Systeme
|
||||
FHEM/74_NUKIBridge.pm CoolTux Sonstige Systeme
|
||||
FHEM/74_NUKIDevice.pm CoolTux Sonstige Systeme
|
||||
FHEM/74_THINKINGCLEANER.pm loredo Unterstuetzende Dienste
|
||||
FHEM/74_Unifi.pm rapster/Wuehler Automatisierung
|
||||
FHEM/74_UnifiSwitch.pm Wuehler Automatisierung
|
||||
FHEM/74_UnifiVideo.pm justme1968 Sonstiges
|
||||
FHEM/74_XiaomiBTLESens CoolTux Sonstige Systeme
|
||||
FHEM/75_MSG.pm loredo Automatisierung
|
||||
FHEM/75_msgConfig.pm loredo Automatisierung
|
||||
FHEM/76_msgDialog.pm igami Frontends/Sprachsteuerung
|
||||
FHEM/76_MSGFile.pm gandy Automatisierung
|
||||
FHEM/76_MSGMail.pm gandy Automatisierung
|
||||
FHEM/76_SMAInverter.pm sct14675/DS_Starter Sonstige Systeme
|
||||
FHEM/77_UWZ.pm CoolTux Unterstuetzende Dienste/Wettermodule
|
||||
FHEM/77_SMAEM.pm VolkerKettenbach Sonstige Systeme
|
||||
FHEM/77_SMASTP.pm VolkerKettenbach Sonstige Systeme
|
||||
FHEM/77_UWZ.pm CoolTux Unterstuetzende Dienste/Wettermodule
|
||||
FHEM/79_BDKM.pm arnoaugustin Heizungssteuerung/Raumklima (bitte auch PM)
|
||||
FHEM/80_M232.pm neubert Sonstige Systeme
|
||||
FHEM/81_M232Counter.pm neubert Sonstige Systeme
|
||||
@ -381,16 +383,16 @@ FHEM/82_LGTV_IP12.pm markusbloch Multimedia
|
||||
FHEM/82_LGTV_WebOS.pm CoolTux Multimedia
|
||||
FHEM/82_M232Voltage.pm neubert Sonstige Systeme
|
||||
FHEM/83_IOhomecontrol.pm neubert Sonstige Systeme
|
||||
FHEM/87_WS2000.pm tdressler Sonstiges
|
||||
FHEM/86_Robonect.pm andi291 Sonstige Systeme
|
||||
FHEM/87_WS2000.pm tdressler Sonstiges
|
||||
FHEM/88_ALL4000T.pm sachag Sonstiges
|
||||
FHEM/88_HMCCU.pm zap HomeMatic
|
||||
FHEM/88_HMCCUCHN.pm zap HomeMatic
|
||||
FHEM/88_HMCCUDEV.pm zap HomeMatic
|
||||
FHEM/88_LINDY_HDMI_SWITCH.pm sachag Multimedia
|
||||
FHEM/88_IPWE.pm tdressler Sonstiges
|
||||
FHEM/88_Itach_Relay.pm sachag Automatisierung
|
||||
FHEM/88_Itach_IRDevice ulimaass Sonstige Systeme
|
||||
FHEM/88_Itach_Relay.pm sachag Automatisierung
|
||||
FHEM/88_LINDY_HDMI_SWITCH.pm sachag Multimedia
|
||||
FHEM/88_VantagePro2.pm sachag Sonstiges
|
||||
FHEM/88_WEBCOUNT.pm sachag Sonstiges
|
||||
FHEM/88_xs1Bridge.pm HomeAuto_User Sonstige Systeme
|
||||
@ -399,7 +401,6 @@ FHEM/89_FULLY.pm zap Frontends
|
||||
FHEM/89_HEATRONIC.pm heikoranft Sonstige Systeme
|
||||
FHEM/89_VCONTROL.pm adamwit Heizungssteuerung/Raumklima
|
||||
FHEM/90_at.pm rudolfkoenig Automatisierung
|
||||
FHEM/14_SIGNALduino_un.pm Sidey Sonstige Systeme
|
||||
FHEM/91_eventTypes.pm rudolfkoenig Frontends/FHEMWEB
|
||||
FHEM/91_notify.pm rudolfkoenig Automatisierung
|
||||
FHEM/91_sequence.pm rudolfkoenig Automatisierung
|
||||
@ -408,118 +409,120 @@ FHEM/92_FileLog.pm rudolfkoenig Automatisierung
|
||||
FHEM/92_SingleFileLog.pm rudolfkoenig Automatisierung
|
||||
FHEM/93_DbLog.pm Tobias/DS_Starter Automatisierung
|
||||
FHEM/93_DbRep.pm DS_Starter Sonstiges
|
||||
FHEM/93_Log2Syslog.pm DS_Starter Automatisierung
|
||||
FHEM/93_FHEM2FHEM.pm rudolfkoenig Automatisierung
|
||||
FHEM/93_Log2Syslog.pm DS_Starter Automatisierung
|
||||
FHEM/93_PWMR.pm jamesgo Heizungssteuerung/Raumklima
|
||||
FHEM/94_PWM.pm jamesgo Heizungssteuerung/Raumklima
|
||||
FHEM/95_FLOORPLAN.pm ulimaass Frontends/FLOORPLAN
|
||||
FHEM/95_Alarm.pm pahenning Unterstützende Dienste
|
||||
FHEM/95_Astro.pm pahenning Unterstützende Dienste
|
||||
FHEM/95_Babble.pm pahenning Unterstützende Dienste
|
||||
FHEM/95_PostMe.pm pahenning Unterstützende Dienste
|
||||
FHEM/95_YAAHM.pm pahenning Unterstützende Dienste
|
||||
FHEM/95_Dashboard.pm DS_Starter/orphan Frontends
|
||||
FHEM/95_PachLog.pm rudolfkoenig/orphan Sonstiges
|
||||
FHEM/95_FLOORPLAN.pm ulimaass Frontends/FLOORPLAN
|
||||
FHEM/95_holiday.pm rudolfkoenig Sonstiges
|
||||
FHEM/95_PachLog.pm rudolfkoenig/orphan Sonstiges
|
||||
FHEM/95_PostMe.pm pahenning Unterstützende Dienste
|
||||
FHEM/95_remotecontrol.pm ulimaass Frontends
|
||||
FHEM/96_SIP.pm wzut,plin Sonstiges
|
||||
FHEM/96_Snapcast.pm unimatrix Multimedia
|
||||
FHEM/97_TrashCal.pm Tobias Unterstuetzende Dienste
|
||||
FHEM/97_SprinkleControl.pm Tobias Unterstuetzende Dienste
|
||||
FHEM/98_Text2Speech.pm Tobias Unterstuetzende Dienste
|
||||
FHEM/98_MediaList.pm Tobias Multimedia
|
||||
FHEM/98_Sprinkle.pm Tobias Unterstuetzende Dienste
|
||||
FHEM/98_apptime.pm martinp876 Sonstiges
|
||||
FHEM/98_alarmclock.pm FlorianZ Unterstuetzende Dienste
|
||||
FHEM/98_BOSEST.pm dominikkarall Multimedia
|
||||
FHEM/98_ComfoAir.pm StefanStrobel Sonstiges
|
||||
FHEM/98_CULflash.pm rudolfkoenig Sonstiges
|
||||
FHEM/98_DLNARenderer.pm dominikkarall Multimedia
|
||||
FHEM/98_DOIF.pm damian-s Automatisierung/DOIF
|
||||
FHEM/98_DOIFtools.pm Ellert Automatisierung/DOIF
|
||||
FHEM/98_FReplacer.pm stefanstrobel Sonstiges
|
||||
FHEM/98_GAEBUS.pm jamesgo Heizungssteuerung/Raumklima
|
||||
FHEM/98_GEOFANCY.pm loredo Unterstuetzende Dienste
|
||||
FHEM/98_HMinfo.pm martinp876 HomeMatic
|
||||
FHEM/98_Heating_Control.pm igami Unterstuetzende Dienste
|
||||
FHEM/98_HTTPMOD.pm stefanstrobel Sonstiges
|
||||
FHEM/98_Arducounter.pm stefanstrobel Sonstiges
|
||||
FHEM/98_Hyperion.pm DeeSPe Beleuchtung
|
||||
FHEM/98_IF.pm damian-s Automatisierung
|
||||
FHEM/98_JsonList2.pm rudolfkoenig Automatisierung
|
||||
FHEM/98_Modbus.pm stefanstrobel Sonstiges
|
||||
FHEM/98_ModbusAttr.pm stefanstrobel Sonstiges
|
||||
FHEM/98_ModbusSET.pm stefanstrobel Sonstiges
|
||||
FHEM/98_ModbusTrovis5576.pm Reinerlein Heizungssteuerung/Raumklima
|
||||
FHEM/98_PID20.pm John Automatisierung
|
||||
FHEM/98_PHC.pm stefanstrobel Sonstiges
|
||||
FHEM/98_RandomTimer.pm igami Unterstuetzende Dienste/Kalendermodule
|
||||
FHEM/98_SVG.pm rudolfkoenig Frontends/SVG/Plots/logProxy
|
||||
FHEM/98_THRESHOLD.pm damian-s Automatisierung
|
||||
FHEM/98_TRAFFIC.pm jmike Unterstuetzende Dienste
|
||||
FHEM/98_UbiquitiPM.pm Wzut Sonstige Systeme
|
||||
FHEM/98_UbiquitiOut.pm Wzut Sonstige Systeme
|
||||
FHEM/98_Verkehrsinfo.pm martins Unterstuetzende Dienste
|
||||
FHEM/98_systemd_watchdog.pm hexenmeister Unterstuetzende Dienste
|
||||
FHEM/98_WeekdayTimer.pm igami Unterstuetzende Dienste
|
||||
FHEM/98_WOL.pm dietmar63 Unterstuetzende Dienste
|
||||
FHEM/98_XmlList.pm rudolfkoenig Automatisierung
|
||||
FHEM/95_YAAHM.pm pahenning Unterstützende Dienste
|
||||
FHEM/96_allowed.pm rudolfkoenig Automatisierung
|
||||
FHEM/96_archetype.pm igami Automatisierung
|
||||
FHEM/96_SIP.pm wzut,plin Sonstiges
|
||||
FHEM/96_Snapcast.pm unimatrix Multimedia
|
||||
FHEM/97_SprinkleControl.pm Tobias Unterstuetzende Dienste
|
||||
FHEM/97_TrashCal.pm Tobias Unterstuetzende Dienste
|
||||
FHEM/98_alarmclock.pm FlorianZ Unterstuetzende Dienste
|
||||
FHEM/98_apptime.pm martinp876 Sonstiges
|
||||
FHEM/98_Arducounter.pm stefanstrobel Sonstiges
|
||||
FHEM/98_autocreate.pm rudolfkoenig Automatisierung
|
||||
FHEM/98_average.pm rudolfkoenig Automatisierung
|
||||
FHEM/98_backup.pm rudolfkoenig Sonstiges
|
||||
FHEM/98_BOSEST.pm dominikkarall Multimedia
|
||||
FHEM/98_cloneDummy.pm Joachim Automatisierung
|
||||
FHEM/98_cmdalias.pm rudolfkoenig Automatisierung
|
||||
FHEM/98_ComfoAir.pm StefanStrobel Sonstiges
|
||||
FHEM/98_configdb.pm betateilchen Sonstiges
|
||||
FHEM/98_copy.pm justme1968 Sonstiges
|
||||
FHEM/98_count.pm betateilchen Sonstiges
|
||||
FHEM/98_CULflash.pm rudolfkoenig Sonstiges
|
||||
FHEM/98_CustomReadings.pm HCS Unterstuetzende Dienste
|
||||
FHEM/98_dewpoint.pm hotbso Automatisierung
|
||||
FHEM/98_DLNARenderer.pm dominikkarall Multimedia
|
||||
FHEM/98_DOIF.pm damian-s Automatisierung/DOIF
|
||||
FHEM/98_DOIFtools.pm Ellert Automatisierung/DOIF
|
||||
FHEM/98_Dooya.pm Jarnsen/ralf9/darkmission Sonstige Systeme
|
||||
FHEM/98_dummy.pm rudolfkoenig Automatisierung
|
||||
FHEM/98_expandJSON.pm dev0 Unterstuetzende Dienste
|
||||
FHEM/98_feels_like.pm hotbso Wettermodule
|
||||
FHEM/98_fheminfo.pm betateilchen Sonstiges
|
||||
FHEM/98_fhemdebug.pm rudolfkoenig Sonstiges
|
||||
FHEM/98_fheminfo.pm betateilchen Sonstiges
|
||||
FHEM/98_freezemon KernSani Unterstuetzende Dienste
|
||||
FHEM/98_FReplacer.pm stefanstrobel Sonstiges
|
||||
FHEM/98_GAEBUS.pm jamesgo Heizungssteuerung/Raumklima
|
||||
FHEM/98_GEOFANCY.pm loredo Unterstuetzende Dienste
|
||||
FHEM/98_GoogleAuth.pm betateilchen Unterstuetzende Dienste
|
||||
FHEM/98_GOOGLECAST.pm dominikkarall Multimedia
|
||||
FHEM/98_Heating_Control.pm igami Unterstuetzende Dienste
|
||||
FHEM/98_help.pm betateilchen Sonstiges
|
||||
FHEM/98_HMinfo.pm martinp876 HomeMatic
|
||||
FHEM/98_HourCounter.pm john MAX
|
||||
FHEM/98_HTTPMOD.pm stefanstrobel Sonstiges
|
||||
FHEM/98_Hyperion.pm DeeSPe Beleuchtung
|
||||
FHEM/98_IF.pm damian-s Automatisierung
|
||||
FHEM/98_JsonList2.pm rudolfkoenig Automatisierung
|
||||
FHEM/98_logProxy.pm justme1968 Frontends/SVG Plots logProxy
|
||||
FHEM/98_mark.pm betateilchen Sonstiges
|
||||
FHEM/98_MaxScanner.pm john MAX
|
||||
FHEM/98_MediaList.pm Tobias Multimedia
|
||||
FHEM/98_Modbus.pm stefanstrobel Sonstiges
|
||||
FHEM/98_ModbusAttr.pm stefanstrobel Sonstiges
|
||||
FHEM/98_ModbusSET.pm stefanstrobel Sonstiges
|
||||
FHEM/98_ModbusTrovis5576.pm Reinerlein Heizungssteuerung/Raumklima
|
||||
FHEM/98_monitoring.pm igami Automatisierung
|
||||
FHEM/98_MSwitch.pm Byte09 Automatisierung
|
||||
FHEM/98_notice.pm mfr69bs Sonstiges
|
||||
FHEM/98_PHC.pm stefanstrobel Sonstiges
|
||||
FHEM/98_PID20.pm John Automatisierung
|
||||
FHEM/98_pilight.pm andreas-fey Unterstuetzende Dienste
|
||||
FHEM/98_ping mattwire Sonstiges
|
||||
FHEM/98_powerMap igami Unterstuetzende Dienste
|
||||
FHEM/98_QRCode.pm Benni Unterstuetzende Dienste
|
||||
FHEM/98_rain.pm baumrasen Sonstiges
|
||||
FHEM/98_RandomTimer.pm igami Unterstuetzende Dienste/Kalendermodule
|
||||
FHEM/98_restore.pm rudolfkoenig Sonstiges
|
||||
FHEM/98_rssFeed.pm Benni Unterstuetzende Dienste
|
||||
FHEM/98_statistics.pm tupol Unterstuetzende Dienste (Link als PM an tupol)
|
||||
FHEM/98_structure.pm rudolfkoenig Automatisierung
|
||||
FHEM/98_Siro.pm Byte09 / Dr. Smag Sonstige Systeme
|
||||
FHEM/98_MSwitch.pm Byte09 Automatisierung
|
||||
FHEM/98_SmarterCoffee CoolTux Sonstige Systeme
|
||||
FHEM/98_Sprinkle.pm Tobias Unterstuetzende Dienste
|
||||
FHEM/98_statistics.pm tupol Unterstuetzende Dienste (Link als PM an tupol)
|
||||
FHEM/98_STOCKQUOTES.pm vbs Unterstuetzende Dienste
|
||||
FHEM/98_structure.pm rudolfkoenig Automatisierung
|
||||
FHEM/98_SVG.pm rudolfkoenig Frontends/SVG/Plots/logProxy
|
||||
FHEM/98_systemd_watchdog.pm hexenmeister Unterstuetzende Dienste
|
||||
FHEM/98_telnet.pm rudolfkoenig Automatisierung
|
||||
FHEM/98_Text2Speech.pm Tobias Unterstuetzende Dienste
|
||||
FHEM/98_THRESHOLD.pm damian-s Automatisierung
|
||||
FHEM/98_todoist.pm marvin78 Unterstuetzende Dienste
|
||||
FHEM/98_TRAFFIC.pm jmike Unterstuetzende Dienste
|
||||
FHEM/98_UbiquitiOut.pm Wzut Sonstige Systeme
|
||||
FHEM/98_UbiquitiPM.pm Wzut Sonstige Systeme
|
||||
FHEM/98_update.pm rudolfkoenig Sonstiges
|
||||
FHEM/98_Verkehrsinfo.pm martins Unterstuetzende Dienste
|
||||
FHEM/98_version.pm markusbloch Sonstiges
|
||||
FHEM/98_vitoconnect.pm andreas13 Heizungssteuerung/Raumklima
|
||||
FHEM/98_weblink.pm rudolfkoenig Frontends/FHEMWEB
|
||||
FHME/98_weekprofile.pm risiko Frontends
|
||||
FHEM/98_STOCKQUOTES.pm vbs Unterstuetzende Dienste
|
||||
FHEM/98_SmarterCoffee CoolTux Sonstige Systeme
|
||||
FHEM/98_WeekdayTimer.pm igami Unterstuetzende Dienste
|
||||
FHEM/98_weekprofile.pm risiko Frontends
|
||||
FHEM/98_WOL.pm dietmar63 Unterstuetzende Dienste
|
||||
FHEM/98_XmlList.pm rudolfkoenig Automatisierung
|
||||
FHEM/99_SUNRISE_EL.pm rudolfkoenig Automatisierung
|
||||
FHEM/99_Utils.pm rudolfkoenig Automatisierung
|
||||
FHEM/99_Venetian.pm Christian.Kühnel Automatisierung
|
||||
FHEM/AttrTemplate.pm rudolfkoenig Automatisierung
|
||||
FHEM/Blocking.pm rudolfkoenig Automatisierung
|
||||
FHEM/DevIo.pm rudolfkoenig Sonstiges
|
||||
FHEM/Color.pm justme1968 Sonstiges
|
||||
FHEM/DarkSkyAPI.pm CoolTux Unterstuetzende Dienste/Wettermodule
|
||||
FHEM/DevIo.pm rudolfkoenig Sonstiges
|
||||
FHEM/FritzBoxUtils.pm rudolfkoenig FRITZ!Box
|
||||
FHEM/GPUtils.pm ntruchsess FHEM Development
|
||||
FHEM/HMCCUConf.pm zap HomeMatic
|
||||
FHEM/HMConfig.pm martinp876 HomeMatic
|
||||
FHEM/HOMESTATEtk.pm loredo Automatisierung
|
||||
@ -527,6 +530,7 @@ FHEM/HttpUtils.pm rudolfkoenig Automatisierung
|
||||
FHEM/MaxCommon.pm rudolfkoenig/orphan MAX
|
||||
FHEM/msgSchema.pm loredo Automatisierung
|
||||
FHEM/ONKYOdb.pm loredo Multimedia
|
||||
FHEM/OpenWeatherAPI.pm CoolTux Unterstuetzende Dienste/Wettermodule
|
||||
FHEM/OWX_DS2480.pm ntruchsess 1Wire
|
||||
FHEM/OWX_DS9097.pm ntruchsess 1Wire
|
||||
FHEM/OWX_FRM.pm ntruchsess 1Wire
|
||||
@ -541,9 +545,13 @@ FHEM/TimeSeries.pm neubert /jensb FHEM Development
|
||||
FHEM/TR064Utils.pm rudolfkoenig Automatisierung
|
||||
FHEM/UConv.pm loredo FHEM Development
|
||||
FHEM/Unit.pm loredo FHEM Development
|
||||
FHEM/DarkSkyAPI.pm CoolTux Unterstuetzende Dienste/Wettermodule
|
||||
FHEM/OpenWeatherAPI.pm CoolTux Unterstuetzende Dienste/Wettermodule
|
||||
FHEM/YahooWeatherAPI.pm neubert (deprecated)
|
||||
FHEM/FhemUtils/* mfr69bs Sonstiges
|
||||
FHEM/holiday/* jeschkec Sonstiges
|
||||
FHEM/lib/*deviceconfig.xml.gz krikan ZWave
|
||||
FHEM/lib/*manufacturer_specific.xml krikan ZWave
|
||||
FHEM/lib/AttrTemplate/httpmod.template Beta-User Sonstiges
|
||||
FHEM/lib/AttrTemplate/mqtt2.template Beta-User https://forum.fhem.de/index.php/topic,94494.0.html
|
||||
FHEM/lib/Device/Firmata/* jensb Sonstige Systeme
|
||||
FHEM/lib/Device/MySensors/* Hauswart/Beta-User Bastelecke/MySensors
|
||||
FHEM/lib/MP3/* Reinerlein Multimedia
|
||||
@ -553,19 +561,12 @@ FHEM/lib/ProtoThreads.pm ntruchsess FHEM Development
|
||||
FHEM/lib/SHC_packet_layout.xml rr2000 Sonstige Systeme
|
||||
FHEM/lib/SWAP/* justme1968 Sonstige Systeme
|
||||
FHEM/lib/UPnP/* Reinerlein Multimedia
|
||||
FHEM/lib/*deviceconfig.xml.gz krikan ZWave
|
||||
FHEM/lib/*manufacturer_specific.xml krikan ZWave
|
||||
FHEM/lib/AttrTemplate/mqtt2.template Beta-User https://forum.fhem.de/index.php/topic,94494.0.html
|
||||
FHEM/lib/AttrTemplate/httpmod.template Beta-User Sonstiges
|
||||
FHEM/FhemUtils/* mfr69bs Sonstiges
|
||||
FHEM/GPUtils.pm ntruchsess FHEM Development
|
||||
FHEM/holiday jeschkec Sonstiges
|
||||
|
||||
contrib/23_WEBTHERM.pm betateilchen/sachag Sonstiges
|
||||
contrib/70_ONKYO_AVR_PULL.pm loredo Multimedia
|
||||
contrib/92_rsyslog.pm DS_Starter Automatisierung
|
||||
contrib/98_exportdevice.pm loredo Sonstiges
|
||||
contrib/98_EDIPLUG.pm Wzut Sonstige Systeme
|
||||
contrib/98_exportdevice.pm loredo Sonstiges
|
||||
contrib/98_FileLogConvert.pm DeeSPe Automatisierung
|
||||
contrib/betateilchen/* betateilchen Sonstiges
|
||||
contrib/DEBIAN/* betateilchen Sonstiges
|
||||
@ -584,8 +585,8 @@ www/images/* Wuppi68 Frontends
|
||||
www/jscolor/* justme1968 Frontends
|
||||
www/pgm2/* rudolfkoenig Frontends/FHEMWEB
|
||||
www/pgm2/dashboard/* svenson08 Frontends
|
||||
www/pgm2/fhemweb_fbcalllist.js markusbloch Frontends
|
||||
www/pgm2/doif.js Ellert Frontends
|
||||
www/pgm2/fhemweb_fbcalllist.js markusbloch Frontends
|
||||
www/pgm2/fhemweb_iconButtons.js Ellert Frontends
|
||||
www/pgm2/fhemweb_iconLabel.js Ellert Frontends
|
||||
www/pgm2/fhemweb_iconRadio.js Ellert Frontends
|
||||
|
Loading…
x
Reference in New Issue
Block a user