Giter VIP home page Giter VIP logo

fancontrol.liquidctl's Introduction

FanControl.LiquidCtl

Release

A one-nighter project, born after me being annoyed by NZXT's stupid CAM software for 2 hours
Therefore compatibility might be problematic, only verified on NZXT Kraken X (X53, X63 or X73) devices.

v0.1.0: liquidctl section is now executed using pythonnet, potentially resulting in lower power & cpu usage

compared to v0.0.* lanuching a python interpreter twice every second (which is really expensive)

v0.2.0: bumped support for liquidctl 1.13.0, supports multiple devices

liquidctl plugin for FanControl

Installation

  • Download & extract FanControl
  • Install python (has to be 64bit, add to PATH when installing) & liquidctl
    • Latest version validated on liquidctl==1.13.0, earlier or later versions might not be supported
  • Set system environment variable: PYTHONNET_PYDLL to python39.dll (or python37.dll, python38.dll, depending on your python version)
    • This dll has to be in your path, or you can specify the full path for PYTHONNET_PYDLL like path/to/python/install/python39.dll
    • See here
    • If using admin powershell: [Environment]::SetEnvironmentVariable("PYTHONNET_PYDLL", "python39.dll", "Machine")
  • Download release files (two dlls, one .py) from Releases
  • Put the release files in your FanControl folder/plugins

Current Problems

  • Pyenv-Win installed pythons might not work (silent crash on PythonEngine.Initialize), if you have a wacky setup like I do, I recommend having a official Python install from python.org, and you can leave it out of PATH and reference the full path in PYTHONNET_PYDLL.

Filing issues

Please provide the following:

  • Error logs in log.txt
  • Versions of: this plugin, Python and FanControl
  • Output of liquidctl list --json and liquidctl status --json

Contrib

Contributions welcome! In the csproj file you can update the OutputPath to your FanControl install path. Beware that debug-lanuching would not load plugins, you'll have to build and then lanuch manually.

TODOs

[] Get gud in C# & read more of liquidctl codebases, replace current hackey solutions with REAL ones [x] Move to embedded Python (Pythonnet) instead of calling liquidctl processes

fancontrol.liquidctl's People

Contributors

chenseanxy avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

fancontrol.liquidctl's Issues

Loading fails

Hi,
Thanks for your plugin, but it currently does not load.

Python 3.10
Fancontrol V118
Liquidctl 1.9.1

Here is the log:


11/06/2022 13:49:07: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Impossible de convertir implicitement le type 'Python.Runtime.PyObject' en 'string'
   à CallSite.Target(Closure , CallSite , Object )
   à System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
   à FanControl.LiquidCtl.LiquidCtlExecutor.Execute[T](String arguments)
   à FanControl.LiquidCtl.LiquidCtlPlugin.Initialize()
   à FanControl.Domain.BackendProviders.Plugin.PluginBackendProvider.Open()
11/06/2022 13:49:07: liquidctl could not initialize. See the error log for more details.
11/06/2022 13:49:16: Unhandled exception in FanControl v1.0.0.0
11/06/2022 13:49:16: Newtonsoft.Json.JsonReaderException: Could not convert string to double: DC. Path '[0].status[0].value', line 1, position 209.
   à Newtonsoft.Json.JsonReader.ReadDoubleString(String s)
   à Newtonsoft.Json.JsonTextReader.FinishReadQuotedNumber(ReadType readType)
   à Newtonsoft.Json.JsonTextReader.ReadAsDouble()
   à Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   à Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   à Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   à Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   à FanControl.LiquidCtl.LiquidCtlPlugin.Update()
   à FanControl.Domain.BackendProviders.Plugin.PluginBackendProvider.Update()
   à System.Collections.Generic.List`1.ForEach(Action`1 action)
   à FanControl.Domain.ComputerAccessLayer.Update()
   à FanControl.Domain.ApplicationClock.DoActions()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
   à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   à System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   à System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
11/06/2022 13:49:19: Unhandled exception in FanControl v1.0.0.0
11/06/2022 13:49:19: Newtonsoft.Json.JsonReaderException: Could not convert string to double: DC. Path '[0].status[0].value', line 1, position 209.
   à Newtonsoft.Json.JsonReader.ReadDoubleString(String s)
   à Newtonsoft.Json.JsonTextReader.FinishReadQuotedNumber(ReadType readType)
   à Newtonsoft.Json.JsonTextReader.ReadAsDouble()
   à Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   à Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   à Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   à Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   à FanControl.LiquidCtl.LiquidCtlPlugin.Update()
   à FanControl.Domain.BackendProviders.Plugin.PluginBackendProvider.Update()
   à System.Collections.Generic.List`1.ForEach(Action`1 action)
   à FanControl.Domain.ComputerAccessLayer.Update()
   à FanControl.Domain.ApplicationClock.DoActions()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
   à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   à System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   à System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
11/06/2022 13:49:22: Unhandled exception in FanControl v1.0.0.0
11/06/2022 13:49:22: Newtonsoft.Json.JsonReaderException: Could not convert string to double: DC. Path '[0].status[0].value', line 1, position 209.
   à Newtonsoft.Json.JsonReader.ReadDoubleString(String s)
   à Newtonsoft.Json.JsonTextReader.FinishReadQuotedNumber(ReadType readType)
   à Newtonsoft.Json.JsonTextReader.ReadAsDouble()
   à Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   à Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   à Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   à Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   à FanControl.LiquidCtl.LiquidCtlPlugin.Update()
   à FanControl.Domain.BackendProviders.Plugin.PluginBackendProvider.Update()
   à System.Collections.Generic.List`1.ForEach(Action`1 action)
   à FanControl.Domain.ComputerAccessLayer.Update()
   à FanControl.Domain.ApplicationClock.DoActions()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
   à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   à System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   à System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
11/06/2022 13:49:25: Unhandled exception in FanControl v1.0.0.0
11/06/2022 13:49:25: Newtonsoft.Json.JsonReaderException: Could not convert string to double: DC. Path '[0].status[0].value', line 1, position 209.
   à Newtonsoft.Json.JsonReader.ReadDoubleString(String s)
   à Newtonsoft.Json.JsonTextReader.FinishReadQuotedNumber(ReadType readType)
   à Newtonsoft.Json.JsonTextReader.ReadAsDouble()
   à Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   à Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   à Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   à Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   à FanControl.LiquidCtl.LiquidCtlPlugin.Update()
   à FanControl.Domain.BackendProviders.Plugin.PluginBackendProvider.Update()
   à System.Collections.Generic.List`1.ForEach(Action`1 action)
   à FanControl.Domain.ComputerAccessLayer.Update()
   à FanControl.Domain.ApplicationClock.DoActions()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
   à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   à System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   à System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
11/06/2022 13:49:28: Unhandled exception in FanControl v1.0.0.0
11/06/2022 13:49:28: Newtonsoft.Json.JsonReaderException: Could not convert string to double: DC. Path '[0].status[0].value', line 1, position 209.
   à Newtonsoft.Json.JsonReader.ReadDoubleString(String s)
   à Newtonsoft.Json.JsonTextReader.FinishReadQuotedNumber(ReadType readType)
   à Newtonsoft.Json.JsonTextReader.ReadAsDouble()
   à Newtonsoft.Json.JsonReader.ReadForType(JsonContract contract, Boolean hasConverter)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
   à Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   à Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   à Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   à Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
   à FanControl.LiquidCtl.LiquidCtlPlugin.Update()
   à FanControl.Domain.BackendProviders.Plugin.PluginBackendProvider.Update()
   à System.Collections.Generic.List`1.ForEach(Action`1 action)
   à FanControl.Domain.ComputerAccessLayer.Update()
   à FanControl.Domain.ApplicationClock.DoActions()
--- Fin de la trace de la pile à partir de l'emplacement précédent au niveau duquel l'exception a été levée ---
   à System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   à System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   à System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

And the output of liquidctl list --json:

[{"description": "NZXT Smart Device V2", "vendor_id": 7793, "product_id": 8198, "release_number": 512, "serial_number": "00000000001A", "bus": "hid", "address": "\\\\?\\HID#VID_1E71&PID_2006#9&2d827572&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}", "port": null, "driver": "SmartDevice2", "experimental": false}, {"description": "NZXT Kraken X (X53, X63 or X73)", "vendor_id": 7793, "product_id": 8199, "release_number": 513, "serial_number": "00000000001A", "bus": "hid", "address": "\\\\?\\HID#VID_1E71&PID_2007#a&1f09b849&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}", "port": null, "driver": "KrakenX3", "experimental": false}]

Thanks!

Crashes FanControl on Sensor Refresh

I've been trying last week to get liquidctl integration for FanControl working but seems like I have the wrong approach, I managed to get sensors from my AIO pump and fans to get picked up by FanControl but I can't seem to find them in control panels to adjust speed accordingly. Is there even an option for RPM control with this plugin? I've tried "Refresh sensor detection" but so far it always crashed FanControl so I can't really provide any kind of log from the application, nothing is logged during the crash.

FanControl V118
FanControl.LiquidCtl v0.1.1
liquidctl v1.9.1 (Windows-10-10.0.19041-SP0)

liquidctl list --json
[{"description": "NZXT Kraken X (X42, X52, X62 or X72)", "vendor_id": 7793, "product_id": 5902, "release_number": 512, "serial_number": "5D81267D333", "bus": "hid", "address": "\\\\?\\HID#VID_1E71&PID_170E#6&2e599c9b&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}", "port": null, "driver": "Kraken2", "experimental": false}]

liquidctl status --json
[{"bus": "hid", "address": "\\\\?\\HID#VID_1E71&PID_170E#6&2e599c9b&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}", "description": "NZXT Kraken X (X42, X52, X62 or X72)", "status": [{"key": "Liquid temperature", "value": 34.9, "unit": "°C"}, {"key": "Fan speed", "value": 931, "unit": "rpm"}, {"key": "Pump speed", "value": 2108, "unit": "rpm"}]}]

Fan Control crashes on launch

Fan Control 132
liquidctl v1.11.1

I tried different python versions, 3.7.9, 3.10.8, none seem to work. Heres some logs:

21.10.2022 19:55:41: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Nie można niejawnie przekonwertować typu „Python.Runtime.PyObject” na „string”.
   w CallSite.Target(Closure , CallSite , Object )
   w System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
   w FanControl.LiquidCtl.LiquidCtlExecutor.Execute[T](String arguments)
   w FanControl.LiquidCtl.LiquidCtlPlugin.Initialize()
   w FanControl.Domain.BackendProviders.Plugin.PluginBackendProvider.Open() w C:\Users\Remi\source\repos\FanControl\FanControl.Library\Domain\BackendProviders\Plugin\PluginBackendProvider.cs:wiersz 50
liquidctl status --json
[{"bus": "hid", "address": "\\\\?\\HID#VID_048D&PID_8297&Col02#6&1d60bfb1&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}", "description": "Gigabyte RGB Fusion 2.0 8297 Controller", "status": []}, {"bus": "hid", "address": "\\\\?\\HID#VID_1E71&PID_170E#7&12b9e089&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}", "description": "NZXT Kraken X (X42, X52, X62 or X72)", "status": [{"key": "Liquid temperature", "value": 29.3, "unit": "°C"}, {"key": "Fan speed", "value": 910, "unit": "rpm"}, {"key": "Pump speed", "value": 2034, "unit": "rpm"}]}]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.