Giter VIP home page Giter VIP logo

miner2mqtt's Introduction

Miner2MQTT

Доступ к вашему GPU майнеру через MQTT либо мобильное приложение (miner2android)

Изменения

1.0
  • EXE файл для Windows
1.1(Linux)
  • Управление вентиляторами видеокарт (Linux)

  • Упраление power limit видеокарт (требуется SU) (Linux)

1.2(Linux)
  • Поддержка danila miner для майнинга TON. (Майнер запускается m2m.py, поэтому необходимо прописать команду для запуска в config.yaml. Хэшрейт для нескольких видеокарт будет одинаковым(общим))

  • Вывод дополнительных системных параметров: USED_RAM, CPU_temp, CPU_freq, CPU_FAN. (если использовали параметр INCLUDE в config.yaml, необходимо в него добавить: sys_params)

  • Исправление работы регулировки вентиляторов видекарт с двумя и тремя вентиляторами. (Для видеокарт с одним вентилятором возможны проблемы, не на чем протестировать)

1.3(Linux)
  • Поддержка APIKEY для Trex. Не обязательный параметр TrexAPIPASS в config.yaml
  • Поддержка API адреса для Trex. Не обязательный параметр TrexAPI в config.yaml
1.4
  • Поддержка lol-miner (необходима переустановка m2m либо ручная установка фреймворка flask(pip install flask))
1.5
  • Поддержка miner2android
  • (необходима переустановка m2m либо ручная установка waitress(pip install waitress))
  • (Для включения поддержки мобильного приложения в config.yamlнеобходимо добавить параметр APP)
1.5.1
  • Уведомления для miner2android. Ваша ферма следит за параметрами компьютера с интервалом INTERVAL в config.yaml, а затем отдает их приложению. (нет необходимости обновлять, если вы не используете miner2android)
1.5.2
  • Графики изменения величин для miner2android. Если в config.yaml включен параметр APP будет создана база данных values.db хранящая значения всех величин с начала предыдущих суток с интервалом INTERVAL. (нет необходимости обновлять, если вы не используете miner2android)
1.5.3
  • Исправление ошибок для miner2android и lol-miner
1.5.4
  • При изменении мощности видекарты, скорости вентиляторов, режима вентилятора(авто, ручной), значения сохраняются и применяются при перезапуске.
1.6
  • Поддержка NBMiner
  • Изменение конфига: Параметры TrexAPI, lolAPI заменены на общий параметр API. Параметры danila_command, lol_command заменены на общий параметр COMMAND.
1.6.1
  • Добавлена возможность остановить/запустить/перезапустить майнер из приложения или MQTT. Для этого опубликуйте Stop, Start, Restart в ваш_топик/to_miner/miner_state (есть пример сущности для Home Assistant). Текущее состояние майнера можно получить в ваш_топик/from_miner/miner_state. Для управления процессом майнера, необходимо что-бы miner2mqtt сам запускал майнер командой из COMMAND.

Описание

Поддерживаемые ОС

  • Linux
  • Windows (без управления)

Поддерживаемые майнеры

  • T-Rex
  • NBMiner
  • danila miner
  • lol miner

Воможности:

  • Публикация всей информации от майнера в MQTT
  • Возможность выборочной публикации (INCLUDE и EXCLUDE параметры в config.yaml)
  • Обновление с указанным интервалом или по требованию (путем публикации "ON" в ваш_топик/to_miner/refresh)
Управление вентиляторами видеокарт (version 1.1+)
  • Изменение скорости: публикация значения в процентах в топик ваш_топик/to_miner/<GPU_number>/fan_speed, топик с текущими значениями в процентах ваш_топик/from_miner/<GPU_number>/fan_speed.
  • Включение вентилятора: публикация значения ON в топик ваш_топик/to_miner/<GPU_number>/fan_state, топик с текущим состоянием ваш_топик/from_miner/<GPU_number>/fan_state.
  • Изменение режима auto/manual: публикация значения auto / manualв топик ваш_топик/to_miner/<GPU_number>/fan_mode, топик с текущим режимом ваш_топик/from_miner/<GPU_number>/fan_mode.
  • Остановка/Запуск/Перезапуск майнера.
Управление power limit видеокарт (version 1.1+)
  • Изменение power limit: публикация значения в процентах в топик ваш_топик/to_miner/<GPU_number>/power_limit, топик с текущими значениями в процентах ваш_топик/from_miner/<GPU_number>/power_limit.
  • Для изменения power limit требуются права SU, необходимо либо вписать SUDO_PASS в config.yaml либо запускать m2m.py с правами sudo.

Примечания:

  • danila-miner не предоставляет информации по каждой карте отдельно. В ваш топик будут публиковаться одинаковые суммарные значения хэшрейта для каждой карты
  • danila-miner не предоставляет информации о состоянии видекарты(температура, обороты вентиляторов, мощность), для Linux значения будут браться из nvidia-smi, для Windows эти значения будут пустыми.
  • для получения информации от lol-miner в его скрипте, необходимо включить API (например: --apiport 4067 --apihost 127.0.0.1)
  • для Windows, если используете параметр lol_command в скрипте майнера желательно прописать к нему абсолютный путь (например: "C:\Users\bds89\Downloads\lolMiner_v1.44_Win64\1.44\lolMiner.exe") либо располажить майнер на диске С.

Установка:

Ubuntu
sudo apt install python3-setuptools
git clone https://github.com/bds89/miner2mqtt.git
cd miner2mqtt
sudo python3 setup.py install   
gedit m2m_Linux/config.yaml   #Редактируем config.yaml

Запуск:

python3 m2m_Linux/m2m.py

Обновление:

  • Сохраните ваш config.yaml
    cd miner2mqtt
    git pull origin
  • Скопируйте ваш сохраненный config.yaml в miner2mqtt/m2m_Linux

Редактирование config.yaml:

MINER: Trex/danila-miner/lol-miner/NBMiner
    #выбор GPU майнера (не обязательно)
COMMAND: "/home/ferma2/TON_miner/danila-miner run https://server1.whalestonpool.com your_walet_adress"
    #Пример команды для запуска danila-miner(*обязательно, если используется `danila-miner`)
COMMAND: /home/bds89/lolMiner_v1.44_Lin64/1.44/dual_mine_eth_ton.sh
    #Пример команды для запуска lol-miner(не обязательно, при запуске майнера скриптом m2m в mqtt будут передаваться дополнитльные параметры `lhrtune`, `re-calibrate`)
API: http://127.0.0.1:4067
    #Адрес API для майнера, если отличается от стандартного, можно не укаывать, если арес и порт совпадают со значением по умолчанию: `http://127.0.0.1:4067`
TrexAPIPASS: YourWebGuiPassword
    #ваш пароль для Trex майнера
SUDO_PASS: pass
    #пароль суперпользователя, для изменения power_limit, только для Linux
MQTT: #(не обязательно, если используете только для мобильного приложения, этот блок можно убрать)
  TOPIC: miner2mqtt/rig0
  HOST: 192.168.0.120
  USERNAME: mqttuser
  PASS: mqttpass
    #Подключение к вашему MQTT
INTERVAL: 120s
    #интервал сбора и публикации информации в секундах (*обязательно)
INCLUDE:
- active_pool
- gpus
- sys_params
EXCLUDE: {}
    #фильтры по ключам из JSON словаря вашего майнера (поддерживаются только ключи первого уровня)
APP: #(не обязательно, если используете только для публикации в MQTT, этот блок можно убрать)
  IP_FLASK: 192.168.0.101 #IP вашего компьютера в локальной сети, обязательно для Windows, для Linux скрипт попытается найти самостоятельно 
  PORT_FLASK: 5000 #(не обязательно)
  SLAVE_PC: false #(не обязательно, если данный компьютер будет подключаться к мобильному приложению чере другой компьютер, укажите `true`)
  PORT_SOCKET: 5100 #(только для `SLAVE_PC: true`, не обязательно)
  SESSIONKEY: "1111" #любой набор символов(не обязательно, при отсутствии будет использоваться литерал из кода)
  PASS: "mobileAppPass" #пароль для подключения мобильного приложения (*не обязательно)

Примеры публикации в MQTT:

Публикация в mqtt будет отличаться в зависимости от майнера, вы можете посмотреть ее, подписавшись на свойтопик/# в HomeAssitant, ниже приведен пример публикации в mqtt, не зависящеей от выбранного майнера

Общая публикация
{
    "hashrate": 43051985.1,
    "hashrate2": 904308856.7,
    "gpus": [
        {
            "device_id": 0,
            "fan_speed": 40,
            "name": "NVIDIA GeForce RTX 3060 Ti",
            "temperature": 39,
            "power": 164.548,
            "vendor": "",
            "hashrate": 43050000,
            "efficiency": 261625.78700439993,
            "hashrate2": 904310000,
            "efficiency2": 261625.78700439993,
            "hashrate_minute": 42707500,
            "hashrate_minute2": 902945000,
            "hashrate_hour": 39010434.78,
            "hashrate_hour2": 720106956.52
        }
    ],
    "sys_params": {
        "used_ram": 10.5,
        "cpu_temp": 32,
        "cpu_freq": 1277,
        "cpu_fan": "no fan"
    }
}

hashrate2 - хэшрейт второго алгоритма при дуал майнинге. Если вы работает с одним алгоритмом, эти значения будут равны 0.

Примеры интеграции в Home Asistant:

Сборный сенсор GPU0
sensor:
  - platform: mqtt
    name: "GPU0"
    state_topic: "miner2mqtt/rig0"
    unit_of_measurement: "MH/s"
    value_template: "{{ (value_json.gpus.0.hashrate_minute|float/1000000)|round(2) }}"
    device_class: power
    expire_after: 660
    json_attributes_topic: "miner2mqtt/rig0"
    json_attributes_template: >
      { "name": "{{value_json.gpus.0.name}}",
        "temperature": "{{value_json.gpus.0.temperature}}",
        "fan_speed": "{{value_json.gpus.0.fan_speed}}",
        "power": "{{value_json.gpus.0.power}}",
        "efficiency": "{{value_json.gpus.0.efficiency}}" }
Отдельные сенсоры
sensor:
  - platform: mqtt
    name: "GPU0_hash"
    state_topic: "miner2mqtt/rig0"
    unit_of_measurement: "MH/s"
    value_template: "{{ (value_json.gpus.0.hashrate_minute|float/1000000)|round(2) }}"
    device_class: power
    expire_after: 660
    json_attributes_topic: "miner2mqtt/rig0"

  - platform: mqtt
    name: "GPU0_name"
    state_topic: "miner2mqtt/rig0"
    value_template: "{{value_json.gpus.0.vendor|string + ' '|string + value_json.gpus.0.name|string}}"
    json_attributes_topic: "miner2mqtt/rig0"
    
  - platform: mqtt
    name: "GPU0_temperature"
    state_topic: "miner2mqtt/rig0"
    unit_of_measurement: "°C"
    value_template: "{{value_json.gpus.0.temperature}}"
    expire_after: 660
    json_attributes_topic: "miner2mqtt/rig0"
    
  - platform: mqtt
    name: "GPU0_fan_speed"
    state_topic: "miner2mqtt/rig0"
    unit_of_measurement: "%"
    value_template: "{{value_json.gpus.0.fan_speed}}"
    device_class: power_factor
    expire_after: 660
    json_attributes_topic: "miner2mqtt/rig0"
    
  - platform: mqtt
    name: "GPU0_power"
    state_topic: "miner2mqtt/rig0"
    unit_of_measurement: "kW/h"
    value_template: "{{value_json.gpus.0.power}}"
    device_class: power
    expire_after: 660
    json_attributes_topic: "miner2mqtt/rig0"   
    
  - platform: mqtt
    name: "GPU0_efficiency"
    state_topic: "miner2mqtt/rig0"
    unit_of_measurement: "kH/W"
    value_template: "{{value_json.gpus.0.efficiency.split('kH/W')[0]|int}}"
    device_class: power
    expire_after: 660
    json_attributes_topic: "miner2mqtt/rig0" 
Кнопка обновить
switch:
  - platform: mqtt
    unique_id: m2m_refresh
    name: "m2m_refresh"
    state_topic: "miner2mqtt/rig0/to_miner/refresh"
    command_topic: "miner2mqtt/rig0/to_miner/refresh"
    payload_on: "ON"
    payload_off: "OFF"
    state_on: "ON"
    state_off: "OFF"
Вентилятор
fan:
  - platform: mqtt
    name: "GPU0_fan"
    state_topic: "miner2mqtt/rig0/from_miner/0/fan_state"
    command_topic: "miner2mqtt/rig0/to_miner/0/fan_state"
    percentage_state_topic: "miner2mqtt/rig0/from_miner/0/fan_speed"
    percentage_command_topic: "miner2mqtt/rig0/to_miner/0/fan_speed"
    preset_mode_state_topic: "miner2mqtt/rig0/from_miner/0/fan_mode"
    preset_mode_command_topic: "miner2mqtt/rig0/to_miner/0/fan_mode"
    preset_modes:
      -  "auto"
      -  "manual"
Power limit видеокарты (вариант light.)
light:
  - platform: mqtt
    name: "GPU0_power_limit"
    state_topic: "miner2mqtt/rig0/from_miner/0/state"
    command_topic: "miner2mqtt/rig0/to_miner/0/state"
    icon: mdi:lightning-bolt-circle
    brightness_scale: 240
    max_mireds: 240
    min_mireds: 100
    brightness_state_topic: "miner2mqtt/rig0/from_miner/0/power_limit"
    brightness_command_topic: "miner2mqtt/rig0/to_miner/0/power_limit"
Power limit видеокарты (вариант number.)
number:
  - platform: mqtt
    name: "GPU0_power_limit"
    state_topic: "miner2mqtt/rig0/from_miner/0/power_limit"
    command_topic: "miner2mqtt/rig0/to_miner/0/power_limit"
    icon: mdi:lightning-bolt-circle
    min: 100
    max: 240
Miner state
select:
    - platform: mqtt
      command_topic: "miner2mqtt/rig0/to_miner/miner_state"
      state_topic: "miner2mqtt/rig0/from_miner/miner_state"
      name: "Rig0 Miner State"
      options:
      - "Start"
      - "Stop"
      - "Restart"
      - "Running"

Планы

  • Windows

miner2mqtt's People

Contributors

bds89 avatar

Stargazers

 avatar Shemin A Salam avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

mceisel

miner2mqtt's Issues

Installation

Having problems during installation, what version of python is required? Python 3.6.9 is currently installed.

root@intel:/media/miner2mqtt# sudo python3 setup.py install
running install
running bdist_egg
running egg_info
writing miner2mqtt.egg-info/PKG-INFO
writing dependency_links to miner2mqtt.egg-info/dependency_links.txt
writing requirements to miner2mqtt.egg-info/requires.txt
writing top-level names to miner2mqtt.egg-info/top_level.txt
reading manifest file 'miner2mqtt.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.yaml' under directory 'm2m'
writing manifest file 'miner2mqtt.egg-info/SOURCES.txt'
installing library code to build/bdist.linux-x86_64/egg
running install_lib
running build_py
warning: build_py: byte-compiling is disabled, skipping.

creating build/bdist.linux-x86_64/egg
creating build/bdist.linux-x86_64/egg/m2m_Linux
copying build/lib/m2m_Linux/__init__.py -> build/bdist.linux-x86_64/egg/m2m_Linux
copying build/lib/m2m_Linux/m2m.py -> build/bdist.linux-x86_64/egg/m2m_Linux
warning: install_lib: byte-compiling is disabled, skipping.

creating build/bdist.linux-x86_64/egg/EGG-INFO
copying miner2mqtt.egg-info/PKG-INFO -> build/bdist.linux-x86_64/egg/EGG-INFO
copying miner2mqtt.egg-info/SOURCES.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying miner2mqtt.egg-info/dependency_links.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying miner2mqtt.egg-info/requires.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
copying miner2mqtt.egg-info/top_level.txt -> build/bdist.linux-x86_64/egg/EGG-INFO
zip_safe flag not set; analyzing archive contents...
creating 'dist/miner2mqtt-1.6.1-py3.6.egg' and adding 'build/bdist.linux-x86_64/egg' to it
removing 'build/bdist.linux-x86_64/egg' (and everything under it)
Processing miner2mqtt-1.6.1-py3.6.egg
Removing /usr/local/lib/python3.6/dist-packages/miner2mqtt-1.6.1-py3.6.egg
Copying miner2mqtt-1.6.1-py3.6.egg to /usr/local/lib/python3.6/dist-packages
miner2mqtt 1.6.1 is already the active version in easy-install.pth

Installed /usr/local/lib/python3.6/dist-packages/miner2mqtt-1.6.1-py3.6.egg
Processing dependencies for miner2mqtt==1.6.1
Searching for MarkupSafe>=2.1.1
Reading https://pypi.python.org/simple/MarkupSafe/
Downloading https://files.pythonhosted.org/packages/1d/97/2288fe498044284f39ab8950703e88abbac2abbdf65524d576157af70556/MarkupSafe-2.1.1.tar.gz#sha256=7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b
Best match: MarkupSafe 2.1.1
Processing MarkupSafe-2.1.1.tar.gz
Writing /tmp/easy_install-z3ls1hos/MarkupSafe-2.1.1/setup.cfg
Running MarkupSafe-2.1.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-z3ls1hos/MarkupSafe-2.1.1/egg-dist-tmp-j8n86svh
error: SandboxViolation: chmod('/home/user/.cache/Python-Eggs/MarkupSafe-2.0.1-py3.6-linux-x86_64.egg-tmp/markupsafe/tmpfoxh7n_i.$extract', 493) {}

The package setup script has attempted to modify files on your system
that are not within the EasyInstall build area, and has been aborted.

This package cannot be safely installed by EasyInstall, and may not
support alternate installation locations even if you run its setup
script by hand.  Please inform the package's author and the EasyInstall
maintainers to find out if a fix or workaround is available.

"WARNING: No data from miner"

I have been trying to make this work with ubuntu for my Trex miner. I am getting message "WARNING: No data from miner".
The following is my config.

MINER: Trex
SUDO_PASS: passwor
MQTT:
  TOPIC: miner2mqtt/ther
  HOST: 192.168.xx.xxx
  USERNAME: sxxxx
  PASS: xxxxx
INTERVAL: 20
INCLUDE:
- active_pool
- gpus
- sys_params
EXCLUDE: {}

I have enabled api key for Trex. Could it be the reason?

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.