Copy Gerät_1 Gerät_2 geht nicht

Begonnen von Bennemannc, 30 November 2015, 14:18:59

Vorheriges Thema - Nächstes Thema

Bennemannc

Hallo,

der copy Befehl von fhem geht bei Homematic Geräten nicht. Das Kopieren wird abgelehnt, da die hmId bereits vorhanden ist (logischer Weise). Das ist irgendwie doof, da man dann immer alles von Hand machen muss. Schöner wäre, wenn der Copy Befehl funktioniert und man an dem neuen Device einfach die def ändern könnte. Oder gibt es da einen Parameter, den ich nicht kenne ?

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

marvin78

copy ist nicht für Devices dieser Art gedacht. Es macht auch keinen Sinn, eine ID für HM zwei mal im System zu haben. Auch nicht kurzfristig. Warum lässt du die HM Geräte nicht per autocreate anlegen? Du musst sie doch ohnehin pairen.

Bennemannc

Hallo,

das mit dem Autocreate mache ich schon - aber das ganze Geraffel wie Icons, Room, Gruppe, .... wäre schön wenn man das kopieren könnte.
Mein vorgehen wäre - pairen, dann hat das Device die ID für PairCentral und ich die ID vom Device. Das Device löschen und ein anderes Device kopieren - mit allen Attributen. Anschließend die ID vom neuen Device einsetzen und gut.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

marvin78

Es gab diesbezüglich mal Vorschläge (Attribute von einem Device auf das andere kopieren) hier im Forum. Das ganze ist aber, wenn ich mich recht erinnere, im Sand verlaufen.

ph1959de

Ich weiss nicht, wie gut makefine in diesem Fall funktioniert - auf jeden Fall geht es wohl in die Richtung dessen, was Du möchtest (und ist vielleicht auch das, was marvin78 meint).

Peter
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"

marvin78

Ja mit einer eigenen sub (oder eben dieser makefine sub), kann man viel machen. Das ist aber nicht, was ich meine. Es ging um eine Erweiterung von copy.

marvin78

#6
Hier eine kleine Quick&Dirty sub, die angegebene Attribute von einem Gerät auf ein anderes kopieren kann:

sub copyAttr($$$) {
  my ($dev,$copy,$attrs) = @_;
  my @attrs = split(":",$attrs);
  foreach my $attr (@attrs) {
    my $attrVal=AttrVal($dev,$attr,"-");
    if ($attrVal ne "-") {
      $attr{$copy}{$attr} = $attrVal;
    }
  }
}


Anwendung:

{copyAttr('DEVICE1','DEVICE2','Attr1:Attr2:Attr3')}

Bitte beachten, es gibt keine Überprüfung, ob es sinnvoll ist, die Attribute zu kopieren oder ob die Attribute überhaupt vorhanden oder für das Zieldevice geeignet sind.

Edit: cmdalias dazu

define copyAttributes cmdalias copyattr .* AS {copyAttr("$EVTPART0","$EVTPART1","$EVTPART2")}

Verwendung:

copyattr DEVICE1 DEVICE2 Attr1:Attr2:Attr2

justme1968

ja. es gab mal eine diskussion das copy kommando so weit aufzubohren das man angeben kann was alles kopiert oder überschrieben wird. ein ganzes device, nur bestimmte attribute, ...

das ganze ist aber im sande verlaufen weil nicht klar war wie viele echte anwendungen es dafür gegeben hätte und zum anderen die syntax nicht ganz klar war wenn es wirklich flexibel sein soll.

ich denke mit einer cmdalias basierten lösung die du auf deinen anwendungsfall maßschneidern kannst hat du mehr möglichkeiten.

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

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

Bennemannc

Hallo,

wer meckert eigentlich die doppelte ID an - in welchem Modul ist das festgelegt ? Wenn ich mir das so ansehe, ist das kopieren in der fhem.cfg (ich weiß soll man nicht) die einfachste Möglichkeit.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

marvin78

CUL_HM mag keine doppelten IDs. Aus sehr gutem Grund. FS20 etc. machen das aber das gleiche. Ebenfalls aus gutem Grund.

Eventuell hilft dir ja mein Beitrag weiter oben vorerst.

justme1968

das copy kommando geht über die define routine des moduls. die CUL_HM DefFn spuckt die meldung aus.

neben allen anderen problemen beim bearbeiten der fhem.cfg hast du zusätzlich immer den nachteil das fhem neu startet und eine weile tot ist und jeder aktuelle interne zustand der nicht im save file landete verloren geht.

das ist also niemals optimal.

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

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

justme1968

FS20 kann man mehrfach mit der gleichen id definieren. aber das ist eigentlich nicht sinnvoll.

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

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

marvin78

Du hast Recht. Ich habe nicht erst nachgesehen, hatte es aber anders in Erinnerung. Dann wäre copy aber immerhin möglich.

Bennemannc

Hallo,

das es bei FS20 geht hilft nicht wirklich. Das es keinen Sinn macht, eine doppelte ID im System zu haben ist schon klar. Ich wollte die ja auch dann direkt ändern. Das kann man ja recht einfach mit Klick auf DEF. Vielleicht macht es ja Sinn, den copy Befehl so zu ändern, das er beim Kopieren von Devices eine Dummy ID einsetzt. Prüft DefFn auch ob die ID korrekt ist (also 6 Stellen hat) ? Wenn nein, dann wäre es doch einfach dort "new" reinzuschreiben.

Gruß Christoph
Cubietruck, Fhem 5.8
CC-RT-DN|LC-SW2-FM|RC-12|RC-19|LC-SW4-BA-PCB|LCp-SW1-BA-PCB|ES-PMSw1-Pl|LC-Bl1PBU-FM|PBI-4-FM|CC-VD|CC-TC|SEC-SC(2)|RC-KEY3-B|LC-Sw1PBU-FM|PB-2-FM|WDS100-C6-O|WDC7000|LC-Bl1-FM
Module: Dewpoint,FB_Callmonitor,HCS,Panstamp,at,notify,THRESHOLD,average,DOIF

marvin78

DefFn prüft auf die korrekte Form, ja. new kann dort nicht stehen.