Eigenes Enocean Modul auf Basis EEP A50401RX

Hallo,

ich habe für einen Enocean Sensor eine eigene Firmware geschrieben, dessen Protokoll auf dem EEP A50401RX basiert. Ich habe bei diesem Protokoll aber ein Byte ergänzt, das noch den Ladezustand des Goldcap Kondensators übermittelt. Gibt es eine Möglichkeit, dass ich das vorhandene Modul erweitere (bzw. überschreibe) um daraus ein neues PHP Modul mit einem angepassten Enocean Profil zu erzeugen. Es wäre schön, wenn der Code des EEP A5041RX als Basis hierfür verwendet werden könnte!

Vielen Dank im Voraus!

Gruß Werner

Du kannst ja mal ein PHP Modul hinter das EnOcean Gateway „klemmen“ und schauen, was an Daten ankommt.

paresy

Hallo Paresy,

ich habe mir nun einiges gelesen und versucht ein einfaches PHP Modul zu erstellen https://github.com/WLSource/SymconEnoceanModul.
Als „parentRequirements“ habe ich die GUID der Datenpakete von

SendEnOcean
[’{70E3075F-A35D-4DEB-AC20-C929A156FE48}’]
SendEnOceanData(Data: TEnOceanDataTX)

und als „implemented“ die GUID von

ReceiveEnOcean
[’{DE2DA2C0-7A28-4D23-A9AA-6D1C7609C7EC}’]
ReceiveEnOceanData(Data: TEnOceanDataRX)

eingetragen. Diese Infos habe ich hier http://blog.nall-chan.net/ips/PHP-Module.txt finden können. Welche Eigenschaften besitzt aber die Klasse TEnOceanDataRx? Die Eigenschaft Buffer existiert auf jeden Fall nicht.

Vielleicht habe ich hier etwas komplett falsch verstanden, aber ein konkretes einfaches Enocean Beispiel wäre hierfür schon sehr hilfreich.

Vorab schon mal Dankeschön für etwas weitere Unterstützung!

Gruß Werner

Toll was Google da so findet auf meinem Server :smiley:

Nimm einfach mal den JSONString und mach daraus ein Objekt oder Array mit json_decode.

Dies dann anschließend einfach mit IPS_LogMessage(‚Data Recv‘,print_r($Data,true)) in das Log schreiben,
oder mit SendDebug in das Debug-Fenster schreiben, dann siehst du den Aufbau relativ schnell.
Ich vermute mal, das versenden ist identisch zum empfangen.

Da SendDebug nur Strings annimmt, habe ich da mal was gebaut:


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

Michael

Hallo Michael,

erstmal vielen Dank für Deine Hilfe. Es scheint so, dass nicht mehr allzu viel fehlt, damit es funktioniert.
Als IPS Meldung erhalte ich folgende Meldung, wobei die Instanz #40397 mein neues Modul ist:

12.10.2016 20:13:54*| FlowHandler*| Kann Daten nicht zur Instanz #40397 weiterleiten:
{
„DataID“:"{DE2DA2C0-7A28-4D23A9AA6D1C7609C7EC}",
„Device“:165,
„Status“:0,
„DeviceID“:8996203,
„DataByte3“:154,
„DataByte2“:148,
„DataByte1“:116,
„DataByte0“:10
}

Diese Daten erhalte ich auch, wenn ich diese über Deine Funktion im Debug Fenster ausgeben lasse.

Die Daten selbst sind korrekt, aber warum bekomme ich die Fehlermeldung vom FlowHandler, dass die Daten nicht weitergeleitet werden konnten?
Gibt es hierzu eine Lösung?

Gruß Werner

P.S.
Das mit Google ist mir ja schon etwas unangenehm. Mich würde aber interessieren, warum diese Informationen nicht offiziell i. d. Doku auffindbar sind, da es sehr praktisch ist, wenn ich die Daten vom EnoceanGateway „geparsed“ bekomme und dies nicht noch einmal über den String vom I/O Modul machen muss.

Die Infos mit den GUIDs sind im Delphi-SDK zu finden :slight_smile:
Der FlowHandler meckert sobald du irgendwas über stdout ausgibst.
Echo, var_dump, print_r und Co. sind also tabu.
Michael