Skip to content

Commit

Permalink
Merge branch 'main' of https://github.com/amnweb/yasb
Browse files Browse the repository at this point in the history
  • Loading branch information
amnweb committed Nov 26, 2024
2 parents e4c7f9c + 5fe5203 commit 78d30ea
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 33 deletions.
44 changes: 25 additions & 19 deletions docs/widgets/(Widget)-Libre-HW-Monitor.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,26 @@
# Libre Hardware Monitor Widget Configuration

| Option | Type | Default | Description |
|-------------------------|---------|------------------------------------------------------------------------------------------------|----------------------------------------------------------------------|
| `label` | string | `"<span>\udb82\udcae </span> {info[value]}{info[unit]}"` | The primary label format. |
| `label_alt` | string | `"<span>\uf4bc </span>{info[histogram]} {info[value]} ({info[min]}/{info[max]}) {info[unit]}"` | Histograms. The alternative label format. |
| `sensor_id` | string | `"/amdcpu/0/load/0"` | Libre Hardware Monitor SensorId from http://localhost:8085/data.json |
| `class_name` | string | `"libre-monitor-widget"` | CSS class name for styling of different widget instances. |
| `update_interval` | integer | `1000` | The interval in milliseconds to update the widget. |
| `precision` | integer | `1` | Floating point precision of the info[value]. |
| `history_size` | integer | `60` | The size of the min/max history. |
| `histogram_num_columns` | integer | `10` | The number of columns in the histogram. |
| `histogram_fixed_min` | integer | `None` | Histogram minimum value. If None - set as history minimum value. |
| `histogram_fixed_max` | integer | `None` | Histogram maximum value. If None - set as history maximum value. |
| `server_host` | string | `"localhost"` | Libre Hardware Monitor server host. |
| `server_port` | integer | `8085` | Libre Hardware Monitor server port. |
| `server_username` | string | `""` | Libre Hardware Monitor username. Only needed if auth is enabled. |
| `server_password` | string | `""` | Libre Hardware Monitor password. Only needed if auth is enabled. |
| `histogram_icons` | list | `['\u2581', '\u2581', '\u2582', '\u2583', '\u2584', '\u2585', '\u2586', '\u2587', '\u2588']` | Icons representing CPU usage histograms. |
| `callbacks` | dict | `{'on_left': 'toggle_label', 'on_middle': 'do_nothing', 'on_right': 'do_nothing'}` | Callback functions for different mouse button actions. |
| Option | Type | Default | Description |
|--------------------------|---------|------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------|
| `label` | string | `"<span>\udb82\udcae </span> {info[value]}{info[unit]}"` | The primary label format. |
| `label_alt` | string | `"<span>\uf4bc </span>{info[histogram]} {info[value]} ({info[min]}/{info[max]}) {info[unit]}"` | Histograms. The alternative label format. |
| `sensor_id` | string | `"/amdcpu/0/load/0"` | Libre Hardware Monitor SensorId from http://localhost:8085/data.json |
| `class_name` | string | `"libre-monitor-widget"` | CSS class name for styling of different widget instances. |
| `update_interval` | integer | `1000` | The interval in milliseconds to update the widget. |
| `precision` | integer | `2` | Floating point precision of the info[value]. |
| `history_size` | integer | `60` | The size of the min/max history. |
| `histogram_num_columns` | integer | `10` | The number of columns in the histogram. |
| `histogram_fixed_min` | integer | `None` | Histogram minimum value. If None - set as history minimum value. |
| `histogram_fixed_max` | integer | `None` | Histogram maximum value. If None - set as history maximum value. |
| `sensor_id_error_label` | string | `N/A` | The label shown when the sensor id is invalid or the sensor does not exist/disabled. |
| `connection_error_label` | string | `Connection error...` | The label shown when YASB can't connect to the Libre Hardware Monitor Web server. Either the server is not running or the IP/port is wrong. |
| `auth_error_label` | string | `Auth Failed...` | The label shown when there is a username/password issue while connecting to LHM Web server if the authentication is enabled in LHM settings. |
| `server_host` | string | `"localhost"` | Libre Hardware Monitor server host. |
| `server_port` | integer | `8085` | Libre Hardware Monitor server port. |
| `server_username` | string | `""` | Libre Hardware Monitor username. Only needed if auth is enabled. |
| `server_password` | string | `""` | Libre Hardware Monitor password. Only needed if auth is enabled. |
| `histogram_icons` | list | `['\u2581', '\u2581', '\u2582', '\u2583', '\u2584', '\u2585', '\u2586', '\u2587', '\u2588']` | Icons representing CPU usage histograms. |
| `callbacks` | dict | `{'on_left': 'toggle_label', 'on_middle': 'do_nothing', 'on_right': 'do_nothing'}` | Callback functions for different mouse button actions. |

## Example Configuration (GPU Temperature)

Expand All @@ -29,7 +32,7 @@
label_alt: "<span>\uf437 </span>{info[histogram]} {info[value]} ({info[min]}/{info[max]}) {info[unit]}"
sensor_id: "/gpu-nvidia/0/temperature/0"
update_interval: 1000
precision: 1
precision: 2
histogram_num_columns: 10
class_name: "libre-monitor-widget"

Expand Down Expand Up @@ -80,6 +83,9 @@
- **histogram_fixed_max**: Set the fixed maximum value of the histogram. Actual sensor max value from the history is not changed. If not set manually it will be set as history maximum value.
- **histogram_icons**: A list of icons representing different values of the histogram.
- **histogram_num_columns**: The number of columns to display in the histogram.
- **sensor_id_error_label**: The label shown when the sensor id is invalid or the sensor does not exist/disabled.
- **connection_error_label**: The label shown when YASB can't connect to the Libre Hardware Monitor Web server. Either the server is not running or the IP/port is wrong.
- **auth_error_label**: The label shown when there is a username/password issue while connecting to LHM Web server if the authentication is enabled in LHM settings.
- **server_host**: The host of the Libre Hardware Monitor server.
- **server_port**: The port of the Libre Hardware Monitor server.
- **server_username**: The username of the Libre Hardware Monitor server. Required if auth is enabled.
Expand Down
18 changes: 18 additions & 0 deletions src/core/validation/widgets/yasb/libre_monitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
'history_size': 60,
'histogram_fixed_min': None,
'histogram_fixed_max': None,
'sensor_id_error_label': "N/A",
'connection_error_label': "Connection error...",
'auth_error_label': "Auth Failed...",
'server_host': 'localhost',
'server_port': 8085,
'server_username': '',
Expand Down Expand Up @@ -100,6 +103,21 @@
'required': False,
'nullable': True
},
'sensor_id_error_label': {
'type': 'string',
'default': DEFAULTS['sensor_id_error_label'],
'required': False,
},
'connection_error_label': {
'type': 'string',
'default': DEFAULTS['connection_error_label'],
'required': False,
},
'auth_error_label': {
'type': 'string',
'default': DEFAULTS['auth_error_label'],
'required': False,
},
'server_host': {
'type': 'string',
'default': DEFAULTS['server_host'],
Expand Down
42 changes: 28 additions & 14 deletions src/core/widgets/yasb/libre_monitor.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ def __init__(
history_size: int,
histogram_fixed_min: float | None,
histogram_fixed_max: float | None,
sensor_id_error_label,
connection_error_label,
auth_error_label,
server_host: str,
server_port: int,
server_username: str,
Expand All @@ -42,6 +45,9 @@ def __init__(
self._history_long: deque[float] = deque([], maxlen=history_size)
self._histogram_fixed_min = histogram_fixed_min
self._histogram_fixed_max = histogram_fixed_max
self._sensor_id_error_label = sensor_id_error_label
self._connection_error_label = connection_error_label
self._auth_error_label = auth_error_label
self._histogram_icons = histogram_icons
self._histogram_num_columns = histogram_num_columns
self._server_host = server_host
Expand Down Expand Up @@ -72,6 +78,14 @@ def __init__(
# Called if the server requests authentication
self._network_manager.authenticationRequired.connect(self._handle_authentication)

# Create a request
url = QUrl(f"http://{self._server_host}:{self._server_port}/Sensor?action=Get&id={self._sensor_id}")
self.request = QNetworkRequest(url)
self.request.setHeader(
QNetworkRequest.KnownHeaders.ContentTypeHeader,
"application/x-www-form-urlencoded",
)

# Callbacks
self.callback_left = callbacks["on_left"]
self.callback_right = callbacks["on_right"]
Expand Down Expand Up @@ -132,12 +146,12 @@ def _update_label(self):
"""Make a request and update the label with the received data"""
self._make_request()
info = {
"status": "No Connection...",
"value": 0.0,
"status": "",
"value": "",
"unit": "",
"min": 0.0,
"max": 0.0,
"histogram": "No Connection..."
"min": "",
"max": "",
"histogram": "",
}
if self._data and self._data.get("result") == "ok":
value = self._data.get("value", 0.0)
Expand Down Expand Up @@ -179,10 +193,7 @@ def _update_label(self):

def _make_request(self):
"""Makes a post request to LibreHardwareMonitor"""
url = QUrl(f"http://{self._server_host}:{self._server_port}/Sensor?action=Get&id={self._sensor_id}")
request = QNetworkRequest(url)
request.setHeader(QNetworkRequest.KnownHeaders.ContentTypeHeader, "application/x-www-form-urlencoded")
self._network_manager.post(request, b"")
self._network_manager.post(self.request, b"")

def _handle_network_response(self, reply: QNetworkReply):
"""
Expand All @@ -195,18 +206,21 @@ def _handle_network_response(self, reply: QNetworkReply):
if self._data.get("result") == "ok":
self._data["status"] = "Connected..."
else:
self._data["status"] = "Invalid sensor id..."
self._data["status"] = self._sensor_id_error_label
self._data["histogram"] = self._sensor_id_error_label
elif reply.error() == QNetworkReply.NetworkError.AuthenticationRequiredError:
self._data = {
"status": "Authentication Failed...",
"status": self._auth_error_label,
"result": "fail",
"value": 0.0,
"value": "",
"histogram": self._auth_error_label,
}
else:
self._data = {
"status": "Connection Error...",
"status": self._connection_error_label,
"result": "fail",
"value": 0.0,
"value": "",
"histogram": self._auth_error_label,
}
reply.deleteLater()

Expand Down

0 comments on commit 78d30ea

Please sign in to comment.