diff --git a/fhem/CHANGED b/fhem/CHANGED index acdd28d96..695890521 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -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 diff --git a/fhem/FHEM/42_npmjs.pm b/fhem/FHEM/42_npmjs.pm new file mode 100644 index 000000000..bc79c11fb --- /dev/null +++ b/fhem/FHEM/42_npmjs.pm @@ -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 npmjs " + 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 = ''; + $ret .= '
'; + $ret .= ''; + $ret .= ''; + $ret .= ""; + $ret .= "" + if ( $getCmd eq 'showUpgradeList' ); + $ret .= "" if ( $getCmd eq 'showUpdatedList' ); + $ret .= ""; + $ret .= ""; + $ret .= ''; + + if ( ref($packages) eq "HASH" ) { + + my $linecount = 1; + foreach my $package ( keys( %{$packages} ) ) { + if ( $linecount % 2 == 0 ) { + $ret .= ''; + } + else { + $ret .= ''; + } + + $ret .= ""; + $ret .= ""; + $ret .= ""; + + $ret .= ''; + $linecount++; + } + } + + $ret .= '
PackagenameCurrent VersionOver VersionNew Version
$package$packages->{$package}{current}$packages->{$package}{new}
'; + + 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 + + +

+ Node.js installation and update +

+ + +=end html + +=begin html_DE + + +

+ Node.js Installation und Update +

+ + +=end html_DE + +=cut diff --git a/fhem/MAINTAINER.txt b/fhem/MAINTAINER.txt index a7f5d90cd..ae87f6dc8 100644 --- a/fhem/MAINTAINER.txt +++ b/fhem/MAINTAINER.txt @@ -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/38_BEOK.pm Wzut Heizungssteuerung/Raumklima +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