How To: Ethereum Mining Dashboard. HiveOS, Ethermine pool, Crypto Prices and DB Historical data statistics

Update the ethermine add-on to the latest version, there was a change last week

Thanks but I installed it two days ago. Running v1.0.11.

Great work! got this working, but I seam to be getting 5 messages each minute all the same, what could be wrong or is this normal?

Can you please share your config? I am at a loss on how to get this working.

Try to format your code using ``` before and after, so it becomes readable.
Since ethermine works, there should be some mistake in the template sensors code.
So re-format it so we can have a look at it.

I think the log is only updated once per minute, so it would be logical to get the same message within a minute.
As to why you get 5 messages, i’m not really sure, check that you have followed exactly the 3. part of the OP, where the hive instructions are.

  • Have you removed the -f flag after tail?
  • If you manually run the script by typing hiveos2mqtt.sh what happens? does it give just one set of data or more?
  • Lastly check that the crontab job is set correctly with five asterisks at the start of the command.

That’s all i can think of :frowning:
And keep in mind that I myself collected all the info through online tutorials, i’m not very experienced :slight_smile:

Some one have some suggestions ? mqtt from miner to broker looks fine … Homeassistent configs looks fine if i belive config checker… but there isn’t showing any data…

sensor.yaml :

#Hiveos shit

- platform: mqtt
  name: hiveos_stats
  state_topic: "miner"
  value_template: "{{ value_json.params.miner_stats.uptime }}"
  json_attributes_topic: "miner"
  json_attributes_template: "{{ value_json.params.miner_stats | to_json }}"

- platform: mqtt
  name: hiveos_params
  state_topic: "miner"
  value_template: "{{ value_json.params.miner_stats.uptime }}"
  json_attributes_topic: "miner"
  json_attributes_template: "{{ value_json.params | to_json }}"

- platform: template
  sensors:
      hiveos_uptime:
        friendly_name: "Hive OS Uptime"
        value_template: >-
          {% set time = (states.sensor.hiveos_stats.attributes['uptime'] | int) | int %}
          {% set minutes = ((time % 3600) / 60) | int %}
          {% set hours = ((time % 86400) / 3600) | int %}
          {% set days = (time / 86400) | int %}
          
          {%- if time < 60 -%}
            Less than a minute
          {%- else -%}
            {%- if days > 0 -%}
              {{ days }}d
            {%- endif -%}
            {%- if hours > 0 -%}
              {%- if days > 0 -%}
                {{ ' ' }}
              {%- endif -%}
              {{ hours }}h
            {%- endif -%}
            {%- if minutes > 0 -%}
              {%- if days > 0 or hours > 0 -%}
                {{ ' ' }}
              {%- endif -%}
              {{ minutes }}m
            {%- endif -%}
          {%- endif -%}
          value_template: "{{ (states.sensor.hiveos_stats.attributes['uptime']) }}" 
             unit_of_measurement: "s"

      hiveos_cpu_temp:
        friendly_name: "Hive OS CPU Temp"
        value_template: "{{ (states.sensor.hiveos_params.attributes['cputemp'][0]) }}"
        unit_of_measurement: "°C"

      hiveos_total_mhs:
        friendly_name: "Hive OS Total MH/s"
        value_template: "{{ (states.sensor.hiveos_params.attributes['total_khs'])/1000 }}"
        unit_of_measurement: "MH/s"

      hiveos_total_pwr:
        friendly_name: "Hive OS Cards NET Power Consumption"
        value_template: "{{(states.sensor.gpu_0_pwr.state)|int+(states.sensor.gpu_1_pwr.state)|int+(states.sensor.gpu_2_pwr.state)|int+(states.sensor.gpu_3_pwr.state)|int+(states.sensor.gpu_4_pwr.state)|int+(states.sensor.gpu_5_pwr.state)|int+(states.sensor.gpu_6_pwr.state)|int}}"
        unit_of_measurement: "W"

### gpu0
      gpu_0_index:
        value_template: '0'
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Index"
      gpu_0_name:
        value_template: "1660S-ASUS1"
      gpu_0_hash:
        value_template: "{{ (states.sensor.hiveos_stats.attributes['hs'][states.sensor.gpu_0_index.state|int])/1000 }}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Hash"
        unit_of_measurement: "MH/s"
      gpu_0_core:
        value_template: "{{ (states.sensor.hiveos_params.attributes['temp'][states.sensor.gpu_0_index.state|int +1]) }}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Core Temp"
        unit_of_measurement: "°C"
      gpu_0_fan:
        value_template: "{{ (states.sensor.hiveos_params.attributes['fan'][states.sensor.gpu_0_index.state|int +1]) }}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Fan Speed"
        unit_of_measurement: "RPM"
      gpu_0_pwr:
        value_template: "{{ (states.sensor.hiveos_params.attributes['power'][states.sensor.gpu_0_index.state|int +1]) }}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Power Consumption"
        unit_of_measurement: "W"

#Mhs/Watt
      gpu_0_pwr_eff:
        value_template: "{{ (((states.sensor.hiveos_stats.attributes['hs'][states.sensor.gpu_0_index.state|int])/1000 )/(states.sensor.hiveos_params.attributes['power'][states.sensor.gpu_0_index.state|int +1]) )|round(3)}}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Power Efficiency"
        unit_of_measurement: "Mh/W"

#Cost, Net and Gross Earnings per GPU
      gpu_0_cost_per_month:
        value_template: "{{ ((states.sensor.hiveos_params.attributes['power'][states.sensor.gpu_0_index.state|int +1]) * (states.sensor.calculated_power_to_price_multiplier.state|float))|round(2)}}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Cost Per Month"
        unit_of_measurement: "€"
      gpu_0_euro_per_month:
        value_template: "{{((states.sensor.gpu_0_hash.state |float/ states.sensor.hiveos_total_mhs.state |float)* states.sensor.eur_per_30d.state|float)|round(2)}}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} EUR Per Month"
        unit_of_measurement: "€"
      gpu_0_net_euro_per_month:
        value_template: "{{(((states.sensor.gpu_0_hash.state |float/ states.sensor.hiveos_total_mhs.state |float)* states.sensor.eur_per_30d.state|float) -states.sensor.gpu_0_cost_per_month.state|float)|round(2)}}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Net EUR Per Month"
        unit_of_measurement: "€"

- platform: average
  name: "HiveOS GPU AVG Temp"
  entities:
    - sensor.gpu_0_core
    - sensor.gpu_1_core 
      

- platform: average
  name: 'RX580 GPU0'
  duration:
    days: 1
  entities:
    - sensor.gpu_0_core

https://www.darkonline.nl/hiveos.jpg
https://www.darkonline.nl/hiveos1.jpg

I’m having an issue with LA (load average) warnings on my rigs, I believe those started because of the 1 minutes cron jobs.

Did you have LA error on your rigs ? or what do you think would cause high LA average warnings.

Thanks.

I made a few tweaks to the HiveOS script to reduce sending duplicate information and remove the password from being sent in the json string. When the script runs tail, it returns the last several results and send each as a separate call to the MQTT server. Since we only need the most recent, the tail -2 grabs only the last results for updating sending each time it runs. The second item is taking the json_line and running it through jq to remove the password line, well, because sending or storing passwords in clear text logs is always a bad thing.

#!/bin/bash
# MQTT settings
BROKER='EINTER MQTT SERVER NAME/IP HERE'
TOPIC='GIVE TOPIC HERE'
USER='USERNAME IF REQUIRED'
PASS='PASSWORD IF REQUIRED'

# Ensure mosquitto-clients is installed
dpkg -s mosquitto-clients >/dev/null 2>&1 || apt update && apt install -y mosquitto-clients

# Stream logs to MQTT
tail -2 /var/log/hive-agent.log | while read -r line; do
    json_line=$(echo ${line} | awk -F'[<>]' {'print $2'})
    if $(echo "$json_line" | jq -e 'has("method")'); then
        json_line=$(echo "$json_line" | jq -e 'del(.params.passwd)')
        mosquitto_pub -h $BROKER -t $TOPIC -u "$USER" -P "$PASS" -m "$json_line"
    fi
done
1 Like

Found I could make this even simpler by using what HiveOS creates for use to log post the new script to use with bash below. HiveOS produces several logs to the /run/hive/ folder including the gpu-device information.

Decided to take this even 1 step further, and I’m working on a script that can be run from the miner that will format and even create the devices and entities through MQTT. It’s in a little different format from what your originally using, it’s in alpha stage right now, but posted to github for those who wish to assist or use.

#!/bin/bash
# MQTT settings
BROKER='EINTER MQTT SERVER NAME/IP HERE'
TOPIC='GIVE TOPIC HERE'
USER='USERNAME IF REQUIRED'
PASS='PASSWORD IF REQUIRED'

# Ensure mosquitto-clients is installed
dpkg -s mosquitto-clients >/dev/null 2>&1 || apt update && apt install -y mosquitto-clients

#Forward last stats to MQTT
json_line = $( jq -e 'del(.params.passwd)' /run/hive/last_stat.json)
mosquitto_pub -h $BROKER -t $TOPIC -u "$USER" -P "$PASS" -m "$json_line"
2 Likes

Hi guys, so i tried to add my rig and I’m on my way to succeed but not completely. I set up my broker in hive and also in HA, i even managed to get states from those both sensors but i think they are not correct:

in the configuration.yaml i added this code:

#hiveos
sensor:
  - platform: mqtt
    name: hiveos_stats
    state_topic: "HIVE2MQTT"
    value_template: "{{ value_json.params.miner_stats.uptime }}"
    json_attributes_topic: "hive_mqtt_1"
    json_attributes_template: "{{ value_json.params.miner_stats | to_json }}"

  - platform: mqtt
    name: hiveos_params
    state_topic: "HIVE2MQTT"
    value_template: "{{ value_json.params.miner_stats.uptime }}"
    json_attributes_topic: "hive_mqtt_1"
    json_attributes_template: "{{ value_json.params | to_json }}"

is the configuration.yaml the correct file and where do i have to add the other sensors - also in the configuration.yaml?

Can i just copy e.g.

 - platform: template
    sensors:

      hiveos_uptime:
        friendly_name: "Hive OS Uptime"
        value_template: >-
          {% set time = (states.sensor.hiveos_stats.attributes['uptime'] | int) | int %}
          {% set minutes = ((time % 3600) / 60) | int %}
          {% set hours = ((time % 86400) / 3600) | int %}
          {% set days = (time / 86400) | int %}
          
          {%- if time < 60 -%}
            Less than a minute
          {%- else -%}
            {%- if days > 0 -%}
              {{ days }}d
            {%- endif -%}
            {%- if hours > 0 -%}
              {%- if days > 0 -%}
                {{ ' ' }}
              {%- endif -%}
              {{ hours }}h
            {%- endif -%}
            {%- if minutes > 0 -%}
              {%- if days > 0 or hours > 0 -%}
                {{ ' ' }}
              {%- endif -%}
              {{ minutes }}m
            {%- endif -%}
          {%- endif -%}
    # value_template: "{{ (states.sensor.hiveos_stats.attributes['uptime']) }}" 
    # unit_of_measurement: "s"

      hiveos_cpu_temp:
        friendly_name: "Hive OS CPU Temp"
        value_template: "{{ (states.sensor.hiveos_params.attributes['cputemp'][0]) }}"
        unit_of_measurement: "°C"

      hiveos_total_mhs:
        friendly_name: "Hive OS Total MH/s"
        value_template: "{{ (states.sensor.hiveos_params.attributes['total_khs'])/1000 }}"
        unit_of_measurement: "MH/s"

      hiveos_total_pwr:
        friendly_name: "Hive OS Cards NET Power Consumption"
        value_template: "{{(states.sensor.gpu_0_pwr.state)|int+(states.sensor.gpu_1_pwr.state)|int+(states.sensor.gpu_2_pwr.state)|int+(states.sensor.gpu_3_pwr.state)|int+(states.sensor.gpu_4_pwr.state)|int+(states.sensor.gpu_5_pwr.state)|int+(states.sensor.gpu_6_pwr.state)|int}}"
        unit_of_measurement: "W"

### gpu0
      gpu_0_index:
        value_template: '0'
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Index"
      gpu_0_name:
        value_template: "1660S-ASUS1"
      gpu_0_hash:
        value_template: "{{ (states.sensor.hiveos_stats.attributes['hs'][states.sensor.gpu_0_index.state|int])/1000 }}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Hash"
        unit_of_measurement: "MH/s"
      gpu_0_core:
        value_template: "{{ (states.sensor.hiveos_params.attributes['temp'][states.sensor.gpu_0_index.state|int +1]) }}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Core Temp"
        unit_of_measurement: "°C"
      gpu_0_fan:
        value_template: "{{ (states.sensor.hiveos_params.attributes['fan'][states.sensor.gpu_0_index.state|int +1]) }}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Fan Speed"
        unit_of_measurement: "RPM"
      gpu_0_pwr:
        value_template: "{{ (states.sensor.hiveos_params.attributes['power'][states.sensor.gpu_0_index.state|int +1]) }}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Power Consumption"
        unit_of_measurement: "W"

#Mhs/Watt
      gpu_0_pwr_eff:
        value_template: "{{ (((states.sensor.hiveos_stats.attributes['hs'][states.sensor.gpu_0_index.state|int])/1000 )/(states.sensor.hiveos_params.attributes['power'][states.sensor.gpu_0_index.state|int +1]) )|round(3)}}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Power Efficiency"
        unit_of_measurement: "Mh/W"

#Cost, Net and Gross Earnings per GPU
      gpu_0_cost_per_month:
        value_template: "{{ ((states.sensor.hiveos_params.attributes['power'][states.sensor.gpu_0_index.state|int +1]) * (states.sensor.calculated_power_to_price_multiplier.state|float))|round(2)}}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Cost Per Month"
        unit_of_measurement: "€"
      gpu_0_euro_per_month:
        value_template: "{{((states.sensor.gpu_0_hash.state |float/ states.sensor.hiveos_total_mhs.state |float)* states.sensor.eur_per_30d.state|float)|round(2)}}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} EUR Per Month"
        unit_of_measurement: "€"
      gpu_0_net_euro_per_month:
        value_template: "{{(((states.sensor.gpu_0_hash.state |float/ states.sensor.hiveos_total_mhs.state |float)* states.sensor.eur_per_30d.state|float) -states.sensor.gpu_0_cost_per_month.state|float)|round(2)}}"
        friendly_name_template: "{{states.sensor.gpu_0_name.state}} Net EUR Per Month"
        unit_of_measurement: "€"

to the configuratin.yaml and then the sensors should appear? Because thats what i did (see below code) but only the upper two sensors (see screeshot above) appear:

#hiveos
sensor:
  - platform: mqtt
    name: hiveos_stats
    state_topic: "HIVE2MQTT"
    value_template: "{{ value_json.params.miner_stats.uptime }}"
    json_attributes_topic: "hive_mqtt_1"
    json_attributes_template: "{{ value_json.params.miner_stats | to_json }}"

  - platform: mqtt
    name: hiveos_params
    state_topic: "HIVE2MQTT"
    value_template: "{{ value_json.params.miner_stats.uptime }}"
    json_attributes_topic: "hive_mqtt_1"
    json_attributes_template: "{{ value_json.params | to_json }}"
    
  - platform: template
    sensors:
      eth_per_hour_1h_sample:
        friendly_name: "Eth per Hour (1h Sampled)"
        value_template: "{{((states.sensor.eth_mined_total.state) |float - (states.sensor.eth_mined_total_history_1h.state) |float ) |round(10) }}"
        unit_of_measurement: "ETH"
        icon_template: mdi:ethereum
      eth_per_day_1h_sample:
        friendly_name: "Eth per Day (1h Sampled)"
        value_template: "{{ ((((states.sensor.eth_mined_total.state) |float - (states.sensor.eth_mined_total_history_1h.state) |float) |float )*24 ) |round(10) }}"
        unit_of_measurement: "ETH"
        icon_template: mdi:ethereum
      eth_per_30d_1h_sample:
        friendly_name: "Eth per 30d (1h Sampled)"
        value_template: "{{ ((((states.sensor.eth_mined_total.state) |float - (states.sensor.eth_mined_total_history_1h.state) |float) |float )*24*30 ) |round(10) }}"
        unit_of_measurement: "ETH"
        icon_template: mdi:ethereum

      eth_per_hour_6h_sample:
        friendly_name: "Eth per Hour (6h Sampled)"
        value_template: "{{(((states.sensor.eth_mined_total.state) |float -  (states.sensor.eth_mined_total_history_6h.state) |float)/6 ) |round(10) }}"
        unit_of_measurement: "ETH"
        icon_template: mdi:ethereum
      eth_per_day_6h_sample:
        friendly_name: "Eth per Day (6h Sampled)"
        value_template: "{{ (((((states.sensor.eth_mined_total.state) |float -  (states.sensor.eth_mined_total_history_6h.state) |float)/6 ) |float )*24)  |round(10) }}"
        unit_of_measurement: "ETH"
        icon_template: mdi:ethereum
      eth_per_30d_6h_sample:
        friendly_name: "Eth per 30d (6h Sampled)"
        value_template: "{{ (((((states.sensor.eth_mined_total.state) |float -  (states.sensor.eth_mined_total_history_6h.state) |float)/6) |float )*24*30) |round(10)  }}"
        unit_of_measurement: "ETH"
        icon_template: mdi:ethereum

      eth_per_hour_12h_sample:
        friendly_name: "Eth per Hour (12h Sampled)"
        value_template: "{{(((states.sensor.eth_mined_total.state) |float -  (states.sensor.eth_mined_total_history_12h.state) |float)/12 ) |round(10) }}"
        unit_of_measurement: "ETH"
        icon_template: mdi:ethereum
      eth_per_day_12h_sample:
        friendly_name: "Eth per Day (12h Sampled)"
        value_template: "{{ (((((states.sensor.eth_mined_total.state) |float -  (states.sensor.eth_mined_total_history_12h.state) |float)/12) |float )*24)  |round(10) }}"
        unit_of_measurement: "ETH"
        icon_template: mdi:ethereum
      eth_per_30d_12h_sample:
        friendly_name: "Eth per 30d (12h Sampled)"
        value_template: "{{ (((((states.sensor.eth_mined_total.state) |float -  (states.sensor.eth_mined_total_history_12h.state) |float)/12) |float )*24*30 ) |round(10) }}"
        unit_of_measurement: "ETH"
        icon_template: mdi:ethereum

      eth_per_hour_24h_sample:
        friendly_name: "Eth per Hour (24h Sampled)"
        value_template: "{{(((states.sensor.eth_mined_total.state) |float -  (states.sensor.eth_mined_total_history_24h.state) |float)/24) |round(10) }}"
        unit_of_measurement: "ETH"
        icon_template: mdi:ethereum
      eth_per_day_24h_sample:
        friendly_name: "Eth per Day (24h Sampled)"
        value_template: "{{ (((((states.sensor.eth_mined_total.state) |float -  (states.sensor.eth_mined_total_history_24h.state) |float)/24 ) |float )*24)|round(10) }}"
        unit_of_measurement: "ETH"
        icon_template: mdi:ethereum
      eth_per_30d_24h_sample:
        friendly_name: "Eth per 30d (24h Sampled)"
        value_template: "{{ (((((states.sensor.eth_mined_total.state) |float -  (states.sensor.eth_mined_total_history_24h.state) |float)/24 ) |float )*24*30)|round(10) }}"
        unit_of_measurement: "ETH"
        icon_template: mdi:ethereum

If i check the logs of the MQTT broker addon i see alot of re-connections:

ist that legit? I’m really not a programmer so apologies for any obvious issues I’m overseeing.

Many thanks in advance!

Thanks for posting this @krash, nicely written, easy to follow. Picked a few of the metrics I wanted, everything worked straight away.

1 Like

I tried with the settings for my next rig and get all the values through mqtt in HA, the problem is to show the values on the cards, this is my settings, just repeat same values for all gpus

  • platform: mqtt
    name: hiveos_params_rig2
    state_topic: “hive_mqtt_2”
    value_template: “{{ value_json.params.miner_stats.uptime }}”
    json_attributes_topic: “hive_mqtt_2”
    json_attributes_template: “{{ value_json.params | to_json }}”

  • platform: template
    sensors:
    #GPU 0
    rig_2gpu_0_index:
    value_template: ‘0’
    friendly_name_template: “{{states.sensor.rig_2gpu_0_name.state}} Index”
    rig_2gpu_0_name:
    value_template: “rx580”
    rig_2gpu_0_hash:
    value_template: “{{ (states.sensor.hiveos_stats_rig2.attributes[‘hs’][states.sensor.rig_2gpu_0_index.state|int])/1000 }}”
    friendly_name_template: “{{states.sensor.rig_2gpu_0_name.state}} Hash”
    unit_of_measurement: “MH/s”
    rig_2gpu_0_core:
    value_template: “{{ (states.sensor.hiveos_params_rig2.attributes[‘temp’][states.sensor.rig_2gpu_0_index.state|int +1]) }}”
    friendly_name_template: “{{states.sensor.rig_2gpu_0_name.state}} Core Temp”
    unit_of_measurement: “°C”
    rig_2gpu_0_fan:
    value_template: “{{ (states.sensor.hiveos_params_rig2.attributes[‘fan’][states.sensor.rig_2gpu_0_index.state|int +1]) }}”
    friendly_name_template: “{{states.sensor.rig_2gpu_0_name.state}} Fan Speed”
    unit_of_measurement: “%”
    rig_2gpu_0_pwr:
    value_template: “{{ (states.sensor.hiveos_params_rig2.attributes[‘power’][states.sensor.rig_2gpu_0_index.state|int +1]) }}”
    friendly_name_template: “{{states.sensor.rig_2gpu_0_name.state}} Power Consumption”
    unit_of_measurement: “W”

#GPU 1
rig_2gpu_1_index:
value_template: ‘1’
friendly_name_template: “{{states.sensor.rig_2gpu_1_name.state}} Index”
rig_2gpu_1_name:
value_template: “rx580”
rig_2gpu_1_hash:
value_template: “{{ (states.sensor.hiveos_stats_rig2.attributes[‘hs’][states.sensor.rig_2gpu_1_index.state|int])/1000 }}”
friendly_name_template: “{{states.sensor.rig_2gpu_1_name.state}} Hash”
unit_of_measurement: “MH/s”
rig_2gpu_1_core:
value_template: “{{ (states.sensor.hiveos_params_rig2.attributes[‘temp’][states.sensor.rig_2gpu_1_index.state|int +1]) }}”
friendly_name_template: “{{states.sensor.rig_2gpu_1_name.state}} Core Temp”
unit_of_measurement: “°C”
rig_2gpu_1_fan:
value_template: “{{ (states.sensor.hiveos_params_rig2.attributes[‘fan’][states.sensor.rig_2gpu_1_index.state|int +1]) }}”
friendly_name_template: “{{states.sensor.rig_2gpu_1_name.state}} Fan Speed”
unit_of_measurement: “%”
rig_2gpu_1_pwr:
value_template: “{{ (states.sensor.hiveos_params_rig2.attributes[‘power’][states.sensor.rig_2gpu_1_index.state|int +1]) }}”
friendly_name_template: “{{states.sensor.rig_2gpu_1_name.state}} Power Consumption”
unit_of_measurement: “W”

First is first. Thanks for the code, it is really useful. I have been using it for a long time and everything work like charm. But with the last update the cron job stopped working. I have tried several things and finally found then the cronjob list it is using now its /etc/crontab and not /hive/etc/crontab.root. Also then sudo crontab -e was not working for me. Anyone else have had problems with this?

Hei this looks very good but i am stuck.
pretty new to all this and this one gives me a problem:

  • So go to your ha config files and add the following block of code under a sensor: tag

I have no idea where to add anything. Maybe this is simple info for the HA PRO’s i am not one of them :wink:

Please help me if you have time.

Thx for this post.

Try giving this a read:

This is a file where you can manually add code for your home assistant.

You could also check out packages, and have all the code in a separate file:

So I built this interface for my 4 miners. It’s kind of similar but may give some inspiration to a user on what’s possible with a bit of playing around. It’s Litecoin but similar I guess.

Your Ethereum mining dashboard looks fantastic! Integrating all those elements into Home Assistant is a great idea for efficient monitoring and control. It’s impressive how you’ve organized everything into clickable parts for easy navigation.
If you’re looking to keep track of your Ethereum balance, using an eth address scanner could be beneficial. With just a few clicks, you can check your ETH balance and stay updated on your earnings.
Your attention to detail, especially with the recent modifications, shows your commitment to optimizing your mining setup. The addition of power efficiency sensors, monthly cost per GPU, and summary tables provide valuable insights for maximizing your profits.

1 Like

Thanks, I did really invest a load of time in to that back then.

I have stopped mining for about a year now :slight_smile:

I might integrate your idea, to keep track of how my (small) portfolio is going :slight_smile: