Temperatūros demonas

Posted: 2020-03-07 in Pezalai
Žymos:,

Galutinai atsibodo, kad katilinėje kabantis temperatūros stebėjimo moduliukas laikas nuo laiko atsijungia ir dingsta iš eterio. Laidas nuvestas yra, reikia prie jo kažką prijungti. Tik ką? Belaidžių modulių pilna, o su Ethernet – nieko. Arba nepagrįstai brangiai. Ot paradoksas, ką? Laidiniai mikrokontroleriukai brangesnis už bevirvėlaidžius, dasigyvenom…

Šiaip kuris laikas galvojau, kad susikodysiu kurį nors iš savo BluePill valdikliukų. Kadangi prieš kurį laiką įkvėpimui užėjus supeckeliojau didžiulę OneWire ir Dallas biblioteką, tai galėčiau išnaudoti su ja visus tris BluePill USART’us. Duomenų perdavimui į kažką kita reikėtų pasidaryti kokį nors USART emuliatorių per plokštės USB lizdą. Na, o šalia pakabint atlikusią Avietę ir tegu ji rankioja duomenukus iš to BluePill.

Ok, pasiruošimas:

  • Susirasti USB bootloaderį, tinkamą BluePill: check.
  • Perlituoti netinkamą 10k rezistorių į 1.5k: check.
  • Pasidaryti kažkokį USB-USART emuliatorių: fail.

Nepavyko man priversti turimų BluePill’ų šnekėtis su kompu per USB, konkrečiai USB CDC įrenginiu. USB HID anksčiau bandžiau, ten viskas buvo ok, bet nenorėjau aš to HID.

Tada man trinktelėjo mintis: o ko aš čia vargstu? Taigi mano OneWire/Dallas biblioteka yra visiškai agnostinė, aš net ant durniaus buvau demo padaręs, kur prie kompo prijungtas USB-USART keitiklis su FT232 mikroschema nuskaitinėja tuos termometrus…

Tai taip ir nusprendžiau: sukodysiu tokį linuksinį demoną, kuris iš USB keitiklių nuskaitinės temperatūrą ir per MQTT juos raportuos. Na, arba įrašinės į kokį failą, kurį kas nors kitas galėtų nusiskaityti.

Tikri vyrai demonus rašo su Posix C. O man irgi nepakenks truputį smegenis prajudinti, nes nuo visokių yzy skriptinamų kalbų baigiu nukvakt.

Išsikėliau reikalavimus:

  • Galimybė skaityti temperatūras iš kelių USART keitiklių
  • Nuskaitytą informaciją pateikti TSV ir JSON formatais bei siųsti į MQTT serverį
  • Nuskaitymo ir termometrų sąrašo atnaujinimo periodų konfigūravimas
  • Daugiagijė architektūra, nes nuskaitymas lėtas, reikia skaityti visus USART keitiklius lygiagrečiai
  • Stabilumas: nelūžinėti dingus arba nesant nurodytam keitikliui
  • Stabilumas: nelūžinėti dingus arba nesant ryšio su MQTT serveriu

Kažkaip taip.

Daug nevyniojant į vatą: sorsas čia. Reikiamus GitHubo submodulius išsitraukia, tik Jansson reikia su pridėtu shellscriptu parsitempt. Jansson galima naudoti ir platinamą su mylima Linux distribucija, o Paho MQTT tai reikėtų susikompiliuoti. Daugiau kaip ir viskas, readme yra pridėtas.

Paleidimo pavyzdys:

./temp_daemon -d /dev/ttyUSB0 -d /dev/ttyUSB1 --json=/tmp/temperature.json

Yra ir –help raktukas, kur visokios smulkmenos surašytos. Esmių esmė – nurodyti USB įrenginius ir kokį nors outputą. Yra pridėtas ir systemd unito failiukas su pavyzdine konfigūracija.

Testinis sujungimas su mano pačia pirmąja Aviete, kuri vargšiukė guli spintukėj ir neturi ką veikti. Taigi, nutariau jos gyvenimą įprasminti:

Dallas temperatūros davikliai ir Raspberry Pi | Darau, blė

Susidūriau su viena įdomybe, kurios nesupratau. Ant Intel kompo kompiliuojant GCC galima nurodyti bet kokias optimizacijas nuo -Os iki -O3. O štai ant Raspberry Pi galima optimizuoti tik su -O1, su visom kitom (išskyrus debuginę) optimizacijom demonas pastringa bandydamas išsiųsti MQTT žinelę. Ir nežinau, ar čia aš kažkaip neteisingai MQTT libą naudoju, ar kame ten reikalas. Naudoju asinchroninę versiją, tai žinelių siuntimas turėtų būti irgi asinchroninis, bet su kitom optimizacijom ant Avietės neveikia. Šito iškapstyt nesugebėjau, paskui nusprendžiau, kad nėra ko laiką gaišt.

Tai tiek, jei patiks – naudokitės į sveikatą. Tinka bet kokiems kompiuteriams su Linux ir USB.

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti /  Pakeisti )

Google photo

Jūs komentuojate naudodamiesi savo Google paskyra. Atsijungti /  Pakeisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti /  Pakeisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti /  Pakeisti )

Connecting to %s

Brukalų kiekiui sumažinti šis tinklalapis naudoja Akismet. Sužinokite, kaip apdorojami Jūsų komentarų duomenys.