ECMD Aquaperla Hexadezimal

Begonnen von Blakharaz, 09 November 2017, 15:09:29

Vorheriges Thema - Nächstes Thema

Blakharaz

Hi,
ich versuche mich aktuell dran eine BWT Aqaperla USB per Raspberry in Fhem einzubinden.
Im moment bin ich mir nicht sicher ob das überhaupt klappt und ECMD das richtige tool ist.

Ich muss per Serieller verbindung einen HEX string an die aquaperla senden und erhalte einen hex string mit Daten zurück.

Per Terminal verbindung erhalte ich bei eingabe von

0D 25 02 D8 01 0D 0A

als Rückgabe

0d 25 02 b6 01 eb 0a 

siehe auch den Screenshot.



Versionen

ZitatFile       Rev   Last Change

66_ECMD.pm 14495 2017-06-11 05:47:17Z neubert
File             Rev   Last Change

67_ECMDDevice.pm 12877 2016-12-26 09:15:55Z neubert

ECMD
define USB1 ECMD serial /dev/ttyACM1@19200
attr USB1 autoReopen 0
attr USB1 classdefs aqa=/opt/fhem/cdaqaperla.classdef
attr USB1 logTraffic 5
attr USB1 verbose 5


ECMDDevice
define aqaperla1 ECMDDevice aqa
attr aqaperla1 IODev USB1


cdaqaperla.classdef
get value cmd {"0d 25 02 b6 01 eb 0a"}
get value expect ".*"


Versuch mit

get USB1 raw '0D 25 02 D8 01 0D 0A'

2017.11.09 14:31:13 5: USB1: write 0D 25 02 D8 01 0D 0A (\060\104\040\062\065\040\060\062\040\104\070\040\060\061\040\060\104\040\060\101), expect .*
2017.11.09 14:31:13 5: SW: 3044203235203032204438203031203044203041
2017.11.09 14:31:16 2: USB1: first attempt to read timed out, trying to close and open the device.
2017.11.09 14:31:16 3: Opening USB1 device /dev/ttyACM0
2017.11.09 14:31:16 3: Setting USB1 serial parameters to 19200,8,N,1
2017.11.09 14:31:16 3: USB1 device opened
2017.11.09 14:31:16 5: SW: 3044203235203032204438203031203044203041
2017.11.09 14:31:19 2: USB1: second attempt to read timed out, this is an unrecoverable error.
2017.11.09 14:31:19 1: USB1: no answer received (wrote 0D 25 02 D8 01 0D 0A (\060\104\040\062\065\040\060\062\040\104\070\040\060\061\040\060\104\040\060\101), expected .*)

get USB1 raw {"0d 25 02 b6 01 eb 0a"}
2017.11.09 14:36:09 5: USB1: write 0d 25 02 b6 01 eb 0a (\060\144\040\062\065\040\060\062\040\142\066\040\060\061\040\145\142\040\060\141), expect .*
2017.11.09 14:36:09 5: SW: 3064203235203032206236203031206562203061
2017.11.09 14:36:12 2: USB1: first attempt to read timed out, trying to close and open the device.
2017.11.09 14:36:12 3: Opening USB1 device /dev/ttyACM0
2017.11.09 14:36:12 3: Setting USB1 serial parameters to 19200,8,N,1
2017.11.09 14:36:12 3: USB1 device opened
2017.11.09 14:36:12 5: SW: 3064203235203032206236203031206562203061
2017.11.09 14:36:15 2: USB1: second attempt to read timed out, this is an unrecoverable error.
2017.11.09 14:36:15 1: USB1: no answer received (wrote 0d 25 02 b6 01 eb 0a (\060\144\040\062\065\040\060\062\040\142\066\040\060\061\040\145\142\040\060\141), expected .*)

get aqaperla1 value
2017.11.09 14:59:12 2: USB1: first attempt to read timed out, trying to close and open the device.
2017.11.09 14:59:12 3: Opening USB0 device /dev/ttyACM0
2017.11.09 14:59:12 3: Setting USB0 serial parameters to 19200,8,N,1
2017.11.09 14:59:12 3: USB1 device opened
2017.11.09 14:59:12 5: SW: 3064203235203032206236203031206562203061
2017.11.09 14:59:15 2: USB1: second attempt to read timed out, this is an unrecoverable error.
2017.11.09 14:59:15 1: USB1: no answer received (wrote 0d 25 02 b6 01 eb 0a (\060\144\040\062\065\040\060\062\040\142\066\040\060\061\040\145\142\040\060\141), expected .*)
2017.11.09 14:59:15 5: USB1: received answer empty string




verschiedene Versuche mit diversen Maskierungen des Hex String schlugen auch fehl bzw. Liefern direkt fehler im Log wegen fehlerhafter Maskierung.
\x0D ...
0x0D ...
\0D

\n
\r als abschluss funktionieren auch nicht.


Kann ich mit dem ECMD komplett in Hex kommunizieren? Da ich Text Strings Senden kann müsste das doch auch gehen. oder ?

Mich wundert das hier.
Zitat(\060\144\040\062\065\040\060\062\040\142\066\040\060\061\040\145\142\040\060\141)

Hat jemand einen tipp? Habe schon diverse Einträge im Forum/Wiki/Inet durch und komme nicht weiter. Ich vermute ja das ich total auf der Leitung stehe und es ein banaler Fehler ist


Dr. Boris Neubert

Hallo,

Du schickst einen Textstring mit den Zeichen 0D 25 02 D8 01 0D 0A hin. Du möchtest aber 7 Zeichen senden, deren Hexkodierung Du uns gezeigt hast.

Du kannst die Kodierung mit pack (siehe http://perldoc.perl.org/perlpacktut.html) bewerkstelligen oder die Oktaldarstellung mit \xxx\xxx... wählen.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Blakharaz

Das ich einen Textstring sende ist unpraktisch.
Danke für den Tipp. Da muss ich mich jetzt wohl mal einlesen. Wird etwas dauern bis ich dazu wieder etwas Zeit habe, werde dann berichten.

Alternativ würde ich natürlich auch einen wink mit dem Zaunpfahl bzw. ein beispiel nehmen ;)

Blakharaz

So, ich habe es hin bekommen.

cdaqaperla.classdef sieht jetzt so aus.
get Soll_1 cmd {pack("(H2)*", split(/ /, '0D 25 02 D8 01 0D 0A'))}
get Soll_1 expect ".*"
get Soll_1 postproc {\
        my $hexval = hex(trim("$_"));\
        my $hash  = $defs{%NAME};\
        my $reading = unpack("H*", $_);\
        $reading = substr($reading,6,length($reading));\
        $reading = substr($reading,0,length($reading)-4);\
        my $temp = "";\
        my $i=0;\
        for ( my $i=2; $i <= length($reading) ; $i=$i+2) { \
                substr($temp, $i-2) = substr($reading,-$i,2);\
         }\
        my $wert = hex $temp;\
        readingsSingleUpdate($hash, 'state', $wert, 1);\
}

Als Rückgabe wird jetzt die Sollkapazität der Säule 1 in Liter zurück gegeben.
Das ganze kann dann für weitere Abfragemöglichkeiten erweitert werden.

Der Code ist vermutlich nicht optimal, bin aber kein Programier Profi.

mkraus81

Hi,

bin heute zufällig auf deinen Beitrag gestoßen.
Ich habe auch eine Aqua Perla im Keller stehen... und mich interssiert wie/ob ich das Ganze in Fhem abbilden könnte... z.b. Durchfluss, Fehlermeldungen/Warnungen..

Wie kommt man an die Daten? ich lese immer was von USB-Serial Schnittestelle