Implemented Aquacomputer Next Vision coolant temperature reading - #487

Open
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision
Open

Implemented Aquacomputer Next Vision coolant temperature reading#487
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision

Conversation

@420coupe

@420coupe420coupe commented Jun 8, 2025

Copy link
Copy Markdown

Implemented Aquacomputer Next Vision coolant temperature reading - I was able to decode some of the response using an old visioncli repo as the starting base. There is still a lot of other things that can be decoded from response but 100% certain the current one I'm decoding matches the displayed value for coolant temp on the VISION OLED screen.

Additionally added custom icons for water temp and aio pump, custom icons appear both in the top bar and menu/sub-menu items. Also at first there was no fan speed being displayed until i
sudo modprobe nct6775 and also added that command to /etc/modules-load.d/nct6775.conf so it loads on restart.

edited: added example of vitals with components below
image

@corecoding

Copy link
Copy Markdown
Owner

There are a lot of changes here, including removal of my donation link in the metadata.json. I think the biggest reason for the large diff is your IDE changed ' to ". Can you refactor this diff so it is easier to see the true changes?

@420coupe

Copy link
Copy Markdown
Author

@corecoding There we go, fixed difference in IDE prettier changes. Now you can see just the implementation of AC Next vision.

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from d57efa2 to e85577bCompareAugust 16, 2025 22:23
@420coupe

Copy link
Copy Markdown
Author

Ok fixed the whitespace fixes from IDE as well, hence the forced pushes above.

Now correctly displaying just the changes to implement acvision

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from c2c8e66 to 602d223CompareJune 23, 2026 04:37
@420coupe
420coupeforce-pushed the acvision branch 4 times, most recently from c2cbd75 to aa9d6e3CompareAugust 5, 2026 05:59
Read coolant temperature from an Aquacomputer Next Vision and give liquid
cooling its own sensor groups, so coolant and pump no longer borrow the
threshold colors of chip temperatures and case fans.
The Vision has no hwmon driver, so the reading comes from raw HID. It is a
composite device that also exposes keyboard and consumer control
interfaces, and only the vendor defined one reports telemetry, so match the
report descriptor usage page as well as the USB vendor and product id.
Reading either of the other interfaces blocks forever because they never
send a report. Telemetry arrives as a 64 byte report with id 0x01 holding
the coolant temperature at offset 0x37, big endian, in hundredths of a
degree.
Coolant runs far cooler than a CPU and a pump far faster than a case fan,
so sharing temperature-colors and fan-colors left their breakpoints
useless. Promote both to entries in sensorCatalog. The preference sidebar,
threshold color editors, changed:: signal wiring and dropdown menu groups
are all derived from that catalog, so each gains a page, a show-* toggle
and a *-colors key. The pump arrives on a fan input and is reassigned to
its own group by label, and fan inputs are now discovered when either group
is enabled.
colorsKeyForSensor() resolved format 'temp' to temperature-colors before
consulting the sensor's group, which made a per group scale impossible.
Check the group first and keep the format fallback so GPU temperatures
still share the temperature scale.
Coolant also gets its own unit. Threshold colors are matched against the
displayed value, so the unit and the breakpoints have to agree. The unit
key is resolved from the catalog, leaving every other temperature source on
the main unit.
Add an 'aggregate' catalog flag marking groups populated by hardware
monitor discovery, replacing the hardcoded group lists in the sensor query
dispatch and in the group average, minimum and maximum block.
sensorGroupFromType() only stripped '-group' and a trailing '#N', so a
suffixed type resolved to itself and missed its catalog entry. Fall back to
the leading segment.
Panel icon margins are declared per sensor type and also zero the padding,
so the new icons inherited the shell's system-status-icon padding and sat
wider apart than the rest. Add matching rules.
Ship water droplet and pump icons in both icon styles, and label several
nct6799 inputs for this board, including the fan7 input the pump reports
through.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@420coupe@corecoding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Implemented Aquacomputer Next Vision coolant temperature reading - #487

Open
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision
Open

Implemented Aquacomputer Next Vision coolant temperature reading#487
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision

Conversation

@420coupe

@420coupe420coupe commented Jun 8, 2025

Copy link
Copy Markdown

Implemented Aquacomputer Next Vision coolant temperature reading - I was able to decode some of the response using an old visioncli repo as the starting base. There is still a lot of other things that can be decoded from response but 100% certain the current one I'm decoding matches the displayed value for coolant temp on the VISION OLED screen.

Additionally added custom icons for water temp and aio pump, custom icons appear both in the top bar and menu/sub-menu items. Also at first there was no fan speed being displayed until i
sudo modprobe nct6775 and also added that command to /etc/modules-load.d/nct6775.conf so it loads on restart.

edited: added example of vitals with components below
image

@corecoding

Copy link
Copy Markdown
Owner

There are a lot of changes here, including removal of my donation link in the metadata.json. I think the biggest reason for the large diff is your IDE changed ' to ". Can you refactor this diff so it is easier to see the true changes?

@420coupe

Copy link
Copy Markdown
Author

@corecoding There we go, fixed difference in IDE prettier changes. Now you can see just the implementation of AC Next vision.

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from d57efa2 to e85577bCompareAugust 16, 2025 22:23
@420coupe

Copy link
Copy Markdown
Author

Ok fixed the whitespace fixes from IDE as well, hence the forced pushes above.

Now correctly displaying just the changes to implement acvision

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from c2c8e66 to 602d223CompareJune 23, 2026 04:37
@420coupe
420coupeforce-pushed the acvision branch 4 times, most recently from c2cbd75 to aa9d6e3CompareAugust 5, 2026 05:59
Read coolant temperature from an Aquacomputer Next Vision and give liquid
cooling its own sensor groups, so coolant and pump no longer borrow the
threshold colors of chip temperatures and case fans.
The Vision has no hwmon driver, so the reading comes from raw HID. It is a
composite device that also exposes keyboard and consumer control
interfaces, and only the vendor defined one reports telemetry, so match the
report descriptor usage page as well as the USB vendor and product id.
Reading either of the other interfaces blocks forever because they never
send a report. Telemetry arrives as a 64 byte report with id 0x01 holding
the coolant temperature at offset 0x37, big endian, in hundredths of a
degree.
Coolant runs far cooler than a CPU and a pump far faster than a case fan,
so sharing temperature-colors and fan-colors left their breakpoints
useless. Promote both to entries in sensorCatalog. The preference sidebar,
threshold color editors, changed:: signal wiring and dropdown menu groups
are all derived from that catalog, so each gains a page, a show-* toggle
and a *-colors key. The pump arrives on a fan input and is reassigned to
its own group by label, and fan inputs are now discovered when either group
is enabled.
colorsKeyForSensor() resolved format 'temp' to temperature-colors before
consulting the sensor's group, which made a per group scale impossible.
Check the group first and keep the format fallback so GPU temperatures
still share the temperature scale.
Coolant also gets its own unit. Threshold colors are matched against the
displayed value, so the unit and the breakpoints have to agree. The unit
key is resolved from the catalog, leaving every other temperature source on
the main unit.
Add an 'aggregate' catalog flag marking groups populated by hardware
monitor discovery, replacing the hardcoded group lists in the sensor query
dispatch and in the group average, minimum and maximum block.
sensorGroupFromType() only stripped '-group' and a trailing '#N', so a
suffixed type resolved to itself and missed its catalog entry. Fall back to
the leading segment.
Panel icon margins are declared per sensor type and also zero the padding,
so the new icons inherited the shell's system-status-icon padding and sat
wider apart than the rest. Add matching rules.
Ship water droplet and pump icons in both icon styles, and label several
nct6799 inputs for this board, including the fan7 input the pump reports
through.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@420coupe@corecoding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Implemented Aquacomputer Next Vision coolant temperature reading - #487

Open
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision
Open

Implemented Aquacomputer Next Vision coolant temperature reading#487
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision

Conversation

@420coupe

@420coupe420coupe commented Jun 8, 2025

Copy link
Copy Markdown

Implemented Aquacomputer Next Vision coolant temperature reading - I was able to decode some of the response using an old visioncli repo as the starting base. There is still a lot of other things that can be decoded from response but 100% certain the current one I'm decoding matches the displayed value for coolant temp on the VISION OLED screen.

Additionally added custom icons for water temp and aio pump, custom icons appear both in the top bar and menu/sub-menu items. Also at first there was no fan speed being displayed until i
sudo modprobe nct6775 and also added that command to /etc/modules-load.d/nct6775.conf so it loads on restart.

edited: added example of vitals with components below
image

@corecoding

Copy link
Copy Markdown
Owner

There are a lot of changes here, including removal of my donation link in the metadata.json. I think the biggest reason for the large diff is your IDE changed ' to ". Can you refactor this diff so it is easier to see the true changes?

@420coupe

Copy link
Copy Markdown
Author

@corecoding There we go, fixed difference in IDE prettier changes. Now you can see just the implementation of AC Next vision.

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from d57efa2 to e85577bCompareAugust 16, 2025 22:23
@420coupe

Copy link
Copy Markdown
Author

Ok fixed the whitespace fixes from IDE as well, hence the forced pushes above.

Now correctly displaying just the changes to implement acvision

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from c2c8e66 to 602d223CompareJune 23, 2026 04:37
@420coupe
420coupeforce-pushed the acvision branch 4 times, most recently from c2cbd75 to aa9d6e3CompareAugust 5, 2026 05:59
Read coolant temperature from an Aquacomputer Next Vision and give liquid
cooling its own sensor groups, so coolant and pump no longer borrow the
threshold colors of chip temperatures and case fans.
The Vision has no hwmon driver, so the reading comes from raw HID. It is a
composite device that also exposes keyboard and consumer control
interfaces, and only the vendor defined one reports telemetry, so match the
report descriptor usage page as well as the USB vendor and product id.
Reading either of the other interfaces blocks forever because they never
send a report. Telemetry arrives as a 64 byte report with id 0x01 holding
the coolant temperature at offset 0x37, big endian, in hundredths of a
degree.
Coolant runs far cooler than a CPU and a pump far faster than a case fan,
so sharing temperature-colors and fan-colors left their breakpoints
useless. Promote both to entries in sensorCatalog. The preference sidebar,
threshold color editors, changed:: signal wiring and dropdown menu groups
are all derived from that catalog, so each gains a page, a show-* toggle
and a *-colors key. The pump arrives on a fan input and is reassigned to
its own group by label, and fan inputs are now discovered when either group
is enabled.
colorsKeyForSensor() resolved format 'temp' to temperature-colors before
consulting the sensor's group, which made a per group scale impossible.
Check the group first and keep the format fallback so GPU temperatures
still share the temperature scale.
Coolant also gets its own unit. Threshold colors are matched against the
displayed value, so the unit and the breakpoints have to agree. The unit
key is resolved from the catalog, leaving every other temperature source on
the main unit.
Add an 'aggregate' catalog flag marking groups populated by hardware
monitor discovery, replacing the hardcoded group lists in the sensor query
dispatch and in the group average, minimum and maximum block.
sensorGroupFromType() only stripped '-group' and a trailing '#N', so a
suffixed type resolved to itself and missed its catalog entry. Fall back to
the leading segment.
Panel icon margins are declared per sensor type and also zero the padding,
so the new icons inherited the shell's system-status-icon padding and sat
wider apart than the rest. Add matching rules.
Ship water droplet and pump icons in both icon styles, and label several
nct6799 inputs for this board, including the fan7 input the pump reports
through.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@420coupe@corecoding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Implemented Aquacomputer Next Vision coolant temperature reading - #487

Open
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision
Open

Implemented Aquacomputer Next Vision coolant temperature reading#487
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision

Conversation

@420coupe

@420coupe420coupe commented Jun 8, 2025

Copy link
Copy Markdown

Implemented Aquacomputer Next Vision coolant temperature reading - I was able to decode some of the response using an old visioncli repo as the starting base. There is still a lot of other things that can be decoded from response but 100% certain the current one I'm decoding matches the displayed value for coolant temp on the VISION OLED screen.

Additionally added custom icons for water temp and aio pump, custom icons appear both in the top bar and menu/sub-menu items. Also at first there was no fan speed being displayed until i
sudo modprobe nct6775 and also added that command to /etc/modules-load.d/nct6775.conf so it loads on restart.

edited: added example of vitals with components below
image

@corecoding

Copy link
Copy Markdown
Owner

There are a lot of changes here, including removal of my donation link in the metadata.json. I think the biggest reason for the large diff is your IDE changed ' to ". Can you refactor this diff so it is easier to see the true changes?

@420coupe

Copy link
Copy Markdown
Author

@corecoding There we go, fixed difference in IDE prettier changes. Now you can see just the implementation of AC Next vision.

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from d57efa2 to e85577bCompareAugust 16, 2025 22:23
@420coupe

Copy link
Copy Markdown
Author

Ok fixed the whitespace fixes from IDE as well, hence the forced pushes above.

Now correctly displaying just the changes to implement acvision

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from c2c8e66 to 602d223CompareJune 23, 2026 04:37
@420coupe
420coupeforce-pushed the acvision branch 4 times, most recently from c2cbd75 to aa9d6e3CompareAugust 5, 2026 05:59
Read coolant temperature from an Aquacomputer Next Vision and give liquid
cooling its own sensor groups, so coolant and pump no longer borrow the
threshold colors of chip temperatures and case fans.
The Vision has no hwmon driver, so the reading comes from raw HID. It is a
composite device that also exposes keyboard and consumer control
interfaces, and only the vendor defined one reports telemetry, so match the
report descriptor usage page as well as the USB vendor and product id.
Reading either of the other interfaces blocks forever because they never
send a report. Telemetry arrives as a 64 byte report with id 0x01 holding
the coolant temperature at offset 0x37, big endian, in hundredths of a
degree.
Coolant runs far cooler than a CPU and a pump far faster than a case fan,
so sharing temperature-colors and fan-colors left their breakpoints
useless. Promote both to entries in sensorCatalog. The preference sidebar,
threshold color editors, changed:: signal wiring and dropdown menu groups
are all derived from that catalog, so each gains a page, a show-* toggle
and a *-colors key. The pump arrives on a fan input and is reassigned to
its own group by label, and fan inputs are now discovered when either group
is enabled.
colorsKeyForSensor() resolved format 'temp' to temperature-colors before
consulting the sensor's group, which made a per group scale impossible.
Check the group first and keep the format fallback so GPU temperatures
still share the temperature scale.
Coolant also gets its own unit. Threshold colors are matched against the
displayed value, so the unit and the breakpoints have to agree. The unit
key is resolved from the catalog, leaving every other temperature source on
the main unit.
Add an 'aggregate' catalog flag marking groups populated by hardware
monitor discovery, replacing the hardcoded group lists in the sensor query
dispatch and in the group average, minimum and maximum block.
sensorGroupFromType() only stripped '-group' and a trailing '#N', so a
suffixed type resolved to itself and missed its catalog entry. Fall back to
the leading segment.
Panel icon margins are declared per sensor type and also zero the padding,
so the new icons inherited the shell's system-status-icon padding and sat
wider apart than the rest. Add matching rules.
Ship water droplet and pump icons in both icon styles, and label several
nct6799 inputs for this board, including the fan7 input the pump reports
through.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@420coupe@corecoding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Implemented Aquacomputer Next Vision coolant temperature reading - #487

Open
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision
Open

Implemented Aquacomputer Next Vision coolant temperature reading#487
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision

Conversation

@420coupe

@420coupe420coupe commented Jun 8, 2025

Copy link
Copy Markdown

Implemented Aquacomputer Next Vision coolant temperature reading - I was able to decode some of the response using an old visioncli repo as the starting base. There is still a lot of other things that can be decoded from response but 100% certain the current one I'm decoding matches the displayed value for coolant temp on the VISION OLED screen.

Additionally added custom icons for water temp and aio pump, custom icons appear both in the top bar and menu/sub-menu items. Also at first there was no fan speed being displayed until i
sudo modprobe nct6775 and also added that command to /etc/modules-load.d/nct6775.conf so it loads on restart.

edited: added example of vitals with components below
image

@corecoding

Copy link
Copy Markdown
Owner

There are a lot of changes here, including removal of my donation link in the metadata.json. I think the biggest reason for the large diff is your IDE changed ' to ". Can you refactor this diff so it is easier to see the true changes?

@420coupe

Copy link
Copy Markdown
Author

@corecoding There we go, fixed difference in IDE prettier changes. Now you can see just the implementation of AC Next vision.

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from d57efa2 to e85577bCompareAugust 16, 2025 22:23
@420coupe

Copy link
Copy Markdown
Author

Ok fixed the whitespace fixes from IDE as well, hence the forced pushes above.

Now correctly displaying just the changes to implement acvision

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from c2c8e66 to 602d223CompareJune 23, 2026 04:37
@420coupe
420coupeforce-pushed the acvision branch 4 times, most recently from c2cbd75 to aa9d6e3CompareAugust 5, 2026 05:59
Read coolant temperature from an Aquacomputer Next Vision and give liquid
cooling its own sensor groups, so coolant and pump no longer borrow the
threshold colors of chip temperatures and case fans.
The Vision has no hwmon driver, so the reading comes from raw HID. It is a
composite device that also exposes keyboard and consumer control
interfaces, and only the vendor defined one reports telemetry, so match the
report descriptor usage page as well as the USB vendor and product id.
Reading either of the other interfaces blocks forever because they never
send a report. Telemetry arrives as a 64 byte report with id 0x01 holding
the coolant temperature at offset 0x37, big endian, in hundredths of a
degree.
Coolant runs far cooler than a CPU and a pump far faster than a case fan,
so sharing temperature-colors and fan-colors left their breakpoints
useless. Promote both to entries in sensorCatalog. The preference sidebar,
threshold color editors, changed:: signal wiring and dropdown menu groups
are all derived from that catalog, so each gains a page, a show-* toggle
and a *-colors key. The pump arrives on a fan input and is reassigned to
its own group by label, and fan inputs are now discovered when either group
is enabled.
colorsKeyForSensor() resolved format 'temp' to temperature-colors before
consulting the sensor's group, which made a per group scale impossible.
Check the group first and keep the format fallback so GPU temperatures
still share the temperature scale.
Coolant also gets its own unit. Threshold colors are matched against the
displayed value, so the unit and the breakpoints have to agree. The unit
key is resolved from the catalog, leaving every other temperature source on
the main unit.
Add an 'aggregate' catalog flag marking groups populated by hardware
monitor discovery, replacing the hardcoded group lists in the sensor query
dispatch and in the group average, minimum and maximum block.
sensorGroupFromType() only stripped '-group' and a trailing '#N', so a
suffixed type resolved to itself and missed its catalog entry. Fall back to
the leading segment.
Panel icon margins are declared per sensor type and also zero the padding,
so the new icons inherited the shell's system-status-icon padding and sat
wider apart than the rest. Add matching rules.
Ship water droplet and pump icons in both icon styles, and label several
nct6799 inputs for this board, including the fan7 input the pump reports
through.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@420coupe@corecoding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Implemented Aquacomputer Next Vision coolant temperature reading - #487

Open
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision
Open

Implemented Aquacomputer Next Vision coolant temperature reading#487
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision

Conversation

@420coupe

@420coupe420coupe commented Jun 8, 2025

Copy link
Copy Markdown

Implemented Aquacomputer Next Vision coolant temperature reading - I was able to decode some of the response using an old visioncli repo as the starting base. There is still a lot of other things that can be decoded from response but 100% certain the current one I'm decoding matches the displayed value for coolant temp on the VISION OLED screen.

Additionally added custom icons for water temp and aio pump, custom icons appear both in the top bar and menu/sub-menu items. Also at first there was no fan speed being displayed until i
sudo modprobe nct6775 and also added that command to /etc/modules-load.d/nct6775.conf so it loads on restart.

edited: added example of vitals with components below
image

@corecoding

Copy link
Copy Markdown
Owner

There are a lot of changes here, including removal of my donation link in the metadata.json. I think the biggest reason for the large diff is your IDE changed ' to ". Can you refactor this diff so it is easier to see the true changes?

@420coupe

Copy link
Copy Markdown
Author

@corecoding There we go, fixed difference in IDE prettier changes. Now you can see just the implementation of AC Next vision.

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from d57efa2 to e85577bCompareAugust 16, 2025 22:23
@420coupe

Copy link
Copy Markdown
Author

Ok fixed the whitespace fixes from IDE as well, hence the forced pushes above.

Now correctly displaying just the changes to implement acvision

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from c2c8e66 to 602d223CompareJune 23, 2026 04:37
@420coupe
420coupeforce-pushed the acvision branch 4 times, most recently from c2cbd75 to aa9d6e3CompareAugust 5, 2026 05:59
Read coolant temperature from an Aquacomputer Next Vision and give liquid
cooling its own sensor groups, so coolant and pump no longer borrow the
threshold colors of chip temperatures and case fans.
The Vision has no hwmon driver, so the reading comes from raw HID. It is a
composite device that also exposes keyboard and consumer control
interfaces, and only the vendor defined one reports telemetry, so match the
report descriptor usage page as well as the USB vendor and product id.
Reading either of the other interfaces blocks forever because they never
send a report. Telemetry arrives as a 64 byte report with id 0x01 holding
the coolant temperature at offset 0x37, big endian, in hundredths of a
degree.
Coolant runs far cooler than a CPU and a pump far faster than a case fan,
so sharing temperature-colors and fan-colors left their breakpoints
useless. Promote both to entries in sensorCatalog. The preference sidebar,
threshold color editors, changed:: signal wiring and dropdown menu groups
are all derived from that catalog, so each gains a page, a show-* toggle
and a *-colors key. The pump arrives on a fan input and is reassigned to
its own group by label, and fan inputs are now discovered when either group
is enabled.
colorsKeyForSensor() resolved format 'temp' to temperature-colors before
consulting the sensor's group, which made a per group scale impossible.
Check the group first and keep the format fallback so GPU temperatures
still share the temperature scale.
Coolant also gets its own unit. Threshold colors are matched against the
displayed value, so the unit and the breakpoints have to agree. The unit
key is resolved from the catalog, leaving every other temperature source on
the main unit.
Add an 'aggregate' catalog flag marking groups populated by hardware
monitor discovery, replacing the hardcoded group lists in the sensor query
dispatch and in the group average, minimum and maximum block.
sensorGroupFromType() only stripped '-group' and a trailing '#N', so a
suffixed type resolved to itself and missed its catalog entry. Fall back to
the leading segment.
Panel icon margins are declared per sensor type and also zero the padding,
so the new icons inherited the shell's system-status-icon padding and sat
wider apart than the rest. Add matching rules.
Ship water droplet and pump icons in both icon styles, and label several
nct6799 inputs for this board, including the fan7 input the pump reports
through.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@420coupe@corecoding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Implemented Aquacomputer Next Vision coolant temperature reading - #487

Open
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision
Open

Implemented Aquacomputer Next Vision coolant temperature reading#487
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision

Conversation

@420coupe

@420coupe420coupe commented Jun 8, 2025

Copy link
Copy Markdown

Implemented Aquacomputer Next Vision coolant temperature reading - I was able to decode some of the response using an old visioncli repo as the starting base. There is still a lot of other things that can be decoded from response but 100% certain the current one I'm decoding matches the displayed value for coolant temp on the VISION OLED screen.

Additionally added custom icons for water temp and aio pump, custom icons appear both in the top bar and menu/sub-menu items. Also at first there was no fan speed being displayed until i
sudo modprobe nct6775 and also added that command to /etc/modules-load.d/nct6775.conf so it loads on restart.

edited: added example of vitals with components below
image

@corecoding

Copy link
Copy Markdown
Owner

There are a lot of changes here, including removal of my donation link in the metadata.json. I think the biggest reason for the large diff is your IDE changed ' to ". Can you refactor this diff so it is easier to see the true changes?

@420coupe

Copy link
Copy Markdown
Author

@corecoding There we go, fixed difference in IDE prettier changes. Now you can see just the implementation of AC Next vision.

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from d57efa2 to e85577bCompareAugust 16, 2025 22:23
@420coupe

Copy link
Copy Markdown
Author

Ok fixed the whitespace fixes from IDE as well, hence the forced pushes above.

Now correctly displaying just the changes to implement acvision

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from c2c8e66 to 602d223CompareJune 23, 2026 04:37
@420coupe
420coupeforce-pushed the acvision branch 4 times, most recently from c2cbd75 to aa9d6e3CompareAugust 5, 2026 05:59
Read coolant temperature from an Aquacomputer Next Vision and give liquid
cooling its own sensor groups, so coolant and pump no longer borrow the
threshold colors of chip temperatures and case fans.
The Vision has no hwmon driver, so the reading comes from raw HID. It is a
composite device that also exposes keyboard and consumer control
interfaces, and only the vendor defined one reports telemetry, so match the
report descriptor usage page as well as the USB vendor and product id.
Reading either of the other interfaces blocks forever because they never
send a report. Telemetry arrives as a 64 byte report with id 0x01 holding
the coolant temperature at offset 0x37, big endian, in hundredths of a
degree.
Coolant runs far cooler than a CPU and a pump far faster than a case fan,
so sharing temperature-colors and fan-colors left their breakpoints
useless. Promote both to entries in sensorCatalog. The preference sidebar,
threshold color editors, changed:: signal wiring and dropdown menu groups
are all derived from that catalog, so each gains a page, a show-* toggle
and a *-colors key. The pump arrives on a fan input and is reassigned to
its own group by label, and fan inputs are now discovered when either group
is enabled.
colorsKeyForSensor() resolved format 'temp' to temperature-colors before
consulting the sensor's group, which made a per group scale impossible.
Check the group first and keep the format fallback so GPU temperatures
still share the temperature scale.
Coolant also gets its own unit. Threshold colors are matched against the
displayed value, so the unit and the breakpoints have to agree. The unit
key is resolved from the catalog, leaving every other temperature source on
the main unit.
Add an 'aggregate' catalog flag marking groups populated by hardware
monitor discovery, replacing the hardcoded group lists in the sensor query
dispatch and in the group average, minimum and maximum block.
sensorGroupFromType() only stripped '-group' and a trailing '#N', so a
suffixed type resolved to itself and missed its catalog entry. Fall back to
the leading segment.
Panel icon margins are declared per sensor type and also zero the padding,
so the new icons inherited the shell's system-status-icon padding and sat
wider apart than the rest. Add matching rules.
Ship water droplet and pump icons in both icon styles, and label several
nct6799 inputs for this board, including the fan7 input the pump reports
through.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@420coupe@corecoding
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Implemented Aquacomputer Next Vision coolant temperature reading - #487

Open
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision
Open

Implemented Aquacomputer Next Vision coolant temperature reading#487
420coupe wants to merge 1 commit into
corecoding:mainfrom
420coupe:acvision

Conversation

@420coupe

@420coupe420coupe commented Jun 8, 2025

Copy link
Copy Markdown

Implemented Aquacomputer Next Vision coolant temperature reading - I was able to decode some of the response using an old visioncli repo as the starting base. There is still a lot of other things that can be decoded from response but 100% certain the current one I'm decoding matches the displayed value for coolant temp on the VISION OLED screen.

Additionally added custom icons for water temp and aio pump, custom icons appear both in the top bar and menu/sub-menu items. Also at first there was no fan speed being displayed until i
sudo modprobe nct6775 and also added that command to /etc/modules-load.d/nct6775.conf so it loads on restart.

edited: added example of vitals with components below
image

@corecoding

Copy link
Copy Markdown
Owner

There are a lot of changes here, including removal of my donation link in the metadata.json. I think the biggest reason for the large diff is your IDE changed ' to ". Can you refactor this diff so it is easier to see the true changes?

@420coupe

Copy link
Copy Markdown
Author

@corecoding There we go, fixed difference in IDE prettier changes. Now you can see just the implementation of AC Next vision.

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from d57efa2 to e85577bCompareAugust 16, 2025 22:23
@420coupe

Copy link
Copy Markdown
Author

Ok fixed the whitespace fixes from IDE as well, hence the forced pushes above.

Now correctly displaying just the changes to implement acvision

@420coupe
420coupeforce-pushed the acvision branch 2 times, most recently from c2c8e66 to 602d223CompareJune 23, 2026 04:37
@420coupe
420coupeforce-pushed the acvision branch 4 times, most recently from c2cbd75 to aa9d6e3CompareAugust 5, 2026 05:59
Read coolant temperature from an Aquacomputer Next Vision and give liquid
cooling its own sensor groups, so coolant and pump no longer borrow the
threshold colors of chip temperatures and case fans.
The Vision has no hwmon driver, so the reading comes from raw HID. It is a
composite device that also exposes keyboard and consumer control
interfaces, and only the vendor defined one reports telemetry, so match the
report descriptor usage page as well as the USB vendor and product id.
Reading either of the other interfaces blocks forever because they never
send a report. Telemetry arrives as a 64 byte report with id 0x01 holding
the coolant temperature at offset 0x37, big endian, in hundredths of a
degree.
Coolant runs far cooler than a CPU and a pump far faster than a case fan,
so sharing temperature-colors and fan-colors left their breakpoints
useless. Promote both to entries in sensorCatalog. The preference sidebar,
threshold color editors, changed:: signal wiring and dropdown menu groups
are all derived from that catalog, so each gains a page, a show-* toggle
and a *-colors key. The pump arrives on a fan input and is reassigned to
its own group by label, and fan inputs are now discovered when either group
is enabled.
colorsKeyForSensor() resolved format 'temp' to temperature-colors before
consulting the sensor's group, which made a per group scale impossible.
Check the group first and keep the format fallback so GPU temperatures
still share the temperature scale.
Coolant also gets its own unit. Threshold colors are matched against the
displayed value, so the unit and the breakpoints have to agree. The unit
key is resolved from the catalog, leaving every other temperature source on
the main unit.
Add an 'aggregate' catalog flag marking groups populated by hardware
monitor discovery, replacing the hardcoded group lists in the sensor query
dispatch and in the group average, minimum and maximum block.
sensorGroupFromType() only stripped '-group' and a trailing '#N', so a
suffixed type resolved to itself and missed its catalog entry. Fall back to
the leading segment.
Panel icon margins are declared per sensor type and also zero the padding,
so the new icons inherited the shell's system-status-icon padding and sat
wider apart than the rest. Add matching rules.
Ship water droplet and pump icons in both icon styles, and label several
nct6799 inputs for this board, including the fan7 input the pump reports
through.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@420coupe@corecoding