PIR sensor alarm with esp8266 and IFTTT webhooks (maker)

Making a cheap alarm with web notifications through IFTTT is relatively simple with a passive infrared motion sensor (PIR) such as HC-SR501 and an esp8266.

You can install a few of these and monitor your home or office (provided power and WiFi of course). Future expansions could include a SIM GPRS module for SMS alarm messages.

The HC-SR501 module is one of the most common sold for Arduino/IoT based installments. Here’s a nice blog post describing a lot of interesting things about this sensor: http://henrysbench.capnfatz.com/henrys-bench/arduino-sensors-and-input/arduino-hc-sr501-motion-sensor-tutorial/

Problem #1:
As most this kind of sensor requires 5v to work reliably. In 3.3v it is proven that gives false positives or no detection of movement. So in a setup with esp8266 (or a NodeMCU board like I used) you must have a 5v output just for the PIR sensor.
Thankfully someone has found a solution without modifying the sensor as most propose (this is tested for the sensor working in repeat mode). Studying the schematics it is shown that instead of connecting the 5v power to the standard VDC input you can connect 3.3v directly to the lower pin of the High/Low trigger selection pin. You can read about this in the following blog post https://techgurka.blogspot.gr/2013/05/cheap-pyroelectric-infrared-pir-motion.html

Problem #2:
Interference! PIR sensor acts crazy when in close proximity with esp8266/NodeMCU’s WiFi producing a lot of false alarms.
The solution is to put the WiFi of esp8266 to sleep until there is a movement trigger from the sensor with this code:

void stopWiFiAndSleep() {

Problem solved!

As mentioned you’ll need an IFTTT account and a webhooks (former maker) key to use in the code. So each time PIR sensor detects motion esp8266 connects to WiFi and fires a webhook event. For example a Pushbullet notification in your phone.

The schematic connecting PIR with a NodeMCU is the following:

An ON/OFF switch is also added to stop sending the alarms when needed.

The code for the above setup is uploaded here: https://github.com/nikant/PIR-ESP-ALARM


[Greek/English] Φραγή, αποκλεισμός κλήσεων σε Android (5+) / Blacklist – Call blocker

Jump to English section

Ενοχλητικές κλήσεις, κλήσεις με υψηλές χρεώσεις επανάκλησης, απατεώνες, διαφημιστικές εταιρείες που καλούν μέσα στο μεσημέρι.. Λίγο πολύ γνωστά περιστατικά σε όλους μας.

Για το σταθερό τηλέφωνο υπάρχουν κάποια μηχανήματα αποκλεισμού / απόρριψης κλήσεων (πιθανότατα θα χρειαστεί να αγοράσετε από εξωτερικό αν θέλετε κάτι τέτοιο).
Για τα κινητά iOS/Android υπάρχουν πολλές εφαρμογές που προσφέρουν τη δυνατότητα δημιουργίας Blacklist ανεπιθύμητων κλήσεων.

Συγκεκριμένα για το Android που με ενδιαφέρει υπάρχουν δεκάδες εφαρμογές στο Google Play. Οι περισσότερες λειτουργούν σωστά κλείνοντας την κλήση στον ανεπιθύμητο. Τα “προβλήματα” που είχα ήταν περίπου τα ίδια. Πολλά αδικαιολόγητα permissions σε κάθε εφαρμογή, ανάγνωση του τηλεφωνικού μου καταλόγου και κυρίως η Blacklist με τα νούμερα που ήθελα αποθηκευόταν μέσα σε κάθε εφαρμογή χωριστά ώστε αν ήθελα να αλλάξω εφαρμογή έχανα ότι είχα περάσει.

Enter “Nick’s Blacklist – Call Blocker“. Μια εφαρμογή από εμένα (αρχικά για προσωπική χρήση και είπα να βγει και στο Play Store δωρεάν).

Τα τηλεφωνικά νούμερα προς αποκλεισμό δεν αποθηκεύονται μέσα στην εφαρμογή αλλά σε ένα Group στα Google Contacts (τις Επαφές του κινητού σας). Συγκεκριμένα ένα group με όνομα “Phone Blacklist Group” (πρέπει να το δημιουργήσετε, χωρίς quotes). Σε αυτό το Group απλά προσθέστε επαφές που δε θέλετε να σας ενοχλούν.

Αν πρόκειται για τυχαία νούμερα που δεν έχετε στις επαφές σας (διαφημιστικές κλπ.) μπορείτε να δημιουργήσετε μια επαφή με όνομα SPAM με όλα αυτά τα νούμερα και αυτή να την προσθέσετε στο Phone Blacklist Group.
Έτσι η λίστα ανεπιθύμητων θα συγχρονιστεί με τις επαφές σας στη Google και υπάρχει πάντα στη διάθεση σας.

Άλλες λειτουργίες που έχει η εφαρμογή είναι:
•• αποκλεισμός καλούντων με απόκρυψη

•• επιλογή να λαμβάνετε κλήσεις μόνο από τις αποθηκευμένες επαφές σας (όχι φυσικά αυτές που έχετε στο Phone Blacklist Group)

•• αποκλεισμός αριθμών που αρχίζουν από όποιο πρόθεμα ορίσετε εσείς
π.χ. αν δε θέλετε να σας καλούν από Μαλδίβες (γιατί έχετε τσακωθεί με κάποιους Μαλδιβέζους βρε αδερφέ..) στην λειτουργία Prefix # block θα προσθέσετε το πρόθεμα +960 και 00960 (για να είστε σίγουροι). ΠΡΟΣΟΧΗ να μην βάλετε κάτι λάθος στην επιλογή αυτή.

Εννοείται πως αν έχετε στο κινητό σας RAM cleaners, battery optimizations όπως π.χ. το Doze mode του Android (6+) θα πρέπει να προσθέσετε την εφαρμογή στην allow list για να λειτουργεί σωστά.



Nuisance calls, high rate spam calls, advertisers.. Well known problems nowadays.

There are some call blocking / blacklist devices for landlines from two or three companies in the market. There are also numerous iOS/Android apps for call blocking.

I tried many apps in Play Store. Most of them are OK blocking calls. “Problems” I had where more or less the same. Many unjustified permissions, reading my contacts in full and the main problem was that the blacklist with the numbers I desired to be blocked was stored in every app thus it was deleted when that app was uninstalled for whatever reason.

Enter “Nick’s Blacklist – Call Blocker“. An app I made for personal use now completely free (and ad free) in Google Play.

Numbers that are to be blocked are not stored inside the app but in a Group in Google Contacts (your phone Contacts). Specifically in a group named “Phone Blacklist Group” (you have to create it, without quotes). Simply add unwanted callers in that group.

If unwanted callers aren’t stored in your contacts you can for example create a SPAM contact, add that in Phone Blacklist Group and in that contact add every nuisance number you like.
That way your blacklist callers will be synced with Google contacts and always at your disposal.

Other functions of the app:
•• block hidden / private numbers

•• allow calls only from your Contacts (the ones in Phone Blacklist Group excluded)

•• prefix number block
i.e. if you don’t want to receive international calls from Nigeria you can add the prefix +234 and 00234 (depending on how your carrier represents international calls). BE CAREFUL not to make a mistake since this function blocks whole area codes.

Of course you have to exclude Nick’s Blacklist – Call Blocker from RAM cleaners if you have any in your phone or battery optimizations like Android Doze mode (6+) in order for the app to function correctly.

update THE433: Home Automation

It was about time to somewhat clean the code, update the README with instructions and also provide a demo Android app for my THE433 Home Automation

It’s a self contained ESP8266 RF433 Interface to control RF sockets from afar (with your personal IP or a DDNS service). No need for external services and servers (no MQTT, right now I prefer it that way..) and its main feature is that you can set RF signals to fire in the future or repeat over time.

The updated with instructions code: https://github.com/nikant/THE433

and also in GitHub you’ll find the demo Android app made with MIT-App-Inventor-2: https://github.com/nikant/THE433/tree/master/THE433%20Control%20Android%20demo%20app

AfraidDDNS updater

With all the IoT devices around Arduino, esp8266 etc. a hostname is often needed. https://freedns.afraid.org/ offers DDNS subdomains that are updatable through a special URL.

So this is a simple function that does just that.

Simply place files “afraidddns.h” and “afraidddns.ino” use
#include "afraidddns.h"
in your main program and call updateAfraid(); when needed

code: https://github.com/nikant/AfraidDDNS

You will need your afraid.org subdomain hash which you can get by logging in https://freedns.afraid.org/dynamic/ and checking the URL at the bottom of the page where it says Direct URL.
i.e. h++ps://freedns.afraid.org/dynamic/update.php?VxxxxxxxxxxFDGxxxxxxxxxx1xxxxxRTTxxxxxESP8

Forecast Jar

There are a lot of IoT projects out there dealing with weather / weather conditions etc. I’ve been tinkering with some as it’s a great way to learn things around microcontroller boards like Arduino.

After playing around with some designs I wanted something simple for my room to check tomorrow’s weather forecast at a glance.

So this is the Forecast Jar.

Design is simple component side. An esp8266, two RGB common anode leds and a DHT22 sensor for local weather conditions.

The code (is a mess but “Hey! It compiles!”) uses Weather Underground API in its free version which offers enough daily requests for this project.

Of course Forecast Jar has a web interface (esp8266 ;)) in which you can check local conditions reported from DHT22 sensor and, more importantly, you can change the location of the Forecast Jar with latitude and longitude so it can request the correct conditions from Weather Underground.

Also in the web interface there is the color legend for the forecast conditions

The Forecast Jar (in code) is also connected to IFTTT Maker if needed and reports it’s DHT22 data to a ThingSpeak channel so we can have pretty graphs of our room temperature and humidity :)

[post in Greek] Signal messenger (iOS / Android) και άλλα δαιμόνια

Από τον Οκτώβριο του 2014 που το Facebook (το μέσο που όλοι αγαπάμε να μισούμε και εξακολουθούμε να χρησιμοποιούμε) εξαγόρασε την εφαρμογή WhatsApp για 21,8 δισεκατομμύρια δολάρια ήταν σίγουρο πως κάποια στιγμή θα γινόταν το λεγόμενο monetization της εφαρμογής.

Δεν είναι παράλογο μιας και το Facebook, όπως και η Google κ.α., στηρίζονται στην χρήση των προσωπικών δεδομένων που οικειοθελώς παραχωρούμε κατά την εγγραφή μας για να βγάλουν χρήματα. Αυτή είναι η δουλειά τους.
Πέρα από κάποια αστεία κείμενα που πολλοί αναρτούσαν στο προφίλ τους στο Facebook ότι “δεν δίνουν το δικαίωμα για τη χρήση των προσωπικών τους δεδομένων” όσο συνεχίζουμε να χρησιμοποιούμε και να διατηρούμε λογαριασμό συναινούμε στη χρήση αυτή.

Το WhatsApp (ιδιοκτησία του Facebook) τώρα που έφτασε τους 1 δισεκατομμύριο χρήστες ανακοινώθηκε πως πλέον θα μοιράζεται κάποιες πληροφορίες του λογαριασμού κάθε μέλους του με το Facebook, συμπεριλαμβανομένου του τηλεφωνικού τους αριθμού αλλά όχι π.χ. των μηνυμάτων που ανταλλάσσουν με άλλους χρήστες (ακόμα).

Φυσικά για κάποιους όλα τα παραπάνω είναι αδιάφορα “αρκεί να μιλάω με τους φίλους μου”, “αρκεί να παρακολουθώ τον/την πρώην μου” :p, “δεν έχω τίποτα να κρύψω”, “αρκεί να κάνω ο ίδιος like στα ποστ μου”..
ΟΚ εσείς μπορείτε να σταματήσετε να διαβάζετε εδώ.

Please go. Now.
Please go. Now.

Προσωπικά μέχρι στιγμής είχα αποφύγει να προσθέσω το τηλέφωνο μου στο Facebook παρ’ όλες τις ειδοποιήσεις ασφαλείας και εξακρίβωσης στοιχείων. Έχει αρκετά στοιχεία μου και σίγουρα έχει φτιάξει το διαφημιστικό προφίλ μου αλλά δε χρειάζεται να τους επιβεβαιώσω και το τηλέφωνο μου.
Επίσης αρνούμαι πεισματικά να εγκαταστήσω τον Facebook Messenger στο κινητό μου (Android). Μια από τις πιο ενεργοβόρες και βαριές εφαρμογές που υπάρχουν.
Έχουμε φτάσει να έχουμε 5-6 εφαρμογές (apps λέω) μηνυμάτων για να μας δίνουν την αίσθηση πως είμαστε connected. Viber, WhatsApp, Skype, Messenger, τώρα έρχεται και το Allo της Google.

Ας μιλήσουμε για το Signal. Μια εφαρμογή messaging και VoIP κλήσεων (όπως αυτές του Viber, του WhatsApp κλπ) που δυστυχώς δεν χρησιμοποιούν πολλοί ακόμα. Ξεκίνησε το 2010 ως TextSecure και αργότερα ενσωμάτωσε και τις φωνητικές κλήσεις στην νέα εφαρμογή με το όνομα Signal. Αναπτύσσεται από τη μη κερδοσκοπική Open Whisper Systems και φυσικά είναι δωρεάν και open source.

Signal app icons
Signal app icons

Αυτή τη στιγμή θεωρείται η top εφαρμογή που προσφέρει μηνύματα και κλήσεις με πλήρη κρυπτογράφηση (και φυσικά ΔΕΝ διαβάζει τι γράφετε ούτε ενδιαφέρεται για τα στοιχεία σας). Επίσης είναι επιλογή, λόγω της ασφάλειας που προσφέρει, του Edward Snowden, κάτι που δε σας ενδιαφέρει πιθανότατα αλλά έπρεπε να τον αναφέρω κάπου :p

I use Signal every day. #notesforFBI (Spoiler: they already know) https://t.co/KNy0xppsN0
— Edward Snowden (@Snowden) November 2, 2015

Υπάρχει για Android στο Google Play και για iOS στο App store και η χρήση του είναι το ίδιο απλή με το WhatsApp.

Αφού την εγκαταστήσετε θα χρειαστεί να δώσετε τον αριθμό του τηλεφώνου σας για την εγγραφή σας (τίποτε άλλο) αλλά και για να μπορείτε να δείτε ποιες από τις επαφές σας χρησιμοποιούν επίσης το Signal.

Η εφαρμογή θα κάνει ένα verification με τους servers στέλνοντας ένα SMS στη συσκευή σας και αυτό είναι (η διαδικασία είναι σχεδόν ίδια με αυτή της εγγραφής στο Viber).

Στο Android η εφαρμογή έχει τη δυνατότητα να γίνει και η default εφαρμογή SMS της συσκευής σας αλλά αυτό ας το αφήσουμε προς το παρόν. Απλά στην σχετική ειδοποίηση όταν ανοίξετε για πρώτη φορά την εφαρμογή (ή αν σας εμφανιστεί ξανά) επιλέξτε το X.

Είστε έτοιμοι. Το εικονίδιο κάτω δεξιά θα ανοίξει τις επαφές που χρησιμοποιούν επίσης το Signal από εκεί θα επιλέξετε που θα στείλετε μήνυμα ή θα καλέσετε.

Απλά, κρυπτογραφημένα και χωρίς να μοιράζεστε τα μηνύματα σας με κάποια εταιρεία!
Let’s switch to Signal: https://sgnl.link/1KpeYmF

Επειδή σχετικά με το θέμα του WhatsApp έχουν βγει διάφορα άρθρα που λένε πως μπορείτε να κάνετε opt-out από το sharing των δεδομένων σας με το Facebook: μπορείτε να κάνετε opt-out από το να χρησιμοποιηθούν τα δεδομένα αυτά, όπως το τηλέφωνο σας, για στοχευμένες διαφημίσεις. Όχι στο να δοθούν τα στοιχεία αυτά στο Facebook.
Όπως αναφέρεται και στο FAQ του WhatsApp:

The Facebook family of companies will still receive and use this information for other purposes such as improving infrastructure and delivery systems, understanding how our services or theirs are used, securing systems, and fighting spam, abuse, or infringement activities.



Signal: https://en.wikipedia.org/wiki/Signal_(software)

how-to Android: https://ssd.eff.org/en/module/how-use-signal-android

how-to iOS: https://ssd.eff.org/en/module/how-use-signal-ios

Open Whisper Systems: https://en.wikipedia.org/wiki/Open_Whisper_Systems

Facebook privacy hoax: http://www.ellinikahoaxes.gr/2014/11/28/facebook-privacy/

WhatsApp deal: http://www.bloomberg.com/news/articles/2014-10-28/facebook-s-22-billion-whatsapp-deal-buys-10-million-in-sales

WhatsApp active users: http://www.statista.com/statistics/260819/number-of-monthly-active-whatsapp-users/

WhatsApps shares data with Facebook: http://www.insomnia.gr/_/articles/internet/facebook/%cf%84%ce%bf-whatsapp-%cf%80%cf%81%ce%bf%cf%87%cf%89%cf%81%ce%ac-%cf%83%ce%b5-%ce%b1%ce%bb%ce%bb%ce%b1%ce%b3%ce%ae-%cf%80%ce%bf%ce%bb%ce%b9%cf%84%ce%b9%ce%ba%ce%ae%cf%82-%ce%b1%cf%80%ce%bf%cf%81%cf%81%ce%ae%cf%84-r12490

Signal and Edward Snowden: – https://twitter.com/Snowden/status/661313394906161152

WhatsApp FAQ: https://www.whatsapp.com/faq/general/26000016

The sewage watch

aka “dirt PUMP” watch :p

Oh well someone has to watch over our sewage pump. Which has already a panel that control when to start / stop the pump or when to turn on heat protection when there’s no “water” left.

The problem was that this control panel is two floors down and if we wanted to check its condition (i.e. after a power failure or if the pump has stopped for heat protection) we should make regular passes from the basement.

The good thing about this control panel is that it has its own LEDs showing the status of the pump (Power Supply, Motor On, Motor Protection, Automatic (on/off), Level Alarm and No Water Alarm).

Enter esp8266 / NodeMCU.

With the use of six photoresistors (CdS, LDR) we can read the status of each LED of the control panel and output its status on a web page. Yippee..

The schematics on how to connect LDRs to an esp8266 or a NodeMCU are all over the web if you look. For three LDRs for example is the following:

In the code I’m reading the digital output of each LDR as 0 or 1.

Putting the six LDRs in the correct positions was easy on a 9x15cm prototyping PCB (luckily 9cm was the height of the opening of the control panel).

Reversing the PCB and placing it over the control panel with a breadboard to hold the NodeMCU for testing:

there was some duct tape involved.. (Duct tape is for everything right?)

Aaand we have our output readings in a static IP in our network (where green color is good):

In the code of the NodeMCU (with Arduino IDE) there is also a part that connects with IFTTT Maker channel to notify me for important events.


THE433: Home Automation with ESP8266, NodeMCU

control 433MHz (compatible with Arduino libs) sockets/devices through web and time rules
ESP8266 RF433 Interface

(esp8266 + RF 433 transmitter + Arduino IDE)

This is a sketch for controlling RF remote control sockets or relays that operate at the 433MHz frequency and are compatible with the Arduino/esp8266 RCSwitch libraries.

The main feature is that you can schedule events (up to 10) to turn ON/OFF your devices that repeat daily/weekly or that actuate once only within a week from setting the command.

A web interface is used to control the RF devices directly given a relative command at the main form and also scheduling the time events by giving at the same form a keyword to enter the scheduled events interface.

In the whole sketch these scheduled events are named Time Commands.

Time Commands (up to 10) execute your functions that fire the 433MHz sockets operating devices and can be set:

– Alarm Once
(once when the time next reaches the given hour, minute)
– Daily Alarm Repeat
(every day at the given hour, minute)
– Weekly Alarm Once
(once only on the next DayOfWeek, hour, minute)
– Weekly Alarm Repeat
(every week on the given DayOfWeek, hour, minute)

Here’s a video showing some basic usage of the web interface

Coding is really basic since my knowledge of C++ is minimal but hey.. it works!

For more detailed info read the README! :P https://github.com/nikant/THE433/blob/master/README.md
source code is at github: https://github.com/nikant/THE433

Example usage:

ESP8266 in the source is set as a WiFi station with a static IP

– navigate with your browser at this IP
– here you can enter either a command to activate a connected device (you must edit the source code) i.e. SWITCH 1 ON
or you can enter the provided keyword to enter the Time Commands interface i.e. ENTERTIMECOMMANDS
– at the Time Commands interface you can select a function you want to be executed at a specific time
– select the time to activate and submit
– you’ll have to restart your esp8266 and you’ll be informed about this
– after esp8266 restarts and reconnects you’ll find the saved Time Command at the bottom of the web interface (from there you can also delete it)

some screenshots follow: