Abschätzung von Wirtschaftlichkeit beim Speicher Laden, falls Tibber zu teuer wird
if ( ReadingsVal("$NAME","compensation_grid",0) != 0 ) {
my $price_level_battery = round( ($fc_avg - ReadingsVal("$NAME","compensation_grid",0)) *0.85 , 1) ;
if ( $price_level > $price_level_battery ) {
$price_level = $price_level_battery;
}
}
$price_level;
ZitatKeine Ahnung seit wann die RfZ/APZ gefordert werdenOffenbar in der Pipeline seit 2015 (siehe VDE oben), effektiv für neue Zählerschränke seit 2017.
Regenmenge_Jahr { ReadingsVal ("Regen_Aktuelles_Jahr","*Niederschlag*",0) }
2024-01-01__Niederschlag__state__SUM__2024
sub rooms {
# call by {rooms("attr")}
my ($attrErstellen) = @_;
my $room_string = "";
my %custom_sort_order = (
"Start" => 1,
"Config" => 2,
"Aus" => 3,
"KG" => 4,
"EG" => 5,
"OG" => 6,
"DG" => 7,
"TH" => 8,
"Numeric" => 9, # Add this for numeric room names
);
my @rooms;
foreach my $device ( devspec2array(".*") ) {
my $room_val = AttrVal( $device, "room", "Unsorted" );
if ( index( $room_val, ',' ) != -1 ) { # Check if room_val contains a comma
foreach my $room ( split( ",", $room_val ) ) {
unless ( grep { $_ eq $room } @rooms ) {
push( @rooms, $room );
}
}
}
else { # If room_val doesn't contain a comma, treat it as a single room
unless ( grep { $_ eq $room_val } @rooms ) {
push( @rooms, $room_val );
}
}
}
# Print room names
print "1) Room names after populating: @rooms\n";
# Sorting logic: Include handling for numeric room names
@rooms = sort {
my $a_sort = custom_sort_value( $a, \%custom_sort_order ) || 9999;
my $b_sort = custom_sort_value( $b, \%custom_sort_order ) || 9999;
$a_sort <=> $b_sort || $a cmp $b;
} @rooms;
if ( defined $attrErstellen && $attrErstellen eq "attr" ) {
$room_string = join( " ", @rooms );
fhem("attr WEB sortRooms $room_string");
print "3.1) Sorted room list: $room_string\n";
}
else {
print "3.2) Sorted room list: $room_string\n";
}
my $room_list = join( "\n", @rooms );
return $room_list;
}
sub custom_sort_value {
my ( $room, $sort_order ) = @_;
# Debug printing
print "2) Room before sorting: $room\n";
for my $pattern ( keys %$sort_order ) {
if ( $room =~ /\Q$pattern\E/ ) {
print "Matched pattern: $pattern\n";
return $sort_order->{$pattern};
}
}
# Handle numeric room names
if ( $room =~ /^\d+/ ) {
return $sort_order->{Numeric};
}
return;
}