Prometheus node exporter

Prometheus (https://prometheus.io/) tai atviro kodo monitoringo sistema. Veikimo principas labai paprastas, kompiuteryje/serveryje veikia taip vadinamas node exporter’is kuris tam tikru portu (pagal nutylėjimą 9100), tekstiniu formatu atiduoda metrikas.

Metrikos gali būti serverio apkrovos parametrai, aparatinės įrangos informacija (temperatūros, aušintuvai, diskai ir t.t.), ar kažkokios programinės įrangos mariadb/mysql, apache ir t.t. metrikos. Exporterių tikrai yra prirašyta pakankamai daug, o jei reikia kažko išskirtinio, tikrai labai nesunkiai galima eksportuoti savo kažkokias susigalvotas metrikas.

Mano tikslas – ofiso serverių (labiau switch‘ų) kambaryje stebėti patalpos temperatūrą. Viskas turėtų patekti į prometheus ir būti atvaizduota grafanoje (https://grafana.com/).

Taigi, konstruojam hardwarinį temperatūrų node exporterį. Tam panaudojau Arduino nano ir enc28j60 LAN modulį.

Kodo pavyzdžių ir kaip viską sujungti tikrai galima rasti internete. Bet visos papaišytos schemos man neveikė. Problema buvo LAN modulio maitinimas. Kai kurios schemos nurodo LAN moduliui paimti įtampą nuo arduino 3V3 pin’o. Nuo jo pajungus, man moduliukas išviso neveikė. Nedegė jo LED ir nedegė indikaciniai LED pajungtus LAN kabelį.

Kai kurios schemos nurodo jungti nuo 5V. Tad jungiu nuo 5V pin’o. Viskas lyg veikia, bet LAN modulio čipas pradeda labai kaisti – per aukšta įtampa. Datasheet’as sako, kad reikia maitinti nuo 3V3, bet man nuo jo neveikia. Naršau internetą ieškodamas problemos ir randu: I was amazed to find that the ENC28J60 draws 200mA ! No wonder it wont work from the Nano’a 3.3v output (which is rated at 25 mA). (https://forum.arduino.cc/index.php?topic=452822.0)

Problema aiški! Lituoju 3V3 įtampos stabilizatorių ant 5V arduino pin’o, viskas veikia!… kokias dvi valandas. Viską pasijungiu ant stalo ir vėl bandau iš naujo. Po ~5min pradedu jausti, kad ardudino plokštelė pradeda palengva šilti. Panašu, kad perkaista.. bet kodėl?

Kaip matosi nuotraukoje, naudoju maža maitinimo šaltinį 220V -> 5V. Juo užmaitinu arduiną. Arduino nano turi 5V stabilizatorių, prie kurio aš jungiau LAN modulį, pasirodo, kad jis irgi yra per silpnas (nelabai čia protingai buvo jungti du stabilizatorius nuosekliai). Taigi dabar jungiu stabilizatorių jau ant Vin pin’o, ant kurio ateina 5V iš maitinimo modulio. Pagaliau schema stabiliai veikia.

Nuotraukoje matosi kaip viskas sumontuota viduje. Vidus nelabai gražus gavosi, mažoka dėžutė. Tvarkingai pritvirtinti gavosi tik maitinimo šaltinį. LAN modulis ir arduino turi tik super mažas skylutes montavimui, tad prie korpuso nesugalvojau kaip pritvirtinti, o klijuoti nenorėjau. Dėlto ir LAN jungties nesigavo gražiai išvesti per dėžutės šoną.

Rezultate curl’inant gauname:

$ curl http://192.168.10.250:9100/metrics
# Arduino DS1820 temperature exporter
temperature{thermometer="28ff6a0160170573"} 18.00
temperature{thermometer="28ff252160170585"} 16.00
temperature{thermometer="28ffed5530170399"} 16.69

Žemiau vaizdas iš Prometheus konsolės, Prometheus grafikas ir Grafanos grafikas:



Pastarasis kambarys nėra labai lankomas, todėl paskutinis žingsnis buvo sukurti prometheus alert’ą. Tad esant vėdinimo sistemos gedimui, ar dėl kažkokių priežasčių sustojus vėdinimo sistemai, praėjus 5min kai bus viršyta 22C temperatūra, Prometheus alert manager’yje pasirodys pranešimas apie pakilusia patalpos temperatūrą.

Darkroom timer (didintuvo laikmatis)


Spausdinant nuotraukas analoginiu būdu (apie tai rašiau čia) labai svarbus laikas. Bandžiau suktis iš situacijos naudodamas telefono programelę, bet telefono ekranas, kad ir rodo juodą spalvą, jis yra apšviestas ir skleidžia baltą šviesą.

Tokių prietaisų tikrai yra pirkti, tiek senų rusiškų, tiek šių laikų, modernių. Niekada neteko tokio naudoti. Nusprendžiau susikonstruoti savo. Tad maniškio valdymas yra toks kokį aš jį įsivaizdavau/sugalvojau.

Mano prietaiso mintis yra valdyti didintuvo lempą. Dešiniam šone yra rozetė į kurią jungiasi didintuvas. Didintuvo lempą priverstinai galima įjungti su viršuje esančiu jungikliu. Jungiklis didelis, tad tamsoje problemų jį apčiuopti ir junginėti nekilo.

Užprogramavimas.

Įjungus prietaisą ekrane šviečia nulis. Klaviatūros pagalba galima suvesti laiką sekundėmis. Suvedus laiką pasirenkam kuriam laikmačiui užstatyti suvestą laiką. Jų yra keturi. Tai raidės “A”, “B”, “C” ir “D” klaviatūros dešinėje.

Tarkime noriu, kad didintuvas popierių apšviestu 15sek, 2min pirmoje chemijoje (develop), 1min antroje (stop) ir 2min trečioje (fix).

Tad klaviatūroje suvedu “15” ir spaudžiu “A”, “120” ir spaudžiu “B”, “60” ir spaudžiu “C”, “120” ir spaudžiu “D”.

Paspaudus klaviatūroje “#” prasideda sekos vykdymas. 15’ikai sekundžiu suveikia rėlė ir užmaitina rozetę, ko pasekoje didintuvas apšviečia popierių. Po to pasigirsta pyptelėjimas ir ekranėlyje pasirodo skaičius 120. Laikas popierių dėti į pirmą vonelę. Kas sekunde ekranėlyje skaičius mažėja iki nulio (laikmatis B). Pasiekus nulį, vėl pasigirsta pyptelėjimas. Laikas popierių perkelti į antrą vonelę. Ekranėlyje pasirodo skaičius 60 (laikmatis C). Vėl mažėja iki nulio ir vėl pasigirsta pyptelėjimas. Laikas popierių perkelti į paskutinę vonelę. Ekrane pasirodo 120 (laikmatis D) ir mažėja iki nulio. Paskutinį kartą pasigirsta pypsėjimas. Dabar galima įjungti šviesą ir įvertinti rezultatą.

Viskas sukonstruota WeMos D1 R1 pagrindu. Programuota arduinu.

Žemiau nuotraukoje matosi visos panaudotos detalės.

Nuorodos iš kur pirkau:
WeMos D1 R1 https://www.aliexpress.com/item/32657998940.html
Klaviatūra https://www.aliexpress.com/item/32831963425.html
Ekranėlis (raudonas) https://www.aliexpress.com/item/32867950441.html
Rėlė https://www.aliexpress.com/item/32639452633.html
Spykeriukas https://www.aliexpress.com/item/32955065577.html
Maitinimo šaltinis https://www.aliexpress.com/item/32656713529.html
Jungiklis ir rozetė https://www.ermitazas.lt/
Dėžutė https://rcl.lt/

Klaviatūrai nuskaityti panaudojau Keypad https://playground.arduino.cc/Code/Keypad/
Plačiau kokiu principu veikia: http://www.circuitbasics.com/how-to-set-up-a-keypad-on-an-arduino/

Su klaviatūra buvo dvi bėdos. Pirmoji, kad veikė ne visi klavišai. Išardęs pamačiau, kad naudojami takelių “jumperiai”, kurie, panašu turėjo kažkokią varžą.

Matosi nuotraukoje, kad prilitavau savo “jumperius”. Klaviatūra pradėjo veikti.

Bet štai išlindo antra bėda, kontroleris tiesiog persikraudinėdavo. Pagooglinus randu https://github.com/esp8266/Arduino/issues/3241
Rezultate Keypad.cpp faile 213 eilutėje pridedu yield()
Dabar ji atrodo taip:

while( (waitKey = getKey()) == NO_KEY ) yield();;   // Block everything while waiting for a keypress.

Ekranėlį valdau su TM1637 (galima rasti Arduino Library Manager’yje). Ekranėlis šviečia raudonai (raudonos šviesos nebijo juodai baltas foto popierius). Pagal nutylėjimą jis šviečia gan ryškiai, tamsoje man to nereikia, tad šviesumą mažinu iki minimumo. Kodas:

display.setBrightness(0);

Spykeriukas spiegia gan garsiai, tad bandymo keliu atrenku varžą ir pajungiu nuosekliai. Kokia tai varža nebepamenu, orientavausi į norima garsumą.

Aparatas jau išbandytas, darbas daug smagesnis, veikė taip kaip noriu ir nei kart nepavedė.

ADS-B+Banana PI=flightradar24

Paruošus darbui Banana PI visai atsitiktinai toptelėjo mintis pasidalinti ADS-b duomenimis su Flightradar24 (www.flightradar24.com).

ADS-b tai atvirai lėktuvų transliuojamos metrikos (aukštis, greitis, koordinatės ir t.t.). Visa tai transliuojama 1090MHz dažniu ir gali būt priimama su vos 10€ kainuojančiu USB TV tiuneriuku. Aš juos turiu kelis, bet šiuo konkrečiu atveju naudojamas šis:

Aliexpress puslapyje į paiešką parašius “ads-b” tikrai rasite ne vieną tokį ar panašų tiuneriuką. Svarbiausia, kad jo mikreschemų rinkinys (chipset) būtų RTL2832U.

Jungiam tiuneriuką prie kompiuterio ir instaliuojam rtl-sdr
Ubuntu:

apt install rtl-sdr

Archlinux:

pacman -Sy rtl-sdr

Nesvarbu kuria OS naudojat (kad ir bet kuria kita linux distribuciją) reikia uždrausti (blacklistinti) dvb_usb_rtl2832u kernel modulį. Pastarasis modulis yra skirtas skaitmeninei TV žiūrėti, jis yra kernelio dalis, todėl užsikraus pirmasis ir “trukdys” mums naudotis tiuneriuku ne pagal jo tiesiogine paskirtį.

Patikrinimui ar viskas gerai veikia, naudojam:

rtl_test -t

Iš puslapio https://www.flightradar24.com/share-your-data kopijuojame pateikta komanda ir leidžiama kaip root. Mano atveju tai buvo:

bash -c "$(wget -O - https://repo-feed.flightradar24.com/install_fr24_rpi.sh)"

Šis skriptas suinstaliuos fr24feed servisą. Konfiguruojame su:

fr24feed --signup

Aš iš anksto jau buvau užsiregistravęs flightradar24 puslapyje, tad čia panaudojau tuos pačius prisijungimo duomenis.

Maniškė konfigūracija atrodo taip:

root@bpi-iot-ros-ai:~# cat /etc/fr24feed.ini 
receiver="dvbt"
fr24key="***************"
path="/usr/bin/dump1090-mutability"
bs="yes"
raw="yes"
logmode="1"
procargs="--net"
windowmode="0"
logpath="/var/log/fr24feed"
mpx="no"
mlat="no"
mlat-without-gps="no"

Enable’inam servisą:

systemctl enable fr24feed

Startuojame:

systemctl start fr24feed

Jei viskas veikia, adresu http://_jūsų_serverio_IP_adresas:8754 turėtumėt matyti kažką panašus:

O adresu http://_jūsų_serverio_IP_adresas:8080 (vaizdas su nauja antena, aprašymas žemiau)

Norint matyti šį vaizdą konfiguracijos ketvirta ir aštunta eilutės yra privalomos.
Šiam lange rodomi šiuo metu tiuneriuko matomi lėktuvai. Jei per minutę joks signalas negaunamas, lėktuvėlis iš šio žemėlapio yra šalinimas. Taigi, šiuo mementu maniškis banana pi priima signalą iš 11 lėktuvų ir dar du iš kurių pilnai duomenis nepaimami (per toli?).

Ir paskutinis bet svarbus įrenginys visame šitame yra antena.

Pirmas tris savaites tiuneriukas buvo pajungtas prie “bet kokios” (PMR dažniui skaičiuotos Yagi tipo) antenos. PMR dažnis yra 446MHz, lėktuvai transliuoja 1090MHz… tad tai net nėra panašų, bet su tokia komplektacija lėktuvai buvo matomi iki 120km spinduliu.

Kiek pasigoolinus nusprendžiau pasidaryti šiam dažniui skirta anteną “voriuką”. Antena tikrai nedidutė, gero sprindžio dydžio. Antenos “brėžinys” matosi vienoje iš nuotraukų. Visų strypelių ilgis 68mm, kampai 45 laipsnių.


Po antenos pakeitimo, matymo spindulys padidėjo nuo ~120km iki 210km t.y. beveik dvigubai.
Atstumo galima pasiekit ir didesnio, bet antena yra ant vieno aukšto namo, kuris aplinkos atžvilgiu yra šiokioje tokioje dauboje.

Taip pat daugiau kaip šimtu padaugėjo per diena nuskaitomų lėktuvų kiekis:

Už tai, kad teikiu duomenis flightradar24 puslapiui, mano Basic paskyra pavirto į Business, todėl puslapyje galiu prieiti prie visiškai visų duomenų ir be reklamos.

PS: Su šiuo tiuneriu galima nuveikti ir dar daugiau smagių dalykų, gal kada aprašysiu.
PSS: Nuotraukoje aukštoji yra CB antena, gal kada ir apie tai parašysiu.

Reguliuojamas maitinimo šaltinis

Lygiai metų projektas, nes visos detalės gulėjo beveik metus. V/A ekranėlis pirmu siuntimu manęs nepasiekė, pardavėjas gražino pinigus. Po beveik metų, prisiruošiau užsisakyti trūkstama dalį ir pagaliau, atsiradus laikui, viską surinkau.

Specifikacijos:

Reguliuojama įtampa 1.25V – 23.6V
Srovė 0A – (?) dar neišbandžiau, bet pagal kitus konstravusius ir matavusius ties 23.6V turėtu būt 5A

Detalės:

Maitinom blokas – 4A To 6A 24V Stable High Power Switching Power Supply Board AC DC
Įtampos/srovės reguliatorius – Buck Converter Step-down Power Module 7-32V to 0.8-28V 12A 300W
Voltmetras/ampermetras – DC 100 V 10A Voltmeter Ammeter Blue + Red LED
Potenciometrai – rcl.lt
Potenciometrų rankenėlės – 10 Pcs 6mm Shaft Hole Dia Plastic Threaded Knurled Potentiometer Knobs Caps
Gnybtai – Good Quality 4Pcs/Lot Speaker Amplifier Terminal Binding Post Banana Plug Socket Female Connector Electrical Tool
Kabeliukai su krokodilais – High Quality 0.8m Dual Banana plug – alligator clip
Dėžutė – rcl.lt

Visas kitas smulkmenas (laidai, jungtys, termo vamzdeliai) jau turėjau namuose.

Visų pirmą bandžiau kuo patogiau sudėti elementus, kad viskas tvarkingai tilptu. Nors pradžiai pasirodė, kad viskas puikiausiai tilps, bet vietos tikrai nebuvo per daug.

Taigi, žymių tvirtinimo vietas, gręžiu skyles, tvirtinu.

Reiktu atkreipti dėmesį, kad geltoni “varinukai” (kaip kažkada juos vadindavom kompiuterių gamyboj) yra skirtingo diametro, kaip ir varžtukų kepurėlės. Su platesnėm kepurėlėm reguliatoriaus jau prisukti nesigavo.

Toliau nuo įtampos/srovės reguliatoriaus išlituoju mažiukus, mėlynus (pirmuose nuotraukose matosi, kvadratiniai mėlyni su varžtuku paderinimui) potenciometrus ir vietoje jų lituoju “normalaus” dydžio, analogiškus 10kOhm

Matuoju atstumus ir montuoju į korpusą ekranėlį, potenciometrus, kontaktus, lizdą.

Galutinis vaizdas.

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close