Autor: mario
-
Desenvolvimento de Aplicação com FastHTML
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
SQLCREATE 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
- Servidor Ubuntu já instalado e rodando no container do Proxmox.
- Docker Instalado no Servidor Ubuntu
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árioCriar 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:
- Poderoso o suficiente para criar os aplicativos web mais avançados e interativos que você possa imaginar.
- Rápido e leve, para que você possa escrever menos código e fazer mais.
- Fácil de aprender e usar, com uma sintaxe simples e intuitiva que facilita a criação rápida de aplicativos complexos.
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
Bashsource venv/bin/activateInstalação
Como o fasthtml é uma biblioteca Python, você pode instalá-lo com:
Bashpip install python-fasthtmlUso
Para um aplicativo mínimo, crie um arquivo “app.py” da seguinte forma:app.py
Pythonfrom fasthtml.common import * app,rt = fast_app() @rt('/') def get(): return Div(P('Olá Mundo!'), hx_get="/change") serve()Executar o aplicativo com
Bashpython3 app.pyIsso 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
Bashsudo apt update sudo apt install -y libmariadb-dev gcc python3-dev install mariadbConectar ao banco de dados
app.py
Pythonimport 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
Pythonfrom 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() ) -
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
rm nome-do-arquivoRedirecionadores
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 sshBásicos
ls
listagemman
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:
sudo chown usuario arquivo.txtMudar Dono e Grupo simultaneamente
Este é o uso mais comum. Você separa o usuário e o grupo por dois pontos (:)
sudo chown usuario:grupo arquivo.txtExemplo: 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
sudo chgrp grupo arquivo.txtMudar 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:
lsusbVocê 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).