Eski dozaj bilgisayarı sadece klavye kabul ediyor: Hermetry komutunu klavye gibi yazdırmak
Herkese merhaba,
Çalıştığım su idaresinin bir arıtma tesisinde klor dozaj sisteminin set değeri, eski bir Windows XP bilgisayarındaki bir programdan giriliyor. Program çok eski, ağ arayüzü yok, seri portu yok, tek giriş yöntemi klavye: operatör alana tıklıyor, değeri yazıyor, Enter. Üretici firma yok artık.
Bize gelen istek şu: set değeri merkezdeki operatör Hermetry panosundan değiştirebilsin. Aklıma gelen fikir, bilgisayara USB klavye gibi görünen bir kart takmak; kart Hermetry’den komutu alsın, sayıyı klavyeden yazmış gibi göndersin.
Elimde Arduino Uno ve bir Ethernet shield (W5100) var. Uno ile klavye taklidi yapılabiliyor mu? Ethernet’ten komut alıp USB’den yazmak mümkün mü? Yoksa tamamen yanlış bir yolda mıyım?
Uno’nun USB’si zaten bilgisayara bağlanıyor, neden klavye olamıyor?
Uno’nun USB tarafını ana işlemci değil, yanındaki ATmega16U2 yönetiyor ve o sadece seri port gibi davranıyor. 16U2’yi yeniden programlayıp klavye yapanlar var ama zahmetli. Biz ilaç tarafında etiket yazıcısına benzer bir şey yaptık, şöyle kurdum:
Doğrudan USB’si olan bir kart lazım. Leonardo veya Pro Micro (ATmega32u4) Keyboard.h ile klavye olur. Ben ESP32-S3’ü tercih ederim: hem Wi-Fi’si var hem yerel USB’si, tek kart hem Hermetry’ye MQTT ile bağlanıyor hem klavye oluyor. Arduino-ESP32 core’unda USBHIDKeyboard var.
Hermetry tarafında kartın profiline Commands sekmesinden dozaj.yaz diye bir komut ekle, tek parametre: deger (Number, min-max aralığını gir ki saçma bir değer hiç gitmesin). Tier’ı Privileged yap, „High impact“ işaretle; gönderen onaylamak zorunda kalır ve kayıt audit log’a düşer.
Kart tarafı kabaca:
void komutGeldi(int id, float deger) {
if (deger < 0.2 || deger > 3.0) { cevap(id, false); return; }
char s[12];
dtostrf(deger, 0, 2, s);
Keyboard.print(s);
Keyboard.write(KEY_RETURN);
cevap(id, true); // v1/rpc/res/{id} {"ok": true}
}
En büyük risk odak: klavye yazdığı yere yazar. Operatör o sırada başka bir pencerede ise değer oraya gider. Biz komuttan önce programın penceresini öne getiren bir kısayol (Alt+Tab değil, programın kendi kısayolu) yazdırdık, sonra alana Tab ile gittik.
Bir operatör bilgisayarına uzaktan tuş yazdıran bir cihaz güvenlik açısından ciddi bir şey. Kartın komut listesinde sadece bu komut olsun, raw komut yetkisini kimseye vermeyin.
Kurumun BT politikası USB HID cihazları engelliyor olabilir, takmadan önce sorun. Bizde engelliydi.
ESP32-S3 DevKitC ile denedim. Toprak Bey’in dediği odak sorunu ilk testte başıma geldi, değer Not Defteri’ne yazıldı 🙂 Programın F2 kısayolunu öne aldım, artık düzgün yazıyor. Komut Privileged + High impact, aralık 0.2-3.0. BT tarafı test bilgisayarında izin verdi, sahaya geçmeden önce resmi onay alacağız.
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.
Mitdiskutieren
Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

