Bueno, me he tirado mis horillas desarrollando esta puta mierda, que no es más que una raspberry haciendo ping a nuestro rig, y si ve que no le contesta unas cuantas veces seguidas lo resetea (físicamente) y nos envía un aviso por telegram.
Sé que hay aparatos que hacen cosas parecidas, o programas, etc... pero me hacía ilusión y me mola el tema, he aprendido cosillas y siempre viene bien.
Más a delante tengo intención de meterle función de Watchdog Hashrate, he sido capaz de conectarme por ssh al rig pero de ahí a poder encontrar el último "Total speed: XX Mh/s" y procesarlo me queda un cacho, se aceptan sugerencias.
To-do list:
*Modificar el script para que, a través de ssh pille el dato "Total speed" (al menos en claymore es así) e interpretarlo para crear un HasrateWatchdog que nos avise si baja (porque ha petado una gráfica y se está reiniciando constantemente, etc...)
INSTALAR RASPBIAN
spoilerYo uso la versión lite, sin desktop. Se descarga de la página oficial y se quema la imagen en una microSD. Luego se introduce en la RPI y se enciende.
El login por defecto es user:pi password:raspberry, pero luego los cambiaremos. Easy
CONFIGURAR WIFI
spoilerLo primero que haremos será configurar el wifi. Para ello introducimos el siguiente código:
sudo nano /etc/network/interfaces
nano es un editor de texto en la consola de comandos de linux.
Debajo del todo (aunque son comentarios, da igual si los borráis) picamos lo siguiente:
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "mi SSID"
wpa-psk "mi password"
Obviamente poniendo el nombre de vuestra red en lugar de "mi SSID" y la contraseña en lugar de "mi password" (dejar las comillas).
Al terminar presiona Ctrl+X, luego "Y" para decirle que quieres guardar los cambios y enter.
Reinicia la Rpi (sudo reboot) y prueba la conexión con un ping a google (ping -c 1 google.es).
ACTUALIZAR LA RPI
spoileruna vez logueados y con acceso AL INTERNET, ejecutaremos primero:
sudo apt-get update
y cuando acabe:
sudo apt-get upgrade
Este último puede tardar un ratillo así que pasamos a lo siguiente para lo que no necesitamos la RPI
STATIC IP's
spoilerLa forma más fácil es entrar en tu router (normalmente con poner 192.168.1.1 en un explorador es suficiente, si no sabes hacer esto no te metas en fregaos xD)
Aquí ya depende un poco del router de cada uno. En el mío es dentro de una opción que pone DHCP.
Dentro de esta pestaña hay una subpestaña llamada "DHCP Clients" donde puedo ver la dirección MAC de la raspberry y la IP que está ocupando ahora. Copiamos ambos datos.
Otra subpesataña llamada "DHCP Reservation", donde podemos añadir una reserva de IP, nos pide la MAC y la IP, yo le he puesto la que cogió porque me gustaba pero le podemos poner cualquiera dentro del rango.
Recomiendo añadir también aquí una IP para el Rig, solo hay que buscar la MAC del rig y seguir el procedimiento.
Si queremos conectarnos a la RPI desde cualquier sitio tendremos que crear un "virtual server" (al menos en mi router se llama así).
Nos pide el service port (4444, por ejemplo), Internal port (aquí pondremos un 22) y la IP (la de la RPI).
MUY IMPORTANTE cambiar la contraseña de la RPI si hacemos esto, porque básicamente le estamos dando el control de la rpi a cualquiera, ya que con la IP y el puerto, pueden hacer log default. Para ello de nuevo (sudo raspi-config), y es la primera opción, no tiene pérdida.
A partir de ahora ya nos podemos conectar a la RPI desde cualquier parte (yo lo hago desde el móvil en el curro, por ejemplo) para, cuando tengamos montado el módulo de relés y conectado al Rig, hacerle un hard reset al mismo (como apretar el botón de reset físicamente).
MÓDULO DE RELÉS Y CABLEADO AL RIG
spoilerEs hora de cablear la Raspberry para poder accionar el "botón" de reset desde cualquier parte.
Yo tengo este, pero vale cualquiera parecido.
Es muy fácil, se cablean Ground y V+ de la raspberry a los correspondientes pines, en este caso el 4 y el 6, por ejemplo.
También necesitamos un pin más por relé. De momento solo he programado el de reset, pero se puede usar el otro relé para apagar el rig (4,5 segundos apretando el botón de encendido). Yo he usado los pines GPIO 17 y 18 (pines 11 y 12).
Luego es cablear 2 de las salidas del relé a los pines de
de la placa base. Pone Power SW porque es un cable reutilizado, se pueden soldar los cables o lo que sea. Así tengo yo mi Rpi:
CONEXIÓN SSH A LA RPI
spoilerpodemos conectarnos a través de la IP local si estamos en la misma red o a través de la IP pública que tenga la red en la que la Rpi está conectada. Para android uso "ConnectBot" y para Windows "Putty". Si estamos en la misma red local con la IP local de la RPI valdría y puerto 22. Si estamos en otra red, tenemos que saber cuál es nuestra IP publica, Aquí, por ejemplo. Para conectarnos sería poner el puerto que hayáis configurado en el router, en el ejemplo de arriba sería el 4444.
En el ConnectBot es un poco diferente. Sería (usuario)@(IP_local), por ejemplo [email protected] para local y (usuario)@(IP_pública):(puerto) por ejemplo pi@(tu IP pública):4444 si te conectas desde fuera de la red local.
Nada más empezar te pedirá el usuario y contraseña, que previamente hemos cambiado, en el caso de Putty (aunque se puede configurar para que no te pida user), y únicamente contraseña en el caso de ConnectBot.
INSTALANDO EL BOT DE TELEGRAM
spoilerYa empieza a molar esto, pero para poder enviarnos mensajes tendremos que recopilar un par de datos y crear un bot.
Primero creamos un bot en telegram. Para ello abrimos chat con @botfather y le decimos "/newbot", nos preguntará el nombre y el nombre único. Cuando acabamos nos da el "TOKEN", no lo compartáis o cualquiera podría enviar mensajes a través de él. Nos lo guardamos.
También necesitamos nuestra id de telegram. Para ello abrimos chat con @IDBot y le escribimos "/getid" y nos guardamos lo que nos conteste.
Ahora instalaremos la API para poder usar el bot en la rpi. Hay varias opciones, os dejo la que me funcionó a mi. Para ello:
sudo apt-get install python-pip
sudo pip install pyTelegramBotAPI
Y ya podríamos usar esta API para enviarnos mensajes a través de nuestro bot.
EL SCRIPT
spoilerUsaremos Python para crear el script que (de momento) solo va a estar haciendo un ping a nuestro rig cada X minutos y si hace Y pings malos lo reinicia, nos avisa, etc...
Gracias a #3 que me dio la idea de no hacerle bucle infinito y ejecutarlo cada x minutos.
Creamos el archivo con nano:
sudo nano ping.py
y pegamos este código (en putty con click derecho):
import RPi.GPIO as GPIO
import time
import os
import telebot
from telebot import types
import token
import commands
#IP local del Rig
hostname = "192.168.1.101"
#Esto es la ID del bot de Telegram
TOKEN = '539425759:AAFi4DAwdqRImy0PV9t5K8Yn-ihJeiMjhdM'
#ID de tu Telegram
id_tg = 183943985
#Inicializamos el bot
bot = telebot.TeleBot(TOKEN)
#Inicializamos las salidas digitales de la RPI
#dependiendo de como cablees los reles los tendras que inicializar a HIGH o a LOW
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17,GPIO.OUT)
GPIO.setup(18,GPIO.OUT)
GPIO.output(17,GPIO.HIGH)
GPIO.output(18,GPIO.HIGH)
#Funcion para hard reset del Rig
def reboot():
GPIO.output(17,GPIO.LOW)
time.sleep(0.4)
GPIO.output(17,GPIO.HIGH)
#PING
response = os.system("ping -c 1 " + hostname)
if response == 0:
print "Ping correcto a " + hostname
else:
print "Ping incorrecto a " + hostname
time.sleep(20)
response = os.system("ping -c 1 " + hostname)
if response == 0:
print "Ping correcto a " + hostname
else:
bot.send_message (183943985, "Rig no responde")
time.sleep(20)
response = os.system("ping -c 1 " + hostname)
if response == 0:
print "Ping correcto a " + hostname
else:
reboot()
bot.send_message (183943985, "Rig reiniciado")
Remarcar que debemos sustituir 3 cosas, marcadas en mayúsculas en el código, que son el token del bot de telegram(entre comillas simples), nuestra id de telegram (sin comillas ni nada) y la IP local del rig (entre comillas dobles).
EJECUTAR EL SCRIPT AL ARRANCAR RPI
spoilerNecesitamos que se ejecute el script automáticamente cada X minutos, yo le he puesto 5. Para ello escribimos:
sudo crontab -e
y al final añadimos la siguiente línea:
*/5 * * * * /usr/bin/python /home/pi/ping.py
Si en lugar de un 5 ponemos un 3 se ejecutará cada 3 minutos. Recomiendo no poner menos de un par de minutos por si acaso se solapan pero creo que con 5 es suficiente.
FIN
Espero que haya servido de algo el rato que me he tirado aquí recopilando info.
Si os gusta darle al like y subscribe, y dale a la campanita para notificaciones (h3h3)
BONUS: REINICIAR MANUALMENTE EL RIG DESDE EL MÓVIL
Esto es muy fácil, para cuando no sirve hacer reboot desde simplemining o hiveOS porque carga mal.
spoilerprimero creamos el script, este es megafácil:
sudo nano reboot.py
y le copiamos:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(17,GPIO.OUT)
GPIO.setup(18,GPIO.OUT)
GPIO.output(17,GPIO.HIGH)
GPIO.output(18,GPIO.HIGH)
GPIO.output(17,GPIO.LOW)
time.sleep(0.4)
GPIO.output(17,GPIO.HIGH)
GPIO.output(17,GPIO.LOW)
time.sleep(0.4)
GPIO.output(17,GPIO.HIGH)
y ya está, ahora solo nos tenemos que conectar por ssh a la raspberry con nuestra ip pública y ejecutar el script:
sudo python reboot.py