Building P.K.E. Meter

 

I am at the beginning of my next home project. This time I am going to build a P.K.E. Meter. Why? Honzík, my son, would like to have one. When we were on our vacation, Honzík met some other boys staying in our hotel and they started playing many games in the hotel’s gym.

One of them was kind of “finding ghosts in the hotel”. They used mobile phones with a fake ghost detector application. But a real ghost detector would be much better than just an app and enable them to have much more fun.

I immediately came up with a ground breaking idea and started designing a possible solution. My inspiration was mainly the P.K.E. Meter from the Ghost Busters movie. At that time I had no idea that it is called by this name. But just for sure, it is this device from the movie:

 

PKE Meter Detail

 

It is a dream device for DIY project: moving parts, marching LEDs, simple display. All of this can be simply built by a 3D printer and made alive using a small processor board like micro:bit. But this time I decided to use something a little bit more powerful. Raspberry Pi Pico. Mainly because I wanted to use Golang for all the development. And micro:bit could be a bit tighter in terms of available resources.

Tinygo is almost standard Go. All the main features are there – go routines, channels, most of the standard libraries work. And there is a new package “machine”. It gives you access to most of the HW features of Raspberry Pi Pico. And there is also a new library of drivers which support most of the hardware elements you would like to connect to the Pico.

There is special golang compiler for small and embedded devices called tinygo. It is incredible in the compiled code size optimalization. If you compile Hello World sample using full-grown golang compiler, it will have probably 1MB. If you completely the same using tinygo the size will be 28 KB!

I have decided for this platform – golang and the microcontroller. Now I need to connect all the peripheries. And there will be many of them. I need a display. I need marching LEDs on the arms. I need to detect motion in front of the P.K.E. Meter and it could be covered by an ultrasound range meter. I would like to detect motion of the device by an accelerometer. And a buzzer to scare users by doing very creepy beep-beep-beeeeeep!

 

PKE Meter components

 

I set a target for myself – every day I will test one periphery and learn how to communicate with it. Today I am able to control the display, LEDs, servo and beeper. The accelerometer and range meter are in my pipeline.

I will also need a box – cover – for my PKE Meter. I started drawing the hardware part of the device. How else than in the most typical way – by drawing it on the “Back side of the napkin” (I like the book with this name).

 

PKEmeterHW

 

Later I will re-draw that using Autodesk Fusion CAD and I will print a cover. My feeling is that the cover could be a bit complex. Probably I will print it per-partes and glue it together and after having a working prototype I will unite all the parts together and print the final version.

That’s the plan…

Smart frame

I am not a programmer. In the past I occasionally coded something for PoCs (proof of concepts) just to show that something could work and how  it would look like. Sometimes I code something as a weekend project. Like when I connected a small Seva construction set based robot to Alexa smart speaker to be able to control the robot by voice. Or like when I used Micro:bit board to create a real-world Among Us button.

But once upon time I got an idea of learning a new programming language and its ecosystem – frameworks, libraries, test tools, deployment tools… Just to have my fingers on the pulse of the software development – to see what’s new in the software development industry.

This month I decided to go to Go. Or golang  how it is call more often to reduce ambiguity of the original name. Why golang? Because I like strongly typed languages. I am lost in the borderless word of dynamically typed languages like Python. I like when my IDE is able to help me with property and methods names and parameter types. And it works much better with these more strict languages. Like golang.

I also needed a reason why I should learn it. Some motivation.  So I made a plan to build up something like smart frame – or smart picture – with e-ink display displaying time, date, Bitcoin price, temperature, simply anything I would like to have on the display. And the software will be written in golang. 

Fortunately there is golang library for e-ink display and I did not need to start writing a low-level communication library. Everything went actually quite fast. I ordered Waveshare e-ink display, Raspberry Zero W 2 and a picture frame from rpishop.cz. I 3d-printed a simple stand for the frame, mounted everything together and the hardware part was done. 

Smart frame

Smart frame back

Then I started coding the application for the frame. At the beginning I had huge plans – I was planning to develop a framework for smart frames, It was planned to be modular and easy to maintain and easy to expand concept, and so on. At the end I and still expanding by very first ugly code with ģlobal variables used to share the values which should be displayed on the screen.

Maybe ugly but stable. The code runs for several weeks and I had no issue with the stability.

Why do I need a 3D printer?

Occasionally I am asked: How often and for what do you use the 3D printer? 

I use it quite often. My informed guess is that it happens about twice per week or even, on occasion, more often. Based on the need to print something and based on free time, I can invest into the printing related activities. What do I mean by that? The act of the printing is something at the end of the process. At the beginning there is an idea or the mentioned need to print something. Quite often it is something broken by our two young boys. 

In this given case I printed a part which was missing on the ambulance car which Adámek had found next to the plastic waste bin. He likes cars. And he wasn’t able to let the ambulance to be scrapped and took it home. So I printed the back door and changed the battery and now the car looks quite new.

 

Dvere ambulance

Or another case. We have an Alexa Wall-clock but we do not want to have it mounted on any wall. For some time the rounded clock was freely rolling on the window parapet and finally I decided to make a stand for it. It was quite an easy job to draw the stand using my favourite tool – Fusion 360 – and the result is not bad.

Alexa wall clock

I have many other cases where the printer helped us. 

Fusion projects 1Fusion projects 2

 

And till now I am speaking only about projects I made from scratch. Fortunately there are models available for download on the internet and all you need is to find, download and print the right model.

But I have much more fun by designing the things I am then printing. I consider the ability to design at least simple objects important to have a long term fun with the 3D printer.

And this is how it looks like when my two big technology hobbies meet each other. Printed case for Raspberry Pi + SSD disk – my Lightning node…

Jaxtax case

Building Lightning node

There was a need for a Lightning node and fortunately nearly at the same moment an older notebook found its way back to be. Quite old but still powerful enough to run all the needed software. I installed Linux Mint (just to have a nice graphical user interface I will never use), CTX containers and started installing all the needed Lightning node (further in the text just LN) applications into the container. Why into container? Just to be able to clean-up the notebook from all these components easily. 

Installing software

There are pre-built OS images with LN installed for Raspberry Pi. If you want to run LN on your Raspberry Pi you can have it in minutes. For other platforms, it’s necessary to install a bitcoin node application, lightning node application and probably same management tools to have a more comfortable way how to monitor and manage the node without going to the command line all the time.

To find the right component stack is quite easy – there are some proven apps and their alternatives.

I have chosen the proven ones:

  • Bitcoin core – bitcoind
  • LND
  • LNDConnect to be able to connect my mobile phone wallet easily

and some add-ons to have a web user interface for common tasks:

  • Ride The Lightning
  • ThunderHub
  • Lightning Terminal
  • Bitcoin Explorer RPC

Thanks to LNDConnect you can easily connect iOS (mobile) Lightning Wallets to your node, I use:

  • Zap
  • Zeus LN

It took me (bitcoind actually) two days to synchronise the block-chain and in then I added all the other components in quick succession. Not big issues, I just needed for read some „solved issues“ on GitHub from time to time.

Connecting my node to others

The funny part is which channels should be opened and how to maintain the node. I have seen a youtube video where the guys called Lightning node “Tamagotchi”. It needs your attention otherwise it dies.

I decided to open two channels at the beginning and add a new one every one or two days. It seems to be quite a good approach as it shows some continuous “grows” in number of channels and also capacity to others. To find the right “peers” for the channels is kind of magic. Fortunately there are online tools which can help you to evaluate 16000 other nodes to find some good candidates for future friends.

First routings

Routing Fees

And it came! The very first routings of 3rd party payments. Yes, for a few Satoshis but they are there! And the same routings as a nice graph:

Routing Graph

Now it’s time to find a final home for my node – I will migrate it to a Raspberry Pi computer I bought for it.

The Lightning journey begins

I like Bitcoin. I came across it for the first time many years ago while paying for a coffee in Paralelní Polis. Over time it became too expensive to pay for a coffee by Bitcoin itself. To solve it I installed Breez wallet to be able to pay small amounts using Lightning network and a bit later I made the first payment. Where else than in Paralelní Polis.

Last week a friend of Honzík came up with the ideas of selling home-made lemonade on a street to make some money and to have some fun. To give you a context, Honzík is my 7 years old son. We immediately started supporting the idea and proposed help with all the necessary arrangements like a stand, a product which will be sold, how to make some PR and I proposed to support the idea by allowing their customers to pay by BTC and LTC. But based on my own experience, I knew that BTC blockchain itself is not the way how to pay 10 CZK (~900 sats today). I needed a cheaper way how to pay 10 CZK using BTC.

My very first idea was to create a payment request in Breez wallet, print the related QR code on a sheet of paper and done. I started evaluating the idea and found some shortcomings:

  • Breez wants me to keep the application opened until the payment is finished.
  • It’s not a good idea to re-use the generated lightning invoice if you do not want to lose your money.

So I decided to have some fun as well and started installing my own “lemonade” Lightning node to be able to generate my own Lightning invoices. Today my node is live for the 3rd day and I am going to share my Lightning journey here.

And BTW the guys‘ lemonade stand was a great success even without the BTC payments. So imagine how it could have done if they had it!

Tiskárna Průša 3D a její přátelé (AKA ekosystém)

Dostal jsem 3D tiskárnu, moc jsem si ji přál a k narozeninám jsem ji dostal. Je to Průša MK3S+ a dostal jsem ji jako stavebnici. Toho jsem se z počátku bál, zdálo se mi, že se k té stavbě vlastně nedostanu časově, ale nakonec jsme v podvečerech a po hodinách a minutách za jeden týden tiskárnu postavil.

A tiskne. Řekl bych, že na to, že jsem ji stavěl já, začátečník a tiskne na ní také začátečník, tak jsou výsledky výborné. Občas se něco nepodaří, občas nebo zkazím buď já nebo z nějakého důvodu tiskárna, ale učíme se oba.

Octoprint

Přenos tiskových předloh pomocí SD karty se mi zdál trochu nepohodlný a tak jsem vlastně okamžitě doplnil tiskárnu o Raspberry PI 4B a nainstaloval Octoprint a MPEG-Streamer. Tím jsem získal možnost přímo ze sliceru odesílat tiskové soubory po Wi-Fi. Instalace je snadná a pěkně popsaná třeba zde.

Zdá se, že oblíbenou činností 3D tiskařů je vylepšování tiskárny. Začal jsem s tím také. Jako první byl držák na kamerku. Zvolil jsem tento a lehce upravil rameno, které kamerku drží. To původní se dívalo na tiskovou plochu trochu moc zespodu. A alespoň jsem si něco praktického vyzkoušel nakreslit ve Fusion 360.

Upravené rameno pro kamerku

Autodesk Fusion 360

Cesta k Fusion 360 nebyla přímá. Raději bych používal něco open source s velkou komunitou. Třeba jako Blender nebo OpenSCAD. Ale Blender pro mě měl velmi strmou učící křivku – jinými slovy: stálo by mě to hodně času. OpenSCAD se mi líbí konceptem psaní kódu, který vytvoří výsledný model. A k Fusion 360 jsem se dostal až po pár pokusech s FreeCADem a několika online nástroji.

A zatím mi vyhovuje. Po shlédnutí tutoriálů, především pak jednoho velmi pěkného zde jsem byl už schopný jednoduché věci nakreslit. Asi u něj zůstanu.

Kamerka

Zpět k OctorPintu. Jako kamerku, jejíž využití OctoPrint ve spolupráci s MPEG-Streamerem podporuje, jsem zvolil Raspberry Pi kameru ve verzi 1.3, která se dá sehnat doslova „za pár stovek“.

Kamerka se připojuje plochým kabelem a ten jsem si opět za pár korun přikoupil v délce 50cm.

Raspberry Pi

OctoPrint běží téměř na čemkoliv – Windows, Linux, MacOS. Na MacOSu jsem si jej rychle otestoval, abych získal představu co to umí a zda to chci. A pak už následovalo přenesení zahálejícího Raspberry PI 4, instalace software a bylo to.

Raspberry Pi 4B má vestavěné Wi-Fi, takže k němu vlastně nic jiného není potřeba doplňovat. Zbývá už jen připojit tiskárnu, což se dá provést nejlépe krátkým USB A-B kablíkem, třeba od Krupů. Stačil by i kratší než 50cm, ale nemají.

A jako druhé vylepšení následoval držák na to zmíněné Raspberry PI.

Sestava tiskárny s držákem na Raspberry PI a kamerku

Líbil se mi takový, který využívá pasivní chlazení hliníkovým krytem s náhradou jeho spodní části vytisknutým držákem. Takový je zde.

Další doplňky

Pak už v rychlém sledu následoval tisk klipen na filament, aby se na skladovaných špulkách sám neodvíjel. Šuplíček na nástroje, který pěkně drží na rámu tiskárny. A ozdoba na extruder, aby bylo vidět kam a jak rychle se točí.

Pochvaly

Pochvalu si zaslouží Průša3D za úroveň návodu na sestavení a množství pokrytých oblastí a dotazů jejich on-line znalostní bází.

Jen když se mi filament nalepil na extruder, tak jsem nevěděl jak na to a v KB o tom nebyl článek, ale i to je pokryto – zde. Ale zjistil jsem, že místo mosazného kartáčku stačí pro lehčí znečištění nějaká přírodní tkanina a horký extruder pomocí ní očistit.

Další pochvala jde komunitě kolem OctoPrint. Je to úžasný software a díky němu SDčko po prvním zasunutí do tiskárny nemuselo už nikdy ven. Pro OctoPrint je k dispozici i pěkná aplikace pro telefon – OctoPod, která umožňuje se na tisk dívat, tiskárnu vzdáleně ovládat a to včetně zahájení tisku a podporuje také notifikace o stavu tisku. Dostat na závěr tisku na hodinky notifikaci včetně fotky výtvoru je dost cool.

OctoPod pro iOS

Je to super

A těch drobností co člověk může vytisknout.

Blbůstky pro radost a pro otestování tiskárny

A první užitečná věc:, Adámek zlomil oj u vlečňáku. Tak jsem nakreslil a vytisknul novou. Lepší. Ta se nezláme. Materiálem jsem nešetřil.

Náhrada ojky vlastní!

Pro hledání zajímavých modelů se mi moc líbí aplikace Thinger. Takový ŤikŤok pro mejkry, který je dělaný pro bleskové prohlídnutí mraků modelů a uložení těch zajímavých do vlastních kategorií.

Thinger – aplikace pro IOS

A jdu se podívat jak dopadl další Among-Us panáček. Bude oranžový…

BarTender jsem znal a umí toho ve oblasti správy ikonek v menubaru macOSu opravdu hodně, možná až moc. Začal jsem se bát, že si to vybere svou cenu ve velikosti a náročnosti aplikace.

Vanilla v akci

A dnes jsem v tomto vláknu redditu nalezl odkaz na aplikaci Vanilla, která ten úplný základ – skrytí ikonek – zvládne také a je v základní verzi zadarmo. A je super!

Echo Frames

V rámci programu „Amazon pro nedočkavé“ jsem si loni pořídil brýle s Alexou. S o něco lepší cenou a o něco dříve než byly na trhu. A první dojem? Obrovské zklamání.

Problém byl možná spíše ve mně. Měl jsem možnost vyzkoušet si brýle s Bluetooth od Bose a nějak jsem čekal, že to bude hrát stejně a navíc v tom bude Alexa. Ale tak tomu není, hraje to velmi nenáročně a bez jakékoliv stopy basů.

Vlastně jsem si myslel, že kvůli tomu brýle používat nebudu vůbec. Původně jsem si je pořídil právě pro poslouchání hudby a telefonování a občasné užití schopností Alexy a k tomu poslouchání hudby radostně používat prostě nejdou.

Naštěstí pro moji peněženku ani na toto nedošlo. Brýle si našly své použití – poslouchání podcastů při tlačení kočárku a telefonování při hlídaní dětí.

Mají totiž jednu velkou výhodu – neblokují uši a lze s nimi působit „zapojeně“ i když ve skutečnosti posloucháte někoho nebo něco jiného. A to je něco, co lze provozovat se špunty v uších jen obtížně.

Alexu si můžete zavolat jménem, tedy tak jako obvykle, nebo tlačítkem na spodku jedné z nožiček. Hned vedle je další tlačítko pro regulaci hlasitosti. Nutno říci, že ta maximální hlasitost není dostatečná pro použití na ulici pokud vedle vás projede auto nebo tramvaj.

Dále brýle reagují na jedno nebo dvě poklepání na postranici. Tím se signalizuje spuštění nebo pozastavení hudby a přejetím lze zavěsit nebo zamítnout hovor.

Na zavolání jménem reagují brýle tak asi v 3/4 případů při použití venku a to nečekám, že mě uslyší pokud kolem jede auto.

Za plnou cenu bych si to určitě nekoupil a naštěstí jsem našel užití, při kterém mi ta věcička dává nějaký smysl…

Among Us Tlačítko

Znáte Among Us? Tu hru, kde se běhá po vesmírné lodi a plní se jednoduché úkoly, které drží loď v provozu a mezi hráči jsou navíc „impostoři“, kteří zabíjejí ostatní hráče. Ti se mohou hlasováním zase rozhodnout, koho vyhodí z lodi do vesmíru.

Tak tuhle počítačovou hru hrají u Honzíka ve škole přenesenou do reálu. Je to vlastně fajn, skutečně u toho běhají a vřískají a honí se a hlasují a tak.

A aby to hráli s větší chutí, tak chtěl Honzík vyrobit nějaké lepší Tlačítko, kterým se oznamuje nález mrtvoly nebo svolání „energy meetingu“ (ještě se nám nepodařilo vysvětlit, že je to „emergency meeting“).

Nechali jsme se inspirovat podobou tlačítka ve hře. Plochý kvádřík se žlutočervenými proužky a na něm červené tlačítko.

Kdyby to člověk dělal před 10 lety, tak by asi stačila baterka, tlačítko a bzučák. Ale dnes se mi zdá škoda, nedat do něčeho co má baterku alespoň jeden procesor. A tak jsme zvolili řešení s následující elektronikou:

Schéma zapojení elektroniky Tlačítka.

Nejprve jsme na stole sestavili prototyp:

Prototyp a tester odolnosti komponent.

A pak realizovali finální zapojení s čokoládou:

Realizace elektroniky pro zabudování do krabičky.

Všimněte si toho krásného germaniového tranzistoru! To snad musím ukázat v detailu:

Detail GC 521

Zvláště ve spojení s tím micro:bitem, který podobných ale menších tranzistorů obsahuje asi čtvrt milonu je to pěkná podívaná.

A proč tam chudák GC 521 je? No aby v hluku školy bylo to bzučení po stisku tlačítka slyšet! Bez něj je to slabé. Mimo:bit potřebuje v tomto hodně pomoci. Ještě, že jsem ho v nějakých historických zásobách z dětství našel.

A nakonec došlo na realizaci té krabičky s tlačítkem. Vlastně ta vznikala v druhém týmu paralelně a tam se stříhalo, řezalo a barvilo:

A úplně nakonec byl vývoj finálního software. Pro oživování jsme měli jen funkční kostru kódu a teď došlo na implementaci všech fíčur:

  • odpočítávání času,
  • blokování tlačítka, pokud běží ještě odpočet,
  • bzučení a pípání,
  • nějaký ten easter-egg.

Zkoušel jsem i syntézu hlasu pomocí MicroPython speech knihovny, ale tomu výstupu jsme nerozuměli, ani když jsme věděli, co to má říkat. A tak to skončilo vývojem v běžném prostředí MakeCode. Alespoň si Honzík sám navrhl podobu číslic pro odpočet. Občas poněkud neortodoxních.

A dneska si Honzík vzal tlačítko poprvé do školy, tak snad donese alespoň ten micro:bit. Mohl by se hodit zase na další víkendový projekt.

Nagios vs Icinga2 vs Zabbix doma

Řeknete něco Alexe a ono se to nestane. Pošlete něco na tiskárnu a ono nic „nevyleze“. A třeba Honzíkovi najednou nejdou tanky. Co s tím? Chci i pro domácí užití nasadit nějaký dohledový systém na naše malé domácí IT. Možná ne až tak malé, DHCP tabulka routeru pro semi-statické přiřazování IP adres má 53 záznamů. Prostě doba, kdy každá věc má wifi, bluetooth a nutí nás vyměňovat jí pravidelně baterku.Co jsem vyzkoušel? Chtěl jsem Nagios, ale zdálo se mi, že jsou zde modernější alternativy, tak jsem nainstaloval Inciga2.

Inciga2

Proti Nagiosu, tak jak si ho pamatuji z doby před asi 15 lety, kdy jsme jej produkčně nasazoval, vypadá úžasně. Moderní vzhled a s Directorem není konfigurace v souborech ale v databázi a najednou je to takový dospělý systém dohledu.Rozhraní pěkně funguje, ale ta skutečnost, že vlastně nepíši přímo konfigurační soubory  mi za chvíli začala vadit. Takové psaní mýdlem na sklo. Pořád se dívám co ty moje akce v UI vlastně generují do konfigurace. Ale kdybych neznal Nagios, tak bych tu věc měl asi rád.

Inciga2 - History
Historická data
Inciga2 - Dashboard
Přehled stavu
Inciga2 - Host Configuration
Nastavení monitorovaného objektu

Pro moje domácí užití se mi to zdá zbytečně velké. Ale krásné. Dokumentace je, řekněme, extenzivní, ale taková jalová – neříká jak systém vlastně používat. Není tu žádný gajd pro damýs. Znovu se vracím k myšlence prostého Nagiosu, ale nalézám porovnání Nagios a Zabbix a tak zkouším Zabbix.

Zabbix

Zabbix - Dashboard
Zabbix Dashboard
Zabbix - Historical data
Zabbix – grafická podoba historických údajů

Nainstalováno asi za 20 minut. První alespoň pingem monitorované IP adresy mám za dalších 15 minut, protože jsem se musel podívat na video na youtube :-)Opět je to krásné a funguje to, ale zdá se mi, že jsem od těch kontrol (čeků) daleko. Moc silná vrstva softu. A nemám jasno, jak do Zabbixu dodělat to co budu v budoucnosti chtít. A dívat se na další vídea se mi nechce. Ale stálo by to za delší/další pokus. Ale nemám na to čas.

Nagios

Tak jsem si konečně nakonec nainstaloval na ten svůj Turris Omnia, odkud jsem to všechno zkoušel, do LXC kontejneru s Debianem Nagios. Abych měl poslední verzi, tak jsem to kompiloval, jo na Turrisu.Pak jsem přidal PNP4Nagios abych měl grafy a historické performance údaje. Jen to chce malou opravu pro nové verze PHP. Pak jsem přidal NRPE abych měl výkonová data a grafy o chodu vzdálených zdrojů.

Nagios
Nagios a zobrazení stavu monitorovaných strojů

Celé to vypadá jako z před-minulého století – abych neurazil to dvacáté. Ale konečně mám pocit, že je to tak akorát velké, konfiguruji to VIMem (teď už vzdáleně po SSH připojeným VS Code) a nainstaloval jsem si další notifikační komandy a jsem šťastný.Ale pro produkční systém mimo domov bych to nedal. Hromada kódu (NRPE, PNP4Nagios, …) není už mnoho let udržovaná a je zcela smutná a opuštěná. Asi tak skončí jednou i Nagios. Ale vlastně neva – Inciga3 a Zabbbix to jednou zachrání.