Autor: mario

Visão Geral

Este é um projeto para criar uma aplicação financeira que rodará dentro de um servidor local. O servidor local roda Proxmox para oferecer uma estrutura de multiplas aplicações rodando tanto em máquinas virtuais quanto em containers. O aplicativo de finanças rodará em fastHTML dentro de um container Docker. O Docker roda em um servidor Ubuntu que por sua vez roda sob um container do Proxmox (LXC).

Plataforma: Web

Framework: FastHTML

Infraestrutura: Container Docker rodando em Ubuntu Server que, por sua vez, roda em um container de Servidor Promox.

Análise e Desenvolvimento

Levantamento de Requisitos

Controle básico de finanças e orçamento, permitindo lançamentos rápidos e direcionados.

Diagrama de Casos de Uso

Descrição dos Casos de Uso

Gestão de Contas de Finanças

Listar contas

Criar conta

Editar Conta

Excluir Conta

Registro de Transações

Lançar Despesa

Lançar Receita

Fazer Transferência

Pagar Cartão

Registrar Despesa Recorrente

Cadastrar Conta

Estornar lançamento

Excluir lançamento

Diagrama de Classes

Descrição das Classes

Estrutura das Tabelas do Banco de Dados

SQL
CREATE TABLE usuarios(
  id SERIAL PRIMARY KEY,
  nome VARCHAR(100) NOT NULL,
  email VARCHAR(100) UNIQUE NOT NULL,
  senha_hash VARCHAR(255) NOT NULL,
  criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Preparação do Ambiente

Pré-Requisitos

Criando o container do Python para rodar o fastHTML

Preparar o seu Projeto FastHTML

Certificar que a aplicação funciona localmente.

O arquivo principal geralmente se chama main.py ou app.py.
Crie um arquivo de dependências requirements.txt:

python-fasthtml
uvicorn

#Adicionar outras dependências se necessário

Criar o Dockerfile

Criar um arquivo chamado Dockerfile (sem extensão) na pasta raiz do projeto e editar conforme abaixo:

Dockerfile
#Usa uma imagem oficial Python leve
FROM python:3.15-slim
#Define o diretório de trabalho
WORKDIR /app
#Copia os arquivos de requisitos e instala as dependências
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
#Copia o restante do código do projeto
COPY . .
#Expõe a porta que o FastHTML/Uvicorn vai usar (padrão 5000 ou 8000)
EXPOSE 5000
#Comando para rodar a aplicação usando o Uvicorn
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "5000"]

Criando o Banco de Dados

O que é FastHTML

Framework para aplicações web modernas em Python puro construídas sobre bases sólidas da web. Com o FastHTML você pode começar a desenvolver desde painéis simples até aplicações web escaláveis ​​em minutos.

Principais características do projeto do framework:

Os aplicativos FastHTML são código Python, então você pode usar o FastHTML com todo o poder da linguagem e do ecossistema Python.

Ativando o ambiente virtual do Python

Bash
source venv/bin/activate

Instalação

Como o fasthtml é uma biblioteca Python, você pode instalá-lo com:

Bash
pip install python-fasthtml

Uso
Para um aplicativo mínimo, crie um arquivo “app.py” da seguinte forma:

app.py

Python
from fasthtml.common import *

app,rt = fast_app()

@rt('/')
def get():
  return Div(P('Olá Mundo!'), hx_get="/change")
serve()

Executar o aplicativo com

Bash
python3 app.py

Isso exibirá um link para o seu aplicativo em execução: http://localhost:5001. Acesse esse link no seu navegador e você deverá ver uma página com o texto “Olá Mundo!”. Parabéns, você acabou de criar seu primeiro aplicativo FastHTML!

Acessando o Banco de Dados

Para acessar um banco MariaDB local, você não depende do FastHTML em si, mas sim de um driver Python para MariaDB.

Instalar a biblioteca mariadb

Bash
sudo apt update
sudo apt install -y libmariadb-dev gcc python3-dev
install mariadb

Conectar ao banco de dados

app.py

Python
import mariadb

conn = mariadb.connect(
  host="localhost",
  port= número-da-porta, #padrão mariadb 3406
  user="seu_usuario",
  password="sua_senha",
  database="seu_banco"
)

cursor = conn.cursor()

Integrar ao FastHTML

Python
from fasthtml import *

import mariadb

def get_db():
  return mariadb.connect(
    host="localhost",
    port=3405, #padrão mariadb
    user="root",
    password="senha",
    database="meubanco"
  )

@route("/")
def get():
  conn = get_db()
  cur = conn.cursor()
  cur.execute("SELECT nome FROM usuarios")
  
  names = [row[0] for row in cur]
  
  return Titled(
    "Finanças " + app_version + " - Contas",
    app_menu(),
    P("Contas"),
    Card(
      Ul(*[Li(name) for name in names]),
      header=Strong("Contas Registradas")
  )
  cur.close()
  conn.close()
)
  • Iniciando no Laravel Breeze

    Laravel

    Breeze

    Artisan

  • Arduino: Primeiros Passos

    O que é Arduino?

    Hardware x Sofware

    Microcontrolador

    Entradas e Saídas

    Comunicação

    Tipos de Arduino

    O que é Preciso para Começar?

    Arduino IDE

  • EspHome no Home Assistant

    Requisitos

    Microcontrolador Esp32

    Protoboard

    Home Assistant Instalado

    Habilitar Porta Serial do Servidor (Proxmox)

    Instalar EspHome no Home Assistant

    Como habilitar a porta serial física para um servidor rodando Home Assistant rodando no Proxmox.

    Criar o firmware básico

    Fazer upload para o dispositivo

  • Comandos do Terminal do Linux

    Básicos

    clear

    ls

    man

    mkdir

    shutdown

    rm

    Remove arquivos ou diretórios

    Redirecionadores

    Programas

    nano

    Como Fazer

    Ligar e Desligar o monitor de servidor (notebook) no terminal local
    Ligar e Desligar o monitor de servidor (notebook) no terminal ssh

    Básicos
    ls
    listagem

    man

    manual de comandos com informações rápidas sobre o comando digitado após a palavra man.

    clear

    limpa a tela do terminal

    mkdir

    criar diretórios

    cd

    pwd

    whoami

    shutdown

    Redirecionadores

    Programas

    nano

    Editor de textos

    Como Fazer

    Copiar um arquivo

    Mudar o dono e o grupo de um arquivo ou diretório

    Para mudar o dono ou o grupo de um arquivo ou diretório no Linux, utilizamos o comando chown (abreviação de change owner). Se você quiser mudar apenas o grupo, também existe o comando chgrp.Como essas são alterações de permissão de sistema, você quase sempre precisará usar o sudo.

    Mudar apenas o Dono

    Para transferir a propriedade de um arquivo para outro usuário:

    Mudar Dono e Grupo simultaneamente

    Este é o uso mais comum. Você separa o usuário e o grupo por dois pontos (:)

    Exemplo: sudo chown helio:www-data index.html3. Mudar apenas o GrupoSe você quiser manter o dono atual e mudar apenas o grupo:Bashsudo chown :grupo arquivo.txt

    Mudar uma Pasta Inteira (Recursivo)Se você tem uma pasta com muitos arquivos (como a pasta do Home Assistant ou um pendrive) e quer mudar o dono de tudo o que está dentro dela, use a bandeira -R:Bashsudo chown -R usuario:grupo /caminho/da/pasta/

    Dicas Importantes

    Identificando o dono atual: Use ls -l para ver quem é o dono (terceira coluna) e o grupo (quarta coluna) de cada arquivo.

    Atenção no Proxmox/Home Assistant: Se você copiou arquivos manualmente para a pasta /config do Home Assistant, o dono costuma ficar como root.

    Para o HA conseguir editar esses arquivos, você geralmente precisa devolvê-los ao usuário correto.Verificar o que está acontecendo: Adicione -v (verbose) para o terminal listar cada arquivo que ele está alterando:sudo chown -Rv usuario:grupo /pasta/

    Resumo Rápido

    Objetivo

    Comando

    Mudar Dono

    sudo chown dono arquivo

    Mudar Dono e Grupo

    sudo chown dono:grupo arquivo

    Mudar Pasta e Subpastas

    sudo chown -R dono:grupo pasta

    Ver Dono

    Atualls -l

    Mudar as permissões de um arquivo ou diretório

    chmod

    Ligar e Desligar o monitor de servidor (notebook) no terminal local

    Desligar: setterm –term linux –blank force

    Ligar: setterm –term linux –blank poke

    Ligar e Desligar o monitor de servidor (notebook) no terminal ssh

    Desligar: setterm –term linux –blank force < /dev/tty1
    Ligar: setterm –term linux –blank poke < /dev/tty1

  • Proxmox: ativando USB Passthrough

    Para ativar uma porta USB em uma VM do Home Assistant no Proxmox, você precisa realizar um processo chamado USB Passthrough (Passagem de USB). Isso permite que o hardware físico (como um dongle Zigbee, Z-Wave ou Bluetooth) seja “entregue” diretamente para o sistema operacional do HA.

    Conecte o dispositivo e identifique-o no Proxmox

    Antes de configurar a VM, certifique-se de que o Proxmox reconheceu o hardware.

    No console do Proxmox (o nó principal, não a VM), digite:

    Você verá uma lista. Procure pelo seu dispositivo (ex: Sonoff Zigbee 3.0 ou Silicon Labs). Anote o ID (ex: 10c4:ea60).

    Adicionar o Hardware à VM do Home Assistant
    Na interface web do Proxmox, selecione a VM do Home Assistant na barra lateral.

    Clique na aba Hardware.

    Clique no botão Add (Adicionar) no topo e selecione USB Device.

    Escolher o modo de conexão
    Você terá duas opções principais na janela que abrir:

    Use USB Vendor/Device ID: Recomendado se você sempre conectará o dispositivo, mesmo que mude de porta física. Ele busca pelo “modelo” do chip.

    Use USB Port: Recomendado se você tem vários dispositivos idênticos. Ele trava na porta física (ex: porta 1 do painel traseiro).

    Dica: Marque a opção USB3 apenas se o seu dispositivo for comprovadamente USB 3.0 (azul). Para dongles Zigbee/Z-Wave, deixe desmarcado para evitar interferências.

    Selecione o dispositivo na lista e clique em Add.

    Reconhecimento no Home Assistant
    Após adicionar o hardware no Proxmox, o Home Assistant deve reconhecê-lo quase instantaneamente.

    Vá para o seu Home Assistant.

    Vá em Configurações > Dispositivos e Serviços.

    Muitas vezes, uma nova integração (como ZHA ou Zigbee2MQTT) aparecerá com o botão Configurar.

    Nota Crítica: Se você estiver usando o Zigbee2MQTT, o caminho do dispositivo geralmente mudará para algo como /dev/ttyUSB0 ou /dev/serial/by-id/…. É altamente recomendável usar o caminho por ID, pois ele não muda se você reiniciar o servidor.

    Resolução de Problemas (Troubleshooting)
    Dispositivo não aparece: Se o dispositivo não for listado no lsusb, teste outra porta ou um cabo extensor USB (muito comum em notebooks como o seu Legion, onde as portas são muito próximas e geram interferência).

    Erro de permissão: Se o HA ver o dispositivo mas não conseguir ler, pode ser necessário reiniciar a VM (Full Reboot) para que o Proxmox ancore o driver corretamente.

    LXC vs VM: Se o seu Home Assistant estiver em um Container (LXC) em vez de uma VM, o processo é diferente e exige editar arquivos de texto no Proxmox (/etc/pve/lxc/ID.conf).