This repository has been archived on 2025-01-28. You can view files and clone it, but cannot push or open issues or pull requests.
natsuko/cogs/SSC.py
2023-05-03 19:58:19 +03:00

121 lines
4.6 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import asyncio
from discord.ext import commands, tasks
from discord.utils import get
from requests import get
from requests.structures import CaseInsensitiveDict
from re import findall # Импортируем библиотеку по работе с регулярными выражениями
from subprocess import check_output # Импортируем библиотеку по работе с внешними процессами
from json import loads
from cogs.emojis import check_mark, XX
from subprocess import run as cmd
import discord
from discord import app_commands
from loguru import logger
class SSC(commands.Cog, name="SSC"):
"""Управление моей Системой Умной Комнаты Альфа-версия"""
def __init__(self, bot):
self.bot = bot
self.cooler.start()
logger.debug("Cooler.start()")
self.last_temp = 0
def cog_unload(self):
self.cooler.cancel()
async def cog_check(self, ctx):
return ctx.message.author.id in (self.bot.owner_id, 779697451404886016)
@commands.command(brief="Включает/выключает свет")
async def light(self, ctx):
headers = CaseInsensitiveDict()
headers["Authorization"] = "Bearer cvbnmjhgvbnmj"
get("http://localhost:80/API/light", headers=headers)
await asyncio.sleep(3)
await ctx.message.delete()
@commands.command(brief="Показывает темпераруру",
aliases=['temp'])
async def temperature(self, ctx):
headers = CaseInsensitiveDict()
headers["Authorization"] = "Bearer cvbnmjhgvbnmj"
r = get("http://localhost:80/API/temperature", headers=headers)
j = loads(r.text)
await ctx.send(f"__DHT__\n"
f"Температура: {j['DHT']['temperature']}\n"
f"Влажность: {j['DHT']['humidity']}\n"
f"__CPU__\n"
f"Температура: {j['CPU']['temperature']}")
@tasks.loop(minutes=1)
async def cooler(self):
temp0 = 55
temp1 = 80
min_pwm = 125
temp = get_temp()
# logger.info(f"Температура процессора: {temp}")
pwm = (temp-temp0) / (temp1-temp0)
pwm = int((255 - min_pwm)*pwm + min_pwm)
if self.last_temp < temp: pwm += 25
self.last_temp = temp
# if temp <= 65: pwm += 50
if pwm < min_pwm: pwm = 0
if pwm > 255: pwm = 255
# logger.info(f"Мощность куллера: {pwm} ({int(pwm/256*100)}%)")
headers = CaseInsensitiveDict()
headers["Authorization"] = "Bearer cvbnmjhgvbnmj"
get(f"http://localhost/API/cooler/{pwm}", headers=headers)
@app_commands.command()
async def host(self, inter):
await inter.response.send_message(cmd(["neofetch", "--stdout"], capture_output=True).stdout.decode("utf-8"))
# @tasks.loop(seconds=1)
# async def open_door(self):
# if self.arduino.inWaiting() > 0:
# data = self.arduino.readline()
# if data == b'door\r\n':
# embed = discord.Embed(title="Дверь открыта!", color=discord.Color(0xFF0000))
# await get(self.bot.users, id=self.bot.owner_id).send(embed=embed, delete_after=15)
# elif data == b'test\r\n':
# self.arduino.write(b'2')
# else:
# await get(self.bot.users, id=self.bot.owner_id).send(data)
# @tasks.loop(seconds=1)
# async def alarm(self):
# now = datetime.datetime.now()
# time = datetime.time(7)
# delta = datetime.timedelta(seconds=2)
# combine = datetime.datetime.combine(now.date(), time)
#
# if combine-delta <= now <= combine+delta:
# await get(self.bot.users, id=self.bot.owner_id).send("!!!")
# self.arduino.write(b'1')
# await asyncio.sleep(1)
# self.arduino.write(b'1')
# await asyncio.sleep(1)
# self.arduino.write(b'1')
def get_temp():
temp = check_output(["vcgencmd", "measure_temp"]).decode() # Выполняем запрос температуры
temp = float(findall('\d+\.\d+', temp)[
0]) # Извлекаем при помощи регулярного выражения значение температуры из строки "temp=47.8'C"
return (temp)
async def setup(bot):
await bot.add_cog(SSC(bot))