dev #128
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
| @@ -1462,7 +1462,7 @@ __END__ | |||||||
|   ], |   ], | ||||||
|   "release_status": "stable", |   "release_status": "stable", | ||||||
|   "license": "GPL_2", |   "license": "GPL_2", | ||||||
|   "version": "v0.10.25", |   "version": "v0.99.10", | ||||||
|   "author": [ |   "author": [ | ||||||
|     "Marko Oldenburg <fhemdevelopment@cooltux.net>" |     "Marko Oldenburg <fhemdevelopment@cooltux.net>" | ||||||
|   ], |   ], | ||||||
|   | |||||||
| @@ -1,16 +1,16 @@ | |||||||
| UPD 2022-12-20_14:16:31 116314 FHEM/73_AutoShuttersControl.pm | UPD 2024-10-12_07:38:48 116314 FHEM/73_AutoShuttersControl.pm | ||||||
| UPD 2022-12-20_14:12:54 76615 lib/FHEM/Automation/ShuttersControl.pm | UPD 2024-10-12_07:35:03 76335 lib/FHEM/Automation/ShuttersControl.pm | ||||||
| UPD 2022-12-20_14:14:29 2691 lib/FHEM/Automation/ShuttersControl/Dev.pm | UPD 2024-10-12_07:33:39 2691 lib/FHEM/Automation/ShuttersControl/Dev.pm | ||||||
| UPD 2022-12-20_14:13:42 2675 lib/FHEM/Automation/ShuttersControl/Roommate.pm | UPD 2024-10-12_07:34:12 2675 lib/FHEM/Automation/ShuttersControl/Roommate.pm | ||||||
| UPD 2022-12-20_14:13:20 31828 lib/FHEM/Automation/ShuttersControl/Shutters.pm | UPD 2024-10-12_07:34:38 31828 lib/FHEM/Automation/ShuttersControl/Shutters.pm | ||||||
| UPD 2022-12-20_14:13:30 25541 lib/FHEM/Automation/ShuttersControl/Shading.pm | UPD 2024-10-12_07:34:24 25541 lib/FHEM/Automation/ShuttersControl/Shading.pm | ||||||
| UPD 2022-12-20_14:14:20 112297 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm | UPD 2024-10-12_07:33:49 112297 lib/FHEM/Automation/ShuttersControl/EventProcessingFunctions.pm | ||||||
| UPD 2022-12-20_14:14:08 40681 lib/FHEM/Automation/ShuttersControl/Helper.pm | UPD 2024-10-12_07:34:00 40681 lib/FHEM/Automation/ShuttersControl/Helper.pm | ||||||
| UPD 2022-12-20_14:13:02 2209 lib/FHEM/Automation/ShuttersControl/Window.pm | UPD 2024-10-12_07:34:46 2209 lib/FHEM/Automation/ShuttersControl/Window.pm | ||||||
| UPD 2022-12-20_14:16:12 11857 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm | UPD 2024-10-12_07:38:13 11857 lib/FHEM/Automation/ShuttersControl/Dev/Attr.pm | ||||||
| UPD 2022-12-20_14:16:04 7265 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm | UPD 2024-10-12_07:38:06 7265 lib/FHEM/Automation/ShuttersControl/Dev/Readings.pm | ||||||
| UPD 2022-12-20_14:15:59 52751 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm | UPD 2024-10-12_07:37:57 52751 lib/FHEM/Automation/ShuttersControl/Shutters/Attr.pm | ||||||
| UPD 2022-12-20_14:14:58 2799 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm | UPD 2024-10-12_07:37:49 2799 lib/FHEM/Automation/ShuttersControl/Shutters/Readings.pm | ||||||
| UPD 2022-12-20_14:14:47 3887 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm | UPD 2024-10-12_07:37:43 3887 lib/FHEM/Automation/ShuttersControl/Window/Attr.pm | ||||||
| UPD 2022-12-20_14:14:39 2200 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm | UPD 2024-10-12_07:33:29 2200 lib/FHEM/Automation/ShuttersControl/Window/Readings.pm | ||||||
| UPD 2022-12-20_14:13:55 7394 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm | UPD 2024-10-12_07:34:06 7394 lib/FHEM/Automation/ShuttersControl/Rainprotection.pm | ||||||
|   | |||||||
							
								
								
									
										36
									
								
								hooks/commit-msg
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										36
									
								
								hooks/commit-msg
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,36 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | # | ||||||
|  | # An example hook script to check the commit log message. | ||||||
|  | # Called by "git commit" with one argument, the name of the file | ||||||
|  | # that has the commit message.  The hook should exit with non-zero | ||||||
|  | # status after issuing an appropriate message if it wants to stop the | ||||||
|  | # commit.  The hook is allowed to edit the commit message file. | ||||||
|  | # | ||||||
|  | # To enable this hook, rename this file to "commit-msg". | ||||||
|  |  | ||||||
|  | # Uncomment the below to add a Signed-off-by line to the message. | ||||||
|  | # Doing this in a hook is a bad idea in general, but the prepare-commit-msg | ||||||
|  | # hook is more suited to it. | ||||||
|  | # | ||||||
|  | # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') | ||||||
|  | # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" | ||||||
|  |  | ||||||
|  | # This example catches duplicate Signed-off-by lines. | ||||||
|  |  | ||||||
|  | commit_msg=$(cat "${1:?Missing commit message file}") | ||||||
|  |  | ||||||
|  | test "" = "$(grep '^Signed-off-by: ' "$1" | | ||||||
|  | 	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || { | ||||||
|  | 	echo >&2 Duplicate Signed-off-by lines. | ||||||
|  | 	exit 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | if ! echo "$commit_msg" | grep -Eq "^(build|chore|ci|docs|feat|feat!|fix|perf|refactor|revert|style|test)(\(.+\))?: .*$" ; then  | ||||||
|  |  | ||||||
|  |   echo "Invalid commit message"  | ||||||
|  |  | ||||||
|  |     exit 1  | ||||||
|  |  | ||||||
|  | fi  | ||||||
|  |  | ||||||
|  | echo "Commit message is valid!" | ||||||
							
								
								
									
										18
									
								
								hooks/post-commit
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								hooks/post-commit
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,18 @@ | |||||||
|  | #!/bin/bash | ||||||
|  | set -eu | ||||||
|  |  | ||||||
|  | # destination of the final changelog file | ||||||
|  | OUTPUT_FILE=CHANGELOG.md | ||||||
|  |  | ||||||
|  | # generate the changelog | ||||||
|  | git --no-pager log --no-merges --format="### %s%d%n>%aD%n%n>Author: %aN (%aE)%n%n>Commiter: %cN (%cE)%n%n%b%n%N%n" > $OUTPUT_FILE | ||||||
|  |  | ||||||
|  | # prevent recursion! | ||||||
|  | # since a 'commit --amend' will trigger the post-commit script again | ||||||
|  | # we have to check if the changelog file has changed or not | ||||||
|  | res=$(git status --porcelain | grep -c ".\$OUTPUT_FILE$") | ||||||
|  | if [ "$res" -gt 0 ]; then | ||||||
|  |   git add $OUTPUT_FILE | ||||||
|  |   git commit --amend | ||||||
|  |   echo "Populated Changelog in $OUTPUT_FILE" | ||||||
|  | fi | ||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
| @@ -72,7 +72,8 @@ use FHEM::Meta; | |||||||
| use GPUtils qw(GP_Import GP_Export); | use GPUtils qw(GP_Import GP_Export); | ||||||
| use Data::Dumper;    #only for Debugging | use Data::Dumper;    #only for Debugging | ||||||
| use Date::Parse; | use Date::Parse; | ||||||
| use experimental qw( switch ); |  | ||||||
|  | # use experimental qw( switch );   deprecated | ||||||
|  |  | ||||||
| use FHEM::Automation::ShuttersControl::Shutters; | use FHEM::Automation::ShuttersControl::Shutters; | ||||||
| use FHEM::Automation::ShuttersControl::Dev; | use FHEM::Automation::ShuttersControl::Dev; | ||||||
| @@ -526,107 +527,103 @@ sub Set { | |||||||
|     my $cmd  = shift @$aArg |     my $cmd  = shift @$aArg | ||||||
|       // return qq{"set $name" needs at least one argument}; |       // return qq{"set $name" needs at least one argument}; | ||||||
|  |  | ||||||
|     given ($cmd) { |     if ( $cmd eq 'renewAllTimer' ) { | ||||||
|         when ('renewAllTimer') { |         return "usage: $cmd" if ( scalar( @{$aArg} ) != 0 ); | ||||||
|             return "usage: $cmd" if ( scalar( @{$aArg} ) != 0 ); |         RenewSunRiseSetShuttersTimer($hash); | ||||||
|             RenewSunRiseSetShuttersTimer($hash); |     } | ||||||
|         } |     elsif ( $cmd eq 'renewTimer' ) { | ||||||
|         when ('renewTimer') { |         return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); | ||||||
|             return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); |         CreateSunRiseSetShuttersTimer( $hash, $aArg->[0] ); | ||||||
|             CreateSunRiseSetShuttersTimer( $hash, $aArg->[0] ); |     } | ||||||
|         } |     elsif ( $cmd eq 'scanForShutters' ) { | ||||||
|         when ('scanForShutters') { |         return "usage: $cmd" if ( scalar( @{$aArg} ) != 0 ); | ||||||
|             return "usage: $cmd" if ( scalar( @{$aArg} ) != 0 ); |         ShuttersDeviceScan($hash); | ||||||
|             ShuttersDeviceScan($hash); |     } | ||||||
|         } |     elsif ( $cmd eq 'createNewNotifyDev' ) { | ||||||
|         when ('createNewNotifyDev') { |         return "usage: $cmd" if ( scalar( @{$aArg} ) != 0 ); | ||||||
|             return "usage: $cmd" if ( scalar( @{$aArg} ) != 0 ); |         CreateNewNotifyDev($hash); | ||||||
|             CreateNewNotifyDev($hash); |     } | ||||||
|         } |     elsif ( $cmd eq 'partyMode' ) { | ||||||
|         when ('partyMode') { |         return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); | ||||||
|             return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); |         ::readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ) | ||||||
|             ::readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ) |           if ( $aArg->[0] ne ::ReadingsVal( $name, 'partyMode', 0 ) ); | ||||||
|               if ( $aArg->[0] ne ::ReadingsVal( $name, 'partyMode', 0 ) ); |     } | ||||||
|         } |     elsif ( $cmd eq 'hardLockOut' ) { | ||||||
|         when ('hardLockOut') { |         return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); | ||||||
|             return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); |         ::readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ); | ||||||
|             ::readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ); |         HardewareBlockForShutters( $hash, $aArg->[0] ); | ||||||
|             HardewareBlockForShutters( $hash, $aArg->[0] ); |     } | ||||||
|         } |     elsif ( $cmd eq 'sunriseTimeWeHoliday' ) { | ||||||
|         when ('sunriseTimeWeHoliday') { |         return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); | ||||||
|             return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); |         ::readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ); | ||||||
|             ::readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ); |     } | ||||||
|         } |     elsif ( $cmd eq 'controlShading' ) { | ||||||
|         when ('controlShading') { |         return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); | ||||||
|             return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); |  | ||||||
|  |  | ||||||
|             my $response = CheckASC_ConditionsForShadingFn( $hash, $aArg->[0] ); |  | ||||||
|             ::readingsSingleUpdate( |  | ||||||
|                 $hash, $cmd, |  | ||||||
|                 ( |  | ||||||
|                     $aArg->[0] eq 'off' ? $aArg->[0] |  | ||||||
|                     : ( |  | ||||||
|                           $response eq 'none' ? $aArg->[0] |  | ||||||
|                         : $response |  | ||||||
|                     ) |  | ||||||
|                 ), |  | ||||||
|                 1 |  | ||||||
|             ); |  | ||||||
|         } |  | ||||||
|         when ('selfDefense') { |  | ||||||
|             return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); |  | ||||||
|             ::readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ); |  | ||||||
|         } |  | ||||||
|         when ('ascEnable') { |  | ||||||
|             return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); |  | ||||||
|             ::readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ); |  | ||||||
|         } |  | ||||||
|         when ('advDriveDown') { |  | ||||||
|             return "usage: $cmd" if ( scalar( @{$aArg} ) != 0 ); |  | ||||||
|             EventProcessingAdvShuttersClose($hash); |  | ||||||
|         } |  | ||||||
|         when ('shutterASCenableToggle') { |  | ||||||
|             return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); |  | ||||||
|             ::readingsSingleUpdate( |  | ||||||
|                 $defs{ $aArg->[0] }, |  | ||||||
|                 'ASC_Enable', |  | ||||||
|                 ( |  | ||||||
|                     ::ReadingsVal( $aArg->[0], 'ASC_Enable', 'off' ) eq 'on' |  | ||||||
|                     ? 'off' |  | ||||||
|                     : 'on' |  | ||||||
|                 ), |  | ||||||
|                 1 |  | ||||||
|             ); |  | ||||||
|         } |  | ||||||
|         when ('wiggle') { |  | ||||||
|             return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); |  | ||||||
|  |  | ||||||
|  |         my $response = CheckASC_ConditionsForShadingFn( $hash, $aArg->[0] ); | ||||||
|  |         ::readingsSingleUpdate( | ||||||
|  |             $hash, $cmd, | ||||||
|             ( |             ( | ||||||
|                 $aArg->[0] eq 'all' |                 $aArg->[0] eq 'off' ? $aArg->[0] | ||||||
|                 ? wiggleAll($hash) |                 : ( | ||||||
|                 : wiggle( $hash, $aArg->[0] ) |                       $response eq 'none' ? $aArg->[0] | ||||||
|             ); |                     : $response | ||||||
|         } |                 ) | ||||||
|         default { |             ), | ||||||
|             my $list = 'scanForShutters:noArg'; |             1 | ||||||
|             $list .= |         ); | ||||||
| ' renewAllTimer:noArg advDriveDown:noArg partyMode:on,off hardLockOut:on,off sunriseTimeWeHoliday:on,off controlShading:on,off selfDefense:on,off ascEnable:on,off wiggle:all,' |     } | ||||||
|               . join( ',', @{ $hash->{helper}{shuttersList} } ) |     elsif ( $cmd eq 'selfDefense' ) { | ||||||
|               . ' shutterASCenableToggle:' |         return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); | ||||||
|               . join( ',', @{ $hash->{helper}{shuttersList} } ) |         ::readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ); | ||||||
|               . ' renewTimer:' |     } | ||||||
|               . join( ',', @{ $hash->{helper}{shuttersList} } ) |     elsif ( $cmd eq 'ascEnable' ) { | ||||||
|               if ( |         return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); | ||||||
|                 ::ReadingsVal( $name, 'userAttrList', 'none' ) eq 'rolled out' |         ::readingsSingleUpdate( $hash, $cmd, $aArg->[0], 1 ); | ||||||
|                 && defined( $hash->{helper}{shuttersList} ) |     } | ||||||
|                 && scalar( @{ $hash->{helper}{shuttersList} } ) > 0 ); |     elsif ( $cmd eq 'advDriveDown' ) { | ||||||
|             $list .= ' createNewNotifyDev:noArg' |         return "usage: $cmd" if ( scalar( @{$aArg} ) != 0 ); | ||||||
|               if ( |         EventProcessingAdvShuttersClose($hash); | ||||||
|                 ::ReadingsVal( $name, 'userAttrList', 'none' ) eq 'rolled out' |     } | ||||||
|                 && ::AttrVal( $name, 'ASC_expert', 0 ) == 1 ); |     elsif ( $cmd eq 'shutterASCenableToggle' ) { | ||||||
|  |         return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); | ||||||
|  |         ::readingsSingleUpdate( | ||||||
|  |             $defs{ $aArg->[0] }, | ||||||
|  |             'ASC_Enable', | ||||||
|  |             ( | ||||||
|  |                 ::ReadingsVal( $aArg->[0], 'ASC_Enable', 'off' ) eq 'on' | ||||||
|  |                 ? 'off' | ||||||
|  |                 : 'on' | ||||||
|  |             ), | ||||||
|  |             1 | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |     elsif ( $cmd eq 'wiggle' ) { | ||||||
|  |         return "usage: $cmd" if ( scalar( @{$aArg} ) > 1 ); | ||||||
|  |  | ||||||
|             return "Unknown argument $cmd,choose one of $list"; |         ( | ||||||
|         } |             $aArg->[0] eq 'all' | ||||||
|  |             ? wiggleAll($hash) | ||||||
|  |             : wiggle( $hash, $aArg->[0] ) | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |         my $list = 'scanForShutters:noArg'; | ||||||
|  |         $list .= | ||||||
|  | ' renewAllTimer:noArg advDriveDown:noArg partyMode:on,off hardLockOut:on,off sunriseTimeWeHoliday:on,off controlShading:on,off selfDefense:on,off ascEnable:on,off wiggle:all,' | ||||||
|  |           . join( ',', @{ $hash->{helper}{shuttersList} } ) | ||||||
|  |           . ' shutterASCenableToggle:' | ||||||
|  |           . join( ',', @{ $hash->{helper}{shuttersList} } ) | ||||||
|  |           . ' renewTimer:' | ||||||
|  |           . join( ',', @{ $hash->{helper}{shuttersList} } ) | ||||||
|  |           if ( ::ReadingsVal( $name, 'userAttrList', 'none' ) eq 'rolled out' | ||||||
|  |             && defined( $hash->{helper}{shuttersList} ) | ||||||
|  |             && scalar( @{ $hash->{helper}{shuttersList} } ) > 0 ); | ||||||
|  |         $list .= ' createNewNotifyDev:noArg' | ||||||
|  |           if ( ::ReadingsVal( $name, 'userAttrList', 'none' ) eq 'rolled out' | ||||||
|  |             && ::AttrVal( $name, 'ASC_expert', 0 ) == 1 ); | ||||||
|  |  | ||||||
|  |         return "Unknown argument $cmd,choose one of $list"; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     return; |     return; | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ | |||||||
| # | # | ||||||
| # Developed with VSCodium and richterger perl plugin | # Developed with VSCodium and richterger perl plugin | ||||||
| # | # | ||||||
| #  (c) 2018-2023 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | #  (c) 2018-2025 Copyright: Marko Oldenburg (fhemdevelopment at cooltux dot net) | ||||||
| #  All rights reserved | #  All rights reserved | ||||||
| # | # | ||||||
| #   Special thanks goes to: | #   Special thanks goes to: | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user