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