attr room - einem Gerät per Befehl Räume hinzufügen / entnehmen

Begonnen von sprudelverduenner, 01 November 2016, 16:01:45

Vorheriges Thema - Nächstes Thema

sprudelverduenner

Hallo liebe FHEM Gemeinde,

ich stehe vor folgendem Problem:

Ich habe ein Gerät, dass ich mit dem Kommando {fhem ("attr Gerät room Raum1")} z.B. in den Raum1 setzen kann.
Möchte ich dieses Gerät nun noch in einen 2. Raum setzen so geht dies natürlich mit  {fhem ("attr Gerät room Raum1,Raum2")}.

Wie sieht aber die Lösung aus, wenn ich das Gerät unabhängig davon, ob es in Raum1 drin ist oder nicht, zum Raum2 hinzufügen möchte??

Oder auch den Raum2 dem Gerät wieder wegnehme - und eine Zugehörigkeit von z.B. Raum1 und Raum3 erhalten bleibt??

Gibt es dafür Befehle ?? Meine Suche danach blieb bisher erfolglos.

Liebe Grüße, Sprudelverduenner
FHEM @ RaspberryPi 3, HMLAN, HMUART + HMRS485, Homematic, ESPEasy @ Sonoff / Shelly / ESP8266, ZigBee @ CC2531
Echo Dot, Dreambox, Yamaha MusicCast, Logitech Hub, LW-12, LD382
FRITZ!Box 7590 AX, Mesh @ FRITZ!Repeater 2400, FRITZ!Fon, iPhone 13, iPad Air 5, AppleWatch 8

DeeSPe

Bordmittel sind mir nicht bekannt...

Zufügen würde so gehen:
{fhem "attr <name> room RaumNEU,".AttrVal("<name>","room","")}

Wegnehmen ist einiges komplexer, aber auch das geht...


Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

sprudelverduenner

@ DeeSPe

TOP: das geht so schon mal  - danke für den Code...

also an dem Wegnehmen eines Raumes wäre ich auch sehr dran interessiert ...
FHEM @ RaspberryPi 3, HMLAN, HMUART + HMRS485, Homematic, ESPEasy @ Sonoff / Shelly / ESP8266, ZigBee @ CC2531
Echo Dot, Dreambox, Yamaha MusicCast, Logitech Hub, LW-12, LD382
FRITZ!Box 7590 AX, Mesh @ FRITZ!Repeater 2400, FRITZ!Fon, iPhone 13, iPad Air 5, AppleWatch 8

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

DeeSPe

Ich hätte noch zwei Funktionen für die 99_myUtils.pm zu bieten die etwas genauer arbeiten:

EDIT: Beste Version (bisher) in diesem Beitrag.

Gruß
Dan

EDIT: Das funktioniert immer nur mit einem angegebenen Raum. Hierbei könnten aber die hinzuzufügenden/zu entfernenden Räume auch ähnlich heißen, z.B. Badezimmer und Badezimmerkammer.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Habe die beiden Funktionen nochmals angepasst.
Nun wird auch das Attribut room gelöscht sobald der letzte Raum entfernt wurde.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

sprudelverduenner

Hallo Andre,

deine Version des Raumhinzufügenhabe ich ebenfalls probiert - und die Einbindung gefällt mir sogar noch besser.

Allerdings habe ich so mein Problem mit dem löschen des Raums.
Ich habe mal die Funktion roomdelete getestet - wenn ich alles richtig verstanden löscht diese Funktion grundsätzlich den komletten Raum.

Ich möchte allerdings bei einem Device das z.B. im 3 Räumen eingetragen sein kann dann den z.B. 2 Raum deaktivieren....

Oder habe ich eine andere Funktion Deiner verlinkten Seite übersehen ??


FHEM @ RaspberryPi 3, HMLAN, HMUART + HMRS485, Homematic, ESPEasy @ Sonoff / Shelly / ESP8266, ZigBee @ CC2531
Echo Dot, Dreambox, Yamaha MusicCast, Logitech Hub, LW-12, LD382
FRITZ!Box 7590 AX, Mesh @ FRITZ!Repeater 2400, FRITZ!Fon, iPhone 13, iPad Air 5, AppleWatch 8

DeeSPe

Zitat von: justme1968 am 01 November 2016, 17:42:11
warum arbeitet deine version genauer?

gruss
  andre

Weil beim roomadd z.B. nur mittels index der String geprüft wird. Somit könnten auch Räume matchen die den selben Wortanfang haben. Das passiert bei mir nicht.
Oder habe ich was übersehen?

Gruß
Dan

P.S. Daraus kann man genauso einen cmdAlias machen.
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Hier nochmal die beiden Funktionen überarbeitet damit auch DevSpec und mehrere Räume gleichzeitig funktionieren.
Und dazu passendem cmdalias.

Damit geht dann z.B. sowas:
roomadd dev1,dev2,dev3 room,room1,room2
oder analog dazu:
roomremove dev1,dev2,dev3 room,room1,room2

Code für die 99_myUtils.pm:
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";
  }
}


2x cmdalias definieren:
define ca_roomadd cmdalias roomadd .* AS {roomsAdd($EVTPART0,$EVTPART1)}
define ca_roomremove cmdalias roomremove .* AS {roomsRemove($EVTPART0,$EVTPART1)}


Das gefällt mir so gut dass ich das bei mir selbst verwenden werde. 8)

Gruß
Dan

EDIT: Mal eben schnell alle meine Steckdosen in einen zusätzlichen Raum stecken:
roomadd (ku|bz|sz|wz|fl)_SD\d Steckdosen
Oder alle ZWave Geräte in einen zusätzlichen Raum:
roomadd TYPE=ZWave ZWave

EDIT2: Force ergänzt für roomadd. Damit werden nun nur noch die angegebenen Räume hinzugefügt und alle anderen entfernt. Einfach ein ! ans Ende stellen:
roomadd TYPE=ZWave ZWave!
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

Ich habe oben bei der "sub addRooms" noch force ergänzt.
Damit werden nun nur noch die angegebenen Räume hinzugefügt und alle anderen entfernt. Einfach ein ! ans Ende stellen:
roomadd dev1,dev2,dev3 room,room1,room2!

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

sprudelverduenner

Hallo Dan,

Du entwickelst Dich zu meinem persönlichen Helden ! ;-)

roomremove klappt perfekt.

Allerdings scheint in der Routine für roomadd noch ein Fehler drinne zu sein.
Hier wird anscheinend nur der force durchgeführt, das heisst alle anderen Räume ausser dem zuzufügendem werden gelöscht....

LG, Sprudelverduenner
FHEM @ RaspberryPi 3, HMLAN, HMUART + HMRS485, Homematic, ESPEasy @ Sonoff / Shelly / ESP8266, ZigBee @ CC2531
Echo Dot, Dreambox, Yamaha MusicCast, Logitech Hub, LW-12, LD382
FRITZ!Box 7590 AX, Mesh @ FRITZ!Repeater 2400, FRITZ!Fon, iPhone 13, iPad Air 5, AppleWatch 8

DeeSPe

Zitat von: sprudelverduenner am 01 November 2016, 21:07:33
Allerdings scheint in der Routine für roomadd noch ein Fehler drinne zu sein.
Hier wird anscheinend nur der force durchgeführt, das heisst alle anderen Räume ausser dem zuzufügendem werden gelöscht....

Habe ich vor zwei Minuten gefixt und oben geändert! 8)

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

sprudelverduenner

ich will nicht nörgeln.....

aber jetzt passiert bei beiden Aktionen gar nichts mehr .... ich habe nur die 99-myUtils aktualisiert .... richtig ?!?
FHEM @ RaspberryPi 3, HMLAN, HMUART + HMRS485, Homematic, ESPEasy @ Sonoff / Shelly / ESP8266, ZigBee @ CC2531
Echo Dot, Dreambox, Yamaha MusicCast, Logitech Hub, LW-12, LD382
FRITZ!Box 7590 AX, Mesh @ FRITZ!Repeater 2400, FRITZ!Fon, iPhone 13, iPad Air 5, AppleWatch 8

DeeSPe

Zitat von: sprudelverduenner am 01 November 2016, 21:17:18
ich will nicht nörgeln.....

aber jetzt passiert bei beiden Aktionen gar nichts mehr .... ich habe nur die 99-myUtils aktualisiert .... richtig ?!?

Ohhh verdammt!
Sorry, da habe ich beim kopieren wohl eine Zeile unterschlagen!  ::)
Hab's ausgebessert!!! 8)

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe