enhanced version
This commit is contained in:
+105
-46
@@ -1,68 +1,127 @@
|
|||||||
#!/bin/sh
|
#!/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{
|
BEGIN{
|
||||||
len[""]=0
|
sdatas[""]=0
|
||||||
delete len[""]
|
delete sdatas[""]
|
||||||
found=0
|
sdatasorder[""]=0
|
||||||
|
delete sdatasorder[""]
|
||||||
|
FS="/"
|
||||||
}
|
}
|
||||||
/grab disabled/ {
|
/grab disabled/ {
|
||||||
print "enable grab first!"
|
print "enable grab first!"
|
||||||
exit
|
exit
|
||||||
}
|
}
|
||||||
|
/empty/ {
|
||||||
|
print "empty"
|
||||||
|
exit
|
||||||
|
}
|
||||||
/.+/ {
|
/.+/ {
|
||||||
len[substr($1,3)]=length($3)/2;
|
m=gensub(" ", "", "g", gensub("=.*$", "", "", $1))
|
||||||
found=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)<pos+1) return -1
|
||||||
|
return index("123456789abcdef",substr(str,pos,1))*16+index("123456789abcdef",substr(str,pos+1,1))
|
||||||
|
}
|
||||||
|
function ismaster(zz) {
|
||||||
|
z=substr(zz,1,1)
|
||||||
|
if (z!="0" && z!="1" && z!="3" && z!="7" && z!="f") return false
|
||||||
|
z=substr(zz,2,1)
|
||||||
|
if (z!="0" && z!="1" && z!="3" && z!="7" && z!="f") return false
|
||||||
|
return true
|
||||||
}
|
}
|
||||||
END {
|
END {
|
||||||
if (found>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"
|
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) {
|
for (i=0; i<length(sdatasorder); i++) {
|
||||||
zz=substr(i,1,2)
|
mdata=sdatasorder[i]
|
||||||
pbsb=substr(i,3,4)
|
sdata=sdatas[mdata]
|
||||||
id=substr(i,9)
|
zz=substr(mdata,1,2)
|
||||||
|
pbsbdd=substr(mdata,3,4) substr(mdata,9,2)
|
||||||
|
pbsb=substr(mdata,3,4)
|
||||||
|
id=substr(mdata,9)
|
||||||
idlen=length(id)/2
|
idlen=length(id)/2
|
||||||
if (pbsb=="b509" && substr(id,1,2)=="0d") {
|
if (idlen>maxidlen) {
|
||||||
# register read
|
idlen=maxidlen
|
||||||
reg=index("123456789abcdef",tolower(substr(id,4,1)))
|
master=substr(id,1+idlen*2)
|
||||||
reg+=index("123456789abcdef",tolower(substr(id,3,1)))*16
|
id=substr(id,1,idlen*2)
|
||||||
reg+=index("123456789abcdef",tolower(substr(id,6,1)))*256
|
} else {
|
||||||
reg+=index("123456789abcdef",tolower(substr(id,5,1)))*4096
|
master=""
|
||||||
print "r,unknown" zz ",reg" reg ",,," zz "," pbsb "," substr(id,1,6) ",data,,HEX:" (len[i]-1)
|
}
|
||||||
} else if (pbsb=="b509" && substr(id,1,2)=="0e") {
|
masterlen=length(master)/2
|
||||||
# register write
|
sdata=sdatas[mdata]
|
||||||
reg=index("123456789abcdef",tolower(substr(id,4,1)))
|
if (sdata=="") {
|
||||||
reg+=index("123456789abcdef",tolower(substr(id,3,1)))*16
|
slave=""
|
||||||
reg+=index("123456789abcdef",tolower(substr(id,6,1)))*256
|
slavelen=0
|
||||||
reg+=index("123456789abcdef",tolower(substr(id,5,1)))*4096
|
} else {
|
||||||
print "w,unknown" zz ",reg" reg ",,," zz "," pbsb "," substr(id,1,6) ",data,,HEX:" (idlen-3)
|
slave=substr(sdata,3)
|
||||||
} else if (pbsb=="b509" && substr(id,1,2)=="29") {
|
slavelen=length(slave)/2
|
||||||
# register update
|
}
|
||||||
reg=index("123456789abcdef",tolower(substr(id,4,1)))
|
if (idlen>=3 && pbsbdd=="b5090d") {
|
||||||
reg+=index("123456789abcdef",tolower(substr(id,3,1)))*16
|
# vaillant register read
|
||||||
reg+=index("123456789abcdef",tolower(substr(id,6,1)))*256
|
reg=hextodec(id,5)*256+hextodec(id,3)
|
||||||
reg+=index("123456789abcdef",tolower(substr(id,5,1)))*4096
|
print "# " mdata " / " sdata ": reg=" reg ", data=" slave
|
||||||
print "u,unknown" zz ",reg" reg ",,," zz "," pbsb "," substr(id,1,6) ",,,IGN:2,,,,data,,HEX:" (len[i]-3)
|
printf "r,unknown" zz ",reg" reg ",,," zz "," pbsb "," id
|
||||||
} else if (len[i]<=1 || idlen>3) {
|
print ",data,s,HEX:" slavelen ",,,"
|
||||||
# seems to be a write
|
} else if (idlen>=3 && pbsbdd=="b5090e") {
|
||||||
if (idlen>3) idlen=3
|
# vaillant register write
|
||||||
else if (len[i]<=1) idlen--;
|
reg=hextodec(id,5)*256+hextodec(id,3)
|
||||||
printf "w,unknown" zz ","
|
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)
|
if (substr(pbsb,1,2)=="b5") printf "block" substr(pbsb,3,2)
|
||||||
else printf pbsb
|
else printf pbsb
|
||||||
printf substr(id,1,idlen*2) ",,," zz "," pbsb "," substr(id,1,idlen*2)
|
printf id ",,," zz "," pbsb "," id
|
||||||
if (length(id)/2>idlen)
|
if (masterlen>0)
|
||||||
printf ",data,,HEX:" (length(id)/2-idlen)
|
printf ",data,m,HEX:" masterlen ",,,"
|
||||||
else
|
if (slavelen>0)
|
||||||
printf ",,,"
|
printf ",result,s,HEX:" slavelen
|
||||||
if (len[i]>1)
|
|
||||||
printf ",,,,result,s,HEX:" (len[i]-1)
|
|
||||||
print ""
|
print ""
|
||||||
} else {
|
} else {
|
||||||
|
# generic read
|
||||||
|
print "# " mdata " / " sdata ": pbsb=" pbsb ", id=" id ", data=" slave
|
||||||
printf "r,unknown" zz ","
|
printf "r,unknown" zz ","
|
||||||
if (substr(pbsb,1,2)=="b5") printf "block" substr(pbsb,3,2)
|
if (substr(pbsb,1,2)=="b5") printf "block" substr(pbsb,3,2)
|
||||||
else printf pbsb
|
else printf pbsb
|
||||||
print id ",,," zz "," pbsb "," id ",data,,HEX:" (len[i]-1)
|
print id ",,," zz "," pbsb "," id ",data,s,HEX:" slavelen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
'|sort|uniq
|
'
|
||||||
|
|||||||
Reference in New Issue
Block a user