3.6 KiB
3.6 KiB
POS-Automation Context
Overview
POS-only daily news briefing for the Epson TM-m30 receipt printer. Fetches unread articles from FreshRSS, selects and summarizes them via Ollama, then sends a native ESC/POS receipt over TCP to the printer. No PDF generation, no CUPS, no full-size printer support.
Forked from Seth/PrinterAutomation on Gitea.
Components
pos_briefing.py— Main script. Run directly or via cron.config.json— Credentials and endpoints (not committed).config.example.json— Template for config.json.
How It Works
- Logs into FreshRSS (Google Reader API), fetches up to 100 unread items.
- Sends headlines to Ollama — Phase 1 selects top 5, Phase 2 summarizes each in 30-50 words.
- Collects dashboard data: weather (open-meteo), ZFS status (SSH to remote host), Grafana metrics, market data (yfinance), Uptime Kuma alerts (pct exec).
- Builds ESC/POS receipt bytes via
python-escpos(Dummy printer). - Sends raw bytes to printer via TCP socket on port 9100.
- Marks articles as read in FreshRSS.
Configuration (config.json)
| Key | Description | Example |
|---|---|---|
freshrss_url |
FreshRSS base URL | http://192.168.0.157 |
freshrss_user |
FreshRSS username | Admin |
freshrss_api_key |
FreshRSS API password | seth123! |
ollama_url |
Ollama instance URL | http://192.168.0.141:11434 |
ollama_model |
Model name | qwen2.5:1.5b |
yourls_url |
YOURLS API endpoint | http://192.168.0.152:8080/yourls-api.php |
yourls_user |
YOURLS username | admin |
yourls_pass |
YOURLS password | |
grafana_url |
Grafana base URL | https://monitor.atermiter-x79.xyz |
grafana_token |
Grafana service account token | glsa_... |
remote_host |
Host to SSH into for ZFS status | 192.168.0.197 |
remote_pass |
SSH password for remote_host | |
printer_ip |
TM-m30 IP address | 192.168.0.137 |
printer_port |
ESC/POS TCP port (default 9100) | 9100 |
Infrastructure
- Printer: Epson TM-m30 at
192.168.0.137, ESC/POS TCP port 9100. - FreshRSS: CT 120,
192.168.0.157/fresh.sethpc.xyz. - Ollama:
192.168.0.141(Gaming PC,steel141). Model:qwen2.5:1.5b. - YOURLS:
192.168.0.152:8080— shortens article URLs printed on receipt. - Grafana:
monitor.atermiter-x79.xyz— Proxmox node metrics (173, 112, 197). - ZFS: SSH to
192.168.0.197(node-197) — querieszpool list tank. - Uptime Kuma: CT 147 — queried via
pct exec 147(requires Proxmox host). - This script runs on: CT 166 (
192.168.0.175, OpenClaw2).
Cron
Runs daily at 04:30 via crontab on CT 166:
30 4 * * * python3 /root/bin/POS-Automation/pos_briefing.py >> /var/log/pos_briefing.log 2>&1
Setup
pip3 install requests python-escpos yfinance qrcode
apt install sshpass
cp config.example.json config.json
# Edit config.json with credentials
python3 pos_briefing.py
Known Issues / Notes
pct exec 147(Uptime Kuma check) only works on a Proxmox host, not inside a CT — silently returns None.printer_ipdirect access (192.168.0.137) may be unreachable from some CTs due to Proxmox bridge/firewall state; pinging first resolves intermittent ARP issues.- FreshRSS direct IP (
192.168.0.157) can be intermittently unreachable from CT 166 —fresh.sethpc.xyz(via Caddy) works as fallback but adds latency. - yfinance ETH-USD occasionally fails with a NoneType error — non-fatal, other tickers still print.
Gitea
- Repo:
https://git.sethpc.xyz/Seth/POS-Automation.git - Parent project:
https://git.sethpc.xyz/Seth/PrinterAutomation.git