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