Quickpost met wat code… RFXcom + Python + OpenHab

Ik moet even wat code parkeren naar aanleiding van wat “vakantie-uitzoekwerk”. Ik heb mijn DIY ontvanger en zender voor 433.92Mhz, voor het schakelen van mijn lampen, de kerstboom etc. vervangen door een RFXcom RFXtrx433E USB 433.92MHz Transceiver. Natuurlijk is zelfgebouwd heel leuk en leerzaam, maar de RFXcom heeft al meteen laten zien dat hij een stuk betere ontvangst heeft dan mijn eigen creatie. Net als de andere systemen, communiceert de RFXcom niet rechtstreeks met mijn OpenHab systeem, maar via een MQTT-server.

De RFXcom adapter hangt aan een Raspberry Pi machine. Niet die waar de MQTT-server en OpenHab zelf op staan, dat bleek net wat veel van het goede. Onhandig is dat RFXcom zelf geen Debian software beschikbaar stelt. Maar gelukkig zijn er anderen die daar  voor gezorgd hebben.  Zoals Anton, die deze code in Python beschikbaar gemaakt heeft.

Welke protocollen in RFXcom?
Stap #1 is om te bepalen welke protocollen de RFXcom moet ondersteunen bij het ontvangen. Hoe minder hoe beter, dan raakt hij minder in de war. Welke protocollen de verschillende apparaten gebruiken kun je opzoeken, maar je kunt ook de rfxcom applicatie opstarten en luisteren naar wat er binnen komt. Alleen, die draait niet op Debian. Een optie is om de adapter “door te verbinden” naar een poort op de Raspberry Pi en dan vanaf een andere computer verbinding te maken. Dit kan met de tool “socat”, die je even moet installeren op de Raspberry Pi en dan moet je het volgende commando runnen:
sudo socat tcp-listen:10001,fork,reuseaddr file:/dev/ttyUSB0,raw &
Het is wel belangrijk om daarna het proces weer te killen, want het Python-script en socat kunnen niet tegelijkertijd gebruik maken van de USB-poort.

Python script as service
Een tweede probleem waar ik tegenaan liep was dat een Python script niet zomaar “op de achtergrond” wil draaien. Dat betekende dat als ik het SSH-scherm sloot, het script ook sloot. Zelfs na gebruik van bekende opties als het toevoegen van een “&” aan het einde van de commandoregel.

Gelukkig was er ook hier iemand die dat uitgezocht heeft en duidelijk wist uit te leggen. Ik heb die code gecombineerd met de code van Anton. 
Toen bleken er nog wat meer uitdagingen te zijn met betrekking tot MQTT omdat OpenHab niet zomaar een “:” kan hebben als onderdeel van de naam van een MQTT-regel, dus ook daar heb ik aanvullende filters voor in de code opgenomen.
En om het geheel een beetje overzichtelijk te houden heb ik in Github een “fork” gemaakt van de code van Anton en mijn wijzigingen toegevoegd. Je kunt die hier vinden op Github.

Toetscombinaties in Nano
Het laatste stukje dat ik even moest bewaren, waren een paar onmogelijk te onthouden toetscombinaties in “nano”, de teksteditor die ik meestal gebruik op de Raspberry Pi (via SSH):

Select: ALT + M + A
Copy: ALT + 6
Paste: CTRL + U

Het selecteren van tekst, knippen en plakken is nou eenmaal iets wat je graag wilt kunnen en dat in nano dus niet zo vanzelfsprekend is als je zou willen.

Sorry als dit een voor jou volledig nutteloze blogpost is, ik had even een plek nodig waarbij ik zeker wist dat ik de code ook over een paar maanden / jaren weer terug kan vinden.