A5-38-08 Gateway Profil erweitern um Blinds Control

In dem Profil ist nur ein Teil des EEP integriert und zwar der 0x01 Switching
Wäre es möglich auch den Teil 0x07 Blinds Central Commands dort mit zu integrieren?
Problem ist: Ich habe zur Zeit meine 4 Jalousien über Afriso ABR152 mit dem EEP A5-38-08 unter dem
Funktionscode 07 eingebaut und bin nicht mehr in der Lage nach dem Wechsel auf IPS die Jalousien entsprechend zu fahren.
Da hängt nun der Haussegen schwer schief:(

Unterstützung zu diesem Thema wäre sehr hilfreich, da ich nicht diverse Euronen in neue kompatible Module stecken will.

Hast du mal geschaut, ob das hier hilft? More Enocean Features

paresy

Ja hab ich installiert und getestet.
Liegt aber leider an dem EEP, da dort zuviele Funktionen über verschiedene Befehlscodes umgesetzt wurden.
In der aktuellen Version in IPS wurde scheinbar nur der Befehlscode 1 umgesetzt und die weiteren ignoriert.
Verständlich bei dem erforderlichen Aufwand.
Oder DB3 wird nicht richtig ausgewertet, aber ohne den Sourcecode ist das schwer zu sagen.

Da du ja das EEP hast - hast du mal geschaut, ob du dir selber ein PHP Modul bauen kannst, dass die erforderlichen Bits&Bytes überträgt?

paresy

Werde mich mal an die Vorlage halten und versuchen das Modul von Silberstreifen anzupassen. Leider bin ich mehr der AWL Programmierer als der PHP schreiber. Aber ich denke erst mal anfangen und dann sehen was raus kommt. Ich werde mal berichten wie es läuft.

Mach dann einfach ein neues Thema im Module Bereich auf (am besten mit dem was du bereits auf GitHub fertig hast) und wir oder User hier helfen dir bestimmt weiter :slight_smile:

Wichtig ist, dass du uns das Gefühl gibt, was du alles ausprobiert hast und wo genau du nicht weiterkommst.

paresy

ich kann das sicherlich bei MoreEnoceanFeatures einbauen, wenn Du mir die erforderliche Spezifikation gibst. Alternativ kann ich Dir auch bei einem eignen Modul helfen.
Viele Grüße
Jürgen

Hallo Silberstreifen,

würde mich freuen Dir das EEP etc. zur Verfügung zu stellen.
Ich würde Dir auch eines meiner Module zusenden, wenn Du das entsprechend testen möchtest.
Wäre einfacher als per E-Mai zu testen :slight_smile:
Für mich wäre es auch einfacher, da ich mit PHP und Scripting an meine Grenzen stosse:cool:

Kannst mir ja bescheid geben was wir weiter machen wollen.

Hier die EEP Datei
Ganz am Ende ist der Befehlscode 07 mit dem die Blindscontrol realisiert ist.

A5-38-08.pdf (696 KB)

<DataSet>
<Telegram rorg=„0xA5“ length=„4“>
<Byte order=„0“ ignoremask=„0xFF“>0x00</Byte>
<Byte order=„1“ ignoremask=„0xFF“>0x00</Byte>
<Byte order=„2“ ignoremask=„0x00“>0x01</Byte>
<Byte order=„3“ ignoremask=„0xF7“>0x08</Byte>
</Telegram>
<RealData>
<Data>
<Shortcut>P2</Shortcut>
<Type>
Func. 00: – not used –-

                Func. 01: -- not used --

                Func. 02: -- not used --

                Func. 03: -- not used --

                Func. 04: Angel (see remark 1)
                Bit7 0 = positive sign
                Bit7 1 = negative sign
                Bit6...0  0 ... 90
                Angle in 2° steps (e.g. 0 = 0°, 90 = 180°)

                Func. 05: 0.0 ... 25.5 seconds

                Func. 06: 0.0 ... 25.5 seconds

                Func. 07: Runtime value to open the blind
                0 ... 255 seconds

                Func. 08: -- not used --

                Func. 09: Set maximal position value
                0 ... 100%

                Func. 10: Angle at the fully OPEN position
                Bit7 0 = positive sign
                Bit7 1 = negative sign
                Bit6...0  0 ... 90
                Angle in 2° steps (e.g. 0 = 0°, 90 = 180°)

                Func. 11: -- not used --
               &lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
&lt;/TestCase&gt;
&lt;TestCase&gt;
  &lt;Name&gt;Function Enum Test&lt;/Name&gt;
  &lt;Test&gt;
    &lt;Name&gt;Function: Do nothing, status request&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0x07"&gt;0x08&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;FUNC&lt;/Shortcut&gt;
            &lt;Type&gt;Do nothing, status request&lt;/Type&gt;
            &lt;Value&gt;0&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Function: Blind stops&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0x07"&gt;0x18&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;FUNC&lt;/Shortcut&gt;
            &lt;Type&gt;Blind stops&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Function: Blind opens&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0x07"&gt;0x28&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;FUNC&lt;/Shortcut&gt;
            &lt;Type&gt;Blind opens&lt;/Type&gt;
            &lt;Value&gt;2&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Function: Blind closes&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0x07"&gt;0x38&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;FUNC&lt;/Shortcut&gt;
            &lt;Type&gt;Blind closes&lt;/Type&gt;
            &lt;Value&gt;3&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Function: Blind drives to position with angle value (see remark 2)&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0x07"&gt;0x48&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;FUNC&lt;/Shortcut&gt;
            &lt;Type&gt;Blind drives to position with angle value (see remark 2)&lt;/Type&gt;
            &lt;Value&gt;4&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Function: Blind opens for time (position value) and angle (angle value)&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0x07"&gt;0x58&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;FUNC&lt;/Shortcut&gt;
            &lt;Type&gt;Blind opens for time (position value) and angle (angle value)&lt;/Type&gt;
            &lt;Value&gt;5&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Function: Blind closes for time (position value) and angle (angle value)&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0x07"&gt;0x68&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;FUNC&lt;/Shortcut&gt;
            &lt;Type&gt;Blind closes for time (position value) and angle (angle value)&lt;/Type&gt;
            &lt;Value&gt;6&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Function: Set Runtime parameters (see remark 3)&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0x07"&gt;0x78&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;FUNC&lt;/Shortcut&gt;
            &lt;Type&gt;Set Runtime parameters (see remark 3)&lt;/Type&gt;
            &lt;Value&gt;7&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Function: Set angle configuration (see remark 3)&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0x07"&gt;0x88&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;FUNC&lt;/Shortcut&gt;
            &lt;Type&gt;Set angle configuration (see remark 3)&lt;/Type&gt;
            &lt;Value&gt;8&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Function: Set Min, Max values (see remark 4)&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0x07"&gt;0x98&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;FUNC&lt;/Shortcut&gt;
            &lt;Type&gt;Set Min, Max values (see remark 4)&lt;/Type&gt;
            &lt;Value&gt;9&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Function: Set slat angle for SHUT and OPEN position (see remark 5)&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0x07"&gt;0xA8&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;FUNC&lt;/Shortcut&gt;
            &lt;Type&gt;Set slat angle for SHUT and OPEN position (see remark 5)&lt;/Type&gt;
            &lt;Value&gt;10&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Function: Set position logic (see remark 6)&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0x07"&gt;0xB8&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;FUNC&lt;/Shortcut&gt;
            &lt;Type&gt;Set position logic (see remark 6)&lt;/Type&gt;
            &lt;Value&gt;11&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
&lt;/TestCase&gt;
&lt;TestCase&gt;
  &lt;Name&gt;Send status flag Enum Test&lt;/Name&gt;
  &lt;Test&gt;
    &lt;Name&gt;Send status flag: Send new status of device&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0xF3"&gt;0x08&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;SSF&lt;/Shortcut&gt;
            &lt;Type&gt;Send new status of device&lt;/Type&gt;
            &lt;Value&gt;0&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Send status flag: Send no status (e.g. Global central commands)&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0xF3"&gt;0x0C&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;SSF&lt;/Shortcut&gt;
            &lt;Type&gt;Send no status (e.g. Global central commands)&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
&lt;/TestCase&gt;
&lt;TestCase&gt;
  &lt;Name&gt;Pos. and Angle flag Enum Test&lt;/Name&gt;
  &lt;Test&gt;
    &lt;Name&gt;Pos. and Angle flag: No Angle and position value available&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0xF5"&gt;0x08&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;PAF&lt;/Shortcut&gt;
            &lt;Type&gt;No Angle and position value available&lt;/Type&gt;
            &lt;Value&gt;0&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Pos. and Angle flag: Angle and position value available&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0xF5"&gt;0x0A&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;PAF&lt;/Shortcut&gt;
            &lt;Type&gt;Angle and position value available&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
&lt;/TestCase&gt;
&lt;TestCase&gt;
  &lt;Name&gt;Service Mode Flag Enum Test&lt;/Name&gt;
  &lt;Test&gt;
    &lt;Name&gt;Service Mode Flag: Normal operation&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0xF6"&gt;0x08&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;SMF&lt;/Shortcut&gt;
            &lt;Type&gt;Normal operation&lt;/Type&gt;
            &lt;Value&gt;0&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
  &lt;Test&gt;
    &lt;Name&gt;Service Mode Flag: Service mode: The module disables all
                  senders, except this sender, which has set the service mode.
                  (For example for maintenance)&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0xF6"&gt;0x09&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;SMF&lt;/Shortcut&gt;
            &lt;Type&gt;Service mode: The module disables all
                  senders, except this sender, which has set the service mode.
                  (For example for maintenance)&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
&lt;/TestCase&gt;
&lt;TestCase&gt;
  &lt;Name&gt;unusedFieldTest&lt;/Name&gt;
  &lt;Test&gt;
    &lt;Name&gt;unused field test&lt;/Name&gt;
    &lt;Step&gt;
      &lt;DataSet&gt;
        &lt;Telegram rorg="0xA5" length="4"&gt;
          &lt;Byte order="0" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="1" ignoremask="0x00"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="2" ignoremask="0xFF"&gt;0x00&lt;/Byte&gt;
          &lt;Byte order="3" ignoremask="0xFF"&gt;0x08&lt;/Byte&gt;
        &lt;/Telegram&gt;
        &lt;RealData&gt;
          &lt;Data&gt;
            &lt;Shortcut&gt;LRN&lt;/Shortcut&gt;
            &lt;Type&gt;LRN Bit&lt;/Type&gt;
            &lt;Value&gt;1&lt;/Value&gt;
          &lt;/Data&gt;
        &lt;/RealData&gt;
      &lt;/DataSet&gt;
    &lt;/Step&gt;
  &lt;/Test&gt;
&lt;/TestCase&gt;

</EEP>
</ProfileCertification>

Ich habe einmal soweit ich konnte die Vorgabe Deines Profils angepasst und habe nun noch die
Laufzeit sowie TeachIn/TeachOut offen.
Da komme ich nicht weiter, aber der Anfang des Scriptes könnte funktionieren.
Vielleicht schaust Du mal drüber ob das so klappen kann.

MfG
Ingo

<?php
class mEnOceanFEEPA53808_7 extends IPSModule
{
public function Create()
{
//Never delete this line!
parent::Create();
$this->RegisterPropertyString(„ReturnID“, „00000000“);

		$this-&gt;RegisterPropertyString("BaseData", '{
			"DataID":"{70E3075F-A35D-4DEB-AC20-C929A156FE48}",
			"Device":165,  //Telegram Type RPS/1BS/4BS/VLD etc.
			"Status":0,
			"DeviceID":0,
			"DestinationID":-1,
			"DataLength":4,
			"DataByte12":0,
			"DataByte11":0,
			"DataByte10":0,
			"DataByte9":0,
			"DataByte8":0,
			"DataByte7":0,
			"DataByte6":0,
			"DataByte5":0,
			"DataByte4":0,
			"DataByte3":0,
			"DataByte2":0,
			"DataByte1":0,
			"DataByte0":0
		}');

		//Connect to available enocean gateway
		$this-&gt;ConnectParent("{A52FEFE9-7858-4B8E-A96E-26E15CB944F7}");

	}

	public function Destroy(){
	    //Never delete this line!
	    parent::Destroy();

	}

	public function ApplyChanges()
	{
		//Never delete this line!
		parent::ApplyChanges();

		$this-&gt;RegisterVariableInteger('Position', $this-&gt;Translate('Position'), "~Blinds");

Filter setzen

		$this-&gt;SetReceiveDataFilter(".*"DeviceID":".(int)hexdec($this-&gt;ReadPropertyString("ReturnID")).",.*");

Slider für Position aktivieren

		$this-&gt;EnableAction("Position");	

	}
	
	public function ReceiveData($JSONString)
	{
		$this-&gt;SendDebug("Received", $JSONString, 0);
		$data = json_decode($JSONString);

        switch($data-&gt;Device) {
            case "165":  // 4BS 
				$position = $data-&gt;DataByte2;
				$this-&gt;SendDebug("Received Position", $position."%", 0);
				SetValue($this-&gt;GetIDForIdent("Position"), $position);	
                break;
            default:
				$this-&gt;LogMessage("Unknown Message", KL_ERROR);
        }
	
	}
	
    public function RequestAction($Ident, $Value) 
	{
        switch($Ident) {
            case "Position":
				$this-&gt;ShutterMoveTo($Value);
                break;
            default:
                throw new Exception("Invalid Ident");
        }
    }
	
    public function ShutterMoveTo(int $position) 
	{
		$data = json_decode($this-&gt;ReadPropertyString("BaseData"));
		$data-&gt;DataByte0 = 72; // DB0 Bit 1 Pos.Value avail Bit6 (Val 4) Drive to.. DB2 Pos.Val DB0.3 = 1 Data Telegram
		$data-&gt;DataByte2 = $position;
		$data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
		$this-&gt;SendData(json_encode($data));
    }
	
    public function ShutterStop() 
	{
		$data = json_decode($this-&gt;ReadPropertyString("BaseData"));
		$data-&gt;DataLength= 1;
		$data-&gt;DataByte0 = 10; // Set Func Stop DB0.4 = 1
		$data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
		$this-&gt;SendData(json_encode($data));
    }
	
    public function ShutterMoveDown() 
	{
		$this-&gt;ShutterMoveTo(100);
    }
	
    public function ShutterMoveUp() 
	{
		$this-&gt;ShutterMoveTo(0);
    }
	
    public function UpdatePosition() 
	{
		$data = json_decode($this-&gt;ReadPropertyString("BaseData"));
		$data-&gt;DataLength= 1;
		$data-&gt;DataByte0 = 8; // DB0.3 = 2 Data Telegram DB 0.4-7 = 0 Status request
		$data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
		$this-&gt;SendData(json_encode($data));
    }
	
   
	
    public function SetRunTime(int $milliseconds) 
	{
		$milliseconds = (int)($milliseconds/10);
		if($milliseconds &lt; 500 || $milliseconds &gt;32767) $milliseconds = 32767;
		$data = json_decode($this-&gt;ReadPropertyString("BaseData"));
		$data-&gt;DataLength= 5;
		$data-&gt;DataByte0 = 5;
		$data-&gt;DataByte1 = 7;
		$data-&gt;DataByte3 = $milliseconds%256;
		$data-&gt;DataByte4 = (int)($milliseconds/256);
		$data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
		$this-&gt;SendData(json_encode($data));
    }
	
    public function TeachIn() 
	{
		$data = json_decode($this-&gt;ReadPropertyString("BaseData"));
		$data-&gt;Device = 165,  //Telegram Type RPS/1BS/4BS/VLD etc.
		$data-&gt;DataLength = 4; // 4BS = 4Byte ????
		$data-&gt;DataByte0 = 8;
		$data-&gt;DataByte1 = 5;
		$data-&gt;DataByte2 = 0;
		$data-&gt;DataByte3 = 0;
		$data-&gt;DataByte4 = 70;
		$data-&gt;DataByte5 = 1;
		$data-&gt;DataByte6 = 145;
		$data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
		$this-&gt;SendData(json_encode($data));
    }
	
    public function TeachOut() 
	{
		$data = json_decode($this-&gt;ReadPropertyString("BaseData"));
		$data-&gt;Device = 165,  //Telegram Type RPS/1BS/4BS/VLD etc.
		$data-&gt;DataLength = 4; // 4BS = 4Byte ????
		$data-&gt;DataByte0 = 210;
		$data-&gt;DataByte1 = 5;
		$data-&gt;DataByte2 = 0;
		$data-&gt;DataByte3 = 0;
		$data-&gt;DataByte4 = 70;
		$data-&gt;DataByte5 = 1;
		$data-&gt;DataByte6 = 161;
		$data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
		$this-&gt;SendData(json_encode($data));
    }

	protected function SendData($data)
	{
		$this-&gt;SendDataToParent($data);
		$this-&gt;SendDebug("Sended", $data, 0);
	} 


	protected function SendDebug($Message, $Data, $Format)
	{
		if (is_array($Data))
		{
		    foreach ($Data as $Key =&gt; $DebugData)
		    {
					$this-&gt;SendDebug($Message . ":" . $Key, $DebugData, 0);
		    }
		}
		else if (is_object($Data))
		{
		    foreach ($Data as $Key =&gt; $DebugData)
		    {
					$this-&gt;SendDebug($Message . "." . $Key, $DebugData, 0);
		    }
		}
		else
		{
		    parent::SendDebug($Message, $Data, $Format);
		}
	} 
}

Hallo zusammen,

ich habe die Änderungen an dem Modul fertig und brauche jetzt mal Hilfe für die DataID und das Einbinden dises Teils in das MEF Projekt.

Hier der Code zu dem Profil:

<?php
class mEnOceanFEEPA53808_7 extends IPSModule
{
public function Create()
{
//Never delete this line!
parent::Create();
$this->RegisterPropertyString(„ReturnID“, „00000000“);

		$this-&gt;RegisterPropertyString("BaseData", '{
			"DataID":"{70E3075F-A35D-4DEB-AC20-C929A156FE48}",
			"Device":165,  //Telegram Type RPS/1BS/4BS/VLD etc.
			"Status":0,
			"DeviceID":0,
			"DestinationID":-1,
			"DataLength":4,
			"DataByte12":0,
			"DataByte11":0,
			"DataByte10":0,
			"DataByte9":0,
			"DataByte8":0,
			"DataByte7":0,
			"DataByte6":0,
			"DataByte5":0,
			"DataByte4":0,
			"DataByte3":0,
			"DataByte2":0,
			"DataByte1":0,
			"DataByte0":0
		}');

		//Connect to available enocean gateway
		$this-&gt;ConnectParent("{A52FEFE9-7858-4B8E-A96E-26E15CB944F7}");

	}

	public function Destroy(){
	    //Never delete this line!
	    parent::Destroy();

	}

	public function ApplyChanges()
	{
		//Never delete this line!
		parent::ApplyChanges();

		$this-&gt;RegisterVariableInteger('Position', $this-&gt;Translate('Position'), "~Blinds");

Filter setzen

		$this-&gt;SetReceiveDataFilter(".*"DeviceID":".(int)hexdec($this-&gt;ReadPropertyString("ReturnID")).",.*");

Slider für Position aktivieren

		$this-&gt;EnableAction("Position");	

	}
	
	public function ReceiveData($JSONString)
	{
		$this-&gt;SendDebug("Received", $JSONString, 0);
		$data = json_decode($JSONString);

        switch($data-&gt;Device) {
            case "165":  // 4BS 
				$position = $data-&gt;DataByte2;
				$this-&gt;SendDebug("Received Position", $position."%", 0);
				SetValue($this-&gt;GetIDForIdent("Position"), $position);	
                break;
            default:
				$this-&gt;LogMessage("Unknown Message", KL_ERROR);
        }
	
	}
	
    public function RequestAction($Ident, $Value) 
	{
        switch($Ident) {
            case "Position":
				$this-&gt;ShutterMoveTo($Value);
                break;
            default:
                throw new Exception("Invalid Ident");
        }
    }
	
    public function ShutterMoveTo(int $position) 
	{
		$data = json_decode($this-&gt;ReadPropertyString("BaseData"));
		$data-&gt;DataByte0 = 72; // DB0 Bit 1 Pos.Value avail Bit6 (Val 4) Drive to.. DB2 Pos.Val DB0.3 = 1 Data Telegram
		$data-&gt;DataByte2 = $position;
		$data-&gt;DataByte3 = 7; // Command 7 = Shutters/Blinds 
		$data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
		$this-&gt;SendData(json_encode($data));
    }
	
    public function ShutterStop() 
	{
		$data = json_decode($this-&gt;ReadPropertyString("BaseData"));
		$data-&gt;DataLength= 2;
		$data-&gt;DataByte0 = 10; // Set Func Stop DB0.4 = 1
		$data-&gt;DataByte3 = 7; // Command 7 = Shutters/Blinds 
		$data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
		$this-&gt;SendData(json_encode($data));
    }
	
    public function ShutterMoveDown() 
	{
		$this-&gt;ShutterMoveTo(100);
    }
	
    public function ShutterMoveUp() 
	{
		$this-&gt;ShutterMoveTo(0);
    }
	
    public function UpdatePosition() 
	{
		$data = json_decode($this-&gt;ReadPropertyString("BaseData"));
		$data-&gt;DataLength= 1;
		$data-&gt;DataByte0 = 8; // DB0.3 = 2 Data Telegram DB 0.4-7 = 0 Status request
		$data-&gt;DataByte3 = 7; // Command 7 = Shutters/Blinds 
		$data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
		$this-&gt;SendData(json_encode($data));
    }
	
   
	
    public function SetRunTime(int $milliseconds) 
	{
		$milliseconds = (int)($milliseconds/10);
		if($milliseconds &lt; 500 || $milliseconds &gt;32767) $milliseconds = 32767;
		$data = json_decode($this-&gt;ReadPropertyString("BaseData"));
		$data-&gt;DataLength= 4;
		$data-&gt;DataByte0 = 112; // DB0.4-7 set Runtime Func.7
		$data-&gt;DataByte1 = $milliseconds%256; // Runtime Value to open Func.7
		$data-&gt;DataByte2 = $milliseconds%256; // Runtime Value to close Func.7
		$data-&gt;DataByte3 = 7; // Command 7 = Shutters/Blinds 
		$data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
		$this-&gt;SendData(json_encode($data));
    }
	
    public function TeachIn() 
	{
		$data = json_decode($this-&gt;ReadPropertyString("BaseData"));
		$data-&gt;Device = 212,  //Telegram Type Universal Teach In
		$data-&gt;DataLength = 7; // Länge 7Byte 
		$data-&gt;DataByte0 = 165; //165=A5 
		$data-&gt;DataByte1 = 56; // 56=38
		$data-&gt;DataByte2 = 8; //  8=8
		$data-&gt;DataByte3 = 0; // 3Bit MSB Manufacturer ID
		$data-&gt;DataByte4 = 2d; // Afriso= 2d LSB Manufacturer ID 46 wäre NodOn bzw. ID RF !!!!
		$data-&gt;DataByte5 = 1; // Number of indiv.Channels to be taught in
		$data-&gt;DataByte6 = 224; // 1 Bidirectional 0 Teach in response expected 0 0   -0 0 0 0- Teach in Query = 0
		$data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
		$this-&gt;SendData(json_encode($data));
    }
	
    public function TeachOut() 
	{
		$data = json_decode($this-&gt;ReadPropertyString("BaseData"));
		$data-&gt;Device = 212,  //Telegram Type Universal Teach In
		$data-&gt;DataLength = 7; // Länge 7Byte 
		$data-&gt;DataByte0 = 165;
		$data-&gt;DataByte1 = 56;
		$data-&gt;DataByte2 = 8;
		$data-&gt;DataByte3 = 0;
		$data-&gt;DataByte4 = 2d; 
		$data-&gt;DataByte5 = 1;
		$data-&gt;DataByte6 = 161;
		$data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
		$this-&gt;SendData(json_encode($data));
    }

	protected function SendData($data)
	{
		$this-&gt;SendDataToParent($data);
		$this-&gt;SendDebug("Sended", $data, 0);
	} 


	protected function SendDebug($Message, $Data, $Format)
	{
		if (is_array($Data))
		{
		    foreach ($Data as $Key =&gt; $DebugData)
		    {
					$this-&gt;SendDebug($Message . ":" . $Key, $DebugData, 0);
		    }
		}
		else if (is_object($Data))
		{
		    foreach ($Data as $Key =&gt; $DebugData)
		    {
					$this-&gt;SendDebug($Message . "." . $Key, $DebugData, 0);
		    }
		}
		else
		{
		    parent::SendDebug($Message, $Data, $Format);
		}
	} 
}

MfG

Ingo

Hallo Ingo,
Ich sehe jetzt erst, dass Du hier sehr aktiv warst. Sehr schön. Ich gucke mir das mal an und baue das, wenn Du magst in mein Modul mit ein.

Viele Grüße
Jürgen

Hallo Jürgen,

das Angebot steht dir eines meiner Module zum testen zuzusenden.
Natürlich kannst Du das bei Dir mit einbinden in die MEF, vielleicht besteht ja die Möglichkeit die fehlenden Funktionen wie Blinds angle etc. noch mit einzubauen, dann wäre das so ein universal Teil für diese Geräte.

In den Kommentaren habe ich Dein bestehendes Modul mit angesprochen, so das Du dort noch mal sehen kannst ob das alles richtig ist.
Ich bin aber nicht tiefer in Deine Programmierung reingegangen.
Da ich fast alles kommentiert habe solltest Du das recht einfach haben mit dem nachvollziehen.
Vor allem an dem Teach in/out hab ich gesessen und das kommentiert weil nicht ganz klar war was dort gemacht wurde.
Sollte jetzt aber so passen.

Wie gesagt, das ist nur die Grundprogrammierung, für den Rest können wir ja mal überlegen ob wir`s machen.

MfG

Ingo

Hallo Ingo,

ich habe eben eine neue Version von More Enocean Features als Beta-Version in den Module-Store eingestellt. Dabei habe ich an einigen Stellen etwas improvisiert bzw. geraten oder auf Deine Vorlage gebaut, da ich die Hardware selbst nicht habe. Gucke mal bitte, ob das so funktioniert. Zu einem besonderen TeachIN-Prozedere habe ich nichts gefunden. Ich sende deshalb ein ganz einfaches TeachIn-Telegramm und hoffe, dass es so funktioniert.

Viel Erfolg und bitte um Rückmeldung, was geht und was nicht geht.

Jürgen

Hallo Jürgen,

Wie gesagt, ich sende Dir gerne das Hardwaremodul und die Beschreibung vom Hersteller zu :slight_smile:

Habe Deine Software mal probiert ( der Trick mit der Beta war nicht schlecht :banghead:) wer kann das ahnen, aber habs gefunden:D) und es will leider nicht:confused:

Fehler einlernen.JPG

Fehler einlernen2.JPG

Verstehe leider nicht wo da kein Integer sein soll, sieht für mich gut aus aber…hmm
Vielleicht hast Du noch eine Idee.

MfG

Ingo

Das ist ja merkwürdig. Passiert das immer oder nur bei einem bestimmten Befehl?
Kannst Du mir mal zeigen, was im Debug steht? Kommen die Rückmeldungen des Rolladen bereits rein?
Du kannst versuchsweise Deine GeräteID auch selbst von HEX nach Integer wandeln. Entsprechend Umrechner findest Du im Internet. Und dann trägst Du die GeräteID direkt als Integer ein.

Viele Grüße
Jürgen

Hallo Jürgen,

Habe gestern den ganzen Tag Versuche gemacht.
Werde Dir entsprechende Bilder zukommen lassen.
Fakt ist das learn in muss anders werden damit das Gerät Befehle akzeptiert vom Sender und dazu muss der geänderte Befehl gesendet werden.
Ich war mit dem Senden per Symcon erfolglos, da nur der Basestring mit der 7 gesendet wird und ein Teach in nicht übernommen wird( kannst dir meinen fork ja mal ansehen)
Leider komm ich grade erst von der Arbeit/Coronatest und bin etwas kaputt im Moment. Erst mal essen und dann weiter sehen.

MfG

Ingo

kein Problem. Bei mir ist der zeitliche Rahmen auch nicht wirklich üppig. Ich schiebe das immer mal zwischen, weil ich das spannend finde. Ich habe heute Abend noch ein bisschen gelesen, bin aber nicht viel schlauer geworden. Zum Lerntelegramm habe ich sehr wenig gefunden. Eventuell kann das A5-38-08-Lerntelegramm verwendet werden, dass ich bei Eltako gefunden habe, wenn man die Manufacturer-ID von „0D“ für Eltako auf „2D“ für Afriso umstellt. Das sieht dann wie folgt aus:
DB3: 224, DB2: 64, DB1: 45, DB0: 128.

Kannst Du das mal probieren?

Ggf. setzt Du DB1 auch mal auf 0.

Womit hast Du Deine Aktoren vor IPS betrieben? Hast Du ggf. noch ein Afriso Gateway? Dann könntest Du mit dem Gateway einen Einlernvorgang starten und mit IPS lauschen. Dann kennen wir auch das gesendete Lerntelegramm.

Die Antworten Deines Aktors kommen mit A5-11-03. Das müssen wir auch noch kontrollieren.

Viele Grüße
Jürgen

Hallo Jürgen,

ich habe heute etwas Zeit gehabt und die Telegramme/Programmierung angepasst.
Was ich konnte hab ich nun zum laufen gebracht.
Zum Ablauf, ich hatte die gleiche Idee wie Du und habe die „alten“ Telegramme von Hom.ee mitgespickt.
Habe Sie dann eingebaut und ein Modul mit Lampen dran laufen lassen.
Mit ein bischen hin und her hat das geklappt.
Du kannst den Code aus dem Fork von Github holen und schön machen oder diesen hier nehmen mit viel getippsel.
Die Blinds habe ich nicht mit drin nur die Rollershutter Funktionen. Ich wüste im moment auch nicht wie ich die dann testen sollte:o
Und noch mal zu den Modulen:
Es sind die Afriso ABR 152 wie Du schon richtig gelesen hast haben die als Empfänger das A5-38-08 mit Befehlscode 7 drinne und Antworten mit dem A5-11-03 gem. dem Afriso Dokument mit ID:900 100 0872 Version: 06.2017.0 falls es jemanden interessiert.
Falls die anderen Funktionen noch von jemandem benötigt werden, gerne melden, ich helfe wenn ich kann.
@ Jürgen: Vielen Dank für Deine Hilfe, es ist bestimmt nicht das letzte Mal das ich Dich benötige.

MfG

Ingo

<?php
class mEnOceanF_EEP_A53808_7 extends IPSModule{
public function Create(){
//Never delete this line!
parent::Create();
$this->RegisterPropertyString(„ReturnID“, „00000000“);

    $this-&gt;RegisterPropertyString("BaseData", '{
    "DataID":"{70E3075F-A35D-4DEB-AC20-C929A156FE48}",
    "Device":165, 
    "Status":0,
    "DeviceID":0,
    "DestinationID":-1,
    "DataLength":4,
    "DataByte12":0,
    "DataByte11":0,
    "DataByte10":0,
    "DataByte9":0,
    "DataByte8":0,
    "DataByte7":0,
    "DataByte6":0,
    "DataByte5":0,
    "DataByte4":0,
    "DataByte3":0,
    "DataByte2":0,
    "DataByte1":0,
    "DataByte0":0
    }');

    //Connect to available enocean gateway
    $this-&gt;ConnectParent("{A52FEFE9-7858-4B8E-A96E-26E15CB944F7}");

}

public function Destroy(){
    //Never delete this line!
    parent::Destroy();

}

public function ApplyChanges(){
    //Never delete this line!
    parent::ApplyChanges();

    $this-&gt;RegisterVariableInteger('Position', $this-&gt;Translate('Position'), "~Shutter");

    # Slider für Position aktivieren
    $this-&gt;EnableAction("Position");

    # Filter setzen
    $this-&gt;SetReceiveDataFilter(".*"DeviceID":".(int)hexdec( $this-&gt;ReadPropertyString("ReturnID")).",.*");

}

public function ReceiveData($JSONString){
    $this-&gt;SendDebug("Received", $JSONString, 0);
    $data = json_decode($JSONString);

    switch($data-&gt;Device) {
        case "165": 
            $position = $data-&gt;DataByte2;
            $this-&gt;SendDebug("Received Position", $position."%", 0);
			$this-&gt;SetValue("Position", $position);	
            break;
        default:
            $this-&gt;LogMessage("Unknown Message", KL_ERROR);
    }

}

public function RequestAction($Ident, $Value){
    switch($Ident) {
        case "Position":
            $this-&gt;ShutterMoveTo($Value);
            break;
        default:
            throw new Exception("Invalid Ident");
    }
}

public function ShutterMoveTo(int $position){
    if($position &lt;0)$position = 0; // geprüft i.O.
    if($position &gt;100)$position = 100;
    $data = json_decode($this-&gt;ReadPropertyString("BaseData"));
    $data-&gt;DataByte0 = 72;
    $data-&gt;DataByte1 = 00;
    $data-&gt;DataByte2 = $position;
    $data-&gt;DataByte3 = 07;
    $data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
    $this-&gt;SendData(json_encode($data));
}

public function ShutterStop(){
    $data = json_decode($this-&gt;ReadPropertyString("BaseData"));
    $data-&gt;DataByte0 = 24; // geprüft i.O.
    $data-&gt;DataByte1 = 00; 
    $data-&gt;DataByte2 = 00; 
    $data-&gt;DataByte3 = 07; 
    $data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
    $this-&gt;SendData(json_encode($data));
}

public function ShutterMoveDown(){
    $data = json_decode($this-&gt;ReadPropertyString("BaseData"));
    $data-&gt;DataByte0 = 56; // geprüft i.O.
    $data-&gt;DataByte1 = 00; 
    $data-&gt;DataByte2 = 00; 
    $data-&gt;DataByte3 = 07; 
    $data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
    $this-&gt;SendData(json_encode($data));
}

public function ShutterMoveUp(){
    $data = json_decode($this-&gt;ReadPropertyString("BaseData"));
    $data-&gt;DataByte0 = 40; // geprüft i.O.
    $data-&gt;DataByte1 = 00; 
    $data-&gt;DataByte2 = 00; 
    $data-&gt;DataByte3 = 07; 
    $data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
    $this-&gt;SendData(json_encode($data));
}

public function UpdatePosition(){ 
    $data = json_decode($this-&gt;ReadPropertyString("BaseData")); 
    $data-&gt;DataByte0 = 8; // geprüft es wird was gemeldet Hardwaretest später
    $data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
    $this-&gt;SendData(json_encode($data));
}

public function SetRunTime(int $secondsUp, int $secondsDown){
    if($secondsUp &lt;0)$secondsUp = 0;  // Nicht unterstützt
    if($secondsUp &gt;255)$secondsUp = 255;
    if($secondsDown &lt;0)$secondsDown = 0;
    if($secondsDown &gt;255)$secondsDown = 255;
    $data = json_decode($this-&gt;ReadPropertyString("BaseData"));
    $data-&gt;DataByte0 = 120;
    $data-&gt;DataByte1 = $secondsUp; //Test
    $data-&gt;DataByte2 = $secondsDown;
    $data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
    $this-&gt;SendData(json_encode($data));
}

public function TeachIn()
{
    $data = json_decode($this-&gt;ReadPropertyString("BaseData"));
    $data-&gt;Device = 165; // geprüft i.O.
    $data-&gt;DataLength = 4; //  
    $data-&gt;DataByte0 = 128; // 
    $data-&gt;DataByte1 = 255; //  
    $data-&gt;DataByte2 = 71; //  
    $data-&gt;DataByte3 = 224; //  
    $data-&gt;DataByte5 = 00;
    $data-&gt;DataByte6 = 00;
    $data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
    $this-&gt;SendData(json_encode($data));
}

public function TeachOut()
{ 
    $data = json_decode($this-&gt;ReadPropertyString("BaseData"));
    $data-&gt;Device = 165; //ungetestet 
    $data-&gt;DataLength = 4; //  
    $data-&gt;DataByte0 = 128;
    $data-&gt;DataByte1 = 255;
    $data-&gt;DataByte2 = 71;
    $data-&gt;DataByte3 = 224;
    $data-&gt;DataByte4 = 00;
    $data-&gt;DataByte5 = 00;
    $data-&gt;DataByte6 = 00;
    $data-&gt;DestinationID = (int)hexdec($this-&gt;ReadPropertyString("ReturnID"));
    $this-&gt;SendData(json_encode($data));
}

protected function SendData($data){
    $this-&gt;SendDataToParent($data);
    $this-&gt;SendDebug("Sended", $data, 0);
}


protected function SendDebug($Message, $Data, $Format){
    if (is_array($Data)){
        foreach ($Data as $Key =&gt; $DebugData){
            $this-&gt;SendDebug($Message . ":" . $Key, $DebugData, 0);
        }
    }else if (is_object($Data)){
        foreach ($Data as $Key =&gt; $DebugData){
            $this-&gt;SendDebug($Message . "." . $Key, $DebugData, 0);
        }
    }else{
        parent::SendDebug($Message, $Data, $Format);
    }
}

}