Readings Group über MyUtils Modul erstellen

Begonnen von pschlaeppi, 20 Februar 2021, 17:29:24

Vorheriges Thema - Nächstes Thema

pschlaeppi

Guten Tag zusammen,

Ich bin noch ziemlicher PERL Neuling und habe vor allem noch Mühe wie man Code embedden kann.

Ich möchte bei erkennen eines neuen Aktors eines bestimmten Typs über Code in myUtils versuchen
automatisch UserAttribute, Readings und eine ReadingsGroup zu erstellen.
Attribute und Readings funktioniert  bereits bestens.
Aber das mit der ReadingsGroup will keineswegs.

Folgende readingsGroup Definition möchte ich durch ein myUtils Modul anlegen lassen:
define rg.RolloSetFensterRelax readingsGroup <%edit_settings>,<Settings>,<>,<>,<>,<>\
og.vi.RO.FensterRelax:?RCtl_Description1,<>,<>,<>,<>,<>\
<hr>\
og.vi.RO.FensterRelax:<AutoClose:>,?RCtl_AutoClose,<BrightOpen:>,?RCtl_BrightOpen,<BrightClose:>,?RCtl_BrightClose,\
og.vi.RO.FensterRelax:<ReOpenCloseAfter:>,?RCtl_ReOpenCloseAfter,<Door&nbsp;;Open&nbsp;;Delay:>,?RCtl_DoorOpenDelay,<>,<>,<>\
og.vi.RO.FensterRelax:<AutoShade:>,?RCtl_AutoShade,<ShadeBright:>,?RCtl_BrightShade,<ShadeTemp:>,?RCtl_ShadeTemperature,\
og.vi.RO.FensterRelax:<ShadeMinDuration:>,?RCtl_ShadeMinDuration,<currentBrightness:>,!RCtl_currentShadeBrightness,<currentShadeLimit:>,!RCtl_currentShadeLimit,\
og.vi.RO.FensterRelax:<BrightOpenEvals:>,?RCtl_BrightOpenEvals,<currBrightOpenEvals>,!RCtl_currentBrightOpenEvals\
og.vi.RO.FensterRelax:<Fassade:>,?RCtl_Fassade,<Delay&nbsp;;on&nbsp;;Door&nbsp;;Open>,?RCtl_DoorOpenDelay,\
og.vi.RO.FensterRelax:<Azimuth&nbsp;;Start:>,?RCtl_ShadeAzimuthStart,<Azimuth&nbsp;;Stop:>,?RCtl_ShadeAzimuthStop,<Current:>,azimuth@myTwilight,\
og.vi.RO.FensterRelax:<Elevation&nbsp;;Start:>,?RCtl_ShadeElevationStart,<Elevation&nbsp;;Stop:>,?RCtl_ShadeElevationStop,<Current:>,elevation@myTwilight,\
og.vi.RO.FensterRelax:<Default&nbsp;;Open&nbsp;;:>,?RCtl_DefaultOpenState,<Freeze&nbsp;;Protection&nbsp;;:>,?RCtl_FreezeProtection,<>,<>\
og.vi.RO.FensterRelax:<Default&nbsp;;Close&nbsp;;:>,?RCtl_DefaultCloseState,<Rain&nbsp;;Protection&nbsp;;:>,?RCtl_RainProtection,<>,<>\
og.vi.RO.FensterRelax:<Default&nbsp;;Shade&nbsp;;:>,?RCtl_DefaultShadeState,<Wind&nbsp;;Protection&nbsp;;:>,?RCtl_WindProtection,<>,<>\
og.vi.RO.FensterRelax:<Shade&nbsp;;Not&nbsp;;Before&nbsp;;WDays:>,?RCtl_ShadeNotBeforeWDay,<>,<>,<>,<>\
og.vi.RO.FensterRelax:<Shade&nbsp;;not&nbsp;;Before&nbsp;;WEnds:>,?RCtl_ShadeNotBeforeWEnd,<>,<>,<>,<>\
og.vi.RO.FensterRelax:<Brightness&nbsp;;Sensor:>,?RCtl_BrightnessSensor,<Reading:>,?RCtl_BrightnessReading,<>,<>\
og.vi.RO.FensterRelax:<Shade&nbsp;;Brightness&nbsp;;Sensor:>,?RCtl_ShadeBrightnessSensor,<Reading:>,?RCtl_ShadeBrightnessReading,<>,<>\
og.vi.RO.FensterRelax:<Morgen&nbsp;;Fix1,&nbsp;;Zeit:>,?RCtl_MorningFix1,<Fix1&nbsp;;Tage:>,?RCtl_MorningDaysFix1,<>,<>\
og.vi.RO.FensterRelax:<Morgen&nbsp;;Fix2,&nbsp;;Zeit:>,?RCtl_MorningFix2,<Fix2&nbsp;;Tage:>,?RCtl_MorningDaysFix2,<>,<>\
og.vi.RO.FensterRelax:<Abend&nbsp;;Fix1,&nbsp;;Zeit:>,?RCtl_EveningFix1,<Fix1&nbsp;;Tage:>,?RCtl_EveningDaysFix1,<>,<>\
og.vi.RO.FensterRelax:<Abend&nbsp;;Fix2,&nbsp;;Zeit:>,?RCtl_EveningFix2,<Fix2&nbsp;;Tage:>,?RCtl_EveningDaysFix2,<>,<>\
<hr>\


Ich habe versucht den Text von " <%edit_set...." weg zuerst in einen StringVariable $rgDefine zu schreiben und dann
mit dem Befehl zu erstellen:
fhem ("define rgRolloSetFensterRelax define $rgDefine");

Das Modul erzeugt nur dann keine Fehlermeldung beim speichern wenn ich den ReadingsGroup Code in '"...Code..."' setze.In dem Fall erstellt es auch eine ReadingsGroup die funktioniert aber nicht da noch die " um den Definitions Code sind.
Wenn ich nur '...Definition...' verwende, kriege ich "Bad Name ....
und wenn ich " ...Definition..." verwende heisst es der String Terminator wurde bis EOF nicht gefunden obwohl am Anfang und Ende der Definition einer steht.

- Was mache ich falsch?
- Gibt es überhaupt ne Methode eine ReadingsGroup so zu erzeugen?
- wie müsste ich den Code embedden damit es mit dem fhem ("define xxx"); geht
- gibt es ne andere Methode eine ReadingsGroup aus einem Modul heraus zu erstellen?

Grüsse Philipp


Otto123

Hallo Phillip,

ich meine - da passt vieles nicht zusammen. Aber fangen wir mal so an.
Das sind drei Test für die FHEM Kommandozeile:
{my $var=q(<%edit_settings>,<Settings>,<>,<>,<>,<>);;return $var}
{my $var=q(<%edit_settings>,<Settings>,<>,<>,<>,<>\);;return $var}
{my $var=q(<%edit_settings>,<Settings>,<>,<>,<>,<>\ );;return $var}

Merkst Du den Unterschied? Der \ Maskiert das nächste Zeichen ;)
q(string) ist quasi 'string' aber etwas "besser"
So bekommst Du Deine Variable richtig gefüllt.
Das letzte <hr>\ ist doch falsch? Da darf kein \ mehr stehen. Das ist doch im define ein Zeilenumbruch.
Der Befehl ist doch auch falsch?
Zitatfhem ("define rgRolloSetFensterRelax define $rgDefine");

Ansonsten sollte das so gehen. Aber es gibt mehrere Fallstricke.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

pschlaeppi

#2
Hallo Otto,

Herzlichen Dank für deine schnelle Antwort. Die 3 Tests waren sehr hilfreich und vor allem auch der Trick mit dem q() .
Ich kannte nur den qw() beim array.

Ich habe auch jeweils die \ in den angelegten ReadiungsGroups in der fhem.cfg gesehen und gedacht das ich die auch
drinne haben müsste damit es die Zeilenumbrücke macht. Aber es geht ohne und reicht wenn ich nur ein Return eingebe.
Sobald das Programm dann mal durchgelaufen ist und die ReadingsGroup anlegt, sind die \ wieder da.
Es hat sogar mit dem <HR>\ funktioniert, aber erst als ich noch einen Leerschlag drin hatte, also so <HR>\ ". (Die Maskierung war das Problem)
Der define den ich hatte, der hat so schon funktioniert wie er war. Es braucht kein weiteres define mehr damit es Funktioniert.

Alleine das $device hat es nicht durch den Variablen Wert ersetzt, das konnte ich aber leicht durch ein Substitute fixen

Vielleicht hast du auch noch eine weitere zündende Idee wie ich darum herum komme für jeden Rollo eine eigene ReadingsGroup
machen zu müssen für die Settings.

Eigentlich hätte ich gerne in einem DropDown zum Beispiel auf einem Dummy, die Liste der Rollos aufgeführt.
In der ReadingsGroup sollte es dann zu Beginn jeder Zeile wo aktuell newDevice unten im Code steht, diesen DeviceNamen einsetzen.
So dass ich mit einer ReadingsGroup jeweils durch Selektion des gewünschten Device alle Rollos konfigurieren könnte.
Ich habe da schon alles mal versucht was mir in den Sinn kam und auch schon im Forum unter ReadingGroups gepostet aber bisher leider ohne Erfolg.


Grüsse Philipp


Folgender Code im MyUtils funktioniert soweit bestens:
sub
SetDefault_rgRollo($)
{

   my ($device) = @_;
   my $rgRollo = ("rg.SetRollo.".$device);
   my $rgDefine = q(<%edit_settings>,<Settings>,<>,<>,<>,<>
newDevice:?RCtl_Description1,<>,<>,<>,<>,<>
<hr>
newDevice:<AutoClose:>,?RCtl_AutoClose,<BrightOpen:>,?RCtl_BrightOpen,<BrightClose:>,?RCtl_BrightClose
newDevice:<ReOpenCloseAfter:>,?RCtl_ReOpenCloseAfter,<Door&nbsp;;Open&nbsp;;Delay:>,?RCtl_DoorOpenDelay,<>,<>,<>
newDevice:<AutoShade:>,?RCtl_AutoShade,<ShadeBright:>,?RCtl_BrightShade,<ShadeTemp:>,?RCtl_ShadeTemperature
newDevice:<ShadeMinDuration:>,?RCtl_ShadeMinDuration,<currentBrightness:>,!RCtl_currentShadeBrightness,<currentShadeLimit:>,!RCtl_currentShadeLimit
newDevice:<BrightOpenEvals:>,?RCtl_BrightOpenEvals,<currBrightOpenEvals>,!RCtl_currentBrightOpenEvals
newDevice:<Fassade:>,?RCtl_Fassade,<Delay&nbsp;;on&nbsp;;Door&nbsp;;Open>,?RCtl_DoorOpenDelay
newDevice:<Azimuth&nbsp;;Start:>,?RCtl_ShadeAzimuthStart,<Azimuth&nbsp;;Stop:>,?RCtl_ShadeAzimuthStop,<Current:>,azimuth@myTwilight
newDevice:<Elevation&nbsp;;Start:>,?RCtl_ShadeElevationStart,<Elevation&nbsp;;Stop:>,?RCtl_ShadeElevationStop,<Current:>,elevation@myTwilight
newDevice:<Default&nbsp;;Open&nbsp;;:>,?RCtl_DefaultOpenState,<Freeze&nbsp;;Protection&nbsp;;:>,?RCtl_FreezeProtection,<>,<>
newDevice:<Default&nbsp;;Close&nbsp;;:>,?RCtl_DefaultCloseState,<Rain&nbsp;;Protection&nbsp;;:>,?RCtl_RainProtection,<>,<>
newDevice:<Default&nbsp;;Shade&nbsp;;:>,?RCtl_DefaultShadeState,<Wind&nbsp;;Protection&nbsp;;:>,?RCtl_WindProtection,<>,<>
newDevice:<Shade&nbsp;;Not&nbsp;;Before&nbsp;;WDays:>,?RCtl_ShadeNotBeforeWDay,<>,<>,<>,<>
newDevice:<Shade&nbsp;;not&nbsp;;Before&nbsp;;WEnds:>,?RCtl_ShadeNotBeforeWEnd,<>,<>,<>,<>
newDevice:<Brightness&nbsp;;Sensor:>,?RCtl_BrightnessSensor,<Reading:>,?RCtl_BrightnessReading,<>,<>
newDevice:<Shade&nbsp;;Brightness&nbsp;;Sensor:>,?RCtl_ShadeBrightnessSensor,<Reading:>,?RCtl_ShadeBrightnessReading,<>,<>
newDevice:<Morgen&nbsp;;Fix1,&nbsp;;Zeit:>,?RCtl_MorningFix1,<Fix1&nbsp;;Tage:>,?RCtl_MorningDaysFix1,<>,<>
newDevice:<Morgen&nbsp;;Fix2,&nbsp;;Zeit:>,?RCtl_MorningFix2,<Fix2&nbsp;;Tage:>,?RCtl_MorningDaysFix2,<>,<>
newDevice:<Abend&nbsp;;Fix1,&nbsp;;Zeit:>,?RCtl_EveningFix1,<Fix1&nbsp;;Tage:>,?RCtl_EveningDaysFix1,<>,<>
newDevice:<Abend&nbsp;;Fix2,&nbsp;;Zeit:>,?RCtl_EveningFix2,<Fix2&nbsp;;Tage:>,?RCtl_EveningDaysFix2,<>,<>
<hr> ");

   $rgDefine =~s/newDevice/$device/g;

   fhem ("define $rgRollo readingsGroup $rgDefine");

}


Das erstellt dann folgende ReadingsGroup:

Internals:
   CFGFN     
   DEF        <%edit_settings>,<Settings>,<>,<>,<>,<>
og.vi.RO.FensterRelax:?RCtl_Description1,<>,<>,<>,<>,<>
<hr>
og.vi.RO.FensterRelax:<AutoClose:>,?RCtl_AutoClose,<BrightOpen:>,?RCtl_BrightOpen,<BrightClose:>,?RCtl_BrightClose
og.vi.RO.FensterRelax:<ReOpenCloseAfter:>,?RCtl_ReOpenCloseAfter,<Door&nbsp;Open&nbsp;Delay:>,?RCtl_DoorOpenDelay,<>,<>,<>
og.vi.RO.FensterRelax:<AutoShade:>,?RCtl_AutoShade,<ShadeBright:>,?RCtl_BrightShade,<ShadeTemp:>,?RCtl_ShadeTemperature
og.vi.RO.FensterRelax:<ShadeMinDuration:>,?RCtl_ShadeMinDuration,<currentBrightness:>,!RCtl_currentShadeBrightness,<currentShadeLimit:>,!RCtl_currentShadeLimit
og.vi.RO.FensterRelax:<BrightOpenEvals:>,?RCtl_BrightOpenEvals,<currBrightOpenEvals>,!RCtl_currentBrightOpenEvals
og.vi.RO.FensterRelax:<Fassade:>,?RCtl_Fassade,<Delay&nbsp;on&nbsp;Door&nbsp;Open>,?RCtl_DoorOpenDelay
og.vi.RO.FensterRelax:<Azimuth&nbsp;Start:>,?RCtl_ShadeAzimuthStart,<Azimuth&nbsp;Stop:>,?RCtl_ShadeAzimuthStop,<Current:>,azimuth@myTwilight
og.vi.RO.FensterRelax:<Elevation&nbsp;Start:>,?RCtl_ShadeElevationStart,<Elevation&nbsp;Stop:>,?RCtl_ShadeElevationStop,<Current:>,elevation@myTwilight
og.vi.RO.FensterRelax:<Default&nbsp;Open&nbsp;:>,?RCtl_DefaultOpenState,<Freeze&nbsp;Protection&nbsp;:>,?RCtl_FreezeProtection,<>,<>
og.vi.RO.FensterRelax:<Default&nbsp;Close&nbsp;:>,?RCtl_DefaultCloseState,<Rain&nbsp;Protection&nbsp;:>,?RCtl_RainProtection,<>,<>
og.vi.RO.FensterRelax:<Default&nbsp;Shade&nbsp;:>,?RCtl_DefaultShadeState,<Wind&nbsp;Protection&nbsp;:>,?RCtl_WindProtection,<>,<>
og.vi.RO.FensterRelax:<Shade&nbsp;Not&nbsp;Before&nbsp;WDays:>,?RCtl_ShadeNotBeforeWDay,<>,<>,<>,<>
og.vi.RO.FensterRelax:<Shade&nbsp;not&nbsp;Before&nbsp;WEnds:>,?RCtl_ShadeNotBeforeWEnd,<>,<>,<>,<>
og.vi.RO.FensterRelax:<Brightness&nbsp;Sensor:>,?RCtl_BrightnessSensor,<Reading:>,?RCtl_BrightnessReading,<>,<>
og.vi.RO.FensterRelax:<Shade&nbsp;Brightness&nbsp;Sensor:>,?RCtl_ShadeBrightnessSensor,<Reading:>,?RCtl_ShadeBrightnessReading,<>,<>
og.vi.RO.FensterRelax:<Morgen&nbsp;Fix1,&nbsp;Zeit:>,?RCtl_MorningFix1,<Fix1&nbsp;Tage:>,?RCtl_MorningDaysFix1,<>,<>
og.vi.RO.FensterRelax:<Morgen&nbsp;Fix2,&nbsp;Zeit:>,?RCtl_MorningFix2,<Fix2&nbsp;Tage:>,?RCtl_MorningDaysFix2,<>,<>
og.vi.RO.FensterRelax:<Abend&nbsp;Fix1,&nbsp;Zeit:>,?RCtl_EveningFix1,<Fix1&nbsp;Tage:>,?RCtl_EveningDaysFix1,<>,<>
og.vi.RO.FensterRelax:<Abend&nbsp;Fix2,&nbsp;Zeit:>,?RCtl_EveningFix2,<Fix2&nbsp;Tage:>,?RCtl_EveningDaysFix2,<>,<>
<hr> "
   FUUID      603171ac-f33f-2009-fcc6-6bc260955d23a347
   NAME       rg.SetRollo.og.vi.RO.FensterRelax
   NR         7132
   NTFY_ORDER 50-rg.SetRollo.og.vi.RO.FensterRelax
   STATE      Initialized
   TYPE       readingsGroup
   changed    0
   mayBeVisible 1
   CONTENT:
     og.vi.RO.FensterRelax 1
   CONTENT2:
     myTwilight 1
   DEVICES:
     ARRAY(0xeaa4cc0)
     ARRAY(0xe66df88)
     ARRAY(0x6919e30)
     ARRAY(0x107e8500)
     ARRAY(0xec8c3b8)
     ARRAY(0x107e8908)
     ARRAY(0xe8ef438)
     ARRAY(0x6f2ef18)
     ARRAY(0x7827f00)
     ARRAY(0x1021f730)
     ARRAY(0x329bc58)
     ARRAY(0xd9fc0b0)
     ARRAY(0x109c2f78)
     ARRAY(0xd93ff20)
     ARRAY(0xd9bd168)
     ARRAY(0x10d30c80)
     ARRAY(0xc6b71d8)
     ARRAY(0xb271590)
     ARRAY(0xc89d8d8)
     ARRAY(0xdfd2f90)
     ARRAY(0xe0e8248)
     ARRAY(0xca4adf0)
     ARRAY(0x109c2ce0)
   DEVICES2:
     ARRAY(0xeaa4cc0)
     ARRAY(0xe66df88)
     ARRAY(0x6919e30)
     ARRAY(0x107e8500)
     ARRAY(0xec8c3b8)
     ARRAY(0x107e8908)
     ARRAY(0xe8ef438)
     ARRAY(0x6f2ef18)
     ARRAY(0x7827f00)
     ARRAY(0x1021f730)
     ARRAY(0x329bc58)
     ARRAY(0xd9fc0b0)
     ARRAY(0x109c2f78)
     ARRAY(0xd93ff20)
     ARRAY(0xd9bd168)
     ARRAY(0x10d30c80)
     ARRAY(0xc6b71d8)
     ARRAY(0xb271590)
     ARRAY(0xc89d8d8)
     ARRAY(0xdfd2f90)
     ARRAY(0xe0e8248)
     ARRAY(0xca4adf0)
     ARRAY(0x109c2ce0)
     ARRAY(0xc79dbc8)
     ARRAY(0x1021fce8)
   fhem:
     lastDefChange 885
     last_update 1613853101.41994
   helper:
     DEF       
     positions:
       myTwilight.azimuth 10:6
       myTwilight.elevation 11:6
       og.vi.RO.FensterRelax.RCtl_AutoClose 4:2
       og.vi.RO.FensterRelax.RCtl_AutoShade 6:2
       og.vi.RO.FensterRelax.RCtl_BrightClose 4:6
       og.vi.RO.FensterRelax.RCtl_BrightOpen 4:4
       og.vi.RO.FensterRelax.RCtl_BrightOpenEvals 8:2
       og.vi.RO.FensterRelax.RCtl_BrightShade 6:4
       og.vi.RO.FensterRelax.RCtl_BrightnessReading 17:4
       og.vi.RO.FensterRelax.RCtl_BrightnessSensor 17:2
       og.vi.RO.FensterRelax.RCtl_DefaultCloseState 13:2
       og.vi.RO.FensterRelax.RCtl_DefaultOpenState 12:2
       og.vi.RO.FensterRelax.RCtl_DefaultShadeState 14:2
       og.vi.RO.FensterRelax.RCtl_EveningDaysFix1 21:4
       og.vi.RO.FensterRelax.RCtl_EveningDaysFix2 22:4
       og.vi.RO.FensterRelax.RCtl_EveningFix1 21:2
       og.vi.RO.FensterRelax.RCtl_EveningFix2 22:2
       og.vi.RO.FensterRelax.RCtl_Fassade 9:2
       og.vi.RO.FensterRelax.RCtl_FreezeProtection 12:4
       og.vi.RO.FensterRelax.RCtl_MorningDaysFix1 19:4
       og.vi.RO.FensterRelax.RCtl_MorningDaysFix2 20:4
       og.vi.RO.FensterRelax.RCtl_MorningFix1 19:2
       og.vi.RO.FensterRelax.RCtl_MorningFix2 20:2
       og.vi.RO.FensterRelax.RCtl_RainProtection 13:4
       og.vi.RO.FensterRelax.RCtl_ReOpenCloseAfter 5:2
       og.vi.RO.FensterRelax.RCtl_ShadeAzimuthStart 10:2
       og.vi.RO.FensterRelax.RCtl_ShadeAzimuthStop 10:4
       og.vi.RO.FensterRelax.RCtl_ShadeBrightnessReading 18:4
       og.vi.RO.FensterRelax.RCtl_ShadeBrightnessSensor 18:2
       og.vi.RO.FensterRelax.RCtl_ShadeElevationStart 11:2
       og.vi.RO.FensterRelax.RCtl_ShadeElevationStop 11:4
       og.vi.RO.FensterRelax.RCtl_ShadeMinDuration 7:2
       og.vi.RO.FensterRelax.RCtl_ShadeNotBeforeWDay 15:2
       og.vi.RO.FensterRelax.RCtl_ShadeNotBeforeWEnd 16:2
       og.vi.RO.FensterRelax.RCtl_ShadeTemperature 6:6
       og.vi.RO.FensterRelax.RCtl_WindProtection 14:4
       og.vi.RO.FensterRelax.RCtl_currentBrightOpenEvals 8:4
       og.vi.RO.FensterRelax.RCtl_currentShadeBrightness 7:4
       og.vi.RO.FensterRelax.RCtl_currentShadeLimit 7:6
     recalc:
       undef
       undef
       undef
       undef
       ARRAY(0xe7d2050)
       undef
       ARRAY(0xd66ece8)
     values:
       formated:
         undef
         undef
         ARRAY(0x10a4a8f0)
         undef
         ARRAY(0xe856628)
         undef
         ARRAY(0xd64fee0)
       orig:
         undef
         undef
         ARRAY(0xc98c368)
         undef
         ARRAY(0xf51f6f0)
         undef
         ARRAY(0xe04e910)
       prefixsuffix:
         undef
         undef
         ARRAY(0x2b5f460)
         undef
         ARRAY(0xd8cef28)
         undef
         ARRAY(0xf2fcea8)
Attributes:





Otto123

Hallo Philipp,

Deinen gewünschten Lösungsansatz kann ich irgendwie nicht verstehen. Ich bin aber auch nicht so der ReadingsGroup Versteher :)

Die Sache mit dem $device - ich habe da hier mal ein bisschen was aufgeschrieben. Das Thema ist zwar anders, aber es erklärt auch das 'Problem' ;)

Die Lösung mit dem substitute ist nicht schlecht :)

Der \ am Ende der Zeile (also wirklich als letztes Zeichen) ist in FHEM der Zeilenverbinder, die nächste Zeile wird also an die  Vorhergehende angehängt. Du findest sie in der cfg und in der Raw Definition - in der DEF wird es als Zeilenumbruch dargestellt.

Hilft es Dir einen DevSpec für newdevice zu verwenden?  Sowas wie Rollo.* oder model=Rollo oder TYPE=Rollo

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

pschlaeppi

#4
Hallo Otto,

Super Info in deinem Blog. Ich denke werde dann mal bei Gelegenheit mit dem Pröbeln beginnen.
Ist definitive ein Problem zu verstehen wie die Parameter übergeben werden können und da hat es
einige Denkanstösse drin die ich mal versuchen kann wenn ich wieder mal was Zeit habe.

Unten im attachten Screenshot findest du die Einstellungsmöglichkeiten meiner selbst gebauten Rollo Steuerung. Sie
Steuert entweder über Fix Zeiten oder über Helligkeits Thresholds und für die Beschattung zusätzlich pro Fenster mit
Azimuth, Elevation und Temperatur Werten an denen das Fenster Sonneneinfall hat. Im Winter Halbjahr zusätzlich mit
Presence dass der Raum durch die Sonne erwärmt wird wenn niemand anwesend ist.
Da gabs leider ROLLO und ASC noch nicht. Und Elero lässt sich leider auch nicht per pct anfahren. Man kann zwar die
Parameter direkt in den UserAttributen setzen, Madam findet das aber nicht ganz zu unrecht unmöglich. Daher habe
ich das ganze halt klickbar gemacht. Im attachten Screenshot siehst du 2 der ReadingsGroups untereinander. Die hat es
gestern nicht zuletzt dank deiner Hilfe neu erstellt und die funktioneren absolut bestens. Hat auch alle Attribut Werte sauber
ohne Fehler übernommen. Inzwischen sind das halt nun 12 solche Tabellen untereinander weil ich noch keinen Weg
gefunden habe zum Beispiel nur eine Tabelle zu machen und eben irgendwie eine Variable oder Perl Code anstelle des
"NewDevice" zuvorderst in der jeweiligen Zeile der Readings Group zu haben. Damit könnte ich dann eben nur noch eine
Tabelle haben und obendran zum Beispiel ein Auswahlfeld über welches ich den zu konfigurierenden Rollo auswählen kann. 

Das mit den DevSpec hilft mir leider nicht weiter. Den müsste ichg eben übergeben können. Mit der Wildcard nimmt
es dann einfach auf der ersten Zeile gleich die Werte aller 12 Rollos untereinander, dann auf der zweiten Zeile gleich
wieder die Werte aller 12 Rollos untereinander und so weiter. Da habe ich schon mit allem möglichen rumgebastelt.
Ich denke das Problem liegt irgendwo im Embedding des Übergabewertes oder in den Ebenen die du im Blog ansprichst.

Ich hoffe das dann irgendwann doch noch hin zu kriegen. Falls nicht habe ich aber jetzt mindestens ne
Lösung die mir erlaubt sauber und automatisch einen neuen Rollo einzufügen. Habe noch 3 Zimmer zu renovieren.
Bei denen muss ich jetzt nur noch den Rohrmotor anlernen, umbenennen und ein User Attribut auf 1 setzen und beim
ersten Run des Rollo Moduls alle 10 Minuten erstellt es alles automatisch und definert den Rollo mit Defaukt Werten und
erstellt jetzt eben auch noch die Readings Group dazu.

Ganz herzlichen Dank für deien Anschubhilfe. Das hats ausgemacht und ne Menge weiteren Aufwand erspart.

Grüsse Philipp