BWT Aqa Perla goes IP-Symcon

Hallo Zusammen,

ich habe gerade meine Entkalkungsanlage BWT Aqa Perla ins IP_Symcon eingebunden. Vielleicht kann ja noch jemand etwas damit anfangen.

Die Aqa Perla S hat einen USB Port, der über einen Treiber eine serielle Schnittstelle zur Verfügung stellt.
Der Serial Port muss mit 19200 Baud, 8 Datenbits, 1 Stopbit, keine Parität eingerichtet werden. Dazu kommt dann noch eine Register-Variable, die als übergeordnete Instanz den Serial Port zugewiesen bekommt. Als Target wird ein Script (Receive Aqa Perla) angelegt, welches die empfangen Daten in dafür vorgesehen Variablen schreibt.

Damit die Aqa Perla die Daten auch sendet muss man mit mit einem entsprechenden Script (Send Aqa Command) die Daten anfordern. Dieses kann man dann zyklisch schedulen.

Anbei die beiden Scripte:

Receive Aqa Perla

<?
$returnvalue=$_IPS['VALUE'];
$returnarr=str_split($returnvalue);

switch (ord($returnarr[1])) {
   case 0x08:
     SetValueInteger(13057 /*[Wasser\Vebrauch 24h]*/,ord($returnarr[3])+(ord($returnarr[4])*256));
     break;
   case 0x02:
     SetValueInteger(23906 /*[Wasser\Restkapazität Säule 1]*/,ord($returnarr[3])+(ord($returnarr[4])*256));
     break;
   case 0x03:
     SetValueInteger(58307 /*[Wasser\Restkapazität Säule 2]*/,ord($returnarr[3])+(ord($returnarr[4])*256));
     break;
   case 0x11:
     SetValueInteger(46038 /*[Wasser\Regenerationen seid IBN]*/,ord($returnarr[3])+(ord($returnarr[4])*256));
     break;
   case 0x13:
     SetValueInteger(10002 /*[Wasser\Salzverbrauch]*/,ord($returnarr[3])+(ord($returnarr[4])*256));
     break;
   case 0x25:
     SetValueInteger(16414 /*[Wasser\Kapazität Säule 1]*/,ord($returnarr[3])+(ord($returnarr[4])*256));
     break;
   case 0x26:
     SetValueInteger(44267 /*[Wasser\Kapazität Säule 2]*/,ord($returnarr[3])+(ord($returnarr[4])*256));
     break;
   default:
     echo "!!!!default";
 }
?>

Send Aqa Perla

<?
$startByte=0x0D;
$stopByte=0x0A;

$commands = array(chr(0x02),chr(0x03),chr(0x08),chr(0x011),chr(0x013),chr(0x025),chr(0x026));

foreach ($commands as $str) {
$CRC=0;
$Command=substr($str,0,1);
$ParaCount=strlen($str)-1;
$CRC=$startByte+ord($Command)+$ParaCount;
$Parameter=chr(strval($ParaCount));
for ($x=1; $x<=$ParaCount; $x++) {
	$CRC=$CRC+ord(substr($str,$x,1));
	$Parameter=$Parameter.substr($str,$x,1);
}
$sendstr=chr($startByte).substr($str,0,1).$Parameter.chr($CRC).chr($stopByte);

RegVar_SendText(59069 /*[var\Aqa Perla\Register Variable]*/,$sendstr);
IPS_Sleep (1000);
}

?>

Folgende "Kommandos habe ich für die Aqa Perla S herausgefunden:

Code,Wert,Parameter,Kommentar
0x01,Typ,keine,12=Aqa Perla S
0x02,Restkapazität Säule 1,keine,
0x03,Restkapazität Säule 2,keine,
0x04,Regenerationsschritt,keine,
0x05,Verbrauchdaten Allgemein Spitzendurchfluss,keine,
0x06,Verbrauchdaten Allgemein Spitzendurchfluss 24h,keine,
0x07,Verbrauchdaten seit IBN Spitzendurchfluss,keine,
0x08,Verbrauchdaten Allgemein Verbrauch 24h,keine,
0x09,Verbrauchdaten seit IBN Verbrauch 24h,keine,
0x10,Verbrauchdaten seit IBN Verbrauch,keine,
0x11,Regenerationen seit IBN,keine,
0x12,Regenerationen seit letztem Service,keine,
0x13,Verbrauchdaten seit IBN Salzverbrauch,keine,
0x14,Verbrauchdaten seit IBN Reg-Mitteleinsparung,keine,
0x15,IBN Datum,keine,Text
0x19,Softwareversion,keine,Text
0x20,Abfrage Alarm,Zähler,
0x21,Abfrage Log,Monat,Text
0x24,Abfrage KW,KW Jahr,Text
0x25,Sollkapazität Säule 1,keine,
0x26,Sollkapazität Säule 2,keine,
0x27,unbekannt,unbekannt,
0x28,unbekannt,unbekannt,

Das Protokoll ist sehr einfach aufgebaut.
<Startbyte><Kommando><Anzahl der Parameter/Werte><Parameter/Werte><Prüfsumme><Stopbyte>
Startbyte=0x0d
Stopbyte=0x0A
Kommando=siehe Code in Tabelle
Anzahl der Parameter/Werte in Byte
Parameter/Werte
Summe aller bisher gesendeten Bytes incl. Startbyte
Stopbyte

Die von der Aqa Perla gelieferten Werte werden von LSB nach HSB gesendet.

Gruß,
Dietmar

Hi Dietmar,

cooles Projekt! Du hast nicht zufällig Erfahrung ob das auch bei einer „AQA life“ möglich ist?
Bisher konnte ich bei diesem Gerät keine verwertbare Datenschnittstelle ausmachen.

Cheers
/Jens

Hallo Jens,

ich kenne die Aqua life nicht. Denke aber, das dies mit jeder Anlage von BWT funktioniert die eine USB Schnittstelle hat.
Die Abfrage 01 liefert den Typ der Anlage, 12 entspricht der Aqa Perla S. In der Software von BWT sind ca. 10-15 weiter zu sehen.

Gruß,
Dietmar

Danke für die schnelle Info!
Ich schließe daraus, dass bei der „Perla“ der USB-Port direkt für den Nutzer zugänglich ist.
Und genau da liegt mein Problem … die Schnittstelle bei der „Life“ physisch zu finden. Dann muss ich mir bei Gelegenheit das Steuergerät wohl doch noch einmal genauer anschauen.

Cheers
/Jens

Aber erst ab der 2. Generation der Aqua Perla. Alle Geräte vor 2009 haben den Port „leider“ noch nicht :frowning:

Ah! Gut zu wissen!

Im Moment beschränkt sich die Integration in IPS bei meiner „Life“ auf das Monitoring per Zwischenstecker mit Leistungsmessung + Störungsmeldung per Schließerkontakt-Interface an Pin 36 & 37 (Klemmleiste auf der Steuerplatine; potentialfreier Kontakt).

Cheers
/Jens

Lt. Auskunft von BWT, eine Umrüstung einer Aqua Perla ohne USB auf Aqua Perla mit USB 1200€.
Da kann ich mir jo gleich ne neue kaufen :frowning:

Hallo Dietmar,

ich würde meine Aqa Perla gerne ebenfalls abfragen. Ein USB Port ist vorhanden. Muss man etwas an der Anlage konfigurieren?

Als Test würde ich einen Versuch mit HTerm bzw. Putty starten (19200 Bd 8N1). Ist das möglich?

Grüße Stefan

Hallo Stefan,

An der Anlage musste ich nichts einstellen.
natürlich muss es mit Putty oder HtTerm funktionieren. Jedoch musst du dir die HEX Strings dann selber zusammenbauen. Mitsamt der Prüfsumme.
Du bekommst dann als Antwort wieder HEX Strings.

Alles kein HEXenwerk, wenn man sonst nix besseres zu tun hat. :slight_smile:
Einfacher ist es m.E. das ganze direkt im IP-Symcon mit dem Script zu testen.
Ich denke das ist weniger Aufwand und führt direkt zum Ziel.

Alternativ kannst du dir ja auch einfach die Software von BWT runterladen. Dann siehst du ja auch gleich, ob die Kommunikation funktioniert.

Aber wenn du den steinigen Weg gehen willst, frag ruhig.
Gruß,
Dietmar

Hi Dietmar,

ja, ich gebe zu es klingt seltsam Deine fertigen Skripte nicht zu verwenden. :slight_smile:

Ich verwende Symcon nicht und bin eigentlich daran interessiert, den Wasserverbrauch regelmäßig zu erfassen (volkszähler oder emocms). Der geeignetste Parameter sollte dann „Verbrauchdaten Allgemein Verbrauch 24h“ sein, oder? Könntest Du mir dazu ein Beispiel senden?

Grüße

Stefan

Hallo Stefan,

anbei meine Notizen von der Analyse. Zuerst kommt die Feldbeschreibung, dann der Hex Code der gesendet werden muss. Danach die Antwort meiner Anlage und danach meine Notizen.

Damit solltest Du auf jeden Fall die Kommandos senden und die Antworten interpretieren können.

Ich hoffe das hilft dir.
Gruß,
Dietmar

Typ
0D,01,00,0E,0A,
0D 01 01 0C 1B 0A
0D 01 01 0C 1B 0A

Sollkapazität Säule 1
0D,25,00,32,0A,
0D 25 02 D8 01 0D 0A
0D 25 02 LSB HSB CRC STOP

Sollkapazität Säule 2
0D,26,00,33,0A,
0D 26 02 D8 01 0E 0A
0D 26 02 LSB HSB CRC STOP

Restkapazität Säule 1
0D,02,00,0F,0A,
0D 02 02 5B 01 6D 0A
0D 02 02 LSB HSB CRC STOP

Restkapazität Säule 2
0D,03,00,10,0A,
0D 03 02 3B 01 4E 0A
0D 03 02 LSB HSB CRC STOP

Regenerationsschritt
0D,04,00,11,0A,
0D 04 01 00 12 0A
0D 04 01 Reg-Schritt CRC STOP

Softwareversion
0D,19,00,26,0A,
0D 19 11 56 65 72 73 69 6F 6E 3A 20 33 2E 39 34 23 31 35 35 03 0A
<CR><EM><DC1>Version:<Space>3.94#155<ETX><LF>

Verbrauchdaten Allgemein Spitzendurchfluss
0D,05,00,12,0A,
0D 05 02 00 00 14 0A
0D 05 02 LSB HSB CRC STOP

Verbrauchdaten Allgemein Spitzendurchfluss 24h
0D,06,00,13,0A,
0D 06 02 70 03 88 0A
0D 06 02 LSB HSB CRC STOP

Verbrauchdaten Allgemein Verbrauch 24h
0D,08,00,15,0A,
0D 08 02 00 00 17 0A
0D 08 02 90 00 A7 0A!!!

Verbrauchdaten seit IBN Spitzendurchfluss
0D,07,00,14,0A,
0D 07 02 39 04 53 0A
0D 07 02 LSB HSB CRC STOP

Verbrauchdaten seit IBN Verbrauch 24h
0D,09,00,16,0A,
0D 09 02 A7 00 BF 0A
0D 09 02 LSB HSB CRC STOP

Verbrauchdaten seit IBN Salzverbrauch
0D,13,00,20,0A,
0D 13 04 FA 00 00 00 1E 0A
0D 13 04 LSB HSB 00 00 CRC STOP

Verbrauchdaten seit IBN Reg-Mitteleinsparung
0D,14,00,21,0A,
0D 14 02 00 00 23 0A
0D 14 02 LSB HSB CRC STOP

Verbrauchdaten seit IBN Verbrauch
0D,10,00,1D,0A,
0D 10 04 08 02 00 00 2B 0A
0D 10 04 LSB .SB .SB HSB CRC STOP

Regenerationen seit IBN
0D,11,00,1E,0A,
0D 11 02 01 00 21 0A
0D 11 02 LSB HSB CRC STOP

Regenerationen seit letztem Service
0D,12,00,1F,0A,
0D 12 02 01 00 22 0A
0D 12 02 LSB HSB CRC STOP

Abfrage KW (38d 26h, 14d 0Eh)
0D,24,02,26,0E,67,0A,
0D 24 1C 32 32 2D 30 39 2D 31 34 23 20 20 31 30 38 31 23 20 20 20 31 32 31 23 20 20 20 20 32 F2 0A
HEADER Reportdatum Trennzeichen LEER LEER max. Durchfluss (l/h) Trennzeichen LEER LEER LEER Wochenverbrauch (l) Trennzeichen LEER LEER LEER LEER Regenerationen Appendix

Abfrage Log
0D,21,02,00,09,39,0A, Monat Prüfsumme
0D 21 25 32 31 2D 30 39 2D 31 34 2D 2D 2D 31 36 3A 32 36 3A 30 38 2D 3E 3E 74 79 70 65 20 63 68 61 6E 67 65 3A 20 31 32 BE 0A
<CR>!%21-09-14—16:26:08->>type<Space>change:<Space>12<(BE)><LF>

Abfrage Alarm
0D,20,01,00,2E,0A, Zähler Prüfsumme
0D 20 1F 41 6C 61 72 6D 3A 20 32 34 20 3A 20 32 31 2D 30 39 2D 31 34 20 2D 20 31 36 3A 34 35 3A 34 35 18 0A
<CR><Space><US>Alarm:<Space>24<Space>:<Space>21-09-14<Space>-<Space>16:45:45<CAN><LF>

0D,20,01,01,2F,0A, Zähler Prüfsumme

Habe auch einen Aqua Perla mit USB Schnittstelle und das Auslesen funktioniert einwandfrei, jedoch nur für 16 Stunden (alle 20 Minuten wird ausgelesen, also insgesamt ca. 48 Mal) und dann ist der COM Port nicht mehr erreichbar.

Abhilfe schafft:

  • kurzes trennen des USB Kabels vom PC
    oder
  • Gerät im Gerätemanager deaktivieren und wieder aktivieren

Verwende Win7 64bit und habe noch eineige andere virtuelle COM-Ports, die ohne Probleme funktionieren!

Hat sonst noch jemand ein ähnliches Problem?
Kann man die COM Schnitstelle „zurücksetzen“ per Software bzw CMD?

Hallo em2,

bei mir ist es ganz ähnlich. Ich habe aber die Perioden nicht so genau untersucht. Die Aqa Perla ist über einen Silex SX-3000GB eingebunden.

Vor dem auslesen prüfe ich, wie alt die letzten ausgelesenen Daten sind. Falls zu alt (in meinem Fall 150 Sekunden) wird der Dienst der den USB Port umleitet neu gestartet und die Verbindung vom IPS neu aufgebaut. Ich lese die Aqa Perla alle 2 Minuten aus. Anbei das Script.
Gruß,
Dietmar


<?

$data =  IPS_GetVariable(23906 /*[Wasser\Restkapazität Säule 1]*/);
$delta_t =time()-($data['VariableUpdated']);

if ($delta_t>150) {
IPS_SetProperty (59596 /*[Aqa Perla]*/, "Open", False);
IPS_ApplyChanges (59596 /*[Aqa Perla]*/);
IPS_Execute("c:\Windows\system32\sc.exe", "stop ".chr(34)."SX Virtual Link Lite".chr(34),True,true);
IPS_Sleep(4000);
IPS_Execute("c:\Windows\system32\sc.exe", "start ".chr(34)."SX Virtual Link Lite".chr(34),True,true);
IPS_Sleep(4000);
IPS_SetProperty (59596 /*[Aqa Perla]*/, "Open", True);
IPS_ApplyChanges (59596 /*[Aqa Perla]*/);
 }
?>

Hallo

Ich hatte das selbe Problem bei mir war die Schnittstelle nach ca 48h nicht mehr ereichbar. Nach einem Neustart funktionierte sie wieder. Das Problem war vermutlich die ca. 35m lange USB Leitung über einen USB zu Cat Repeater.

Das Problem behob ich indem ich einen alten USB zu Lan Printserver von T.-.ink einbaute seitdem funktioniert die Verbindung perfekt

Hallo Dietmar,

vielen Dank für deine Ausführlichen Analysen. Hätte dazu eine Frage. Bin gerade dabei, mir eine kleine Software zu schreiben, die mir die Daten ausliest. Dies läuft bis jetzt ganz zufriedenstellend und ich erhalte die meisten Werte von der Anlage.

Allerdings hänge ich momentan an der Abfrage der Wochenwerte also mit dem Block:
Abfrage KW (38d 26h, 14d 0Eh)
0D,24,02,26,0E,67,0A,
0D 24 1C 32 32 2D 30 39 2D 31 34 23 20 20 31 30 38 31 23 20 20 20 31 32 31 23 20 20 20 20 32 F2 0A
HEADER Reportdatum Trennzeichen LEER LEER max. Durchfluss (l/h) Trennzeichen LEER LEER LEER Wochenverbrauch (l) Trennzeichen LEER LEER LEER LEER Regenerationen Appendix

Ich habe das Abfrage Kommando noch nicht verstanden. Welche Bedeutung hat die Zahl 39? Hätte jetzt das Kommando folgendermaßen interpretiert
0D = Startbyte
24 = Abfragewert
02 = Abfrageparameter
26 = KW
0E = Jahr
67 = ???
0A = Endbyte

Somit wenn ich aktuelle Daten abfragen möchte, also z.B. die KW 11/15 dann hätte ich folgendes zur Anlage geschickt:
0D 24 02 0B 15 ?? 0A

Kannst du mir sagen, wie ich auf die entsprechende Zahl komme?

Besten Dank!

Gruß Christian

Hallo Christian,

ist schon ein Weilchen her, darum müssen die grauen Zellen erst mal wieder die passenden Verbindungen finden.
Die Zahl die dir fehlt ist die Prüfsumme $CRC.

Wenn ich das richtig im Sinn habe, dann werden die bisherigen Werte addiert und auf die letzten zwei Stellen begrenzt. In deinem Fall also:

0D+24+02+0B+15=53

Alles in Hex.

Bezüglich der Frage „Welche Bedeutung hat die Zahl 39?“ Mir ist nicht ganz klar, welche 39 du meinst. In deinem Post finde ich nur eine 39. Und die ist im Report Datum:

Reportdatum
Hex 32 32 2D 30 39 2D 31 34
Dez 50 50 45 48 57 45 49 52
ASCII 2 2 - 0 9 - 1 4

Gruß,
Dietmar

Hallo Nochmal,

habe gerade gesehen, das Du das Jahr nicht in Hex gewandelt hast.

Du solltest also anstatt:
0D 24 02 0B 15 ?? 0A

mal
0D 24 02 0B 0F 4D 0A
versuchen.

Gruß,
Dietmar

Hallo Dietmar,

vielen Dank für die Info. MIt der Angabe der richtigen CRC-Prüfsumme läuft das super!

Danke noch mal!

Gruß Christian

Hallo Dietmar,

nun läuft die Anlage so ca. 3 Monate. Aktuell habe ich das Problem, dass beim Auslesen der Alarme der COM-Port aus dem Gerätemanager verschwindet. Hast du das Problem schon mal gehabt? DAs Problem tritt auf, egal ob ich das mit der BWT Software mache oder ob ich meine verwende. Es werden exakt immer 128 Alarme ausgelesen und dann ist der Port weg.

Muss man eigentlich für jeden Alarm den man auslesen will einen Befehl an die Anlage schicken (mit hochzählen der Nummer) oder gibt es hier eine bessere Lösung. Kann man irgendwie die Anzahl der vorhanden Fehler auslesen?

Evt. kannst du mir weiterhelfen.

Schöne Grüße
Christian

Hallo Stefan,

leider habe ich deinen Beitrag erst jetzt bemerkt. Ich selber habe das Problem nicht. Meine Kommunikation läuft zum Glück ohne Mucken.
Gibt es das Problem denn noch, oder hast Du bereits eine Lösung?
Gruß,
Dietmar