[{"element_type":"text","content":"\n  \n  \n  \n        \u003cp\u003eWanting to investigate a slightly Heath-Robinson idea to improve my CNC work setup process, I grabbed a digital dial guage (0-25.4mm) for probing things... The device had a cable option which I initially skipped, but the connector was a pain and rather than destroy my device to solder in a socket \u003ca href=\"https://vi.aliexpress.com/item/33041985440.html\"\u003eI bought the cable (for £1.99+tax)\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eIt's supposedly 1.37volt logic, but the cable converts to RS232, and they included a USB-RS232 adapter. The device and cable came with 2x 8cm Compact-Discs (CDs) for software drivers and official software. I do actually still have a DVD/CD combo drive in one laptop, but forget about that. The instructions showed it in Chinese and windows only, and I plan to use a Raspberry Pi, so I went straight to an LLM to make a prototype web-serial demo.\u003c/p\u003e\n      \n\n\n","metadata":{}},{"element_type":"user_image","content":"https://cdn-learn.adafruit.com/user_assets/assets/000/001/812/original/dial-gauge.png?1747596663","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n  \n  \n  \n        \u003cp\u003eClaude started the project, then I moved to claude-code in the hope claude would read the serial output too, but I/it got distracted with it nearly working for ages. In the end claude-code took it down an alley of insanity, and I switched to vscode in Agent mode to start afresh at the same time. VsCode sorted it right out first time. Then a quick correction for the initial boot messages received, and finally glam it up a bit along with adding scaling to the dial. Of course to use it with the Pi it would need converting to python/node, so I did that and tested via WSL.\u003c/p\u003e\n\u003cp style=\"text-align: left;\"\u003eSource Code / Readme etc:\u0026nbsp;\u003c/p\u003e\n\u003cp style=\"text-align: left;\"\u003e\u003ca href=\"https://github.com/tyeth/digital-dial-gauge-web-serial\"\u003ehttps://github.com/tyeth/digital-dial-gauge-web-serial\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eInteractive Webpage:\u003c/p\u003e\n\u003ch2 style=\"text-align: center;\"\u003e\u003cstrong\u003e\u003ca href=\"https://tyeth.github.io/digital-dial-gauge-web-serial/\"\u003ehttps://tyeth.github.io/digital-dial-gauge-web-serial/\u003c/a\u003e\u003c/strong\u003e\u003c/h2\u003e\n\u003cp\u003e\u0026nbsp;\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eLive embedded iframe/oEmbed version:\u003c/strong\u003e\u003c/p\u003e\n      \n\n\n\n\n\n\n\n","metadata":{}},{"element_type":"embed","content":"https://tyeth.github.io/digital-dial-gauge-web-serial/"},{"element_type":"text","content":"\n  \n        \u003cp\u003e\u0026nbsp;\u003c/p\u003e\n\u003cp\u003eSo that's one less hurdle to getting my ultimate CNC setup going, along with some future shenanigans...\u003c/p\u003e\n\u003cp\u003e\u0026nbsp;\u003c/p\u003e\n\u003cp\u003eKeywords for future search ninjas:\u003c/p\u003e\n\u003cp\u003eDial guage, guage, gauge, dial gauge, digital dial guage, digital dial gauge. Read gauge over serial at 9600\u003c/p\u003e\n      \n","metadata":{}},{"element_type":"text","content":"\n  \n  \n  \n  \n  \n        \u003cp\u003eReadme from Project:\u003c/p\u003e\n\u003ch1 class=\"heading-element\"\u003eDigital Dial Gauge Serial Logger\u003c/h1\u003e\n\u003cp\u003e\u003ca id=\"user-content-digital-dial-gauge-serial-logger\" class=\"anchor\" href=\"https://github.com/tyeth/digital-dial-gauge-web-serial/blob/main/README.md?type=markdown#digital-dial-gauge-serial-logger\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eThis project provides scripts for reading and parsing digital dial gauge data from a serial port, in both Python and Node.js. It is useful for logging, automation, and integration with other tools.\u003c/p\u003e\n\u003cp\u003eThere is also a web-serial version (no installation - only a Chrome based browser needed):\u003c/p\u003e\n\u003ch3 class=\"heading-element\"\u003e\u003ca href=\"https://tyeth.github.io/digital-dial-gauge-web-serial/\"\u003ehttps://tyeth.github.io/digital-dial-gauge-web-serial/\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003e\u003ca id=\"user-content-httpstyethgithubiodigital-dial-gauge-web-serial\" class=\"anchor\" href=\"https://github.com/tyeth/digital-dial-gauge-web-serial/blob/main/README.md?type=markdown#httpstyethgithubiodigital-dial-gauge-web-serial\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2 class=\"heading-element\"\u003eFeatures\u003c/h2\u003e\n\u003cp\u003e\u003ca id=\"user-content-features\" class=\"anchor\" href=\"https://github.com/tyeth/digital-dial-gauge-web-serial/blob/main/README.md?type=markdown#features\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eReads data from a digital dial gauge via serial port\u003c/li\u003e\n\u003cli\u003eParses and logs values in millimeters\u003c/li\u003e\n\u003cli\u003eSupports reading a single value, multiple values, or continuous logging\u003c/li\u003e\n\u003cli\u003eTimeout option to avoid waiting forever\u003c/li\u003e\n\u003cli\u003eUsable as a CLI tool or as an importable module (Python and Node.js)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 class=\"heading-element\"\u003ePython Usage\u003c/h2\u003e\n\u003cp\u003e\u003ca id=\"user-content-python-usage\" class=\"anchor\" href=\"https://github.com/tyeth/digital-dial-gauge-web-serial/blob/main/README.md?type=markdown#python-usage\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch3 class=\"heading-element\"\u003eAs a CLI tool\u003c/h3\u003e\n\u003cp\u003e\u003ca id=\"user-content-as-a-cli-tool\" class=\"anchor\" href=\"https://github.com/tyeth/digital-dial-gauge-web-serial/blob/main/README.md?type=markdown#as-a-cli-tool\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003epython3 serial-gauge-log.py /dev/ttyUSB0 --count 5 --timeout 3\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ccode\u003e--count N\u003c/code\u003e: Number of values to read before exiting (0 = infinite)\u003c/li\u003e\n\u003cli\u003e\n\u003ccode\u003e--timeout SECONDS\u003c/code\u003e: Timeout in seconds (0 = no timeout)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eExample output:\u003c/strong\u003e\u003c/p\u003e\n\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e[RESULT] [(12.345, '12.345'), (12.346, '12.346'), ...]\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 class=\"heading-element\"\u003eAs a module\u003c/h3\u003e\n\u003cp\u003e\u003ca id=\"user-content-as-a-module\" class=\"anchor\" href=\"https://github.com/tyeth/digital-dial-gauge-web-serial/blob/main/README.md?type=markdown#as-a-module\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eserial_gauge_log\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eget_gauge_values\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eget_gauge_values\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'/dev/ttyUSB0'\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ecount\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etimeout\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e)\n\u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e)\u003c/pre\u003e\n\u003chr\u003e\n\u003ch2 class=\"heading-element\"\u003eNode.js Usage\u003c/h2\u003e\n\u003cp\u003e\u003ca id=\"user-content-nodejs-usage\" class=\"anchor\" href=\"https://github.com/tyeth/digital-dial-gauge-web-serial/blob/main/README.md?type=markdown#nodejs-usage\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch3 class=\"heading-element\"\u003eAs a CLI tool\u003c/h3\u003e\n\u003cp\u003e\u003ca id=\"user-content-as-a-cli-tool-1\" class=\"anchor\" href=\"https://github.com/tyeth/digital-dial-gauge-web-serial/blob/main/README.md?type=markdown#as-a-cli-tool-1\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003enode serial-gauge-log.js /dev/ttyUSB0 --count 5 --timeout 3\u003c/pre\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003ccode\u003e--count N\u003c/code\u003e: Number of values to read before exiting (0 = infinite)\u003c/li\u003e\n\u003cli\u003e\n\u003ccode\u003e--timeout SECONDS\u003c/code\u003e: Timeout in seconds (0 = no timeout)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eExample output:\u003c/strong\u003e\u003c/p\u003e\n\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e[RESULT] [[12.345,\"12.345\"], [12.346,\"12.346\"], ...]\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 class=\"heading-element\"\u003eAs a module\u003c/h3\u003e\n\u003cp\u003e\u003ca id=\"user-content-as-a-module-1\" class=\"anchor\" href=\"https://github.com/tyeth/digital-dial-gauge-web-serial/blob/main/README.md?type=markdown#as-a-module-1\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cpre\u003e\u003cspan class=\"pl-k\"\u003econst\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e getGaugeValues \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erequire\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'./serial-gauge-log.js'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003egetGaugeValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eportPath\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e'/dev/ttyUSB0'\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ecount\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003etimeout\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003ethen\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n  \u003cspan class=\"pl-smi\"\u003econsole\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elog\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\n\u003chr\u003e\n\u003ch2 class=\"heading-element\"\u003eRequirements\u003c/h2\u003e\n\u003cp\u003e\u003ca id=\"user-content-requirements\" class=\"anchor\" href=\"https://github.com/tyeth/digital-dial-gauge-web-serial/blob/main/README.md?type=markdown#requirements\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePython 3 with\u003cspan\u003e\u0026nbsp;\u003c/span\u003e\u003ccode\u003epyserial\u003c/code\u003e\u003cspan\u003e\u0026nbsp;\u003c/span\u003e(\u003ccode\u003epip install pyserial\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eNode.js with\u003cspan\u003e\u0026nbsp;\u003c/span\u003e\u003ccode\u003eserialport\u003c/code\u003e\u003cspan\u003e\u0026nbsp;\u003c/span\u003e(\u003ccode\u003enpm install serialport\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 class=\"heading-element\"\u003eNotes\u003c/h2\u003e\n\u003cp\u003e\u003ca id=\"user-content-notes\" class=\"anchor\" href=\"https://github.com/tyeth/digital-dial-gauge-web-serial/blob/main/README.md?type=markdown#notes\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAdjust\u003cspan\u003e\u0026nbsp;\u003c/span\u003e\u003ccode\u003eEXPECTED_DIGIT_LENGTH\u003c/code\u003e\u003cspan\u003e\u0026nbsp;\u003c/span\u003ein the scripts if your gauge sends a different number of digits.\u003c/li\u003e\n\u003cli\u003eBoth scripts log raw and parsed data for debugging.\u003c/li\u003e\n\u003cli\u003eThe scripts are designed for easy extension and integration.\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 class=\"heading-element\"\u003eLicense\u003c/h2\u003e\n\u003cp\u003e\u003ca id=\"user-content-license\" class=\"anchor\" href=\"https://github.com/tyeth/digital-dial-gauge-web-serial/blob/main/README.md?type=markdown#license\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eMIT License\u003c/p\u003e\n      \n\n\n\n\n","metadata":{}},{"element_type":"alert","content":"\u003cp\u003eFuture me: found the official protocol potentially, with two way commands: \u003ca href=\"https://electronicindicator.dialindicator.com/technical-support/usb-and-rs232-communication-protocol\"\u003ehttps://electronicindicator.dialindicator.com/technical-support/usb-and-rs232-communication-protocol\u003c/a\u003e\u003c/p\u003e","metadata":{"class":"element row-fluid alert-element build-alert alert-primary","markdown":"Future me: found the official protocol potentially, with two way commands: [https://electronicindicator.dialindicator.com/technical-support/usb-and-rs232-communication-protocol](https://electronicindicator.dialindicator.com/technical-support/usb-and-rs232-communication-protocol)","alert_type":"primary"}}]