diff --git a/CHANGELOG_INFRA.md b/CHANGELOG_INFRA.md
index dae8230..42cf64a 100644
--- a/CHANGELOG_INFRA.md
+++ b/CHANGELOG_INFRA.md
@@ -5,23 +5,24 @@
## Pendientes de replicar
-- **2026-09-20-omniroute-arranque-fiable-tarea-programada-vigilante** [omniroute] OmniRoute arranque fiable (tarea programada + vigilante) (aplicado en: sobremesa)
-- **2026-09-20-omniroute-505-modelos-expuestos-en-opencode** [omniroute] OmniRoute: 505 modelos expuestos en OpenCode (aplicado en: sobremesa)
-- **2026-09-20-plugin-global-opencode-relanza-omniroute** [opencode] Plugin global OpenCode relanza OmniRoute (aplicado en: sobremesa)
-- **2026-09-20-migracion-de-watchers-telegram-recordatorios-a-infraestructu** [watchers] Migracion de watchers (Telegram + recordatorios) a INFRAESTRUCTURA (aplicado en: sobremesa)
-- **2026-09-20-primera-version-de-morning-routine-wol-tapo-autologon-y-arra** [scripts] Primera version de Morning Routine (WoL, Tapo, AutoLogon y Arranque Apps) (aplicado en: sobremesa)
-- **2026-09-20-fix-bot-telegram-control-pc-confirmacion-watchdog** [scripts] Fix bot Telegram control PC: confirmacion + watchdog (aplicado en: sobremesa)
-- **2026-09-20-shutdown-listener-instalado-como-tarea-programada** [watchers] Shutdown listener instalado como tarea programada (aplicado en: sobremesa)
-- **2026-09-20-timeout-home-assistant-aumentado-5s-15s-para-proxy-shutdown** [servicios] Timeout Home Assistant aumentado 5s→15s para proxy shutdown (aplicado en: sobremesa)
+- **2026-09-30-fix-telegram-watcher-telethon-1-44-encoding-utf-8** [watchers] Fix telegram_watcher (telethon 1.44 + encoding UTF-8) (aplicado en: portatil)
## Historial
+### 2026-09-30 · Fix telegram_watcher (telethon 1.44 + encoding UTF-8)
+- **id**: `2026-09-30-fix-telegram-watcher-telethon-1-44-encoding-utf-8`
+- **Equipo**: portatil
+- **Categoria**: watchers
+- **Transferible**: si
+- **Aplicado en**: portatil
+- **Detalle**: MessageRead(outbox=True) rompe en telethon 1.44 (kwarg eliminado) -> usar MessageRead(). Anadido reconfigure UTF-8 en stdout/stderr para evitar UnicodeEncodeError cp1252 al lanzar desde tarea programada sin PYTHONUTF8.
+
### 2026-09-20 · OmniRoute arranque fiable (tarea programada + vigilante)
- **id**: `2026-09-20-omniroute-arranque-fiable-tarea-programada-vigilante`
- **Equipo**: sobremesa
- **Categoria**: omniroute
- **Transferible**: si
-- **Aplicado en**: sobremesa
+- **Aplicado en**: sobremesa, portatil
- **Detalle**: Tarea 'OmniRoute Watchdog' al iniciar sesion + omniroute_watchdog.ps1 (puerto 20128 cada 120s, autocuracion). Sustituye el .vbs fragil.
### 2026-09-20 · OmniRoute: 505 modelos expuestos en OpenCode
@@ -29,7 +30,7 @@
- **Equipo**: sobremesa
- **Categoria**: omniroute
- **Transferible**: si
-- **Aplicado en**: sobremesa
+- **Aplicado en**: sobremesa, portatil
- **Detalle**: setup-opencode --only de 5 conexiones probadas (antigravity, claude, opencode-go, opencode, aihorde) + auto/*. Quitar BOM de opencode.jsonc.
### 2026-09-20 · Plugin global OpenCode relanza OmniRoute
@@ -37,7 +38,7 @@
- **Equipo**: sobremesa
- **Categoria**: opencode
- **Transferible**: si
-- **Aplicado en**: sobremesa
+- **Aplicado en**: sobremesa, portatil
- **Detalle**: omniroute-bootstrap.ts en ~/.config/opencode/plugins/ lanza el vigilante -Once al arrancar OpenCode en cualquier repo.
### 2026-09-20 · Gitea caido (502) - contenedor en bucle de reinicio
@@ -61,7 +62,7 @@
- **Equipo**: sobremesa
- **Categoria**: watchers
- **Transferible**: si
-- **Aplicado en**: sobremesa
+- **Aplicado en**: sobremesa, portatil
- **Detalle**: telegram_watcher.py, recordatorios_msgbox.py y recordatorio.cmd movidos de biblioteca_negocio_prolongo/scripts a INFRAESTRUCTURA/scripts. Rutas resueltas con scripts/infra_paths.py: estado en INFRAESTRUCTURA/estado; pendientes.json y modulos compartidos (idd_channel, netatmo_tool, alarma_twilio) desde el repo hermano (override BIBLIOTECA_REPO). Tareas programadas nuevas (Telegram Watcher, Recordatorios Msgbox) via scripts/instalar_watchers.ps1 (integrado en instalar_global.ps1). En el portatil: git clone INFRAESTRUCTURA, ejecutar scripts/instalar_global.ps1, copiar ~/.telegram-agent y ~/.omniroute, y eliminar el autostart .lnk antiguo si existe. Estado migrado a INFRAESTRUCTURA/estado/.
### 2026-09-20 · Primera version de Morning Routine (WoL, Tapo, AutoLogon y Arranque Apps)
@@ -69,7 +70,7 @@
- **Equipo**: sobremesa
- **Categoria**: scripts
- **Transferible**: si
-- **Aplicado en**: sobremesa
+- **Aplicado en**: sobremesa, portatil
- **Detalle**: Scripts para encender PC via RPi+Tapo, hacer autologon en Windows y lanzar Chrome, Edge, WhatsApp y Telegram al arrancar
### 2026-09-20 · Fix bot Telegram control PC: confirmacion + watchdog
@@ -77,7 +78,7 @@
- **Equipo**: sobremesa
- **Categoria**: scripts
- **Transferible**: si
-- **Aplicado en**: sobremesa
+- **Aplicado en**: sobremesa, portatil
- **Detalle**: Corregidos 4 problemas del bot telegram_bot_pc.py: (1) confirmacion obligatoria antes de apagar, (2) watchdog automatico de estado tras apagar (30s + ping), (3) watchdog de encendido con 3 reintentos (90s + 3x15s ping), (4) documentado problema autologon usuario nuevo. Archivos: telegram_bot_pc.py (corregido), docs/TELEGRAM_BOT_PC_FIXES.md, docs/FIX_PROBLEMA_AUTOLOGON_USUARIO_NUEVO.md
### 2026-09-20 · Bot IDD desplegado en VPS con control PC
@@ -93,7 +94,7 @@
- **Equipo**: sobremesa
- **Categoria**: watchers
- **Transferible**: si
-- **Aplicado en**: sobremesa
+- **Aplicado en**: sobremesa, portatil
- **Detalle**: shutdown_listener.py añadido a instalar_watchers.ps1. Escucha puerto 5555, arranca al login, reinicio automático. Recibe comandos de Home Assistant para apagar el PC.
### 2026-09-20 · PC Status Proxy en VPS via túnel RPi
@@ -109,7 +110,7 @@
- **Equipo**: sobremesa
- **Categoria**: servicios
- **Transferible**: si
-- **Aplicado en**: sobremesa
+- **Aplicado en**: sobremesa, portatil
- **Detalle**: rest_command.shutdown_pc_local timeout aumentado de 5s a 15s en /opt/homeassistant/config/configuration.yaml. El proxy VPS tarda ~5s por túnel SSH→RPi→PC. Evita timeout que abortaba script completo de apagado.
### 2026-09-20 · Scripts test apagado luces sin regleta (continue_on_error)
diff --git a/changelog_infra.json b/changelog_infra.json
index 965ac78..96b4bb0 100644
--- a/changelog_infra.json
+++ b/changelog_infra.json
@@ -9,7 +9,8 @@
"titulo": "OmniRoute arranque fiable (tarea programada + vigilante)",
"transferible": true,
"aplicado_en": [
- "sobremesa"
+ "sobremesa",
+ "portatil"
],
"detalle": "Tarea 'OmniRoute Watchdog' al iniciar sesion + omniroute_watchdog.ps1 (puerto 20128 cada 120s, autocuracion). Sustituye el .vbs fragil."
},
@@ -21,7 +22,8 @@
"titulo": "OmniRoute: 505 modelos expuestos en OpenCode",
"transferible": true,
"aplicado_en": [
- "sobremesa"
+ "sobremesa",
+ "portatil"
],
"detalle": "setup-opencode --only de 5 conexiones probadas (antigravity, claude, opencode-go, opencode, aihorde) + auto/*. Quitar BOM de opencode.jsonc."
},
@@ -33,7 +35,8 @@
"titulo": "Plugin global OpenCode relanza OmniRoute",
"transferible": true,
"aplicado_en": [
- "sobremesa"
+ "sobremesa",
+ "portatil"
],
"detalle": "omniroute-bootstrap.ts en ~/.config/opencode/plugins/ lanza el vigilante -Once al arrancar OpenCode en cualquier repo."
},
@@ -69,7 +72,8 @@
"titulo": "Migracion de watchers (Telegram + recordatorios) a INFRAESTRUCTURA",
"transferible": true,
"aplicado_en": [
- "sobremesa"
+ "sobremesa",
+ "portatil"
],
"detalle": "telegram_watcher.py, recordatorios_msgbox.py y recordatorio.cmd movidos de biblioteca_negocio_prolongo/scripts a INFRAESTRUCTURA/scripts. Rutas resueltas con scripts/infra_paths.py: estado en INFRAESTRUCTURA/estado; pendientes.json y modulos compartidos (idd_channel, netatmo_tool, alarma_twilio) desde el repo hermano (override BIBLIOTECA_REPO). Tareas programadas nuevas (Telegram Watcher, Recordatorios Msgbox) via scripts/instalar_watchers.ps1 (integrado en instalar_global.ps1). En el portatil: git clone INFRAESTRUCTURA, ejecutar scripts/instalar_global.ps1, copiar ~/.telegram-agent y ~/.omniroute, y eliminar el autostart .lnk antiguo si existe. Estado migrado a INFRAESTRUCTURA/estado/."
},
@@ -81,7 +85,8 @@
"titulo": "Primera version de Morning Routine (WoL, Tapo, AutoLogon y Arranque Apps)",
"transferible": true,
"aplicado_en": [
- "sobremesa"
+ "sobremesa",
+ "portatil"
],
"detalle": "Scripts para encender PC via RPi+Tapo, hacer autologon en Windows y lanzar Chrome, Edge, WhatsApp y Telegram al arrancar"
},
@@ -93,7 +98,8 @@
"titulo": "Fix bot Telegram control PC: confirmacion + watchdog",
"transferible": true,
"aplicado_en": [
- "sobremesa"
+ "sobremesa",
+ "portatil"
],
"detalle": "Corregidos 4 problemas del bot telegram_bot_pc.py: (1) confirmacion obligatoria antes de apagar, (2) watchdog automatico de estado tras apagar (30s + ping), (3) watchdog de encendido con 3 reintentos (90s + 3x15s ping), (4) documentado problema autologon usuario nuevo. Archivos: telegram_bot_pc.py (corregido), docs/TELEGRAM_BOT_PC_FIXES.md, docs/FIX_PROBLEMA_AUTOLOGON_USUARIO_NUEVO.md"
},
@@ -117,7 +123,8 @@
"titulo": "Shutdown listener instalado como tarea programada",
"transferible": true,
"aplicado_en": [
- "sobremesa"
+ "sobremesa",
+ "portatil"
],
"detalle": "shutdown_listener.py añadido a instalar_watchers.ps1. Escucha puerto 5555, arranca al login, reinicio automático. Recibe comandos de Home Assistant para apagar el PC."
},
@@ -141,7 +148,8 @@
"titulo": "Timeout Home Assistant aumentado 5s→15s para proxy shutdown",
"transferible": true,
"aplicado_en": [
- "sobremesa"
+ "sobremesa",
+ "portatil"
],
"detalle": "rest_command.shutdown_pc_local timeout aumentado de 5s a 15s en /opt/homeassistant/config/configuration.yaml. El proxy VPS tarda ~5s por túnel SSH→RPi→PC. Evita timeout que abortaba script completo de apagado."
},
@@ -168,6 +176,18 @@
"sobremesa"
],
"detalle": "Documentado problema usuario temporal Juan M en pantalla login. No es usuario real, es perfil corrupto de Windows. Solución: ejecutar scripts\\fix_autologon.ps1 como Admin y reiniciar. Autologon correctamente configurado pero perfil persiste en caché."
+ },
+ {
+ "id": "2026-09-30-fix-telegram-watcher-telethon-1-44-encoding-utf-8",
+ "fecha": "2026-09-30",
+ "equipo": "portatil",
+ "categoria": "watchers",
+ "titulo": "Fix telegram_watcher (telethon 1.44 + encoding UTF-8)",
+ "transferible": true,
+ "aplicado_en": [
+ "portatil"
+ ],
+ "detalle": "MessageRead(outbox=True) rompe en telethon 1.44 (kwarg eliminado) -> usar MessageRead(). Anadido reconfigure UTF-8 en stdout/stderr para evitar UnicodeEncodeError cp1252 al lanzar desde tarea programada sin PYTHONUTF8."
}
]
}
diff --git a/estado/recordatorios_msgbox.json b/estado/recordatorios_msgbox.json
index e53b900..ba96e05 100644
--- a/estado/recordatorios_msgbox.json
+++ b/estado/recordatorios_msgbox.json
@@ -52,6 +52,55 @@
"fecha": "2026-09-07",
"hora": "08:00",
"done": true
+ },
+ {
+ "id": 8,
+ "texto": "Dejar listo el ejecuta programas (#168)",
+ "fecha": "2026-09-23",
+ "hora": "09:00",
+ "done": true
+ },
+ {
+ "id": 9,
+ "texto": "Subir código VC009 al servidor — copiar publish a C:\\inetpub\\wwwroot\\apiprolongo\\ en IIS VC009",
+ "fecha": "2026-09-23",
+ "hora": "09:00",
+ "done": true
+ },
+ {
+ "id": 10,
+ "texto": "DeCA — cerrar pendientes con Oscar: validación matrícula, fecha finalización transporte, inspección",
+ "fecha": "2026-09-23",
+ "hora": "09:00",
+ "done": true
+ },
+ {
+ "id": 11,
+ "texto": "Recapitulación gestión etiquetas con Dani",
+ "fecha": "2026-09-23",
+ "hora": "09:00",
+ "done": true
+ },
+ {
+ "id": 12,
+ "texto": "Preguntar a Oscar el JUEVES por bloqueo de palets (#155)",
+ "fecha": "2026-09-23",
+ "hora": "10:00",
+ "done": true
+ },
+ {
+ "id": 13,
+ "texto": "Pasarle a la IA los codigos nuevos de las plumas de Consum (Oscar los dio de alta)",
+ "fecha": "diario",
+ "hora": "09:00",
+ "done": true
+ },
+ {
+ "id": 14,
+ "texto": "Leccion 1 Power BI: SM Coste Electrico + quiz Iristrace PNCH",
+ "fecha": "diario",
+ "hora": "09:00",
+ "done": true
}
]
}
\ No newline at end of file
diff --git a/scripts/telegram_watcher.py b/scripts/telegram_watcher.py
index 27841d3..bc4fb94 100644
--- a/scripts/telegram_watcher.py
+++ b/scripts/telegram_watcher.py
@@ -10,6 +10,12 @@ import asyncio, sys, os, json, time, re
from datetime import datetime, timezone
from pathlib import Path
+for _stream in (sys.stdout, sys.stderr):
+ try:
+ _stream.reconfigure(encoding='utf-8', errors='replace')
+ except Exception:
+ pass
+
C = {
'red': '\033[91m', 'green': '\033[92m', 'yellow': '\033[93m',
'blue': '\033[94m', 'magenta': '\033[95m', 'cyan': '\033[96m',
@@ -295,7 +301,7 @@ async def main():
# Registro de eventos de confirmacion de lectura (Doble Check) -> SOLO IDD
last_read_triggers = {}
- @client.on(events.MessageRead(outbox=True))
+ @client.on(events.MessageRead())
async def on_message_read(event):
try:
if is_silenciado():
diff --git a/tools/LibreHardwareMonitor/Aga.Controls.dll b/tools/LibreHardwareMonitor/Aga.Controls.dll
new file mode 100644
index 0000000..f4fc036
Binary files /dev/null and b/tools/LibreHardwareMonitor/Aga.Controls.dll differ
diff --git a/tools/LibreHardwareMonitor/Aga.Controls.pdb b/tools/LibreHardwareMonitor/Aga.Controls.pdb
new file mode 100644
index 0000000..8c8ad62
Binary files /dev/null and b/tools/LibreHardwareMonitor/Aga.Controls.pdb differ
diff --git a/tools/LibreHardwareMonitor/HidSharp.dll b/tools/LibreHardwareMonitor/HidSharp.dll
new file mode 100644
index 0000000..895c318
Binary files /dev/null and b/tools/LibreHardwareMonitor/HidSharp.dll differ
diff --git a/tools/LibreHardwareMonitor/LibreHardwareMonitor.exe b/tools/LibreHardwareMonitor/LibreHardwareMonitor.exe
new file mode 100644
index 0000000..26dface
Binary files /dev/null and b/tools/LibreHardwareMonitor/LibreHardwareMonitor.exe differ
diff --git a/tools/LibreHardwareMonitor/LibreHardwareMonitor.exe.config b/tools/LibreHardwareMonitor/LibreHardwareMonitor.exe.config
new file mode 100644
index 0000000..8f60dcb
--- /dev/null
+++ b/tools/LibreHardwareMonitor/LibreHardwareMonitor.exe.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tools/LibreHardwareMonitor/LibreHardwareMonitorLib.dll b/tools/LibreHardwareMonitor/LibreHardwareMonitorLib.dll
new file mode 100644
index 0000000..2e27dbb
Binary files /dev/null and b/tools/LibreHardwareMonitor/LibreHardwareMonitorLib.dll differ
diff --git a/tools/LibreHardwareMonitor/LibreHardwareMonitorLib.pdb b/tools/LibreHardwareMonitor/LibreHardwareMonitorLib.pdb
new file mode 100644
index 0000000..6a2cc0a
Binary files /dev/null and b/tools/LibreHardwareMonitor/LibreHardwareMonitorLib.pdb differ
diff --git a/tools/LibreHardwareMonitor/LibreHardwareMonitorLib.xml b/tools/LibreHardwareMonitor/LibreHardwareMonitorLib.xml
new file mode 100644
index 0000000..96bc133
--- /dev/null
+++ b/tools/LibreHardwareMonitor/LibreHardwareMonitorLib.xml
@@ -0,0 +1,2588 @@
+
+
+
+ LibreHardwareMonitorLib
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Stores all hardware groups and decides which devices should be enabled and updated.
+
+
+
+
+ Creates a new instance with basic initial .
+
+
+
+
+ Creates a new instance with additional .
+
+ Computer settings that will be transferred to each .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Contains computer information table read in accordance with System Management BIOS (SMBIOS) Reference Specification.
+
+
+
+
+ Triggers the method for the given observer.
+
+ Observer who call to devices.
+
+
+
+ Triggers the method with the given visitor for each device in each group.
+
+ Observer who call to devices.
+
+
+
+ If hasn't been opened before, opens , , and triggers the private method depending on which categories are
+ enabled.
+
+
+
+
+ If opened before, removes all and triggers , and .
+
+
+
+
+ If opened before, removes all and recreates it.
+
+
+
+
+ specific additional settings passed to its .
+
+
+
+
+ Support for the NZXT GRID+ V3 devices.
+
+
+
+
+ Support for the Kraken X (X42, X52, X62 or X72) devices.
+
+
+
+
+ Support for the KrakenZ devices.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The group.
+ The thread.
+ The affinity.
+
+
+
+ Gets the specified .
+
+ The group.
+ The thread.
+ .
+
+
+
+ Gets the CPUID.
+
+
+
+
+ Gets the CPU index.
+
+
+
+
+
+
+
+ Sets the default fan speed.
+
+
+
+
+ Gets a sensor value.
+
+
+ Current pmlog struct, used with pmlog-support/start.
+ Legacy pmlogdataoutput struct, used with ADL2_New_QueryPMLogData_Get.
+ Type of the sensor.
+ The sensor.
+ The factor.
+ If set to true, resets the sensor value to null.
+ true if sensor is supported, false otherwise
+
+
+
+ Gets the OverdriveN temperature.
+
+ The type.
+ The sensor.
+ The minimum temperature.
+ The scale.
+ If set to true, resets the sensor value to null.
+
+
+
+ Gets the Overdrive6 power.
+
+ The type.
+ The sensor.
+
+
+
+ Initializes a new instance of the class.
+
+ Component name.
+ Identifier that will be assigned to the device. Based on
+ Additional settings passed by the .
+
+
+
+ Gets the device identifier.
+
+
+
+
+
+
+
+
+
+
+ This structure describes a group-specific affinity.
+
+
+
+
+ Initializes a new instance of the struct.
+
+ The group.
+ The mask.
+
+
+
+ Gets a single group affinity.
+
+ The group.
+ The index.
+ .
+
+
+
+ Gets the group.
+
+
+
+
+ Gets the mask.
+
+
+
+
+ Determines whether the specified is equal to this instance.
+
+ The to compare with this instance.
+ true if the specified is equal to this instance; otherwise, false.
+
+
+
+ Returns a hash code for this instance.
+
+ A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.
+
+
+
+ Implements the == operator.
+
+ The a1.
+ The a2.
+ The result of the operator.
+
+
+
+ Implements the != operator.
+
+ The a1.
+ The a2.
+ The result of the operator.
+
+
+
+ Object representing a component of the computer.
+
+ Individual information can be read from the .
+
+
+
+
+
+ Creates a new instance based on the data provided.
+
+ Component name.
+ Identifier that will be assigned to the device. Based on
+ Additional settings passed by the .
+
+
+
+ Event triggered when is closing.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Collection of identifiers representing the purpose of the hardware.
+
+
+
+
+ Handler that will trigger the actions assigned to it when the event occurs.
+
+ Component returned to the assigned action(s).
+
+
+
+ Basic abstract with methods for the class which can store all hardware and decides which devices are to be checked and updated.
+
+
+
+
+ Triggered when a new is registered.
+
+
+
+
+ Triggered when a is removed.
+
+
+
+
+ Gets a list of all known .
+ Can be updated by .
+
+ List of all enabled devices.
+
+
+
+ Gets or sets a value indicating whether collecting information about devices should be enabled and updated.
+
+ if a given category of devices is already enabled.
+
+
+
+ Gets or sets a value indicating whether collecting information about:
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+ devices should be enabled and updated.
+
+ if a given category of devices is already enabled.
+
+
+
+ Gets or sets a value indicating whether collecting information about devices should be enabled and updated.
+
+ if a given category of devices is already enabled.
+
+
+
+ Gets or sets a value indicating whether collecting information about or devices should be enabled and updated.
+
+ if a given category of devices is already enabled.
+
+
+
+ Gets or sets a value indicating whether collecting information about devices should be enabled and updated.
+
+ if a given category of devices is already enabled.
+
+
+
+ Gets or sets a value indicating whether collecting information about devices should be enabled and updated.
+
+ if a given category of devices is already enabled.
+
+
+
+ Gets or sets a value indicating whether collecting information about devices should be enabled and updated.
+
+ if a given category of devices is already enabled.
+
+
+
+ Gets or sets a value indicating whether collecting information about devices should be enabled and updated.
+
+ if a given category of devices is already enabled.
+
+
+
+ Gets or sets a value indicating whether collecting information about devices should be enabled and updated.
+
+ if a given category of devices is already enabled.
+
+
+
+ Generates full LibreHardwareMonitor report for devices that have been enabled.
+
+ A formatted text string with library, OS and hardware information.
+
+
+
+ Represents a unique / identifier in text format with a / separator.
+
+
+
+
+ Creates a new identifier instance based on the base and additional elements.
+
+ Base identifier being the beginning of the new one.
+ Additional parts by which the base will be extended.
+
+
+
+ Creates a new identifier instance based on the supplied .
+ If available the identifier will consist of the vendor-id, product-id and serial number of the HidDevice.
+ Alternatively a platform dependent identifier based on the usb device-path is generated.
+
+ The this identifier will be created for.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Abstract parent with logic for the abstract class that stores data.
+
+
+
+
+ Accepts the observer for this instance.
+
+ Computer observer making the calls.
+
+
+
+ Call the method for all child instances (called only from visitors).
+
+ Computer observer making the calls.
+
+
+
+ A group of devices from one category in one list.
+
+
+
+
+ Gets a list that stores information about in a given group.
+
+
+
+
+ Report containing most of the known information about all in this .
+
+ A formatted text string with hardware information.
+
+
+
+ Stop updating this group in the future.
+
+
+
+
+ Handler that will trigger the actions assigned to it when the event occurs.
+
+ Component returned to the assigned action(s).
+
+
+
+ Abstract object that stores information about a device. All sensors are available as an array of .
+
+ Can contain .
+ Type specified in .
+
+
+
+
+
+
+
+
+
+
+ Gets a unique hardware ID that represents its location.
+
+
+
+
+ Gets or sets device name.
+
+
+
+
+ Gets the device that is the parent of the current hardware. For example, the motherboard is the parent of SuperIO.
+
+
+
+
+ Gets an array of all sensors such as , , etc.
+
+
+
+
+ Gets child devices, e.g. of the .
+
+
+
+
+ Report containing most of the known information about the current device.
+
+ A formatted text string with hardware information.
+
+
+
+ Refreshes the information stored in array.
+
+
+
+
+ An that will be triggered when a new sensor appears.
+
+
+
+
+ An that will be triggered when one of the sensors is removed.
+
+
+
+
+ Gets rarely changed hardware properties that can't be represented as sensors.
+
+
+
+
+ Abstract object that represents additional parameters included in .
+
+
+
+
+ Gets a parameter default value defined by library.
+
+
+
+
+ Gets a parameter description defined by library.
+
+
+
+
+ Gets a unique parameter ID that represents its location.
+
+
+
+
+ Gets or sets information whether the given is the default for .
+
+
+
+
+ Gets a parameter name defined by library.
+
+
+
+
+ Gets the sensor that is the data container for the given parameter.
+
+
+
+
+ Gets or sets the current value.
+
+
+
+
+ Category of what type the selected sensor is.
+
+
+
+
+ Stores the readed value and the time in which it was recorded.
+
+
+
+ of the sensor.
+ The time code during which the was recorded.
+
+
+
+ Gets the value of the sensor
+
+
+
+
+ Gets the time code during which the was recorded.
+
+
+
+
+ Stores information about the readed values and the time in which they were collected.
+
+
+
+
+
+
+
+
+
+ Gets the unique identifier of this sensor for a given .
+
+
+
+
+ Gets a maximum value recorded for the given sensor.
+
+
+
+
+ Gets a minimum value recorded for the given sensor.
+
+
+
+
+ Gets or sets a sensor name.
+ By default determined by the library.
+
+
+
+
+
+
+
+
+
+ Gets the last recorded value for the given sensor.
+
+
+
+
+ Gets a list of recorded values for the given sensor.
+
+
+
+
+ Resets a value stored in .
+
+
+
+
+ Resets a value stored in .
+
+
+
+
+ Clears the values stored in .
+
+
+
+
+ Abstract object that stores information about the limits of .
+
+
+
+
+ Upper limit of value.
+
+
+
+
+ Lower limit of value.
+
+
+
+
+ Abstract object that stores information about the critical limits of .
+
+
+
+
+ Critical upper limit of value.
+
+
+
+
+ Critical lower limit of value.
+
+
+
+
+ Abstract object that stores settings passed to , and .
+
+
+
+
+ Returns information whether the given collection of settings contains a value assigned to the given key.
+
+ Key to which the setting value is assigned.
+
+
+
+ Assigns a setting option to a given key.
+
+ Key to which the setting value is assigned.
+ Text setting value.
+
+
+
+ Gets a setting option assigned to the given key.
+
+ Key to which the setting value is assigned.
+ Default value.
+
+
+
+ Removes a setting with the specified key from the settings collection.
+
+ Key to which the setting value is assigned.
+
+
+
+ Base interface for creating observers who call to devices.
+
+
+
+
+ Refreshes the values of all in all on selected .
+
+ Instance of the computer to be revisited.
+
+
+
+ Refreshes the values of all on selected .
+
+ Instance of the hardware to be revisited.
+
+
+
+ Refreshes the values on selected .
+
+ Instance of the sensor to be revisited.
+
+
+
+ Refreshes the values on selected .
+
+ Instance of the parameter to be revisited.
+
+
+ Chipset temperature [℃]
+
+
+ CPU temperature [℃]
+
+
+ motherboard temperature [℃]
+
+
+ "T_Sensor" temperature sensor reading [℃]
+
+
+ "T_Sensor 2" temperature sensor reading [℃]
+
+
+ VRM temperature [℃]
+
+
+ CPU Core voltage [mV]
+
+
+ CPU_Opt fan [RPM]
+
+
+ VRM heat sink fan [RPM]
+
+
+ Chipset fan [RPM]
+
+
+ Water Pump [RPM]
+
+
+ Water flow sensor reading [RPM]
+
+
+ CPU current [A]
+
+
+ "Water_In" temperature sensor reading [℃]
+
+
+ "Water_Out" temperature sensor reading [℃]
+
+
+ Water block temperature sensor reading [℃]
+
+
+
+ An unsafe but universal implementation for the ACPI Embedded Controller IO interface for Windows
+
+
+ It is unsafe because of possible race condition between this application and the PC firmware when
+ writing to the EC registers. For a safe approach ACPI/WMI methods have to be used, but those are
+ different for each motherboard model.
+
+
+
+
+ This is a controller present on some Gigabyte motherboards for both Intel and AMD, that is in custom firmware
+ loaded onto the 2nd ITE EC.
+ It can be accessed by using memory mapped IO, mapping its internal RAM onto main RAM via the ISA Bridge.
+ This class can disable it so that the regular IT87XX code can drive the fans.
+
+
+
+
+ Base address in PCI RAM that maps to the EC's RAM
+
+
+
+
+ Enable/Disable Fan Control
+
+
+ true on success
+
+
+
+ Restore settings back to initial values
+
+
+
+
+ Selects another bank. Memory from 0x10-0xAF swaps to data from new bank.
+ Beware to select the default bank 0 after changing.
+ Bank selection is reset after power cycle.
+
+ New bank index. Can be a value of 0-3.
+
+
+
+ Represents the motherboard of a computer with its and as .
+
+
+
+
+ Creates motherboard instance by retrieving information from and creates a new based on data from
+ and .
+
+ table containing motherboard data.
+ Additional settings passed by .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Gets the .
+
+
+
+
+ Gets the .
+
+
+
+
+ Gets the name obtained from .
+
+
+
+
+ Always
+
+
+
+
+
+
+
+
+
+ Gets the information.
+
+
+
+
+
+
+
+
+
+
+ Motherboard itself cannot be updated. Update instead.
+
+
+
+
+
+
+
+
+
+
+ Closes using .
+
+
+
+
+ Opens the mutexes.
+
+
+
+
+ Closes the mutexes.
+
+
+
+
+ Composite class containing information about the selected .
+
+
+
+
+ Creates a new instance and assigns values.
+
+ Name of the selected component.
+ Description of the selected component.
+ Default value of the selected component.
+
+
+
+ Gets a name of the parent .
+
+
+
+
+ Gets a description of the parent .
+
+
+
+
+ Gets a default value of the parent .
+
+
+
+
+ Observer making calls to selected component 's.
+
+
+
+
+ Creates a new observer instance.
+
+ Instance of the that triggers events during visiting the .
+
+
+
+ Goes through all the components of the specified with its .
+
+ Computer class instance that is derived from the interface.
+
+
+
+ Goes through all the components of the specified with its .
+
+ Hardware class instance that is derived from the interface.
+
+
+
+ Goes through all the components of the specified using .
+
+ Sensor class instance that is derived from the interface.
+
+
+
+ Goes through all the components of the specified .
+
+
+
+
+ Parameter class instance that is derived from the interface.
+
+
+
+ System enclosure security status based on DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.4.3.
+
+
+
+
+ System enclosure state based on DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.4.2.
+
+
+
+
+ System enclosure type based on DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.4.1.
+
+
+
+
+ Processor family based on DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.5.2.
+
+
+
+
+ Processor characteristics based on DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.5.9.
+
+
+
+
+ Processor type based on DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.5.1.
+
+
+
+
+ Processor socket based on DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.5.5.
+
+
+
+
+ System wake-up type based on DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.2.2.
+
+
+
+
+ Cache associativity based on DMTF SMBIOS Reference Specification v.3.3.0, Chapter 7.8.5.
+
+
+
+
+ Processor cache level.
+
+
+
+
+ Memory type.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The data.
+ The strings.
+
+
+
+ Gets the byte.
+
+ The offset.
+ .
+
+
+
+ Gets the word.
+
+ The offset.
+ .
+
+
+
+ Gets the dword.
+
+ The offset.
+ .
+
+
+
+ Gets the qword.
+
+ The offset.
+ .
+
+
+
+ Gets the string.
+
+ The offset.
+ .
+
+
+
+ Motherboard BIOS information obtained from the SMBIOS table.
+
+
+
+
+ Gets the BIOS release date.
+
+
+
+
+ Gets the size of the physical device containing the BIOS.
+
+
+
+
+ Gets the string number of the BIOS Vendor’s Name.
+
+
+
+
+ Gets the string number of the BIOS Version. This value is a free-form string that may contain Core and OEM version information.
+
+
+
+
+ Gets the size.
+
+ .
+
+
+
+ Gets the date.
+
+ The bios date.
+ .
+
+
+
+ System information obtained from the SMBIOS table.
+
+
+
+
+ Gets the family associated with system.
+
+ This text string identifies the family to which a particular computer belongs. A family refers to a set of computers that are similar but not identical from a hardware or software point of
+ view. Typically, a family is composed of different computer models, which have different configurations and pricing points. Computers in the same family often have similar branding and cosmetic
+ features.
+
+
+
+
+
+ Gets the manufacturer name associated with system.
+
+
+
+
+ Gets the product name associated with system.
+
+
+
+
+ Gets the serial number string associated with system.
+
+
+
+
+ Gets the version string associated with system.
+
+
+
+
+ Gets
+
+
+
+
+ System enclosure obtained from the SMBIOS table.
+
+
+
+
+ Gets the asset tag associated with the enclosure or chassis.
+
+
+
+
+ Gets
+
+
+
+
+ Gets or sets the system enclosure lock.
+
+ System enclosure lock is present if . Otherwise, either a lock is not present or it is unknown if the enclosure has a lock.
+
+
+
+ Gets the string describing the chassis or enclosure manufacturer name.
+
+
+
+
+ Gets the number of power cords associated with the enclosure or chassis.
+
+
+
+
+ Gets the state of the enclosure’s power supply (or supplies) when last booted.
+
+
+
+
+ Gets the height of the enclosure, in 'U's. A U is a standard unit of measure for the height of a rack or rack-mountable component and is equal to 1.75 inches or 4.445 cm. A value of 0
+ indicates that the enclosure height is unspecified.
+
+
+
+
+ Gets the physical security status of the enclosure when last booted.
+
+
+
+
+ Gets the string describing the chassis or enclosure serial number.
+
+
+
+
+ Gets the string describing the chassis or enclosure SKU number.
+
+
+
+
+ Gets the thermal state of the enclosure when last booted.
+
+
+
+
+ Gets
+
+
+
+
+ Gets the number of null-terminated string representing the chassis or enclosure version.
+
+
+
+
+ Motherboard information obtained from the SMBIOS table.
+
+
+
+
+ Gets the value that represents the manufacturer's name.
+
+
+
+
+ Gets the value that represents the motherboard's name.
+
+
+
+
+ Gets the value that represents the motherboard's serial number.
+
+
+
+
+ Gets the value that represents the motherboard's revision number.
+
+
+
+
+ Processor information obtained from the SMBIOS table.
+
+
+
+
+ Gets the characteristics of the processor.
+
+
+
+
+ Gets the value that represents the number of cores per processor socket.
+
+
+
+
+ Gets the value that represents the number of enabled cores per processor socket.
+
+
+
+
+ Gets the value that represents the current processor speed (in MHz).
+
+
+
+
+ Gets the external Clock Frequency, in MHz. If the value is unknown, the field is set to 0.
+
+
+
+
+ Gets
+
+
+
+
+ Gets the handle.
+
+ The handle.
+
+
+
+ Gets the identifier.
+
+
+
+
+ Gets the L1 cache handle.
+
+
+
+
+ Gets the L2 cache handle.
+
+
+
+
+ Gets the L3 cache handle.
+
+
+
+
+ Gets the string number of Processor Manufacturer.
+
+
+
+
+ Gets the value that represents the maximum processor speed (in MHz) supported by the system for this processor socket.
+
+
+
+
+ Gets
+
+
+
+
+ Gets the value that represents the string number for the serial number of this processor.
+ This value is set by the manufacturer and normally not changeable.
+
+
+
+
+ Gets
+
+
+
+
+ Gets the string number for Reference Designation.
+
+
+
+
+ Gets the value that represents the number of threads per processor socket.
+
+
+
+
+ Gets the value that represents the string number describing the Processor.
+
+
+
+
+ Cache information obtained from the SMBIOS table.
+
+
+
+
+ Gets
+
+
+
+
+ Gets
+
+
+
+
+ Gets the handle.
+
+
+
+
+ Gets the value that represents the installed cache size.
+
+
+
+
+ Gets the cache designation.
+
+ .
+
+
+
+ Memory information obtained from the SMBIOS table.
+
+
+
+
+ Gets the string number of the string that identifies the physically labeled bank where the memory device is located.
+
+
+
+
+ Gets the string number of the string that identifies the physically-labeled socket or board position where the memory device is located.
+
+
+
+
+ Gets the string number for the manufacturer of this memory device.
+
+
+
+
+ Gets the string number for the part number of this memory device.
+
+
+
+
+ Gets the string number for the serial number of this memory device.
+
+
+
+
+ Gets the size of the memory device.
+ If the value is 0, no memory device is installed in the socket.
+ If the value is 0xFFFF, the size is unknown.
+
+
+
+
+ Gets the value that identifies the maximum capable speed of the device, in mega transfers per second (MT/s).
+
+
+
+
+ Gets the configured speed of the device, in mega transfers per second (MT/s).
+
+
+
+
+ Gets the configured voltage of this memory device, in millivolts (mV).
+
+
+
+
+ Gets the type of this memory device.
+
+ The type.
+
+
+
+ Reads and processes information encoded in an SMBIOS table.
+
+
+
+
+ Initializes a new instance of the class.
+
+
+
+
+ Gets
+
+
+
+
+ Gets
+
+
+
+
+ Gets
+
+
+
+
+ Gets
+
+
+
+
+ Gets
+
+
+
+
+ Gets
+
+
+
+
+ Gets
+
+
+
+
+ Report containing most of the information that could be read from the SMBIOS table.
+
+ A formatted text string with computer information and the entire SMBIOS table.
+
+
+
+
+
+
+ Helper to calculate the disk performance with base timestamps
+ https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-perfrawdata
+
+
+
+
+ Gets the SMART data.
+
+
+
+
+ Gets the SMART attributes.
+
+
+
+
+ Gets the SMART data.
+
+
+
+
+ Initializes a new instance of the class.
+
+ The SMART id of the attribute.
+ The name of the attribute.
+
+
+
+ Initializes a new instance of the class.
+
+ The SMART id of the attribute.
+ The name of the attribute.
+
+ A delegate for converting the raw byte
+ array into a value (or null to use the attribute value).
+
+
+
+
+ Initializes a new instance of the class.
+
+ The SMART id of the attribute.
+ The name of the attribute.
+
+ A delegate for converting the raw byte
+ array into a value (or null to use the attribute value).
+
+
+ Type of the sensor or null if no sensor is to
+ be created.
+
+
+ If there exists more than one attribute with
+ the same sensor channel and type, then a sensor is created only for the
+ first attribute.
+
+
+ The name to be used for the sensor, or null if
+ no sensor is created.
+
+ True to hide the sensor initially.
+
+ Description for the parameters of the sensor
+ (or null).
+
+
+
+
+ Gets the SMART identifier.
+
+
+
+
+ Localization class for SMART attribute names.
+
+
+
+
+
+
+
+ Adds the hardware.
+
+ The settings.
+ The storage space disk to physical disk map.
+
+
+
+ Maps each StorageSpace to the PhysicalDisks it is composed of.
+
+
+
+
+ Maps a disk to a physical disk.
+
+ The disk.
+ The scope.
+
+
+
+ Reads Smart health status of the drive
+
+ True, if drive is healthy; False, if unhealthy; Null, if it cannot be read
+
+
+
+ Initializes static members of the class.
+
+
+
+
+ Gets the processor group count.
+
+
+
+
+ Sets the processor group affinity for the current thread.
+
+ The processor group affinity.
+ The previous processor group affinity.
+
+
+
+ All OK, but need to wait.
+
+
+
+
+ All OK, but need restart.
+
+
+
+
+ All OK but need mode change.
+
+
+
+
+ All OK, but with warning.
+
+
+
+
+ ADL function completed successfully.
+
+
+
+
+ Generic Error. Most likely one or more of the Escape calls to the driver
+ failed!
+
+
+
+
+ ADL not initialized.
+
+
+
+
+ One of the parameter passed is invalid.
+
+
+
+
+ One of the parameter size is invalid.
+
+
+
+
+ Invalid ADL index passed.
+
+
+
+
+ Invalid controller index passed.
+
+
+
+
+ Invalid display index passed.
+
+
+
+
+ Function not supported by the driver.
+
+
+
+
+ Null Pointer error.
+
+
+
+
+ Call can't be made due to disabled adapter.
+
+
+
+
+ Invalid Callback.
+
+
+
+
+ Display Resource conflict.
+
+
+
+
+ Failed to update some of the values. Can be returned by set request that
+ include multiple values if not all values were successfully committed.
+
+
+
+
+ There's no Linux XDisplay in Linux Console environment.
+
+
+
+ list of sensors defined by ADL_PMLOG_SENSORS
+
+
+ Reserved
+
+
+ list of sensors defined by ADL_PMLOG_SENSORS
+
+
+ Sample rate in milliseconds
+
+
+ Reserved
+
+
+ Pointer to memory address containing logging data
+
+
+ Structure version
+
+
+ Current driver sample rate
+
+
+ Timestamp of last update
+
+
+ Reserved
+
+
+ Memory size in bytes.
+
+
+ Memory type in string.
+
+
+ Highest default performance level Memory bandwidth in Mbytes/s
+
+
+ HyperMemory size in bytes.
+
+
+ Invisible Memory size in bytes.
+
+
+ Visible Memory size in bytes.
+
+
+ Vram vendor ID
+
+
+ Memory Bandiwidth that is calculated and finalized on the driver side, grab and go.
+
+
+ Memory Bit Rate that is calculated and finalized on the driver side, grab and go.
+
+
+
+ If set to 1, then the available spare space has fallen below the threshold.
+
+
+
+
+ If set to 1, then a temperature is above an over temperature threshold or below an under temperature threshold.
+
+
+
+
+ If set to 1, then the device reliability has been degraded due to significant media related errors or any internal error that degrades device reliability.
+
+
+
+
+ If set to 1, then the media has been placed in read only mode
+
+
+
+
+ If set to 1, then the volatile memory backup device has failed. This field is only valid if the controller has a volatile memory backup solution.
+
+
+
+
+ Create a instance from a struct with zero initialized memory arrays
+ no need to init every inner array with the correct sizes
+
+ type of struct that is needed
+
+
+
+
+ SMART data requested.
+
+
+
+
+ Identify data is requested.
+
+
+
+
+ Read SMART data.
+
+
+
+
+ Read SMART thresholds.
+ obsolete
+
+
+
+
+ Autosave SMART data.
+
+
+
+
+ Save SMART attributes.
+
+
+
+
+ Set SMART to offline immediately.
+
+
+
+
+ Read SMART log.
+
+
+
+
+ Write SMART log.
+
+
+
+
+ Write SMART thresholds.
+ obsolete
+
+
+
+
+ Enable SMART.
+
+
+
+
+ Disable SMART.
+
+
+
+
+ Get SMART status.
+
+
+
+
+ Set SMART to offline automatically.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ bit 0:15 Maximum Power (MP) in centiwatts
+
+
+
+
+ bit 16:23
+
+
+
+
+ bit 24 Max Power Scale (MPS), bit 25 Non-Operational State (NOPS)
+
+
+
+
+ bit 32:63 Entry Latency (ENLAT) in microseconds
+
+
+
+
+ bit 64:95 Exit Latency (EXLAT) in microseconds
+
+
+
+
+ bit 96:100 Relative Read Throughput (RRT)
+
+
+
+
+ bit 104:108 Relative Read Latency (RRL)
+
+
+
+
+ bit 112:116 Relative Write Throughput (RWT)
+
+
+
+
+ bit 120:124 Relative Write Latency (RWL)
+
+
+
+
+ bit 128:143 Idle Power (IDLP)
+
+
+
+
+ bit 150:151 Idle Power Scale (IPS)
+
+
+
+
+ bit 152:159
+
+
+
+
+ bit 160:175 Active Power (ACTP)
+
+
+
+
+ bit 176:178 Active Power Workload (APW), bit 182:183 Active Power Scale (APS)
+
+
+
+
+ bit 184:255.
+
+
+
+
+ byte 0:1 M - PCI Vendor ID (VID)
+
+
+
+
+ byte 2:3 M - PCI Subsystem Vendor ID (SSVID)
+
+
+
+
+ byte 4: 23 M - Serial Number (SN)
+
+
+
+
+ byte 24:63 M - Model Number (MN)
+
+
+
+
+ byte 64:71 M - Firmware Revision (FR)
+
+
+
+
+ byte 72 M - Recommended Arbitration Burst (RAB)
+
+
+
+
+ byte 73:75 M - IEEE OUI Identifier (IEEE). Controller Vendor code.
+
+
+
+
+ byte 76 O - Controller Multi-Path I/O and Namespace Sharing Capabilities (CMIC)
+
+
+
+
+ byte 77 M - Maximum Data Transfer Size (MDTS)
+
+
+
+
+ byte 78:79 M - Controller ID (CNTLID)
+
+
+
+
+ byte 80:83 M - Version (VER)
+
+
+
+
+ byte 84:87 M - RTD3 Resume Latency (RTD3R)
+
+
+
+
+ byte 88:91 M - RTD3 Entry Latency (RTD3E)
+
+
+
+
+ byte 92:95 M - Optional Asynchronous Events Supported (OAES)
+
+
+
+
+ byte 96:239.
+
+
+
+
+ byte 240:255. Refer to the NVMe Management Interface Specification for definition.
+
+
+
+
+ byte 256:257 M - Optional Admin Command Support (OACS)
+
+
+
+
+ byte 258 M - Abort Command Limit (ACL)
+
+
+
+
+ byte 259 M - Asynchronous Event Request Limit (AERL)
+
+
+
+
+ byte 260 M - Firmware Updates (FRMW)
+
+
+
+
+ byte 261 M - Log Page Attributes (LPA)
+
+
+
+
+ byte 262 M - Error Log Page Entries (ELPE)
+
+
+
+
+ byte 263 M - Number of Power States Support (NPSS)
+
+
+
+
+ byte 264 M - Admin Vendor Specific Command Configuration (AVSCC)
+
+
+
+
+ byte 265 O - Autonomous Power State Transition Attributes (APSTA)
+
+
+
+
+ byte 266:267 M - Warning Composite Temperature Threshold (WCTEMP)
+
+
+
+
+ byte 268:269 M - Critical Composite Temperature Threshold (CCTEMP)
+
+
+
+
+ byte 270:271 O - Maximum Time for Firmware Activation (MTFA)
+
+
+
+
+ byte 272:275 O - Host Memory Buffer Preferred Size (HMPRE)
+
+
+
+
+ byte 276:279 O - Host Memory Buffer Minimum Size (HMMIN)
+
+
+
+
+ byte 280:295 O - Total NVM Capacity (TNVMCAP)
+
+
+
+
+ byte 296:311 O - Unallocated NVM Capacity (UNVMCAP)
+
+
+
+
+ byte 312:315 O - Replay Protected Memory Block Support (RPMBS)
+
+
+
+
+ byte 316:511
+
+
+
+
+ byte 512 M - Submission Queue Entry Size (SQES)
+
+
+
+
+ byte 513 M - Completion Queue Entry Size (CQES)
+
+
+
+
+ byte 514:515
+
+
+
+
+ byte 516:519 M - Number of Namespaces (NN)
+
+
+
+
+ byte 520:521 M - Optional NVM Command Support (ONCS)
+
+
+
+
+ byte 522:523 M - Fused Operation Support (FUSES)
+
+
+
+
+ byte 524 M - Format NVM Attributes (FNA)
+
+
+
+
+ byte 525 M - Volatile Write Cache (VWC)
+
+
+
+
+ byte 526:527 M - Atomic Write Unit Normal (AWUN)
+
+
+
+
+ byte 528:529 M - Atomic Write Unit Power Fail (AWUPF)
+
+
+
+
+ byte 530 M - NVM Vendor Specific Command Configuration (NVSCC)
+
+
+
+
+ byte 531
+
+
+
+
+ byte 532:533 O - Atomic Compare and Write Unit (ACWU)
+
+
+
+
+ byte 534:535
+
+
+
+
+ byte 536:539 O - SGL Support (SGLS)
+
+
+
+
+ byte 540:703
+
+
+
+
+ byte 704:2047
+
+
+
+
+ byte 2048:3071 Power State Descriptors
+
+
+
+
+ byte 3072:4095 Vendor Specific
+
+
+
+
+ This field indicates critical warnings for the state of the controller.
+ Each bit corresponds to a critical warning type; multiple bits may be set.
+
+
+
+
+ Composite Temperature: Contains the temperature of the overall device (controller and NVM included) in units of Kelvin.
+
+
+
+
+ Available Spare: Contains a normalized percentage (0 to 100%) of the remaining spare capacity available
+
+
+
+
+ Available Spare Threshold: When the Available Spare falls below the threshold indicated in this field,
+ an asynchronous event completion may occur. The value is indicated as a normalized percentage (0 to 100%).
+
+
+
+
+ Percentage Used: Contains a vendor specific estimate of the percentage of NVM subsystem life used based on
+ the actual usage and the manufacturer’s prediction of NVM life. A value of 100 indicates that the estimated endurance of
+ the NVM in the NVM subsystem has been consumed, but may not indicate an NVM subsystem failure. The value is allowed to exceed 100.
+
+
+
+
+ Data Units Read: Contains the number of 512 byte data units the host has read from the controller;
+ this value does not include metadata. This value is reported in thousands
+ (i.e., a value of 1 corresponds to 1000 units of 512 bytes read) and is rounded up.
+
+
+
+
+ Data Units Written: Contains the number of 512 byte data units the host has written to the controller;
+ this value does not include metadata. This value is reported in thousands
+ (i.e., a value of 1 corresponds to 1000 units of 512 bytes written) and is rounded up.
+
+
+
+
+ Host Read Commands: Contains the number of read commands completed by the controller.
+ For the NVM command set, this is the number of Compare and Read commands.
+
+
+
+
+ Host Write Commands: Contains the number of write commands completed by the controller.
+ For the NVM command set, this is the number of Write commands.
+
+
+
+
+ Controller Busy Time: Contains the amount of time the controller is busy with I/O commands.
+
+
+
+
+ Power Cycles: Contains the number of power cycles.
+
+
+
+
+ Power On Hours: Contains the number of power-on hours.
+ This does not include time that the controller was powered and in a low power state condition.
+
+
+
+
+ Unsafe Shutdowns: Contains the number of unsafe shutdowns.
+ This count is incremented when a shutdown notification is not received prior to loss of power.
+
+
+
+
+ Media Errors: Contains the number of occurrences where the controller detected an unrecoverable data integrity error.
+ Errors such as uncorrectable ECC, CRC checksum failure, or LBA tag mismatch are included in this field.
+
+
+
+
+ Number of Error Information Log Entries: Contains the number of Error Information log entries over the life of the controller
+
+
+
+
+ Warning Composite Temperature Time: Contains the amount of time in minutes that the controller is operational and the Composite Temperature is greater than or equal to the Warning Composite
+ Temperature Threshold.
+
+
+
+
+ Critical Composite Temperature Time: Contains the amount of time in minutes that the controller is operational and the Composite Temperature is greater than the Critical Composite Temperature
+ Threshold.
+
+
+
+
+ Contains the current temperature reported by temperature sensor 1-8.
+
+
+
+
+ Gets the resulting IO control code.
+
+
+
+
+ Initializes a new instance of the struct.
+
+ Type of the device.
+ The function.
+ The access.
+
+
+
+ Initializes a new instance of the struct.
+
+ Type of the device.
+ The function.
+ The method.
+ The access.
+
+
+
+ The operation was successful
+
+
+
+
+ NvidiaML was not first initialized with nvmlInit()
+
+
+
+
+ A supplied argument is invalid
+
+
+
+
+ The requested operation is not available on target device
+
+
+
+
+ The current user does not have permission for operation
+
+
+
+
+ A query to find an object was unsuccessful
+
+
+
+
+ An input argument is not large enough
+
+
+
+
+ A device's external power cables are not properly attached
+
+
+
+
+ NVIDIA driver is not loaded
+
+
+
+
+ User provided timeout passed
+
+
+
+
+ NVIDIA Kernel detected an interrupt issue with a GPU
+
+
+
+
+ NvidiaML Shared Library couldn't be found or loaded
+
+
+
+
+ Local version of NvidiaML doesn't implement this function
+
+
+
+
+ infoROM is corrupted
+
+
+
+
+ The GPU has fallen off the bus or has otherwise become inaccessible
+
+
+
+
+ The GPU requires a reset before it can be used again
+
+
+
+
+ The GPU control device has been blocked by the operating system/cgroups
+
+
+
+
+ RM detects a driver/library version mismatch
+
+
+
+
+ An operation cannot be performed because the GPU is currently in use
+
+
+
+
+ An public driver error occurred
+
+
+
+
+ Driver with access at kernel level.
+
+
+
+
+ Contains Win32 definitions for Windows NT.
+
+
+
+
+ Describes a local identifier for an adapter.
+
+
+
+
+ Represents a 64-bit signed integer value.
+
+
+
+
+ Contains basic information about the operating system.
+
+
+
+
+ Statically checks if the current system and .
+
+
+
+
+ Gets information about whether the current system is 64 bit.
+
+
+
+
+ Gets information about whether the current system is Unix based.
+
+
+
+
+ Returns true if the current system is Windows 8 or a more recent Windows version
+
+
+
+
diff --git a/tools/LibreHardwareMonitor/Microsoft.Win32.TaskScheduler.dll b/tools/LibreHardwareMonitor/Microsoft.Win32.TaskScheduler.dll
new file mode 100644
index 0000000..ed02f51
Binary files /dev/null and b/tools/LibreHardwareMonitor/Microsoft.Win32.TaskScheduler.dll differ
diff --git a/tools/LibreHardwareMonitor/Newtonsoft.Json.dll b/tools/LibreHardwareMonitor/Newtonsoft.Json.dll
new file mode 100644
index 0000000..341d08f
Binary files /dev/null and b/tools/LibreHardwareMonitor/Newtonsoft.Json.dll differ
diff --git a/tools/LibreHardwareMonitor/OxyPlot.WindowsForms.dll b/tools/LibreHardwareMonitor/OxyPlot.WindowsForms.dll
new file mode 100644
index 0000000..d577e65
Binary files /dev/null and b/tools/LibreHardwareMonitor/OxyPlot.WindowsForms.dll differ
diff --git a/tools/LibreHardwareMonitor/OxyPlot.dll b/tools/LibreHardwareMonitor/OxyPlot.dll
new file mode 100644
index 0000000..be60c40
Binary files /dev/null and b/tools/LibreHardwareMonitor/OxyPlot.dll differ
diff --git a/tools/LibreHardwareMonitor/System.CodeDom.dll b/tools/LibreHardwareMonitor/System.CodeDom.dll
new file mode 100644
index 0000000..87714db
Binary files /dev/null and b/tools/LibreHardwareMonitor/System.CodeDom.dll differ
diff --git a/tools/LibreHardwareMonitor/de/Microsoft.Win32.TaskScheduler.resources.dll b/tools/LibreHardwareMonitor/de/Microsoft.Win32.TaskScheduler.resources.dll
new file mode 100644
index 0000000..9178f39
Binary files /dev/null and b/tools/LibreHardwareMonitor/de/Microsoft.Win32.TaskScheduler.resources.dll differ
diff --git a/tools/LibreHardwareMonitor/es/Microsoft.Win32.TaskScheduler.resources.dll b/tools/LibreHardwareMonitor/es/Microsoft.Win32.TaskScheduler.resources.dll
new file mode 100644
index 0000000..0f955d2
Binary files /dev/null and b/tools/LibreHardwareMonitor/es/Microsoft.Win32.TaskScheduler.resources.dll differ
diff --git a/tools/LibreHardwareMonitor/fr/Microsoft.Win32.TaskScheduler.resources.dll b/tools/LibreHardwareMonitor/fr/Microsoft.Win32.TaskScheduler.resources.dll
new file mode 100644
index 0000000..de38cfa
Binary files /dev/null and b/tools/LibreHardwareMonitor/fr/Microsoft.Win32.TaskScheduler.resources.dll differ
diff --git a/tools/LibreHardwareMonitor/it/Microsoft.Win32.TaskScheduler.resources.dll b/tools/LibreHardwareMonitor/it/Microsoft.Win32.TaskScheduler.resources.dll
new file mode 100644
index 0000000..1ca5c29
Binary files /dev/null and b/tools/LibreHardwareMonitor/it/Microsoft.Win32.TaskScheduler.resources.dll differ
diff --git a/tools/LibreHardwareMonitor/ja/Microsoft.Win32.TaskScheduler.resources.dll b/tools/LibreHardwareMonitor/ja/Microsoft.Win32.TaskScheduler.resources.dll
new file mode 100644
index 0000000..0ec576c
Binary files /dev/null and b/tools/LibreHardwareMonitor/ja/Microsoft.Win32.TaskScheduler.resources.dll differ
diff --git a/tools/LibreHardwareMonitor/pl/Microsoft.Win32.TaskScheduler.resources.dll b/tools/LibreHardwareMonitor/pl/Microsoft.Win32.TaskScheduler.resources.dll
new file mode 100644
index 0000000..51c849a
Binary files /dev/null and b/tools/LibreHardwareMonitor/pl/Microsoft.Win32.TaskScheduler.resources.dll differ
diff --git a/tools/LibreHardwareMonitor/ru/Microsoft.Win32.TaskScheduler.resources.dll b/tools/LibreHardwareMonitor/ru/Microsoft.Win32.TaskScheduler.resources.dll
new file mode 100644
index 0000000..6b267e0
Binary files /dev/null and b/tools/LibreHardwareMonitor/ru/Microsoft.Win32.TaskScheduler.resources.dll differ
diff --git a/tools/LibreHardwareMonitor/sv/Microsoft.Win32.TaskScheduler.resources.dll b/tools/LibreHardwareMonitor/sv/Microsoft.Win32.TaskScheduler.resources.dll
new file mode 100644
index 0000000..e13d0e9
Binary files /dev/null and b/tools/LibreHardwareMonitor/sv/Microsoft.Win32.TaskScheduler.resources.dll differ
diff --git a/tools/LibreHardwareMonitor/tr/Microsoft.Win32.TaskScheduler.resources.dll b/tools/LibreHardwareMonitor/tr/Microsoft.Win32.TaskScheduler.resources.dll
new file mode 100644
index 0000000..2356bd9
Binary files /dev/null and b/tools/LibreHardwareMonitor/tr/Microsoft.Win32.TaskScheduler.resources.dll differ
diff --git a/tools/LibreHardwareMonitor/zh-CN/Microsoft.Win32.TaskScheduler.resources.dll b/tools/LibreHardwareMonitor/zh-CN/Microsoft.Win32.TaskScheduler.resources.dll
new file mode 100644
index 0000000..376e146
Binary files /dev/null and b/tools/LibreHardwareMonitor/zh-CN/Microsoft.Win32.TaskScheduler.resources.dll differ
diff --git a/tools/LibreHardwareMonitor/zh-Hant/Microsoft.Win32.TaskScheduler.resources.dll b/tools/LibreHardwareMonitor/zh-Hant/Microsoft.Win32.TaskScheduler.resources.dll
new file mode 100644
index 0000000..36e92a0
Binary files /dev/null and b/tools/LibreHardwareMonitor/zh-Hant/Microsoft.Win32.TaskScheduler.resources.dll differ