Wie kann ich in einem notify die Raumzugehörigkeit manipulieren, also devices aus einem Raum herausnehmen oder hineintun? attr setzt, wenn ich das richtig verstanden habe, ja immer den vollen Wert, würde also die alten Zugehörigkeiten komplett überschreiben.
https://forum.fhem.de/index.php/topic,60018.msg513782.html#msg513782
Gruß
Dan
Cool, danke!
Sorry, vergesst meine Frage, habe den copy&paste-Fehler beim ca_roomadd selbst gefunden... :-[
Okay, Entfernen klappt, Hinzufügen nicht. Sieht zufällig wer auf Anhieb meinen Fehler?
notify:
defmod heizungAnAus notify Heizkessel:.*| { if ($EVENT eq "off") { fhem("set model=HM-TC-IT-WM-W-EU:FILTER=chanNo=02 controlMode manual");; fhem("set model=HM-TC-IT-WM-W-EU:FILTER=chanNo=02 desired-temp off");; fhem("roomremove .*_wt.*_Climate Übersicht")} elsif ($EVENT eq "on") { fhem("set model=HM-TC-IT-WM-W-EU:FILTER=chanNo=02 controlMode auto");; fhem("roomadd .*_wt.*_Climate Übersicht")} }
Auf auto schalten bei "on" funktioniert, zum Raum "Übersicht" hinzufügen nicht. (BTW, darf ich innerhalb eines Perl-Blocks im notify eigentlich Zeilenumbrüche und Einrückungen einbauen? Das würde das ganze etwas lesbarer machen.)
roomadd:
defmod ca_roomadd cmdalias roomadd .* AS {roomsAdd($EVTPART0,$EVTPART1)} define ca_roomremove cmdalias roomremove .* AS {roomsRemove($EVTPART0,$EVTPART1)}
setstate ca_roomadd defined
roomremove:
defmod ca_roomremove cmdalias roomremove .* AS {roomsRemove($EVTPART0,$EVTPART1)}
setstate ca_roomremove defined
myUtils
sub roomsAdd($$)
{
my ($devspec,$arooms) = @_;
my $rooms = $arooms =~ /\!$/ ? (split("!",$arooms))[0] : $arooms;
foreach my $dev (devspec2array("$devspec"))
{
my @oldrooms = split(",",AttrVal($dev,"room",""));
my $nrooms = $rooms;
if ($arooms !~ /\!$/)
{
foreach my $room (split(",",$rooms))
{
push @oldrooms,$room if (!grep(/^$room$/,@oldrooms));
}
$nrooms = join(",",sort @oldrooms);
}
fhem "attr $dev room $nrooms";
}
}
sub roomsRemove($$)
{
my ($devspec,$rrooms) = @_;
foreach my $dev (devspec2array("$devspec"))
{
my @newrooms;
foreach my $room (split(",",AttrVal($dev,"room","")))
{
push @newrooms,$room if (!grep(/^$room$/,split(",",$rrooms)));
}
my $nrooms = join(",",sort @newrooms);
scalar @newrooms ? fhem "attr $dev room $nrooms" : fhem "deleteattr $dev room";
}
}