Kismalac, kismalac, let me in!

Na de a telefon nem szólt, hogy csengettek… 🙂 írta ma Ákos nekem. Summa summarum, ma telefonos kapucsengőt szerelünk. Sokszor előjött már a probléma, hogy a lakásban levő csengőt nem halljuk, amikor kint vagyunk a kertben, sőt ez még inkább gond, ha épp valahol a városban bócorgunk és egy futár épp megáll az ajtó előtt. Mivel a kapucsengő is csak egy mezei kontaktus, ami a homeaut serverben egy digitális input formájában jelenik meg, így nem nagy dolog az egészet bárhová elirányítani. A bejáratot látja egy IP kamera is, úgyhogy akár meg is nézhetjük, ki tenyerelt rá a csengőre. Mindezekből a következő recept állt össze:

  • a csengő megnyomása generáljon egy push notificationt a fiúk és eFi telefonjára
  • a push üzenetből azonnal el tudjak navigálni abba az iOS alkalmazásba, amin látom a bejárati IP kamera képét
  • egyúttal tegyük el a kameraképet egy network storage-ra, plusz küldjük el eFinek emailben
  • mindezt tegyük védetté a csengőt N alkalommal kényszeresen egymás után megnyomókkal szemben
Az iOS oldalhoz az alapot két alkalmazás szolgáltatta: az IP kamera képét mutató IP Cam Viewer Pro, valamint a user által gyártott push notifikációk küldözgetésére kitalált Pushover. Az ismétlődő csengetés elleni védelmi logika simán maradhatott volna a dataflow homeaut serverben (mindössze egy Delay és egy Blocker komponens kell a megvalósításához), ám valami miatt ez később jutott eszembe és így beledolgoztam az egész folyamatot levezénylő shell scriptbe – íme:
#!/bin/bash
lastrun () {
	TESTFILE="./kapucsengo.timestamp"
	if [ -e $TESTFILE ]
	then
		LASTRUNDATE=`date +%s -r $TESTFILE`
	else
		LASTRUNDATE="0"
	fi
	NOW=`date +%s`
	DIFF=$((NOW-LASTRUNDATE))
	touch $TESTFILE
	return $DIFF
}
MIN_REPEAT=30 # 30 másodpercen belül nem reagálunk újra
lastrun
LR=$?
if [ $LR -gt $MIN_REPEAT ]
then
	# ask pushover.net to send notification
	curl -s \
	  -F "token=MY_PUSHOVER_TOKEN" \
	  -F "user=MY_PUSHOVER_USERID" \
	  -F "message=CSENGETTEK" \
	  -F "title=ihome - r9" \
	  -F "url=ipcamviewer://launch?groupName=kapucsengo" \
	  -F "url_title=View cameras" \
	  https://api.pushover.net/1/messages.json 2>&1 /dev/null
	# save streetcam image on ring
	NOW=`date +%Y%m%d_%H%M%S`
	curl -u CAM_USER:CAM_PASS http://cam_url/cgi-bin/viewer/video.jpg >/media/cam_offline/$NOW.jpg
	cp /media/cam_offline/$NOW.jpg /media/camstorage/kapucsengo/
	/usr/bin/mpack -s "Csengettek - r9" /media/cam_offline/$NOW.jpg EFI_EMAIL_ADDRESS
	find /media/cam_offline/* -mtime +365 -exec rm{} \;
	exit 0
else
	# Repeated call within $MIN_REPEAT seconds - script cancelled
	exit 1
fi
A fenti scriptet egy Shell komponens indítja el, amint megjön a kapucsengő digitális bemenetén a kontaktus. A script megnézi, hogy utoljára 30 másodpercnél később indult-e és ha igen, teszi a dolgát:
  • szól a curl-nak, hogy küldjön a pushover.net felé egy notifikációs üzenetet JSON formátumban
  • szintén a curl-t kéri meg, hogy cibálja le az IP kamerából az épp látott képet
  • felmásolja az előbb letöltött képet a NAS-ra
  • megkéri az mpack binárist, hogy küldje el nekem a fotót attachmentben
  • végül a lokális storage-ből törli az esetlegesen meglevő, 365 napnál régebbi kameraképeket
Nálam a homeaut server csillió más dolgot is csinál, így kézenfekvő volt simán beleintegrálni az ő workflowjába a feladatot. Ha te csak egy “telefonálós” kapucsengőt szeretnél, az sem rocket science: elég egy Raspberry Pi, annak egy GPIO portja és egy Python script, hogy az egészet levezényeld, pont úgy, ahogy maandag megírta a blogján tegnapelőtt.]]>

2 thoughts on “Kismalac, kismalac, let me in!

    1. eFi Post author

      Crowdfunding ötlet van bőven, csak resource, ami terméket csinál belőle, az a kevés 🙂

      Reply

Leave a Reply to eFi Cancel reply

Your email address will not be published. Required fields are marked *