WledNas Code

import requests
from datetime import datetime
import subprocess
import time
import logging
import discord

effects_load = [28, 111, 67, 46, 156, 157]
effects_idle = [9, 63, 108, 8, 74, 90, 110, 138]

ip = "" #Ip of the Wled

logging.basicConfig(format='%(asctime)s : %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=logging.DEBUG)

while True:
    sd_read = subprocess.run(["iostat 1 2|grep -E \'sda|sdb|sdc|sdd\' |awk \'{print $3}\'|tail -4"], capture_output=True,
                                text=True, shell=True).stdout.strip().splitlines()
    disks_read = 0
    for x in sd_read:
        disks_read += int(x.strip().split(",")[0])
    disks_read = disks_read // 4


    sda_wrt = subprocess.run(["iostat 1 2|grep -E \'sda|sdb|sdc|sdd\' |awk \'{print $4}\'|tail -4"], capture_output=True,
                               text=True, shell=True).stdout.strip().splitlines()
    disks_wrt = 0
    for x in sda_wrt:
        disks_wrt += int(x.strip().split(",")[0])
    disks_wrt = disks_wrt // 4

    moy = int(disks_read) + int(disks_wrt) // 2

    print( moy)
    if 7 > datetime.now().hour or datetime.now().hour >= 23:
        effect_id = 38
        light_level = 35
        palette_id = 50

    elif moy > 1000:
        choix = datetime.now().day % len(effects_load)
        effect_id = effects_load[choix]
        light_level = 200
        palette_id = 0

    else:
        choix = datetime.now().day % len(effects_idle)
        effect_id = effects_idle[choix]
        light_level = 200
        palette_id = 11


    sd_list = subprocess.run(['ls /dev |grep -E "^sd[abcd]$"'], capture_output=True, text=True, shell=True).stdout.strip().splitlines()
    if len(sd_list) < 4:
        break
    else:
        requests.get(f"http://{ip}/win&A={light_level}&FP={palette_id}&TT={0}&FX={effect_id}",timeout=7)
    time.sleep(10)

#if a drive got disconnected, i got alerted in discord
client = discord.Client(intents=discord.Intents.default())
@client.event
async def on_ready():
    print(f'Logged in as {client.user}!')
    user = await client.fetch_user(268733669907103744)
    await user.send(f"[+] : Un disque de l'array du NAS s'est déconnecté il y a actuellement => {sd_list}")
    await client.close()
client.run("") #Discord API Key
c = 0
while c < 10:
    requests.get(f"http://{ip}/win&A={200}&FP={66}&TT={0}&FX={184}",timeout=7)
    time.sleep(10)
    c += 1