From e7324d3b8d2bbd46964dd98578749d378654dd08 Mon Sep 17 00:00:00 2001 From: john30 Date: Sun, 20 Nov 2016 16:23:41 +0100 Subject: [PATCH] enhanced version --- contrib/scripts/makegrabcsv.sh | 151 +++++++++++++++++++++++---------- 1 file changed, 105 insertions(+), 46 deletions(-) diff --git a/contrib/scripts/makegrabcsv.sh b/contrib/scripts/makegrabcsv.sh index 1e8b3a0d..a0db13b8 100755 --- a/contrib/scripts/makegrabcsv.sh +++ b/contrib/scripts/makegrabcsv.sh @@ -1,68 +1,127 @@ #!/bin/sh -ebusctl grab result|awk ' +port=8888 +if [ "x$1" = "x-p" ]; then + shift + port=$1 + shift +fi +maxidlen=3 +if [ "x$1" = "x-m" ]; then + shift + maxidlen=$1 +fi +echo "grab result"|nc localhost $port|awk -vmaxidlen=$maxidlen ' BEGIN{ - len[""]=0 - delete len[""] - found=0 + sdatas[""]=0 + delete sdatas[""] + sdatasorder[""]=0 + delete sdatasorder[""] + FS="/" } /grab disabled/ { print "enable grab first!" exit } +/empty/ { + print "empty" + exit +} /.+/ { - len[substr($1,3)]=length($3)/2; - found=1 + m=gensub(" ", "", "g", gensub("=.*$", "", "", $1)) + s=gensub(" ", "", "g", gensub("=.*$", "", "", $2)) + pbsbnnid=substr(m,5,(3+maxidlen)*2) + if (!shorted[pbsbnnid]) { + shorted[pbsbnnid]=1 + sdatas[substr(m,3)]=s + sdatasorder[length(sdatasorder)]=substr(m,3) + } +} +function hextodec(str,pos) { + if (length(str)0) + if (length(sdatas)>0) print "# type (r[1-9];w;u),circuit,name,[comment],[QQ],ZZ,PBSB,[ID],field1,part (m/s),datatypes/templates,divider/values,unit,comment,field2,part (m/s),datatypes/templates" - for (i in len) { - zz=substr(i,1,2) - pbsb=substr(i,3,4) - id=substr(i,9) + for (i=0; i3) { - # seems to be a write - if (idlen>3) idlen=3 - else if (len[i]<=1) idlen--; - printf "w,unknown" zz "," + if (idlen>maxidlen) { + idlen=maxidlen + master=substr(id,1+idlen*2) + id=substr(id,1,idlen*2) + } else { + master="" + } + masterlen=length(master)/2 + sdata=sdatas[mdata] + if (sdata=="") { + slave="" + slavelen=0 + } else { + slave=substr(sdata,3) + slavelen=length(slave)/2 + } + if (idlen>=3 && pbsbdd=="b5090d") { + # vaillant register read + reg=hextodec(id,5)*256+hextodec(id,3) + print "# " mdata " / " sdata ": reg=" reg ", data=" slave + printf "r,unknown" zz ",reg" reg ",,," zz "," pbsb "," id + print ",data,s,HEX:" slavelen ",,," + } else if (idlen>=3 && pbsbdd=="b5090e") { + # vaillant register write + reg=hextodec(id,5)*256+hextodec(id,3) + print "# " mdata " / " sdata ": reg=" reg ", data=" master (slavelen>0 ? ", result=" slave : "") + printf "w,unknown" zz ",reg" reg ",,," zz "," pbsb "," id + printf ",data,m,HEX:" masterlen ",,," + if (slavelen>0) + printf ",result,s,HEX:" slavelen + print "" + } else if (idlen>=3 && pbsbdd=="b50929") { + # vaillant register update + reg=hextodec(id,5)*256+hextodec(id,3) + print "# " mdata " / " sdata ": reg=" reg ", data=" substr(slave,5) + printf "u,unknown" zz ",reg" reg ",,," zz "," pbsb "," id + print ",,,IGN:2,,,,data,,HEX:" (slavelen-2) + } else if (slavelen<=0 || masterlen>0) { + # generic write or write+read + if (masterlen<=0 && slavelen<=0) { # no slave data and no master data: move one byte from id to master data + idlen-- + masterlen++ + master=substr(id,1+idlen*2) master + id=substr(id,1,idlen*2) + } + print "# " mdata " / " sdata ": pbsb=" pbsb ", id=" id (masterlen>0 ? ", data=" master : "") (slavelen>0 ? ", result=" slave : "") + if (zz=="fe") printf "w,broadcast," + else printf "w,unknown" zz "," if (substr(pbsb,1,2)=="b5") printf "block" substr(pbsb,3,2) else printf pbsb - printf substr(id,1,idlen*2) ",,," zz "," pbsb "," substr(id,1,idlen*2) - if (length(id)/2>idlen) - printf ",data,,HEX:" (length(id)/2-idlen) - else - printf ",,," - if (len[i]>1) - printf ",,,,result,s,HEX:" (len[i]-1) + printf id ",,," zz "," pbsb "," id + if (masterlen>0) + printf ",data,m,HEX:" masterlen ",,," + if (slavelen>0) + printf ",result,s,HEX:" slavelen print "" } else { + # generic read + print "# " mdata " / " sdata ": pbsb=" pbsb ", id=" id ", data=" slave printf "r,unknown" zz "," if (substr(pbsb,1,2)=="b5") printf "block" substr(pbsb,3,2) else printf pbsb - print id ",,," zz "," pbsb "," id ",data,,HEX:" (len[i]-1) + print id ",,," zz "," pbsb "," id ",data,s,HEX:" slavelen } } } -'|sort|uniq +'