kopia lustrzana https://github.com/weetmuts/wmbusmeters
Fetched list of manufacturers from dlms.com
rodzic
4d4635a576
commit
bf5941ef42
Plik diff jest za duży
Load Diff
83
Makefile
83
Makefile
|
@ -126,42 +126,65 @@ testd:
|
||||||
./build_debug/testinternals
|
./build_debug/testinternals
|
||||||
./test.sh build_debug/wmbusmeters
|
./test.sh build_debug/wmbusmeters
|
||||||
|
|
||||||
|
|
||||||
update_manufacturers:
|
update_manufacturers:
|
||||||
wget http://www.m-bus.de/man.html
|
iconv -f utf-8 -t ascii//TRANSLIT -c DLMS_Flagids.csv -o tmp.flags
|
||||||
echo '// Data downloaded from http://www.m-bus.de/man.html' > m.h
|
cat tmp.flags | grep -v ^# | cut -f 1 > list.flags
|
||||||
echo -n '// ' >> m.h
|
cat tmp.flags | grep -v ^# | cut -f 2 > names.flags
|
||||||
date --rfc-3339=date >> m.h
|
cat tmp.flags | grep -v ^# | cut -f 3 > countries.flags
|
||||||
echo >> m.h
|
cat countries.flags | sort -u | grep -v '^$$' > uniquec.flags
|
||||||
echo '#ifndef MANUFACTURERS_H' >> m.h
|
cat names.flags | tr -d "'" | tr -c 'a-zA-Z0-9\n' ' ' | tr -s ' ' | sed 's/^ //g' | sed 's/ $$//g' > ansi.flags
|
||||||
|
cat ansi.flags | sed 's/\(^.......[^0123456789]*\)[0123456789]\+.*/\1/g' > cleaned.flags
|
||||||
|
cat cleaned.flags | sed -e "$$(sed 's:.*:s/&//Ig:' uniquec.flags)" > cleanedc.flags
|
||||||
|
cat cleanedc.flags | sed \
|
||||||
|
-e 's/ ab\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ ag\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ a \?s\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ co\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ b \?v\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ bvba\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ corp\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ d \?o \?o\( \|$$\)/ /g' \
|
||||||
|
-e 's/ d \?d\( \|$$\)/ /g' \
|
||||||
|
-e 's/ gmbh//Ig' \
|
||||||
|
-e 's/ gbr//Ig' \
|
||||||
|
-e 's/ inc\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ kg\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ llc/ /Ig' \
|
||||||
|
-e 's/ ltd//Ig' \
|
||||||
|
-e 's/ limited//Ig' \
|
||||||
|
-e 's/ nv\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ oy//Ig' \
|
||||||
|
-e 's/ ood\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ooo\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ pvt\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ pte\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ pty\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ plc\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ private\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ s \?a\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ sarl\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ sagl\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ s c ul//Ig' \
|
||||||
|
-e 's/ s \?l\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ s \?p \?a\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ sp j\( \|$$\)/ /Ig' \
|
||||||
|
-e 's/ sp z o o//Ig' \
|
||||||
|
-e 's/ s r o//Ig' \
|
||||||
|
-e 's/ s \?r \?l//Ig' \
|
||||||
|
-e 's/ ug\( \|$$\)/ /Ig' \
|
||||||
|
> trimmed.flags
|
||||||
|
cat trimmed.flags | tr -s ' ' | sed 's/^ //g' | sed 's/ $$//g' > done.flags
|
||||||
|
paste -d '|,' list.flags done.flags countries.flags | sed 's/,/, /g' | sed 's/ |/|/g' > manufacturers.txt
|
||||||
|
echo '#ifndef MANUFACTURERS_H' > m.h
|
||||||
echo '#define MANUFACTURERS_H' >> m.h
|
echo '#define MANUFACTURERS_H' >> m.h
|
||||||
echo '#define MANFCODE(a,b,c) ((a-64)*1024+(b-64)*32+(c-64))' >> m.h
|
echo '#define MANFCODE(a,b,c) ((a-64)*1024+(b-64)*32+(c-64))' >> m.h
|
||||||
echo '#define LIST_OF_MANUFACTURERS \' >> m.h
|
echo "#define LIST_OF_MANUFACTURERS \\" >> m.h
|
||||||
cat man.html | tr -d '\r\n' | sed \
|
cat manufacturers.txt | sed -e "s/\(.\)\(.\)\(.\).\(.*\)/X(\1\2\3,MANFCODE('\1','\2','\3'),\"\4\")\\\\/g" >> m.h
|
||||||
-e 's/.*<table>//' \
|
|
||||||
-e 's/<\/table>.*//' \
|
|
||||||
-e 's/<tr>/X(/g' \
|
|
||||||
-e 's/<script[^<]*<\/script>//g' \
|
|
||||||
-e 's/<a href=[^>]*>//g' \
|
|
||||||
-e 's/<\/a>//g' \
|
|
||||||
-e 's/<a name[^>]*>//g' \
|
|
||||||
-e 's/<td>/\t/g' \
|
|
||||||
-e 's/<\/td>//g' \
|
|
||||||
-e 's/ä/ä/g' \
|
|
||||||
-e 's/ü/ü/g' \
|
|
||||||
-e 's/ö/ö/g' \
|
|
||||||
-e 's/,/ /g' \
|
|
||||||
-e 's/<\/tr>/)\\\n/g' | \
|
|
||||||
grep -v '<caption>' | tr -s ' ' | tr -s '\t' | tr '\t' '|' > tmpfile
|
|
||||||
echo 'X(|QDS|QUNDIS GmbH)\' >> tmpfile
|
|
||||||
echo 'X(|APA|Apator Powogaz S.A)\' >> tmpfile
|
|
||||||
cat tmpfile | sed -e "s/X(|\(.\)\(.\)\(.\)/X(\1\2\3|MANFCODE('\1','\2','\3')|/g" | \
|
|
||||||
tr -s '|' ',' >> m.h
|
|
||||||
echo >> m.h
|
echo >> m.h
|
||||||
cat tmpfile | sed -e "s/X(|\(.\)\(.\)\(.\).*/#define MANUFACTURER_\1\2\3 MANFCODE('\1','\2','\3')/g" \
|
cat manufacturers.txt | sed -e "s/\(.\)\(.\)\(.\).*/#define MANUFACTURER_\1\2\3 MANFCODE('\1','\2','\3')/g" >> m.h
|
||||||
>> m.h
|
|
||||||
echo >> m.h
|
echo >> m.h
|
||||||
echo '#endif' >> m.h
|
echo '#endif' >> m.h
|
||||||
rm tmpfile
|
|
||||||
mv m.h src/manufacturers.h
|
mv m.h src/manufacturers.h
|
||||||
|
|
||||||
build_fuzz:
|
build_fuzz:
|
||||||
|
|
2325
src/manufacturers.h
2325
src/manufacturers.h
Plik diff jest za duży
Load Diff
30
src/wmbus.cc
30
src/wmbus.cc
|
@ -46,29 +46,29 @@ LinkMode isLinkMode(const char *arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Manufacturer {
|
struct Manufacturer {
|
||||||
char code[4];
|
const char *code;
|
||||||
int m_field;
|
int m_field;
|
||||||
char name[64];
|
const char *name;
|
||||||
|
|
||||||
|
Manufacturer(const char *c, int m, const char *n) {
|
||||||
|
code = c;
|
||||||
|
m_field = m;
|
||||||
|
name = n;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Manufacturer manufacturers[] = {
|
vector<Manufacturer> manufacturers_;
|
||||||
#define X(key,code,name) {#key,code,#name},
|
|
||||||
LIST_OF_MANUFACTURERS
|
|
||||||
#undef X
|
|
||||||
{"",0,""}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Initializer { Initializer(); };
|
struct Initializer { Initializer(); };
|
||||||
|
|
||||||
static Initializer initializser_;
|
static Initializer initializser_;
|
||||||
|
|
||||||
Initializer::Initializer() {
|
Initializer::Initializer() {
|
||||||
for (auto &m : manufacturers) {
|
|
||||||
m.m_field = \
|
#define X(key,code,name) manufacturers_.push_back(Manufacturer(#key,code,name));
|
||||||
(m.code[0]-64)*1024 +
|
LIST_OF_MANUFACTURERS
|
||||||
(m.code[1]-64)*32 +
|
#undef X
|
||||||
(m.code[2]-64);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Telegram::print() {
|
void Telegram::print() {
|
||||||
|
@ -121,7 +121,7 @@ void Telegram::verboseFields() {
|
||||||
}
|
}
|
||||||
|
|
||||||
string manufacturer(int m_field) {
|
string manufacturer(int m_field) {
|
||||||
for (auto &m : manufacturers) {
|
for (auto &m : manufacturers_) {
|
||||||
if (m.m_field == m_field) return m.name;
|
if (m.m_field == m_field) return m.name;
|
||||||
}
|
}
|
||||||
return "Unknown";
|
return "Unknown";
|
||||||
|
|
|
@ -18,22 +18,22 @@ EXPECTED=$(cat <<EOF
|
||||||
No meters configured. Printing id:s of all telegrams heard!
|
No meters configured. Printing id:s of all telegrams heard!
|
||||||
|
|
||||||
Received telegram from: 12345678
|
Received telegram from: 12345678
|
||||||
manufacturer: (SON) Sontex SA
|
manufacturer: (SON) Sontex, Switzerland
|
||||||
device type: Warm Water (30°C-90°C) meter
|
device type: Warm Water (30°C-90°C) meter
|
||||||
Received telegram from: 11111111
|
Received telegram from: 11111111
|
||||||
manufacturer: (SON) Sontex SA
|
manufacturer: (SON) Sontex, Switzerland
|
||||||
device type: Water meter
|
device type: Water meter
|
||||||
Received telegram from: 12345699
|
Received telegram from: 12345699
|
||||||
manufacturer: (SEN) Sensus GmbH
|
manufacturer: (SEN) Sensus Metering Systems, Germany
|
||||||
device type: Water meter
|
device type: Water meter
|
||||||
Received telegram from: 33225544
|
Received telegram from: 33225544
|
||||||
manufacturer: (SEN) Sensus GmbH
|
manufacturer: (SEN) Sensus Metering Systems, Germany
|
||||||
device type: Water meter
|
device type: Water meter
|
||||||
Received telegram from: 20202020
|
Received telegram from: 20202020
|
||||||
manufacturer: (APA) Apator Powogaz S.A
|
manufacturer: (APA) Apator, Poland
|
||||||
device type: Water meter
|
device type: Water meter
|
||||||
Received telegram from: 10101010
|
Received telegram from: 10101010
|
||||||
manufacturer: (APA) Apator Powogaz S.A
|
manufacturer: (APA) Apator, Poland
|
||||||
device type: Electricity meter
|
device type: Electricity meter
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
|
|
Ładowanie…
Reference in New Issue