Closed oholthau closed 2 years ago
@oholthau what is your environment? Operating system, Node version, etc? Can you paste the complete output of make validate
?
Weirdly enough it complains about a socket, but there shouldn't be any network access necessary.
Hi Johan,
here we are:
Operating System: macOS 12.3 on Intel Node version:v16.14.2 npm: v8.5.0 go version go1.18 darwin/amd64
@.*** lorawan-devices % make validate
npm run validate
@.*** validate
node bin/validate.js
vendor index: valid
example: valid index
example: windsensor: valid
example: windsensor: EU863-870: profile example/windsensor-profile valid
example: windsensor: US902-928: profile example/windsensor-profile valid
example: windsensor: EU863-870: profile example/windsensor-profile valid
example: windsensor: US902-928: profile example/windsensor-profile valid
example: windsensor: AS923: profile example/windsensor-profile valid
example: windsensor: windsensor.jpg image has correct extension
example: windsensor: windsensor-package.jpg image has correct extension
adeunis: valid index
adeunis: pulse: valid
adeunis: pulse: EU863-870: profile adeunis/pulse-profile-eu868 valid
adeunis: pulse: US902-928: profile adeunis/pulse-profile-us915 valid
adeunis: pulse: AS923: profile adeunis/pulse-profile-as923 valid
adeunis: analog: valid
adeunis: analog: EU863-870: profile adeunis/pulse-profile-eu868 valid
adeunis: dry-contact: valid
adeunis: dry-contact: EU863-870: profile adeunis/pulse-profile-eu868 valid
adeunis: ftd-network-tester: valid
adeunis: ftd-network-tester: EU863-870: profile adeunis/ftd-profile-eu868 valid
adeunis: modbus: valid
adeunis: modbus: EU863-870: profile adeunis/pulse-profile-eu868 valid
adeunis: temp: valid
adeunis: temp: EU863-870: profile adeunis/pulse-profile-eu868 valid
adeunis: pulse: pulse.png image has correct extension
adeunis: analog: analog.png image has correct extension
adeunis: dry-contact: drycontact.png image has correct extension
adeunis: ftd-network-tester: network.png image has correct extension
adeunis: modbus: modbus.png image has correct extension
adeunis: temp: temp.png image has correct extension
bosch: valid index
bosch: tps110: valid
bosch: tps110: EU863-870: profile bosch/tps110-eu868 valid
bosch: tps110: AS923: profile bosch/tps110-as923 valid
bosch: tps110: EU863-870: profile bosch/tps110-eu868 valid
bosch: tps110: AS923: profile bosch/tps110-as923 valid
bosch: tps110: tps110.png image has correct extension
comtac: valid index
comtac: lpn-td1: valid
comtac: lpn-td1: EU863-870: profile comtac/lpn-td1-profile-eu868 valid
comtac: lpn-km: valid
comtac: lpn-km: EU863-870: profile comtac/lpn-km-profile-eu868 valid
comtac: lpn-tsm: valid
comtac: lpn-tsm: EU863-870: profile comtac/lpn-tsm-profile-eu868 valid
comtac: lpn-cm4: valid
comtac: lpn-cm4: EU863-870: profile comtac/lpn-cm4-profile-eu868 valid
comtac: lpn-td1: lpn-td1-foto.png image has correct extension
comtac: lpn-km: lpn-km-foto.png image has correct extension
comtac: lpn-tsm: lpn-tsm-foto.png image has correct extension
comtac: lpn-cm4: lpn-cm4-foto.png image has correct extension
decentlab: valid index
decentlab: dl-iam: valid
decentlab: dl-iam: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-iam: AS923: profile decentlab/profile-as923 valid
decentlab: dl-iam: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-iam: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-pr26: valid
decentlab: dl-pr26: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-pr26: AS923: profile decentlab/profile-as923 valid
decentlab: dl-pr26: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-pr26: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-mbx: valid
decentlab: dl-mbx: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-mbx: AS923: profile decentlab/profile-as923 valid
decentlab: dl-mbx: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-mbx: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-5tm: valid
decentlab: dl-5tm: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-5tm: AS923: profile decentlab/profile-as923 valid
decentlab: dl-5tm: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-5tm: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-atm22: valid
decentlab: dl-atm22: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-atm22: AS923: profile decentlab/profile-as923 valid
decentlab: dl-atm22: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-atm22: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-atm41: valid
decentlab: dl-atm41: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-atm41: AS923: profile decentlab/profile-as923 valid
decentlab: dl-atm41: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-atm41: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-ctd10: valid
decentlab: dl-ctd10: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-ctd10: AS923: profile decentlab/profile-as923 valid
decentlab: dl-ctd10: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-ctd10: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-dlr2-002: valid
decentlab: dl-dlr2-002: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-dlr2-002: AS923: profile decentlab/profile-as923 valid
decentlab: dl-dlr2-002: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-dlr2-002: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-dlr2-003: valid
decentlab: dl-dlr2-003: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-dlr2-003: AS923: profile decentlab/profile-as923 valid
decentlab: dl-dlr2-003: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-dlr2-003: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-dlr2-004: valid
decentlab: dl-dlr2-004: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-dlr2-004: AS923: profile decentlab/profile-as923 valid
decentlab: dl-dlr2-004: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-dlr2-004: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-dlr2-005: valid
decentlab: dl-dlr2-005: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-dlr2-005: AS923: profile decentlab/profile-as923 valid
decentlab: dl-dlr2-005: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-dlr2-005: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-dlr2-006: valid
decentlab: dl-dlr2-006: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-dlr2-006: AS923: profile decentlab/profile-as923 valid
decentlab: dl-dlr2-006: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-dlr2-006: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-dlr2-008: valid
decentlab: dl-dlr2-008: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-dlr2-008: AS923: profile decentlab/profile-as923 valid
decentlab: dl-dlr2-008: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-dlr2-008: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-dlr2-010: valid
decentlab: dl-dlr2-010: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-dlr2-010: AS923: profile decentlab/profile-as923 valid
decentlab: dl-dlr2-010: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-dlr2-010: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-dlr2-012: valid
decentlab: dl-dlr2-012: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-dlr2-012: AS923: profile decentlab/profile-as923 valid
decentlab: dl-dlr2-012: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-dlr2-012: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-ds18: valid
decentlab: dl-ds18: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-ds18: AS923: profile decentlab/profile-as923 valid
decentlab: dl-ds18: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-ds18: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-dws: valid
decentlab: dl-dws: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-dws: AS923: profile decentlab/profile-as923 valid
decentlab: dl-dws: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-dws: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-itst: valid
decentlab: dl-itst: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-itst: AS923: profile decentlab/profile-as923 valid
decentlab: dl-itst: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-itst: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-kl66: valid
decentlab: dl-kl66: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-kl66: AS923: profile decentlab/profile-as923 valid
decentlab: dl-kl66: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-kl66: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-lid: valid
decentlab: dl-lid: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-lid: AS923: profile decentlab/profile-as923 valid
decentlab: dl-lid: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-lid: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-lp8p: valid
decentlab: dl-lp8p: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-lp8p: AS923: profile decentlab/profile-as923 valid
decentlab: dl-lp8p: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-lp8p: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-optod: valid
decentlab: dl-optod: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-optod: AS923: profile decentlab/profile-as923 valid
decentlab: dl-optod: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-optod: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-par: valid
decentlab: dl-par: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-par: AS923: profile decentlab/profile-as923 valid
decentlab: dl-par: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-par: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-pm: valid
decentlab: dl-pm: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-pm: AS923: profile decentlab/profile-as923 valid
decentlab: dl-pm: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-pm: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-pr21: valid
decentlab: dl-pr21: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-pr21: AS923: profile decentlab/profile-as923 valid
decentlab: dl-pr21: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-pr21: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-pr36: valid
decentlab: dl-pr36: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-pr36: AS923: profile decentlab/profile-as923 valid
decentlab: dl-pr36: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-pr36: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-pr36ctd: valid
decentlab: dl-pr36ctd: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-pr36ctd: AS923: profile decentlab/profile-as923 valid
decentlab: dl-pr36ctd: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-pr36ctd: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-pyr: valid
decentlab: dl-pyr: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-pyr: AS923: profile decentlab/profile-as923 valid
decentlab: dl-pyr: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-pyr: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-rhc: valid
decentlab: dl-rhc: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-rhc: AS923: profile decentlab/profile-as923 valid
decentlab: dl-rhc: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-rhc: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-sht35-001: valid
decentlab: dl-sht35-001: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-sht35-001: AS923: profile decentlab/profile-as923 valid
decentlab: dl-sht35-001: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-sht35-001: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-sht35-002: valid
decentlab: dl-sht35-002: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-sht35-002: AS923: profile decentlab/profile-as923 valid
decentlab: dl-sht35-002: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-sht35-002: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-smtp: valid
decentlab: dl-smtp: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-smtp: AS923: profile decentlab/profile-as923 valid
decentlab: dl-smtp: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-smtp: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-tbrg: valid
decentlab: dl-tbrg: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-tbrg: AS923: profile decentlab/profile-as923 valid
decentlab: dl-tbrg: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-tbrg: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-trs11: valid
decentlab: dl-trs11: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-trs11: AS923: profile decentlab/profile-as923 valid
decentlab: dl-trs11: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-trs11: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-trs12: valid
decentlab: dl-trs12: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-trs12: AS923: profile decentlab/profile-as923 valid
decentlab: dl-trs12: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-trs12: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-trs21: valid
decentlab: dl-trs21: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-trs21: AS923: profile decentlab/profile-as923 valid
decentlab: dl-trs21: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-trs21: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-wrm: valid
decentlab: dl-wrm: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-wrm: AS923: profile decentlab/profile-as923 valid
decentlab: dl-wrm: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-wrm: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-zn1: valid
decentlab: dl-zn1: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-zn1: AS923: profile decentlab/profile-as923 valid
decentlab: dl-zn1: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-zn1: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-zn2: valid
decentlab: dl-zn2: EU863-870: profile decentlab/profile-eu868 valid
decentlab: dl-zn2: AS923: profile decentlab/profile-as923 valid
decentlab: dl-zn2: US902-928: profile decentlab/profile-us915 valid
decentlab: dl-zn2: AU915-928: profile decentlab/profile-au915 valid
decentlab: dl-iam: dl-iam.png image has correct extension
decentlab: dl-iam: dl-iam-2.jpg image has correct extension
decentlab: dl-iam: dl-iam-3.jpg image has correct extension
decentlab: dl-iam: dl-iam-4.jpg image has correct extension
decentlab: dl-iam: dl-iam-5.jpg image has correct extension
decentlab: dl-pr26: dl-pr26.png image has correct extension
decentlab: dl-pr26: dl-pr26-2.jpg image has correct extension
decentlab: dl-pr26: dl-pr26-3.jpg image has correct extension
decentlab: dl-mbx: dl-mbx.png image has correct extension
decentlab: dl-mbx: dl-mbx-004-005.png image has correct extension
decentlab: dl-mbx: dl-mbx-cable.jpg image has correct extension
decentlab: dl-mbx: dl-mbx-2.jpg image has correct extension
decentlab: dl-mbx: dl-mbx-3.jpg image has correct extension
decentlab: dl-mbx: dl-mbx-4.jpg image has correct extension
decentlab: dl-mbx: dl-mbx-5.jpg image has correct extension
decentlab: dl-mbx: dl-mbx-6.jpg image has correct extension
decentlab: dl-5tm: dl-5tm.png image has correct extension
decentlab: dl-atm22: dl-atm22.png image has correct extension
decentlab: dl-atm22: dl-atm22-2.jpg image has correct extension
decentlab: dl-atm22: dl-atm22-3.jpg image has correct extension
decentlab: dl-atm22: dl-atm22-4.jpg image has correct extension
decentlab: dl-atm22: dl-atm22-5.jpg image has correct extension
decentlab: dl-atm22: dl-atm22-6.jpg image has correct extension
decentlab: dl-atm22: dl-atm22-7.jpg image has correct extension
decentlab: dl-atm22: dl-atm22-8.jpg image has correct extension
decentlab: dl-atm22: dl-atm22-9.jpg image has correct extension
decentlab: dl-atm22: dl-atm22-10.jpg image has correct extension
decentlab: dl-atm41: dl-atm41.png image has correct extension
decentlab: dl-atm41: dl-atm41-2.jpg image has correct extension
decentlab: dl-ctd10: dl-ctd10.png image has correct extension
decentlab: dl-dlr2-002: dl-dlr2.png image has correct extension
decentlab: dl-dlr2-003: dl-dlr2.png image has correct extension
decentlab: dl-dlr2-004: dl-dlr2.png image has correct extension
decentlab: dl-dlr2-005: dl-dlr2.png image has correct extension
decentlab: dl-dlr2-006: dl-dlr2.png image has correct extension
decentlab: dl-dlr2-008: dl-dlr2.png image has correct extension
decentlab: dl-dlr2-010: dl-dlr2.png image has correct extension
decentlab: dl-dlr2-012: dl-dlr2.png image has correct extension
decentlab: dl-ds18: dl-ds18.png image has correct extension
decentlab: dl-dws: dl-dws.png image has correct extension
decentlab: dl-itst: dl-itst.png image has correct extension
decentlab: dl-kl66: dl-kl66.jpg image has correct extension
decentlab: dl-lid: dl-lid.png image has correct extension
decentlab: dl-lp8p: dl-lp8p.png image has correct extension
decentlab: dl-lp8p: dl-lp8p-2.jpg image has correct extension
decentlab: dl-lp8p: dl-lp8p-3.jpg image has correct extension
decentlab: dl-lp8p: dl-lp8p-4.jpg image has correct extension
decentlab: dl-optod: dl-optod.png image has correct extension
decentlab: dl-par: dl-pxr.png image has correct extension
decentlab: dl-pm: dl-pm.png image has correct extension
decentlab: dl-pr21: dl-pr21.png image has correct extension
decentlab: dl-pr36: dl-pr36.png image has correct extension
decentlab: dl-pr36ctd: dl-pr36ctd.png image has correct extension
decentlab: dl-pyr: dl-pxr.png image has correct extension
decentlab: dl-rhc: dl-rhc.png image has correct extension
decentlab: dl-sht35-001: dl-sht35-001.png image has correct extension
decentlab: dl-sht35-001: dl-sht35-001-2.jpg image has correct extension
decentlab: dl-sht35-001: dl-sht35-001-3.jpg image has correct extension
decentlab: dl-sht35-001: dl-sht35-001-4.jpg image has correct extension
decentlab: dl-sht35-001: dl-sht35-001-5.jpg image has correct extension
decentlab: dl-sht35-001: dl-sht35-001-6.jpg image has correct extension
decentlab: dl-sht35-001: dl-sht35-001-7.jpg image has correct extension
decentlab: dl-sht35-001: dl-sht35-001-8.jpg image has correct extension
decentlab: dl-sht35-001: dl-sht35-001-9.jpg image has correct extension
decentlab: dl-sht35-001: dl-sht35-001-10.jpg image has correct extension
decentlab: dl-sht35-001: dl-sht35-001-11.jpg image has correct extension
decentlab: dl-sht35-001: dl-sht35-001-12.jpg image has correct extension
decentlab: dl-sht35-002: dl-sht35-002.png image has correct extension
decentlab: dl-smtp: dl-smtp.png image has correct extension
decentlab: dl-smtp: dl-smtp-2.jpg image has correct extension
decentlab: dl-smtp: dl-smtp-3.jpg image has correct extension
decentlab: dl-tbrg: dl-tbrg.png image has correct extension
decentlab: dl-trs11: dl-trs1x.png image has correct extension
decentlab: dl-trs12: dl-trs1x.png image has correct extension
decentlab: dl-trs21: dl-trs21.png image has correct extension
decentlab: dl-wrm: dl-wrm.png image has correct extension
decentlab: dl-zn1: dl-znx.png image has correct extension
decentlab: dl-zn1: dl-zn1-2.jpg image has correct extension
decentlab: dl-zn1: dl-zn1-3.jpg image has correct extension
decentlab: dl-zn2: dl-znx.png image has correct extension
digital-matter: valid index
digital-matter: oyster: valid
digital-matter: oyster: EU863-870: profile digital-matter/oyster-profile valid
digital-matter: oyster: IN865-867: profile digital-matter/oyster-profile valid
digital-matter: oyster: RU864-870: profile digital-matter/oyster-profile valid
digital-matter: oyster: US902-928: profile digital-matter/oyster-profile valid
digital-matter: oyster: AU915-928: profile digital-matter/oyster-profile valid
digital-matter: oyster: AS923: profile digital-matter/oyster-profile valid
digital-matter: oyster: KR920-923: profile digital-matter/oyster-profile valid
digital-matter: oyster: US902-928: profile digital-matter/oyster-profile valid
digital-matter: oyster: AU915-928: profile digital-matter/oyster-profile valid
digital-matter: oyster: AS923: profile digital-matter/oyster-profile valid
digital-matter: oyster: KR920-923: profile digital-matter/oyster-profile valid
digital-matter: yabby-edge: valid
digital-matter: yabby-edge: EU863-870: profile digital-matter/yabby-edge-profile valid
digital-matter: yabby-edge: IN865-867: profile digital-matter/yabby-edge-profile valid
digital-matter: yabby-edge: RU864-870: profile digital-matter/yabby-edge-profile valid
digital-matter: yabby-edge: US902-928: profile digital-matter/yabby-edge-profile valid
digital-matter: yabby-edge: AU915-928: profile digital-matter/yabby-edge-profile valid
digital-matter: yabby-edge: AS923: profile digital-matter/yabby-edge-profile valid
digital-matter: yabby-edge: KR920-923: profile digital-matter/yabby-edge-profile valid
digital-matter: oyster: oyster.png image has correct extension
digital-matter: yabby-edge: yabby-edge.png image has correct extension
elsys: valid index
elsys: ers: valid
elsys: ers: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: ers: US902-928: profile elsys/elsys-us902-profile valid
elsys: ers: AS923: profile elsys/elsys-as923-profile valid
elsys: ers: AU915-928: profile elsys/elsys-au915-profile valid
elsys: ers-co2: valid
elsys: ers-co2: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: ers-co2: US902-928: profile elsys/elsys-us902-profile valid
elsys: ers-co2: AS923: profile elsys/elsys-as923-profile valid
elsys: ers-co2: AU915-928: profile elsys/elsys-au915-profile valid
elsys: ers-co2-lite: valid
elsys: ers-co2-lite: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: ers-co2-lite: US902-928: profile elsys/elsys-us902-profile valid
elsys: ers-co2-lite: AS923: profile elsys/elsys-as923-profile valid
elsys: ers-co2-lite: AU915-928: profile elsys/elsys-au915-profile valid
elsys: ers-voc: valid
elsys: ers-voc: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: ers-voc: US902-928: profile elsys/elsys-us902-profile valid
elsys: ers-voc: AS923: profile elsys/elsys-as923-profile valid
elsys: ers-voc: AU915-928: profile elsys/elsys-au915-profile valid
elsys: ers-eye: valid
elsys: ers-eye: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: ers-eye: US902-928: profile elsys/elsys-us902-profile valid
elsys: ers-eye: AS923: profile elsys/elsys-as923-profile valid
elsys: ers-eye: AU915-928: profile elsys/elsys-au915-profile valid
elsys: ers-sound: valid
elsys: ers-sound: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: ers-sound: US902-928: profile elsys/elsys-us902-profile valid
elsys: ers-sound: AS923: profile elsys/elsys-as923-profile valid
elsys: ers-sound: AU915-928: profile elsys/elsys-au915-profile valid
elsys: ers-lite: valid
elsys: ers-lite: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: ers-lite: US902-928: profile elsys/elsys-us902-profile valid
elsys: ers-lite: AS923: profile elsys/elsys-as923-profile valid
elsys: ers-lite: AU915-928: profile elsys/elsys-au915-profile valid
elsys: elt-2: valid
elsys: elt-2: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: elt-2: US902-928: profile elsys/elsys-us902-profile valid
elsys: elt-2: AS923: profile elsys/elsys-as923-profile valid
elsys: elt-2: AU915-928: profile elsys/elsys-au915-profile valid
elsys: elt-lite: valid
elsys: elt-lite: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: elt-lite: US902-928: profile elsys/elsys-us902-profile valid
elsys: elt-lite: AS923: profile elsys/elsys-as923-profile valid
elsys: elt-lite: AU915-928: profile elsys/elsys-au915-profile valid
elsys: elt-ultrasonic: valid
elsys: elt-ultrasonic: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: elt-ultrasonic: US902-928: profile elsys/elsys-us902-profile valid
elsys: elt-ultrasonic: AS923: profile elsys/elsys-as923-profile valid
elsys: elt-ultrasonic: AU915-928: profile elsys/elsys-au915-profile valid
elsys: ems: valid
elsys: ems: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: ems: US902-928: profile elsys/elsys-us902-profile valid
elsys: ems: AS923: profile elsys/elsys-as923-profile valid
elsys: ems: AU915-928: profile elsys/elsys-au915-profile valid
elsys: ems-door: valid
elsys: ems-door: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: ems-door: US902-928: profile elsys/elsys-us902-profile valid
elsys: ems-door: AS923: profile elsys/elsys-as923-profile valid
elsys: ems-door: AU915-928: profile elsys/elsys-au915-profile valid
elsys: ems-lite: valid
elsys: ems-lite: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: ems-lite: US902-928: profile elsys/elsys-us902-profile valid
elsys: ems-lite: AS923: profile elsys/elsys-as923-profile valid
elsys: ems-lite: AU915-928: profile elsys/elsys-au915-profile valid
elsys: ems-desk: valid
elsys: ems-desk: EU863-870: profile elsys/elsys-eu868-profile valid
elsys: ems-desk: US902-928: profile elsys/elsys-us902-profile valid
elsys: ems-desk: AS923: profile elsys/elsys-as923-profile valid
elsys: ems-desk: AU915-928: profile elsys/elsys-au915-profile valid
elsys: ers: ers.png image has correct extension
elsys: ers-co2: ers.png image has correct extension
elsys: ers-co2-lite: erslite.png image has correct extension
elsys: ers-voc: ersvoc.png image has correct extension
elsys: ers-eye: erseye.png image has correct extension
elsys: ers-sound: erssound.png image has correct extension
elsys: ers-lite: erslite.png image has correct extension
elsys: elt-2: elt2.png image has correct extension
elsys: elt-lite: elt2.png image has correct extension
elsys: elt-ultrasonic: eltultrasonic.png image has correct extension
elsys: ems: ems.png image has correct extension
elsys: ems-door: ems.png image has correct extension
elsys: ems-lite: ems.png image has correct extension
elsys: ems-desk: ems.png image has correct extension
baylan: valid index
baylan: tk4-rf: valid
baylan: tk4-rf: EU863-870: profile baylan/tk4-rf-profile valid
baylan: tk4-rf: tk4-rf.png image has correct extension
baylan: tk4-rf: baylan.png image has correct extension
imst: valid index
imst: range-extender: valid
imst: range-extender: EU863-870: profile imst/range-extender-profile valid
imst: range-extender: EU863-870: profile imst/range-extender-profile-lw104 valid
imst: ioke868: valid
imst: ioke868: EU863-870: profile imst/ioke868-profile valid
imst: range-extender: range-extender.jpg image has correct extension
imst: range-extender: range-extender_sketch.jpg image has correct extension
imst: ioke868: io881a.jpg image has correct extension
imst: ioke868: ioke868.jpg image has correct extension
imst: ioke868: io881a_meter.jpg image has correct extension
imst: ioke868: io881a_sketch.jpg image has correct extension
iothings: valid index
iothings: iotracker3: valid
iothings: iotracker3: EU863-870: profile iothings/iotracker3-profile valid
iothings: iotracker3: US902-928: profile iothings/iotracker3-profile valid
iothings: iotracker3: iotracker3.png image has correct extension
keller: valid index
keller: adt1-tube: valid
keller: adt1-tube: EU863-870: profile keller/adt1-profile valid
keller: adt1-tube: US902-928: profile keller/adt1-profile valid
keller: adt1-tube: AU915-928: profile keller/adt1-profile valid
keller: adt1-tube: AS923: profile keller/adt1-profile valid
keller: adt1-tube: KR920-923: profile keller/adt1-profile valid
keller: adt1-tube: IN865-867: profile keller/adt1-profile valid
keller: adt1-box: valid
keller: adt1-box: EU863-870: profile keller/adt1-profile valid
keller: adt1-box: US902-928: profile keller/adt1-profile valid
keller: adt1-box: AU915-928: profile keller/adt1-profile valid
keller: adt1-box: AS923: profile keller/adt1-profile valid
keller: adt1-box: KR920-923: profile keller/adt1-profile valid
keller: adt1-box: IN865-867: profile keller/adt1-profile valid
keller: arc1-tube: valid
keller: arc1-tube: EU863-870: profile keller/arc1-profile valid
keller: arc1-tube: US902-928: profile keller/arc1-profile valid
keller: arc1-box: valid
keller: arc1-box: EU863-870: profile keller/arc1-profile valid
keller: arc1-box: US902-928: profile keller/arc1-profile valid
keller: adt1-tube: adt1-tube-open.jpg image has correct extension
keller: adt1-tube: adt1-tube-02.jpg image has correct extension
keller: adt1-box: adt1-box-open.jpg image has correct extension
keller: adt1-box: adt1-box-01.jpg image has correct extension
keller: adt1-box: adt1-box-02.jpg image has correct extension
keller: arc1-tube: arc1-tube.jpg image has correct extension
keller: arc1-tube: arc1-tube-open.jpg image has correct extension
keller: arc1-tube: arc1-tube-back.jpg image has correct extension
keller: arc1-box: arc1-box-front.jpg image has correct extension
keller: arc1-box: arc1-box-5sensors.jpg image has correct extension
keller: arc1-box: arc1-box-dim.jpg image has correct extension
laird: valid index
laird: rs1xx-temp-rh-sensor: valid
laird: rs1xx-temp-rh-sensor: EU863-870: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-temp-rh-sensor: US902-928: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-temp-rh-sensor: AU915-928: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-temp-rh-sensor: AS923: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-ext-temp-1w-sensor: valid
laird: rs1xx-ext-temp-1w-sensor: EU863-870: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-ext-temp-1w-sensor: US902-928: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-ext-temp-1w-sensor: AU915-928: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-ext-temp-1w-sensor: AS923: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-ext-multi-sensor: valid
laird: rs1xx-ext-multi-sensor: EU863-870: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-ext-multi-sensor: US902-928: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-ext-multi-sensor: AU915-928: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-ext-multi-sensor: AS923: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-ext-temp-rtd-sensor: valid
laird: rs1xx-ext-temp-rtd-sensor: EU863-870: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-ext-temp-rtd-sensor: US902-928: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-ext-temp-rtd-sensor: AU915-928: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-ext-temp-rtd-sensor: AS923: profile laird/rs1xx-sensor-profile valid
laird: rs1xx-temp-rh-sensor: rs1xx-temp-rh-sensor.jpg image has correct extension
laird: rs1xx-ext-temp-1w-sensor: rs1xx-ext-sensor.jpg image has correct extension
laird: rs1xx-ext-temp-1w-sensor: rs1xx-ext-temp-1w-sensor.jpg image has correct extension
laird: rs1xx-ext-multi-sensor: rs1xx-ext-sensor.jpg image has correct extension
laird: rs1xx-ext-multi-sensor: rs1xx-ext-openclosed-sensor.jpg image has correct extension
laird: rs1xx-ext-temp-rtd-sensor: rs1xx-ext-sensor.jpg image has correct extension
laird: rs1xx-ext-temp-rtd-sensor: rs1xx-ext-temp-rtd-sensor.jpg image has correct extension
mcci: valid index
mcci: catena4430: valid
mcci: catena4430: EU863-870: profile mcci/catena4430-profile valid
mcci: catena4430: US902-928: profile mcci/catena4430-profile valid
mcci: catena4430: AU915-928: profile mcci/catena4430-profile valid
mcci: catena4430: AS923: profile mcci/catena4430-profile valid
mcci: catena4430: KR920-923: profile mcci/catena4430-profile valid
mcci: catena4430: IN865-867: profile mcci/catena4430-profile valid
mcci: catena4450: valid
mcci: catena4450: EU863-870: profile mcci/catena4450-profile valid
mcci: catena4450: US902-928: profile mcci/catena4450-profile valid
mcci: catena4450: AU915-928: profile mcci/catena4450-profile valid
mcci: catena4450: AS923: profile mcci/catena4450-profile valid
mcci: catena4450: KR920-923: profile mcci/catena4450-profile valid
mcci: catena4450: IN865-867: profile mcci/catena4450-profile valid
mcci: catena4460: valid
mcci: catena4460: EU863-870: profile mcci/catena4460-profile valid
mcci: catena4460: US902-928: profile mcci/catena4460-profile valid
mcci: catena4460: AU915-928: profile mcci/catena4460-profile valid
mcci: catena4460: AS923: profile mcci/catena4460-profile valid
mcci: catena4460: KR920-923: profile mcci/catena4460-profile valid
mcci: catena4460: IN865-867: profile mcci/catena4460-profile valid
mcci: catena4470: valid
mcci: catena4470: EU863-870: profile mcci/catena4470-profile valid
mcci: catena4470: US902-928: profile mcci/catena4470-profile valid
mcci: catena4470: AU915-928: profile mcci/catena4470-profile valid
mcci: catena4470: AS923: profile mcci/catena4470-profile valid
mcci: catena4470: KR920-923: profile mcci/catena4470-profile valid
mcci: catena4470: IN865-867: profile mcci/catena4470-profile valid
mcci: catena4610: valid
mcci: catena4610: EU863-870: profile mcci/catena4610-profile valid
mcci: catena4610: US902-928: profile mcci/catena4610-profile valid
mcci: catena4610: AU915-928: profile mcci/catena4610-profile valid
mcci: catena4610: AS923: profile mcci/catena4610-profile valid
mcci: catena4610: KR920-923: profile mcci/catena4610-profile valid
mcci: catena4610: IN865-867: profile mcci/catena4610-profile valid
mcci: catena4612: valid
mcci: catena4612: EU863-870: profile mcci/catena4612-profile valid
mcci: catena4612: US902-928: profile mcci/catena4612-profile valid
mcci: catena4612: AU915-928: profile mcci/catena4612-profile valid
mcci: catena4612: AS923: profile mcci/catena4612-profile valid
mcci: catena4612: KR920-923: profile mcci/catena4612-profile valid
mcci: catena4612: IN865-867: profile mcci/catena4612-profile valid
mcci: catena4618: valid
mcci: catena4618: EU863-870: profile mcci/catena4618-profile valid
mcci: catena4618: US902-928: profile mcci/catena4618-profile valid
mcci: catena4618: AU915-928: profile mcci/catena4618-profile valid
mcci: catena4618: AS923: profile mcci/catena4618-profile valid
mcci: catena4618: KR920-923: profile mcci/catena4618-profile valid
mcci: catena4618: IN865-867: profile mcci/catena4618-profile valid
mcci: catena4618m201: valid
mcci: catena4618m201: EU863-870: profile mcci/catena4618m201-profile valid
mcci: catena4618m201: US902-928: profile mcci/catena4618m201-profile valid
mcci: catena4618m201: AU915-928: profile mcci/catena4618m201-profile valid
mcci: catena4618m201: AS923: profile mcci/catena4618m201-profile valid
mcci: catena4618m201: KR920-923: profile mcci/catena4618m201-profile valid
mcci: catena4618m201: IN865-867: profile mcci/catena4618m201-profile valid
mcci: catena4801: valid
mcci: catena4801: EU863-870: profile mcci/catena4801-profile valid
mcci: catena4801: US902-928: profile mcci/catena4801-profile valid
mcci: catena4801: AU915-928: profile mcci/catena4801-profile valid
mcci: catena4801: AS923: profile mcci/catena4801-profile valid
mcci: catena4801: KR920-923: profile mcci/catena4801-profile valid
mcci: catena4801: IN865-867: profile mcci/catena4801-profile valid
mcci: catena4802: valid
mcci: catena4802: EU863-870: profile mcci/catena4802-profile valid
mcci: catena4802: US902-928: profile mcci/catena4802-profile valid
mcci: catena4802: AU915-928: profile mcci/catena4802-profile valid
mcci: catena4802: AS923: profile mcci/catena4802-profile valid
mcci: catena4802: KR920-923: profile mcci/catena4802-profile valid
mcci: catena4802: IN865-867: profile mcci/catena4802-profile valid
mcci: model4811: valid
mcci: model4811: EU863-870: profile mcci/model4811-profile valid
mcci: model4811: US902-928: profile mcci/model4811-profile valid
mcci: model4811: AU915-928: profile mcci/model4811-profile valid
mcci: model4811: AS923: profile mcci/model4811-profile valid
mcci: model4811: KR920-923: profile mcci/model4811-profile valid
mcci: model4811: IN865-867: profile mcci/model4811-profile valid
mcci: model4821: valid
mcci: model4821: EU863-870: profile mcci/model4821-profile valid
mcci: model4821: US902-928: profile mcci/model4821-profile valid
mcci: model4821: AU915-928: profile mcci/model4821-profile valid
mcci: model4821: AS923: profile mcci/model4821-profile valid
mcci: model4821: KR920-923: profile mcci/model4821-profile valid
mcci: model4821: IN865-867: profile mcci/model4821-profile valid
mcci: model4822: valid
mcci: model4822: EU863-870: profile mcci/model4822-profile valid
mcci: model4822: US902-928: profile mcci/model4822-profile valid
mcci: model4822: AU915-928: profile mcci/model4822-profile valid
mcci: model4822: AS923: profile mcci/model4822-profile valid
mcci: model4822: KR920-923: profile mcci/model4822-profile valid
mcci: model4822: IN865-867: profile mcci/model4822-profile valid
mcci: model4823: valid
mcci: model4823: EU863-870: profile mcci/model4823-profile valid
mcci: model4823: US902-928: profile mcci/model4823-profile valid
mcci: model4823: AU915-928: profile mcci/model4823-profile valid
mcci: model4823: AS923: profile mcci/model4823-profile valid
mcci: model4823: KR920-923: profile mcci/model4823-profile valid
mcci: model4823: IN865-867: profile mcci/model4823-profile valid
mcci: model4831: valid
mcci: model4831: EU863-870: profile mcci/model4831-profile valid
mcci: model4831: US902-928: profile mcci/model4831-profile valid
mcci: model4831: AU915-928: profile mcci/model4831-profile valid
mcci: model4831: AS923: profile mcci/model4831-profile valid
mcci: model4831: KR920-923: profile mcci/model4831-profile valid
mcci: model4831: IN865-867: profile mcci/model4831-profile valid
mcci: model4832: valid
mcci: model4832: EU863-870: profile mcci/model4832-profile valid
mcci: model4832: US902-928: profile mcci/model4832-profile valid
mcci: model4832: AU915-928: profile mcci/model4832-profile valid
mcci: model4832: AS923: profile mcci/model4832-profile valid
mcci: model4832: KR920-923: profile mcci/model4832-profile valid
mcci: model4832: IN865-867: profile mcci/model4832-profile valid
mcci: model4841: valid
mcci: model4841: EU863-870: profile mcci/model4841-profile valid
mcci: model4841: US902-928: profile mcci/model4841-profile valid
mcci: model4841: AU915-928: profile mcci/model4841-profile valid
mcci: model4841: AS923: profile mcci/model4841-profile valid
mcci: model4841: KR920-923: profile mcci/model4841-profile valid
mcci: model4841: IN865-867: profile mcci/model4841-profile valid
mcci: catena4430: catena4430.png image has correct extension
mcci: catena4450: catena4450.png image has correct extension
mcci: catena4460: catena4450.png image has correct extension
mcci: catena4470: catena4470.png image has correct extension
mcci: catena4470: catena4470-sys.jpg image has correct extension
mcci: catena4610: catena4610.png image has correct extension
mcci: catena4610: catena4610-pinmapping.jpg image has correct extension
mcci: catena4612: catena4612.png image has correct extension
mcci: catena4612: catena4612-encl.png image has correct extension
mcci: catena4612: catena4612_4618-pinout.png image has correct extension
mcci: catena4618: catena4618.png image has correct extension
mcci: catena4618: catena4612_4618-pinout.png image has correct extension
mcci: catena4618m201: catena4618.png image has correct extension
mcci: catena4618m201: catena4612_4618-pinout.png image has correct extension
mcci: catena4801: catena4801.png image has correct extension
mcci: catena4801: catena4801-breakout.png image has correct extension
mcci: catena4802: catena4802.png image has correct extension
mcci: catena4802: catena4802-terminals.jpg image has correct extension
mcci: catena4802: catena4802-pinout.png image has correct extension
mcci: model4811: model4811.jpg image has correct extension
mcci: model4811: model4811-data.png image has correct extension
mcci: model4821: model482x.png image has correct extension
mcci: model4822: model482x.png image has correct extension
mcci: model4823: model482x.png image has correct extension
mcci: model4831: model483x-closed.png image has correct extension
mcci: model4831: model483x-open.jpg image has correct extension
mcci: model4832: model483x-closed.png image has correct extension
mcci: model4832: model483x-open.jpg image has correct extension
mcci: model4841: model4841.png image has correct extension
mcci: model4841: model4841-2.jpg image has correct extension
mcf88: valid index
mcf88: mcf-lw06davk: valid
mcf88: mcf-lw06davk: EU863-870: profile mcf88/eu868-profile-a valid
mcf88: mcf-lw06davk: US902-928: profile mcf88/us915-profile-a valid
mcf88: mcf-lw06davk: AU915-928: profile mcf88/au915-profile-a valid
mcf88: mcf-lw06davk: AS923: profile mcf88/as923-profile-a valid
mcf88: mcf-lw06davpk: valid
mcf88: mcf-lw06davpk: EU863-870: profile mcf88/eu868-profile-a valid
mcf88: mcf-lw06davpk: US902-928: profile mcf88/us915-profile-a valid
mcf88: mcf-lw06davpk: AU915-928: profile mcf88/au915-profile-a valid
mcf88: mcf-lw06davpk: AS923: profile mcf88/as923-profile-a valid
mcf88: mcf-lw12co2: valid
mcf88: mcf-lw12co2: EU863-870: profile mcf88/eu868-profile-a valid
mcf88: mcf-lw12co2: US902-928: profile mcf88/us915-profile-a valid
mcf88: mcf-lw12co2: AU915-928: profile mcf88/au915-profile-a valid
mcf88: mcf-lw12co2: AS923: profile mcf88/as923-profile-a valid
mcf88: mcf-lw12co2e: valid
mcf88: mcf-lw12co2e: EU863-870: profile mcf88/eu868-profile-a valid
mcf88: mcf-lw12co2e: US902-928: profile mcf88/us915-profile-a valid
mcf88: mcf-lw12co2e: AU915-928: profile mcf88/au915-profile-a valid
mcf88: mcf-lw12co2e: AS923: profile mcf88/as923-profile-a valid
mcf88: mcf-lw12met: valid
mcf88: mcf-lw12met: EU863-870: profile mcf88/eu868-profile-c valid
mcf88: mcf-lw12met: US902-928: profile mcf88/us915-profile-c valid
mcf88: mcf-lw12met: AU915-928: profile mcf88/au915-profile-c valid
mcf88: mcf-lw12met: AS923: profile mcf88/as923-profile-c valid
mcf88: mcf-lw12plg: valid
mcf88: mcf-lw12plg: EU863-870: profile mcf88/eu868-profile-c valid
mcf88: mcf-lw12plg: US902-928: profile mcf88/us915-profile-c valid
mcf88: mcf-lw12plg: AU915-928: profile mcf88/au915-profile-c valid
mcf88: mcf-lw12plg: AS923: profile mcf88/as923-profile-c valid
mcf88: mcf-lw12ter: valid
mcf88: mcf-lw12ter: EU863-870: profile mcf88/eu868-profile-a valid
mcf88: mcf-lw12ter: US902-928: profile mcf88/us915-profile-a valid
mcf88: mcf-lw12ter: AU915-928: profile mcf88/au915-profile-a valid
mcf88: mcf-lw12ter: AS923: profile mcf88/as923-profile-a valid
mcf88: mcf-lw12terwp: valid
mcf88: mcf-lw12terwp: EU863-870: profile mcf88/eu868-profile-a valid
mcf88: mcf-lw12terwp: US902-928: profile mcf88/us915-profile-a valid
mcf88: mcf-lw12terwp: AU915-928: profile mcf88/au915-profile-a valid
mcf88: mcf-lw12terwp: AS923: profile mcf88/as923-profile-a valid
mcf88: mcf-lw12terpm: valid
mcf88: mcf-lw12terpm: EU863-870: profile mcf88/eu868-profile-a valid
mcf88: mcf-lw12terpm: US902-928: profile mcf88/us915-profile-a valid
mcf88: mcf-lw12terpm: AU915-928: profile mcf88/au915-profile-a valid
mcf88: mcf-lw12terpm: AS923: profile mcf88/as923-profile-a valid
mcf88: mcf-lw12voc: valid
mcf88: mcf-lw12voc: EU863-870: profile mcf88/eu868-profile-a valid
mcf88: mcf-lw12voc: US902-928: profile mcf88/us915-profile-a valid
mcf88: mcf-lw12voc: AU915-928: profile mcf88/au915-profile-a valid
mcf88: mcf-lw12voc: AS923: profile mcf88/as923-profile-a valid
mcf88: mcf-lw13io: valid
mcf88: mcf-lw13io: EU863-870: profile mcf88/eu868-profile-c valid
mcf88: mcf-lw13io: US902-928: profile mcf88/us915-profile-c valid
mcf88: mcf-lw13io: AU915-928: profile mcf88/au915-profile-c valid
mcf88: mcf-lw13io: AS923: profile mcf88/as923-profile-c valid
mcf88: mcf-lw13mio: valid
mcf88: mcf-lw13mio: EU863-870: profile mcf88/eu868-profile-c valid
mcf88: mcf-lw13mio: US902-928: profile mcf88/us915-profile-c valid
mcf88: mcf-lw13mio: AU915-928: profile mcf88/au915-profile-c valid
mcf88: mcf-lw13mio: AS923: profile mcf88/as923-profile-c valid
mcf88: mcf-lwws00: valid
mcf88: mcf-lwws00: EU863-870: profile mcf88/eu868-profile-a valid
mcf88: mcf-lwws00: US902-928: profile mcf88/us915-profile-a valid
mcf88: mcf-lwws00: AU915-928: profile mcf88/au915-profile-a valid
mcf88: mcf-lwws00: AS923: profile mcf88/as923-profile-a valid
mcf88: mcf-lwws01: valid
mcf88: mcf-lwws01: EU863-870: profile mcf88/eu868-profile-a valid
mcf88: mcf-lwws01: US902-928: profile mcf88/us915-profile-a valid
mcf88: mcf-lwws01: AU915-928: profile mcf88/au915-profile-a valid
mcf88: mcf-lwws01: AS923: profile mcf88/as923-profile-a valid
mcf88: mcf-lwws02: valid
mcf88: mcf-lwws02: EU863-870: profile mcf88/eu868-profile-a valid
mcf88: mcf-lwws02: US902-928: profile mcf88/us915-profile-a valid
mcf88: mcf-lwws02: AU915-928: profile mcf88/au915-profile-a valid
mcf88: mcf-lwws02: AS923: profile mcf88/as923-profile-a valid
mcf88: mcf-lwws03: valid
mcf88: mcf-lwws03: EU863-870: profile mcf88/eu868-profile-a valid
mcf88: mcf-lwws03: US902-928: profile mcf88/us915-profile-a valid
mcf88: mcf-lwws03: AU915-928: profile mcf88/au915-profile-a valid
mcf88: mcf-lwws03: AS923: profile mcf88/as923-profile-a valid
mcf88: mcf-lw06davk: mcf-lwws00.jpg image has correct extension
mcf88: mcf-lw06davpk: mcf-lwws00.jpg image has correct extension
mcf88: mcf-lw12co2: mcf-lw12co2.jpg image has correct extension
mcf88: mcf-lw12co2e: mcf-lw12co2e.png image has correct extension
mcf88: mcf-lw12met: mcf-lw12met.jpg image has correct extension
mcf88: mcf-lw12plg: mcf-lw12plg.jpg image has correct extension
mcf88: mcf-lw12ter: mcf-lw12ter.jpg image has correct extension
mcf88: mcf-lw12terwp: mcf-lw12terwp.jpg image has correct extension
mcf88: mcf-lw12terpm: mcf-lw12terpm.jpg image has correct extension
mcf88: mcf-lw12voc: mcf-lw12voc.jpg image has correct extension
mcf88: mcf-lw13io: mcf-lw13io.jpg image has correct extension
mcf88: mcf-lw13mio: mcf-lw13mio.jpg image has correct extension
mcf88: mcf-lwws00: mcf-lwws00.jpg image has correct extension
mcf88: mcf-lwws01: mcf-lwws00.jpg image has correct extension
mcf88: mcf-lwws02: mcf-lwws00.jpg image has correct extension
mcf88: mcf-lwws03: mcf-lwws00.jpg image has correct extension
multi-tech: valid index
multi-tech: multi-tech-xdot: valid
multi-tech: multi-tech-xdot: EU863-870: profile multi-tech/multi-tech-xdot-profile-eu868 valid
multi-tech: multi-tech-xdot: US902-928: profile multi-tech/multi-tech-xdot-profile-us902 valid
multi-tech: multi-tech-xdot: AU915-928: profile multi-tech/multi-tech-xdot-profile-au915 valid
multi-tech: multi-tech-xdot: AS923: profile multi-tech/multi-tech-xdot-profile-as923 valid
multi-tech: multi-tech-xdot: IN865-867: profile multi-tech/multi-tech-xdot-profile-in865 valid
multi-tech: multi-tech-xdot: KR920-923: profile multi-tech/multi-tech-xdot-profile-kr920 valid
multi-tech: multi-tech-xdot: multi-tech-xdot.png image has correct extension
netvox: valid index
netvox: r311a: valid
netvox: r311a: EU863-870: profile netvox/profile-eu868 valid
netvox: r311a: AS923: profile netvox/profile-as923 valid
netvox: r311a: US902-928: profile netvox/profile-us915 valid
netvox: r311a: AU915-928: profile netvox/profile-au915 valid
netvox: r311a: KR920-923: profile netvox/profile-kr920 valid
netvox: r311a: IN865-867: profile netvox/profile-in865 valid
netvox: r311a: CN470-510: profile netvox/profile-cn470 valid
netvox: r311b: valid
netvox: r311b: EU863-870: profile netvox/profile-eu868 valid
netvox: r311b: AS923: profile netvox/profile-as923 valid
netvox: r311b: US902-928: profile netvox/profile-us915 valid
netvox: r311b: AU915-928: profile netvox/profile-au915 valid
netvox: r311b: KR920-923: profile netvox/profile-kr920 valid
netvox: r311b: IN865-867: profile netvox/profile-in865 valid
netvox: r311b: CN470-510: profile netvox/profile-cn470 valid
netvox: r311g: valid
netvox: r311g: EU863-870: profile netvox/profile-eu868 valid
netvox: r311g: AS923: profile netvox/profile-as923 valid
netvox: r311g: US902-928: profile netvox/profile-us915 valid
netvox: r311g: AU915-928: profile netvox/profile-au915 valid
netvox: r311g: KR920-923: profile netvox/profile-kr920 valid
netvox: r311g: IN865-867: profile netvox/profile-in865 valid
netvox: r311g: CN470-510: profile netvox/profile-cn470 valid
netvox: r311la: valid
netvox: r311la: EU863-870: profile netvox/profile-eu868 valid
netvox: r311la: AS923: profile netvox/profile-as923 valid
netvox: r311la: US902-928: profile netvox/profile-us915 valid
netvox: r311la: AU915-928: profile netvox/profile-au915 valid
netvox: r311la: KR920-923: profile netvox/profile-kr920 valid
netvox: r311la: IN865-867: profile netvox/profile-in865 valid
netvox: r311la: CN470-510: profile netvox/profile-cn470 valid
netvox: r311w: valid
netvox: r311w: EU863-870: profile netvox/profile-eu868 valid
netvox: r311w: AS923: profile netvox/profile-as923 valid
netvox: r311w: US902-928: profile netvox/profile-us915 valid
netvox: r311w: AU915-928: profile netvox/profile-au915 valid
netvox: r311w: KR920-923: profile netvox/profile-kr920 valid
netvox: r311w: IN865-867: profile netvox/profile-in865 valid
netvox: r311w: CN470-510: profile netvox/profile-cn470 valid
netvox: r312: valid
netvox: r312: EU863-870: profile netvox/profile-eu868 valid
netvox: r312: AS923: profile netvox/profile-as923 valid
netvox: r312: US902-928: profile netvox/profile-us915 valid
netvox: r312: AU915-928: profile netvox/profile-au915 valid
netvox: r312: KR920-923: profile netvox/profile-kr920 valid
netvox: r312: IN865-867: profile netvox/profile-in865 valid
netvox: r312: CN470-510: profile netvox/profile-cn470 valid
netvox: r312a: valid
netvox: r312a: EU863-870: profile netvox/profile-eu868 valid
netvox: r312a: AS923: profile netvox/profile-as923 valid
netvox: r312a: US902-928: profile netvox/profile-us915 valid
netvox: r312a: AU915-928: profile netvox/profile-au915 valid
netvox: r312a: KR920-923: profile netvox/profile-kr920 valid
netvox: r312a: IN865-867: profile netvox/profile-in865 valid
netvox: r312a: CN470-510: profile netvox/profile-cn470 valid
netvox: r602a: valid
netvox: r602a: EU863-870: profile netvox/profile-eu868 valid
netvox: r602a: AS923: profile netvox/profile-as923 valid
netvox: r602a: US902-928: profile netvox/profile-us915 valid
netvox: r602a: AU915-928: profile netvox/profile-au915 valid
netvox: r602a: KR920-923: profile netvox/profile-kr920 valid
netvox: r602a: IN865-867: profile netvox/profile-in865 valid
netvox: r602a: CN470-510: profile netvox/profile-cn470 valid
netvox: r711: valid
netvox: r711: EU863-870: profile netvox/profile-eu868 valid
netvox: r711: AS923: profile netvox/profile-as923 valid
netvox: r711: US902-928: profile netvox/profile-us915 valid
netvox: r711: AU915-928: profile netvox/profile-au915 valid
netvox: r711: KR920-923: profile netvox/profile-kr920 valid
netvox: r711: IN865-867: profile netvox/profile-in865 valid
netvox: r711: CN470-510: profile netvox/profile-cn470 valid
netvox: r711a: valid
netvox: r711a: EU863-870: profile netvox/profile-eu868 valid
netvox: r711a: AS923: profile netvox/profile-as923 valid
netvox: r711a: US902-928: profile netvox/profile-us915 valid
netvox: r711a: AU915-928: profile netvox/profile-au915 valid
netvox: r711a: KR920-923: profile netvox/profile-kr920 valid
netvox: r711a: IN865-867: profile netvox/profile-in865 valid
netvox: r711a: CN470-510: profile netvox/profile-cn470 valid
netvox: r718a: valid
netvox: r718a: EU863-870: profile netvox/profile-eu868 valid
netvox: r718a: AS923: profile netvox/profile-as923 valid
netvox: r718a: US902-928: profile netvox/profile-us915 valid
netvox: r718a: AU915-928: profile netvox/profile-au915 valid
netvox: r718a: KR920-923: profile netvox/profile-kr920 valid
netvox: r718a: IN865-867: profile netvox/profile-in865 valid
netvox: r718a: CN470-510: profile netvox/profile-cn470 valid
netvox: r718ab: valid
netvox: r718ab: EU863-870: profile netvox/profile-eu868 valid
netvox: r718ab: AS923: profile netvox/profile-as923 valid
netvox: r718ab: US902-928: profile netvox/profile-us915 valid
netvox: r718ab: AU915-928: profile netvox/profile-au915 valid
netvox: r718ab: KR920-923: profile netvox/profile-kr920 valid
netvox: r718ab: IN865-867: profile netvox/profile-in865 valid
netvox: r718ab: CN470-510: profile netvox/profile-cn470 valid
netvox: r718ad: valid
netvox: r718ad: EU863-870: profile netvox/profile-eu868 valid
netvox: r718ad: AS923: profile netvox/profile-as923 valid
netvox: r718ad: US902-928: profile netvox/profile-us915 valid
netvox: r718ad: AU915-928: profile netvox/profile-au915 valid
netvox: r718ad: KR920-923: profile netvox/profile-kr920 valid
netvox: r718ad: IN865-867: profile netvox/profile-in865 valid
netvox: r718ad: CN470-510: profile netvox/profile-cn470 valid
netvox: r718b: valid
netvox: r718b: EU863-870: profile netvox/profile-eu868 valid
netvox: r718b: AS923: profile netvox/profile-as923 valid
netvox: r718b: US902-928: profile netvox/profile-us915 valid
netvox: r718b: AU915-928: profile netvox/profile-au915 valid
netvox: r718b: KR920-923: profile netvox/profile-kr920 valid
netvox: r718b: IN865-867: profile netvox/profile-in865 valid
netvox: r718b: CN470-510: profile netvox/profile-cn470 valid
netvox: r718b2: valid
netvox: r718b2: EU863-870: profile netvox/profile-eu868 valid
netvox: r718b2: AS923: profile netvox/profile-as923 valid
netvox: r718b2: US902-928: profile netvox/profile-us915 valid
netvox: r718b2: AU915-928: profile netvox/profile-au915 valid
netvox: r718b2: KR920-923: profile netvox/profile-kr920 valid
netvox: r718b2: IN865-867: profile netvox/profile-in865 valid
netvox: r718b2: CN470-510: profile netvox/profile-cn470 valid
netvox: r718ck: valid
netvox: r718ck: EU863-870: profile netvox/profile-eu868 valid
netvox: r718ck: AS923: profile netvox/profile-as923 valid
netvox: r718ck: US902-928: profile netvox/profile-us915 valid
netvox: r718ck: AU915-928: profile netvox/profile-au915 valid
netvox: r718ck: KR920-923: profile netvox/profile-kr920 valid
netvox: r718ck: IN865-867: profile netvox/profile-in865 valid
netvox: r718ck: CN470-510: profile netvox/profile-cn470 valid
netvox: r718ck2: valid
netvox: r718ck2: EU863-870: profile netvox/profile-eu868 valid
netvox: r718ck2: AS923: profile netvox/profile-as923 valid
netvox: r718ck2: US902-928: profile netvox/profile-us915 valid
netvox: r718ck2: AU915-928: profile netvox/profile-au915 valid
netvox: r718ck2: KR920-923: profile netvox/profile-kr920 valid
netvox: r718ck2: IN865-867: profile netvox/profile-in865 valid
netvox: r718ck2: CN470-510: profile netvox/profile-cn470 valid
netvox: r718ct: valid
netvox: r718ct: EU863-870: profile netvox/profile-eu868 valid
netvox: r718ct: AS923: profile netvox/profile-as923 valid
netvox: r718ct: US902-928: profile netvox/profile-us915 valid
netvox: r718ct: AU915-928: profile netvox/profile-au915 valid
netvox: r718ct: KR920-923: profile netvox/profile-kr920 valid
netvox: r718ct: IN865-867: profile netvox/profile-in865 valid
netvox: r718ct: CN470-510: profile netvox/profile-cn470 valid
netvox: r718ct2: valid
netvox: r718ct2: EU863-870: profile netvox/profile-eu868 valid
netvox: r718ct2: AS923: profile netvox/profile-as923 valid
netvox: r718ct2: US902-928: profile netvox/profile-us915 valid
netvox: r718ct2: AU915-928: profile netvox/profile-au915 valid
netvox: r718ct2: KR920-923: profile netvox/profile-kr920 valid
netvox: r718ct2: IN865-867: profile netvox/profile-in865 valid
netvox: r718ct2: CN470-510: profile netvox/profile-cn470 valid
netvox: r718e: valid
netvox: r718e: EU863-870: profile netvox/profile-eu868 valid
netvox: r718e: AS923: profile netvox/profile-as923 valid
netvox: r718e: US902-928: profile netvox/profile-us915 valid
netvox: r718e: AU915-928: profile netvox/profile-au915 valid
netvox: r718e: KR920-923: profile netvox/profile-kr920 valid
netvox: r718e: IN865-867: profile netvox/profile-in865 valid
netvox: r718e: CN470-510: profile netvox/profile-cn470 valid
netvox: r718f: valid
netvox: r718f: EU863-870: profile netvox/profile-eu868 valid
netvox: r718f: AS923: profile netvox/profile-as923 valid
netvox: r718f: US902-928: profile netvox/profile-us915 valid
netvox: r718f: AU915-928: profile netvox/profile-au915 valid
netvox: r718f: KR920-923: profile netvox/profile-kr920 valid
netvox: r718f: IN865-867: profile netvox/profile-in865 valid
netvox: r718f: CN470-510: profile netvox/profile-cn470 valid
netvox: r718g: valid
netvox: r718g: EU863-870: profile netvox/profile-eu868 valid
netvox: r718g: AS923: profile netvox/profile-as923 valid
netvox: r718g: US902-928: profile netvox/profile-us915 valid
netvox: r718g: AU915-928: profile netvox/profile-au915 valid
netvox: r718g: KR920-923: profile netvox/profile-kr920 valid
netvox: r718g: IN865-867: profile netvox/profile-in865 valid
netvox: r718g: CN470-510: profile netvox/profile-cn470 valid
netvox: r718h: valid
netvox: r718h: EU863-870: profile netvox/profile-eu868 valid
netvox: r718h: AS923: profile netvox/profile-as923 valid
netvox: r718h: US902-928: profile netvox/profile-us915 valid
netvox: r718h: AU915-928: profile netvox/profile-au915 valid
netvox: r718h: KR920-923: profile netvox/profile-kr920 valid
netvox: r718h: IN865-867: profile netvox/profile-in865 valid
netvox: r718h: CN470-510: profile netvox/profile-cn470 valid
netvox: r718h2: valid
netvox: r718h2: EU863-870: profile netvox/profile-eu868 valid
netvox: r718h2: AS923: profile netvox/profile-as923 valid
netvox: r718h2: US902-928: profile netvox/profile-us915 valid
netvox: r718h2: AU915-928: profile netvox/profile-au915 valid
netvox: r718h2: KR920-923: profile netvox/profile-kr920 valid
netvox: r718h2: IN865-867: profile netvox/profile-in865 valid
netvox: r718h2: CN470-510: profile netvox/profile-cn470 valid
netvox: r718ka: valid
netvox: r718ka: EU863-870: profile netvox/profile-eu868 valid
netvox: r718ka: AS923: profile netvox/profile-as923 valid
netvox: r718ka: US902-928: profile netvox/profile-us915 valid
netvox: r718ka: AU915-928: profile netvox/profile-au915 valid
netvox: r718ka: KR920-923: profile netvox/profile-kr920 valid
netvox: r718ka: IN865-867: profile netvox/profile-in865 valid
netvox: r718ka: CN470-510: profile netvox/profile-cn470 valid
netvox: r718n1: valid
netvox: r718n1: EU863-870: profile netvox/profile-eu868 valid
netvox: r718n1: AS923: profile netvox/profile-as923 valid
netvox: r718n1: US902-928: profile netvox/profile-us915 valid
netvox: r718n1: AU915-928: profile netvox/profile-au915 valid
netvox: r718n1: KR920-923: profile netvox/profile-kr920 valid
netvox: r718n1: IN865-867: profile netvox/profile-in865 valid
netvox: r718n1: CN470-510: profile netvox/profile-cn470 valid
netvox: r718n3: valid
netvox: r718n3: EU863-870: profile netvox/profile-eu868 valid
netvox: r718n3: AS923: profile netvox/profile-as923 valid
netvox: r718n3: US902-928: profile netvox/profile-us915 valid
netvox: r718n3: AU915-928: profile netvox/profile-au915 valid
netvox: r718n3: KR920-923: profile netvox/profile-kr920 valid
netvox: r718n3: IN865-867: profile netvox/profile-in865 valid
netvox: r718n3: CN470-510: profile netvox/profile-cn470 valid
netvox: r718t: valid
netvox: r718t: EU863-870: profile netvox/profile-eu868 valid
netvox: r718t: AS923: profile netvox/profile-as923 valid
netvox: r718t: US902-928: profile netvox/profile-us915 valid
netvox: r718t: AU915-928: profile netvox/profile-au915 valid
netvox: r718t: KR920-923: profile netvox/profile-kr920 valid
netvox: r718t: IN865-867: profile netvox/profile-in865 valid
netvox: r718t: CN470-510: profile netvox/profile-cn470 valid
netvox: r720a: valid
netvox: r720a: EU863-870: profile netvox/profile-eu868 valid
netvox: r720a: AS923: profile netvox/profile-as923 valid
netvox: r720a: US902-928: profile netvox/profile-us915 valid
netvox: r720a: AU915-928: profile netvox/profile-au915 valid
netvox: r720a: KR920-923: profile netvox/profile-kr920 valid
netvox: r720a: IN865-867: profile netvox/profile-in865 valid
netvox: r720a: CN470-510: profile netvox/profile-cn470 valid
netvox: r720f: valid
netvox: r720f: EU863-870: profile netvox/profile-eu868 valid
netvox: r720f: AS923: profile netvox/profile-as923 valid
netvox: r720f: US902-928: profile netvox/profile-us915 valid
netvox: r720f: AU915-928: profile netvox/profile-au915 valid
netvox: r720f: KR920-923: profile netvox/profile-kr920 valid
netvox: r720f: IN865-867: profile netvox/profile-in865 valid
netvox: r720f: CN470-510: profile netvox/profile-cn470 valid
netvox: r72615: valid
netvox: r72615: EU863-870: profile netvox/profile-eu868 valid
netvox: r72615: AS923: profile netvox/profile-as923 valid
netvox: r72615: US902-928: profile netvox/profile-us915 valid
netvox: r72615: AU915-928: profile netvox/profile-au915 valid
netvox: r72615: KR920-923: profile netvox/profile-kr920 valid
netvox: r72615: IN865-867: profile netvox/profile-in865 valid
netvox: r72615: CN470-510: profile netvox/profile-cn470 valid
netvox: r72615a: valid
netvox: r72615a: EU863-870: profile netvox/profile-eu868 valid
netvox: r72615a: AS923: profile netvox/profile-as923 valid
netvox: r72615a: US902-928: profile netvox/profile-us915 valid
netvox: r72615a: AU915-928: profile netvox/profile-au915 valid
netvox: r72615a: KR920-923: profile netvox/profile-kr920 valid
netvox: r72615a: IN865-867: profile netvox/profile-in865 valid
netvox: r72615a: CN470-510: profile netvox/profile-cn470 valid
netvox: r72616: valid
netvox: r72616: EU863-870: profile netvox/profile-eu868 valid
netvox: r72616: AS923: profile netvox/profile-as923 valid
netvox: r72616: US902-928: profile netvox/profile-us915 valid
netvox: r72616: AU915-928: profile netvox/profile-au915 valid
netvox: r72616: KR920-923: profile netvox/profile-kr920 valid
netvox: r72616: IN865-867: profile netvox/profile-in865 valid
netvox: r72616: CN470-510: profile netvox/profile-cn470 valid
netvox: r72616a: valid
netvox: r72616a: EU863-870: profile netvox/profile-eu868 valid
netvox: r72616a: AS923: profile netvox/profile-as923 valid
netvox: r72616a: US902-928: profile netvox/profile-us915 valid
netvox: r72616a: AU915-928: profile netvox/profile-au915 valid
netvox: r72616a: KR920-923: profile netvox/profile-kr920 valid
netvox: r72616a: IN865-867: profile netvox/profile-in865 valid
netvox: r72616a: CN470-510: profile netvox/profile-cn470 valid
netvox: r72716: valid
netvox: r72716: EU863-870: profile netvox/profile-eu868 valid
netvox: r72716: AS923: profile netvox/profile-as923 valid
netvox: r72716: US902-928: profile netvox/profile-us915 valid
netvox: r72716: AU915-928: profile netvox/profile-au915 valid
netvox: r72716: KR920-923: profile netvox/profile-kr920 valid
netvox: r72716: IN865-867: profile netvox/profile-in865 valid
netvox: r72716: CN470-510: profile netvox/profile-cn470 valid
netvox: r809a: valid
netvox: r809a: EU863-870: profile netvox/profile-eu868 valid
netvox: r809a: AS923: profile netvox/profile-as923 valid
netvox: r809a: US902-928: profile netvox/profile-us915 valid
netvox: r809a: AU915-928: profile netvox/profile-au915 valid
netvox: r809a: KR920-923: profile netvox/profile-kr920 valid
netvox: r809a: IN865-867: profile netvox/profile-in865 valid
netvox: r809a: CN470-510: profile netvox/profile-cn470 valid
netvox: r816b: valid
netvox: r816b: EU863-870: profile netvox/profile-eu868 valid
netvox: r816b: AS923: profile netvox/profile-as923 valid
netvox: r816b: US902-928: profile netvox/profile-us915 valid
netvox: r816b: AU915-928: profile netvox/profile-au915 valid
netvox: r816b: KR920-923: profile netvox/profile-kr920 valid
netvox: r816b: IN865-867: profile netvox/profile-in865 valid
netvox: r816b: CN470-510: profile netvox/profile-cn470 valid
netvox: ra0715: valid
netvox: ra0715: EU863-870: profile netvox/profile-eu868 valid
netvox: ra0715: AS923: profile netvox/profile-as923 valid
netvox: ra0715: US902-928: profile netvox/profile-us915 valid
netvox: ra0715: AU915-928: profile netvox/profile-au915 valid
netvox: ra0715: KR920-923: profile netvox/profile-kr920 valid
netvox: ra0715: IN865-867: profile netvox/profile-in865 valid
netvox: ra0715: CN470-510: profile netvox/profile-cn470 valid
netvox: ra0715y: valid
netvox: ra0715y: EU863-870: profile netvox/profile-eu868 valid
netvox: ra0715y: AS923: profile netvox/profile-as923 valid
netvox: ra0715y: US902-928: profile netvox/profile-us915 valid
netvox: ra0715y: AU915-928: profile netvox/profile-au915 valid
netvox: ra0715y: KR920-923: profile netvox/profile-kr920 valid
netvox: ra0715y: IN865-867: profile netvox/profile-in865 valid
netvox: ra0715y: CN470-510: profile netvox/profile-cn470 valid
netvox: ra0716: valid
netvox: ra0716: EU863-870: profile netvox/profile-eu868 valid
netvox: ra0716: AS923: p
If this is the complete output, it seems like the first attempt on validating the codec or the image dimensions fail. That might be because the main validation utility isn't able to execute those utilities.
I'm assuming that make deps
succeeds without errors?
Can you try running:
$ ./bin/runscript -codec-path "vendor/example/windsensor.js" -routine decodeUplink -input '{"fPort":1,"bytes":[0,1]}'
That should output:
{"data":{"direction":"N","speed":1}}
Hi Johan,
yes, the make deps succeeds without any error.
The commands does exact the output you are expecting.
Since the issue occurs when doing a fresh git clone without any change, I would assume something is wrong with some vendor data.
I have removed netvox from the directory - then the make validate runs though.
My suspect is the netvox/r720a.
Unfortunately, even if I could fix the issue, I cannot push it to the repository.
Best Regards Olaf.
From: Johan Stokking @.> Sent: Tuesday, March 29, 2022 16:01 To: TheThingsNetwork/lorawan-devices @.> Cc: Olaf Holthausen @.>; Mention @.> Subject: Re: [TheThingsNetwork/lorawan-devices] Validate on fresh cloned repository fails (Issue #397)
If this is the complete output, it seems like the first attempt on validating the codec or the image dimensions fail. That might be because the main validation utility isn't able to execute those utilities.
I'm assuming that make deps succeeds without errors?
Can you try running:
$ ./bin/runscript -codec-path "vendor/example/windsensor.js" -routine decodeUplink -input '{"fPort":1,"bytes":[0,1]}'
That should output:
{"data":{"direction":"N","speed":1}}
— Reply to this email directly, view it on GitHubhttps://github.com/TheThingsNetwork/lorawan-devices/issues/397#issuecomment-1081910333, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AO6JU665NXLAEYOTYM6BL4DVCMELHANCNFSM5RN46SSQ. You are receiving this because you were mentioned.Message ID: @.***>
Hmm, I can't reproduce. I don't see anything weird in that Netvox payload codec either.
Try for example:
$ ./bin/runscript -codec-path "vendor/netvox/payload/r711_r718a_r718ab_r720a.js" -routine decodeUplink -input '{"fPort":7,"bytes":[130,110,3,132,7,8,1,0,50,0,50]}'
Unfortunately, even if I could fix the issue, I cannot push it to the repository.
You could clone the repository and file a pull request with a fix, if you would have any.
@Jaime-Trinidad can you reproduce?
Does the
make validate
on a fresh git clone work on your PC?
Von: Johan Stokking @.> Gesendet: Dienstag, 29. März 2022 16:42 An: TheThingsNetwork/lorawan-devices @.> Cc: Olaf Holthausen @.>; Mention @.> Betreff: Re: [TheThingsNetwork/lorawan-devices] Validate on fresh cloned repository fails (Issue #397)
Hmm, I can't reproduce. I don't see anything weird in that Netvox payload codec either.
Try for example:
$ ./bin/runscript -codec-path "vendor/netvox/payload/r711_r718a_r718ab_r720a.js" -routine decodeUplink -input '{"fPort":7,"bytes":[130,110,3,132,7,8,1,0,50,0,50]}'
Unfortunately, even if I could fix the issue, I cannot push it to the repository.
You could clone the repository and file a pull request with a fix, if you would have any.
@Jaime-Trinidadhttps://github.com/Jaime-Trinidad can you reproduce?
— Reply to this email directly, view it on GitHubhttps://github.com/TheThingsNetwork/lorawan-devices/issues/397#issuecomment-1081958492, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AO6JU676OCUP727K7BM25FDVCMJDFANCNFSM5RN46SSQ. You are receiving this because you were mentioned.Message ID: @.**@.>>
Does the make validate on a fresh git clone work on your PC?
Yes. Also continuous integration here on GitHub makes sure that we cannot even merge something that breaks. Using the very same simple steps: https://github.com/TheThingsNetwork/lorawan-devices/blob/master/.github/workflows/validate.yml
For certainty I tried again with the same Go version (1.18) and Node (16.14.2), but successful. Only difference is that I'm on an Arm based Mac and not Intel. But that shouldn't matter; GitHub Actions run on Intel.
Hello Olaf,
I can reproduced it neither, can you run Johan answer to see if it run? If it sends you error can you send it please I continue searching.
Thanks
El mar, 29 de mar. de 2022 15:45, Olaf Holthausen @.***> escribió:
Does the
make validate
on a fresh git clone work on your PC?
Von: Johan Stokking @.> Gesendet: Dienstag, 29. März 2022 16:42 An: TheThingsNetwork/lorawan-devices @.> Cc: Olaf Holthausen @.>; Mention @.> Betreff: Re: [TheThingsNetwork/lorawan-devices] Validate on fresh cloned repository fails (Issue #397)
Hmm, I can't reproduce. I don't see anything weird in that Netvox payload codec either.
Try for example:
$ ./bin/runscript -codec-path "vendor/netvox/payload/r711_r718a_r718ab_r720a.js" -routine decodeUplink -input '{"fPort":7,"bytes":[130,110,3,132,7,8,1,0,50,0,50]}'
Unfortunately, even if I could fix the issue, I cannot push it to the repository.
You could clone the repository and file a pull request with a fix, if you would have any.
@Jaime-Trinidadhttps://github.com/Jaime-Trinidad can you reproduce?
— Reply to this email directly, view it on GitHub< https://github.com/TheThingsNetwork/lorawan-devices/issues/397#issuecomment-1081958492>, or unsubscribe< https://github.com/notifications/unsubscribe-auth/AO6JU676OCUP727K7BM25FDVCMJDFANCNFSM5RN46SSQ>.
You are receiving this because you were mentioned.Message ID: @.**@.>>
— Reply to this email directly, view it on GitHub https://github.com/TheThingsNetwork/lorawan-devices/issues/397#issuecomment-1081962230, or unsubscribe https://github.com/notifications/unsubscribe-auth/ATRJPGFAYJR5C2VNTTWNHNLVCMJPZANCNFSM5RN46SSQ . You are receiving this because you were mentioned.Message ID: @.***>
This is interesting: Here is my command sequence to reproduce the issue:
git clone https://github.com/TheThingsNetwork/lorawan-devices.git
cd lorawan-devices
make deps
make validate
---> Exception somewhere in the nevox folder
Additional Findings:
The r720wb device is the last of the netvox list
If I remove the entire netvox folder, make validate works as it should.
From: Johan Stokking @.> Sent: Tuesday, March 29, 2022 16:50 To: TheThingsNetwork/lorawan-devices @.> Cc: Olaf Holthausen @.>; Mention @.> Subject: Re: [TheThingsNetwork/lorawan-devices] Validate on fresh cloned repository fails (Issue #397)
Does the make validate on a fresh git clone work on your PC?
Yes. Also continuous integration here on GitHub makes sure that we cannot even merge something that breaks. Using the very same simple steps: https://github.com/TheThingsNetwork/lorawan-devices/blob/master/.github/workflows/validate.yml
For certainty I tried again with the same Go version (1.18) and Node (16.14.2), but successful. Only difference is that I'm on an Arm based Mac and not Intel. But that shouldn't matter.
— Reply to this email directly, view it on GitHubhttps://github.com/TheThingsNetwork/lorawan-devices/issues/397#issuecomment-1081968677, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AO6JU64H7NYT4JZVMOGW2WTVCMKEVANCNFSM5RN46SSQ. You are receiving this because you were mentioned.Message ID: @.***>
The command
./bin/runscript -codec-path "vendor/netvox/payload/r711_r718a_r718ab_r720a.js" -routine decodeUplink -input '{"fPort":7,"bytes":[130,110,3,132,7,8,1,0,50,0,50]}'
worked well.
From: Jaime Trinidad @.> Sent: Tuesday, March 29, 2022 17:02 To: TheThingsNetwork/lorawan-devices @.> Cc: Olaf Holthausen @.>; Mention @.> Subject: Re: [TheThingsNetwork/lorawan-devices] Validate on fresh cloned repository fails (Issue #397)
Hello Olaf,
I can reproduced it neither, can you run Johan answer to see if it run? If it sends you error can you send it please I continue searching.
Thanks
El mar, 29 de mar. de 2022 15:45, Olaf Holthausen @.***> escribió:
Does the
make validate
on a fresh git clone work on your PC?
Von: Johan Stokking @.> Gesendet: Dienstag, 29. März 2022 16:42 An: TheThingsNetwork/lorawan-devices @.> Cc: Olaf Holthausen @.>; Mention @.> Betreff: Re: [TheThingsNetwork/lorawan-devices] Validate on fresh cloned repository fails (Issue #397)
Hmm, I can't reproduce. I don't see anything weird in that Netvox payload codec either.
Try for example:
$ ./bin/runscript -codec-path "vendor/netvox/payload/r711_r718a_r718ab_r720a.js" -routine decodeUplink -input '{"fPort":7,"bytes":[130,110,3,132,7,8,1,0,50,0,50]}'
Unfortunately, even if I could fix the issue, I cannot push it to the repository.
You could clone the repository and file a pull request with a fix, if you would have any.
@Jaime-Trinidadhttps://github.com/Jaime-Trinidad can you reproduce?
— Reply to this email directly, view it on GitHub< https://github.com/TheThingsNetwork/lorawan-devices/issues/397#issuecomment-1081958492>, or unsubscribe< https://github.com/notifications/unsubscribe-auth/AO6JU676OCUP727K7BM25FDVCMJDFANCNFSM5RN46SSQ>.
You are receiving this because you were mentioned.Message ID: @.**@.>>
— Reply to this email directly, view it on GitHub https://github.com/TheThingsNetwork/lorawan-devices/issues/397#issuecomment-1081962230, or unsubscribe https://github.com/notifications/unsubscribe-auth/ATRJPGFAYJR5C2VNTTWNHNLVCMJPZANCNFSM5RN46SSQ . You are receiving this because you were mentioned.Message ID: @.***>
— Reply to this email directly, view it on GitHubhttps://github.com/TheThingsNetwork/lorawan-devices/issues/397#issuecomment-1081983503, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AO6JU65VYNYS2AKYRUNAQELVCMLPPANCNFSM5RN46SSQ. You are receiving this because you were mentioned.Message ID: @.***>
@oholthau the error that validation throws is in Netvox photos? in this case ... netvox/photos/r720.jpg
@johanstokking I run make validate
on my Mac (macOS Monterey, M1) instead of Ubuntu and I got:
Error: spawn /bin/sh EAGAIN
at Process.ChildProcess._handle.onexit (node:internal/child_process:283:19)
at onErrorNT (node:internal/child_process:476:16)
at processTicksAndRejections (node:internal/process/task_queues:83:21) {
errno: -35,
code: 'EAGAIN',
syscall: 'spawn /bin/sh',
path: '/bin/sh',
spawnargs: [ '-c', 'bin/validate-image ./vendor/netvox/photos/r718qa.jpg' ],
cmd: 'bin/validate-image ./vendor/netvox/photos/r718qa.jpg'
I run(all netvox images):
$ ./bin/validate-image "vendor/netvox/photos/r718qa.jpg
without any error message, Netvox is the carpet that cause this error
Hmm I'm also on Monterey, M1 Pro, and still can't reproduce.
What Go version are you using? I'm using 1.18
. Check with go version
.
What could happen here is that all these validations are being run in parallel, and your machine just goes out of memory.
Here's a patch; can you test this?
diff --git a/bin/validate.js b/bin/validate.js
index e9c7bdad5..d7d43c3d5 100644
--- a/bin/validate.js
+++ b/bin/validate.js
@@ -51,25 +51,21 @@ function requireFile(path) {
});
}
-function requireDimensions(path) {
- return requireFile(path).then(
- () =>
- new Promise((resolve, reject) => {
- sizeOf(path, (err, dimensions) => {
- if (err) {
- reject(new Error(`load image ${path}: ${err}`));
- } else if (dimensions.width > 2000 || dimensions.height > 2000) {
- reject(
- new Error(
- `image ${path} too large: maximum is 2000x2000 but loaded ${dimensions.width}x${dimensions.height}`
- )
- );
- } else {
- resolve();
- }
- });
- })
- );
+async function requireDimensions(path) {
+ await requireFile(path);
+ return await new Promise((resolve, reject) => {
+ sizeOf(path, (err, dimensions) => {
+ if (err) {
+ reject(new Error(`load image ${path}: ${err}`));
+ } else if (dimensions.width > 2000 || dimensions.height > 2000) {
+ reject(
+ new Error(`image ${path} too large: maximum is 2000x2000 but loaded ${dimensions.width}x${dimensions.height}`)
+ );
+ } else {
+ resolve();
+ }
+ });
+ });
}
function validatePayloadCodecs(vendorId, payloadEncoding) {
@@ -199,7 +195,7 @@ vendors.vendors.forEach((v) => {
const codecs = {};
- vendor.endDevices.forEach((d) => {
+ vendor.endDevices.forEach(async (d) => {
const key = `${v.id}: ${d}`;
const endDevice = yaml.load(fs.readFileSync(`${folder}/${d}.yaml`));
@@ -227,7 +223,7 @@ vendors.vendors.forEach((v) => {
});
}
- Object.keys(version.profiles).forEach((region) => {
+ Object.keys(version.profiles).forEach(async (region) => {
const regionProfile = version.profiles[region];
const key = `${v.id}: ${d}: ${region}`;
const vendorID = regionProfile.vendorID ?? v.id;
@@ -259,7 +255,7 @@ vendors.vendors.forEach((v) => {
process.exit(1);
}
codecs[regionProfile.codec] = true;
- validatePayloadCodecs(folder, codec)
+ await validatePayloadCodecs(folder, codec)
.then(() => console.log(`${key}: payload codec ${regionProfile.codec} valid`))
.catch((err) => {
console.error(`${key}: payload codec ${regionProfile.codec} invalid`);
@@ -271,39 +267,39 @@ vendors.vendors.forEach((v) => {
});
if (endDevice.photos) {
- validateImageExtension(`${folder}/${endDevice.photos.main}`)
+ await validateImageExtension(`${folder}/${endDevice.photos.main}`)
.then(() => console.log(`${key}: ${endDevice.photos.main} image has correct extension`))
.catch((err) => {
console.error(err);
process.exit(1);
});
- requireImageDecode(`${folder}/${endDevice.photos.main}`)
+ await requireImageDecode(`${folder}/${endDevice.photos.main}`)
.then(() => console.log(`${key}: ${endDevice.photos.main} is valid`))
.catch((err) => {
console.error(err);
process.exit(1);
});
- requireDimensions(`${folder}/${endDevice.photos.main}`)
+ await requireDimensions(`${folder}/${endDevice.photos.main}`)
.then(() => console.log(`${key}: ${endDevice.photos.main} has the right dimensions`))
.catch((err) => {
console.error(`${key}: ${err}`);
process.exit(1);
});
if (endDevice.photos.other) {
- endDevice.photos.other.forEach((p) => {
- validateImageExtension(`${folder}/${p}`)
+ endDevice.photos.other.forEach(async (p) => {
+ await validateImageExtension(`${folder}/${p}`)
.then(() => console.log(`${key}: ${p} image has correct extension`))
.catch((err) => {
console.error(err);
process.exit(1);
});
- requireImageDecode(`${folder}/${p}`)
+ await requireImageDecode(`${folder}/${p}`)
.then(() => console.log(`${key}: ${p} is valid`))
.catch((err) => {
console.error(err);
process.exit(1);
});
- requireDimensions(`${folder}/${p}`)
+ await requireDimensions(`${folder}/${p}`)
.then(() => console.log(`${key}: ${p} has the right dimensions`))
.catch((err) => {
console.error(`${key}: ${err}`);
This has been resolved; the above patched fixed the issue and this has been committed to master
.
Hi Jaime,
I did not check for the root cause with the netvox issue, I just moved the whole folder away to run the verification (and moved back for commit/push).
[image002]https://www.plenom.com/?utm_source=email-signature&utm_medium=emailMit freundlichen Grüßen Best regards, Dr. Olaf Holthausen Lead Software Architect Plenom A/S
T: +45 7877 2465 | M: +49 162 7844015 | Email: @.**@.> | Web: www.plenom.comhttp://www.plenom.com/ @.***
Von: Jaime Trinidad @.> Gesendet: Montag, 4. April 2022 10:49 An: TheThingsNetwork/lorawan-devices @.> Cc: Olaf Holthausen @.>; Mention @.> Betreff: Re: [TheThingsNetwork/lorawan-devices] Validate on fresh cloned repository fails (Issue #397)
@oholthauhttps://github.com/oholthau the error that validation throws is in Netvox photos? in this case ... netvox/photos/r720.jpg
— Reply to this email directly, view it on GitHubhttps://github.com/TheThingsNetwork/lorawan-devices/issues/397#issuecomment-1087284395, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AO6JU64QWFF7MK4R23TAY3LVDKUGBANCNFSM5RN46SSQ. You are receiving this because you were mentioned.Message ID: @.**@.>>
Summary
Steps to reproduce: git clone https://github.com/TheThingsNetwork/lorawan-devices.git make deps make validate
...
What do you see now?
netvox: r718wb: AU915-928: profile netvox/profile-au915 valid netvox: r718wb: KR920-923: profile netvox/profile-kr920 valid netvox: r718wb: IN865-867: profile netvox/profile-in865 valid netvox: r718wb: CN470-510: profile netvox/profile-cn470 valid node:events:504 throw er; // Unhandled 'error' event ^
Error: read ENOTCONN at tryReadStart (node:net:592:20) at Socket._read (node:net:603:5) at Socket.Readable.read (node:internal/streams/readable:487:10) at Socket.read (node:net:644:39) at new Socket (node:net:401:12) at Object.Socket (node:net:284:41) at createSocket (node:internal/child_process:328:14) at ChildProcess.spawn (node:internal/child_process:445:23) at spawn (node:child_process:700:9) at Object.execFile (node:child_process:327:17) Emitted 'error' event on Socket instance at: at emitErrorNT (node:internal/streams/destroy:157:8) at emitErrorCloseNT (node:internal/streams/destroy:122:3) at processTicksAndRejections (node:internal/process/task_queues:83:21) { errno: -57, code: 'ENOTCONN', syscall: 'read' } make: *** [validate] Error 1 ...
What do you want to see instead?
No error.....
...
How do you propose to implement this?
...
Can you do this yourself and submit a Pull Request?
...