Fransa'da eski bir dizüstüne Debian kurup ölçüm aracı yapmak

这篇内容暂时只有 Türkçe 版本,以下是原文。

Atölyede 2013 model bir ThinkPad T440 var, Fransa’da ikinci el 60 euroya alınmış. Üzerinde Windows 7 vardı, artık hiçbir tarayıcı güncelleme almıyor. Makineyi çöpe atmak yerine tezgâhın yanına ölçüm ve kayıt terminali yapmaya karar verdim. Amaç: seri porttan gelen tartım verisini okuyup CSV’ye yazan, aynı zamanda ağ üzerinden tek sayfalık bir arayüzle son değeri gösteren bir düzenek.

Kurulum Debian 12 netinst, masaüstü ortamı yok, sadece temel sistem ve ssh. Kurulum sırasında non-free firmware deposunu ekledim, çünkü Broadcom Wi-Fi kartı yoksa tanınmıyor:

# /etc/apt/sources.list
 deb http://deb.debian.org/debian bookworm main contrib non-free-firmware

Seri veri için Python 3 ve pyserial yeterliydi:

sudo apt install python3-serial python3-flask

Tartı cihazı 9600 baud, 8N1, saniyede bir satır gönderiyor. Gelen satırda sabit bir önek ve gram değeri var. Okuma betiği şöyle:

import serial, time, csv, datetime
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=2)
with open('/home/mert/tartim.csv', 'a', newline='') as f:
    w = csv.writer(f)
    while True:
        line = ser.readline().decode('ascii', errors='ignore').strip()
        if line.startswith('ST'):
            gram = float(line[3:].split()[0])
            w.writerow([datetime.datetime.now().isoformat(), gram])

Aynı betiğe Flask ile tek sayfa ekledim, son değeri bellekte tutup gösteriyor. systemd servisi olarak çalıştırdım, Restart=always ile. USB adaptör her açılışta farklı isim almasın diye udev kuralı yazdım:

SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", SYMLINK+="tartim"

Böylece betikte /dev/ttyUSB0 yerine /dev/tartim kullanıyorum.

Neden bu yol: makinenin tek işi veri toplamak, tarayıcı açmayacak, güncelleme derdi minimum. Debian’ın eski donanımda sürücü desteği hâlâ iyi, ayrıca atölyede internet her zaman yok, paketleri bir kez kurup bırakıyorum. Takas tarafı: Wi-Fi firmware’i elle eklemek gerekti, ayrıca SSD yerine eski HDD takılı olduğu için açılış 40 saniye sürüyor. Kabul edilebilir, çünkü makine sürekli açık.

Nerede bozulur: USB adaptörü tezgâhtan düşürünce ttyUSB numarası değişti, udev kuralı olmasa betik boş boş bekliyordu. Bir de tartı cihazı bazen yarım satır gönderiyor; readline timeout ile dönünce boş string geliyor, float() patlıyor. Bunu try/except ile susturdum ama veri kaybı oluyor, bunu biliyorum. Uzun süreli kayıtta CSV dosyası büyüyor, ayda bir rotate etmek gerekiyor, bunu henüz cron’a bağlamadım.

Bir sorum var: benzer düzeneklerde seri veriyi doğrudan CSV’ye yazmak yerine SQLite’a atan var mı? Özellikle güç kesintisinde yarım satır kalmasın diye nasıl bir tampon kullanıyorsunuz?

0
赞同度 100% · 0 条评论 · 4 阅读

0 条评论

支持 Markdown · 回复会实时推送给对方

还没有评论,写下第一条。