Bluetooth en vast IP LUA ping script voor Domoticz
In mijn Domoticz set-up maak ik in meerdere events gebruik van de trigger of mijn telefoon/tablet wel of niet thuis is. In dit artikel zal ik stap voor stap uitleggen hoe je een dummy schakelaar van je apparaat kan maken, die aangeeft of het apparaat thuis is. Voordat we naar het LUA ping script kijken maken we een dummy schakelaar aan.
Benodigdheden
- Raspberry Pi
- Domoticz software
- Apparaat met bluetooth of Wi-Fi
Dummy schakelaar aanmaken
Ga in Domoticz naar Setup -> Hardware en maak dummy hardware aan:
Vervolgens ga je naar Switches en maak je een dummy switch aan:
Als je naar Setup -> Devices gaat zal je een soortgelijke regel als onderstaand zien. Het nummer van Idx is belangrijk, dit hebben we verder nodig.
Software
Installeer de bluetooth ondersteuning met onderstaande commando’s:
1 2 3 |
sudo apt-get update sudo apt-get upgrade sudo apt-get install bluetooth bluez blueman |
Voer een scan voor Bluetooth apparaten uit (zorg er wel voor dat je apparaat zichtbaar is voor Bluetooth):
1 |
hcitool scan |
Zoek de bluetooth directory op je Raspbery Pi, deze ziet er ongeveer zo uit: /var/lib/bluetooth/??:??:??:??:??. De vraagtekens zijn uiteraard in werkelijkheid cijfers en letters. Voor de gevonden apparaten voeg je een pincode toe aan het pincode-bestand, dit doe je met commando:
1 |
echo "AA:BB:CC:DD:EE:FF 0000" > /var/lib/bluetooth/11:22:33:44:55:66/pincodes |
AA:BB:CC:DD:EE:FF vervang je door het Bluetooth MAC-adres van je apparaat en 11:22:33:44:55:66 vervang je door het MAC-adres van de Bluetooth-folder op je Raspberry Pi. De vier nullen zijn de pincode, deze is standaard 0000.
Test of de pincode van het apparaat juist is toegevoegd (ook hier vervang je AA:BB:CC:DD:EE:FF door het Bluetooth MAC-adres van je apparaat):
1 |
hcitool name AA:BB:CC:DD:EE:FF |
Wijzig de timeout “Page timeout: 8192 slots (5120.00 ms)” naar “Page timeout: 4096 slots (2560.00 ms)”:
1 |
sudo hciconfig hci0 pageto 4096 |
Installeer LUA 5.2 indien je dit nog niet eerder hebt gedaan:
1 |
sudo apt-get install lua5.2 |
Download en installeer usrlocalsharelua52.tar.gz van https://www.ehoco.nl/downloads/usrlocalsharelua52.tar.gz:
1 2 3 4 |
wget -O /tmp/usrlocalsharelua52.tar.gz "https://www.ehoco.nl/downloads/usrlocalsharelua52.tar.gz" sudo mkdir -p /usr/local/share/lua/5.2/ cd /usr/local/share/lua/5.2/ sudo tar -xvf /tmp/usrlocalsharelua52.tar.gz |
Download en installeer usrlocalliblua52.tar.gz van https://www.ehoco.nl/downloads/usrlocalliblua52.tar.gz:
1 2 3 4 |
wget -O /tmp/usrlocalliblua52.tar.gz "https://www.ehoco.nl/downloads/usrlocalliblua52.tar.gz" sudo mkdir -p /usr/local/lib/lua/5.2/ cd /usr/local/lib/lua/5.2/ sudo tar -xvf /tmp/usrlocalliblua52.tar.gz |
Aanpassingen LUA ping script
Download hier het LUA ping script en pak het uit met een extracter als WinRar. Open het script in Notepad++ en kijk het eerst eens rustig door. Voordat je het script naar de Raspberry Pi kopieert moeten eerst nog de variabelen goed gezet worden:
ScriptName=”presence.lua” — naam van het script, laat dit ongewijzigd
server_url=”http://192.168.2.10:8080” — url van Domoticz
Monit_check_log=”/var/tmp/presence-monit.log” — logbestand, laat dit ongewijzigd
LoopTimeShort=10 — Tijd (in seconden) tussen twee checks. indien er één van de apparaten niet gevonden is
LoopTimeLong=30 — Tijd (in seconden) tussen twee checks, indien alle apparaten gevonden zijn
FailTimeout=120 — Tijd om te bepalen dat de telefoon werkelijk niet aanwezig is
debug=2 — niveau van logging: 0=basis-informatie, 1=wat extra informatie, 2=alle beschikbare informatie (gebruik 2 alleen in geval van problemen)
TelName[Rec] = “Xiaomi MI 5” — naam van de telefoon
TelIP[Rec] = “192.168.2.4” — IP adres van de telefoon
TelBT[Rec] = “AA:BB:CC:DD:EE:FF” — Bluetooth MAC-adres van de telefoon
TelIDX[Rec] = “16” — vul hier het Idx van het apparaat in, zoals bij de 3e afbeelding hierboven staat aangegeven
Laat alle andere parameters ongewijzigd! Sla het LUA ping script op (met naam presence.lua), daarna kopieer het naar de Raspberry Pi in de folder: /home/pi/domoticz/scripts/
Cronjob
Indien het script eenmaal wordt uitgevoerd blijft het draaien. Echter, we willen er zeker van zijn dat dit ook zo is en daarom maken we voor de zekerheid een cronjob aan:
1 2 |
sudo crontab -e */2 * * * * lua /home/pi/domoticz/scripts/presence.lua -batch >> /var/tmp/presence_check.log |
Sla de wijziging op en reboot de Raspberry Pi:
1 |
sudo reboot |
Iedere 2 minuten wordt er nu gekeken of het script draait. Tevens wordt er een logbestand bijgehouden in /var/tmp/presence_check.log
Is voor deze tutorial een speciale image gebruikt van Domoticz? Ik draai het nu zelf op Raspbian en merk dat de tutorial niet volledig kan volgen.
De installatie van bluetooth packages gaat helaas mis: sudo apt-get install bluetooth bluez-utils blueman
De bluetooth directory kan ook niet binnen gegaan worden, zonder eerst sudo -i uit te voeren op de pi.
Vandaar de vraag of er een speciale image gebruikt is.
Er zit overigens een fout in de documentatie. Er staat dat je het Lua script moet opslaan in /home/pi/domoticz/scripts/lua/. De cron gaat echter naar /home/pi/domoticz/scripts/. Lua staat er niet bij als subfolder.
Hallo John, de image uit dit artikel is gebruikt: https://ehoco.nl/installeren-raspbian-op-raspberry-pi/
Wij hebben een image van november 2017 gebruikt, momenteel staat een versie van maart 2018 online. Wellicht is hier iets in veranderd. Is het verder nog gelukt?
Hmmm ok. Gebruik hier ook Raspbian. Dat zou het niet moeten zijn.
Tot nog toe is het niet gelikt. Ga het later nog even een keer proberen. Begin dan even opnieuw met de stappen. Wellicht toch iets niet goed gedaan.
Heb ook een gek ding. Als ik hcitool name AA:BB:CC:DD:EE:FF met het macaddress van m’n telefoon krijg ik altijd de naam van mijn telefoon te zien, ongeacht welke pincode ik ingevoerd heb in de regel ervoor.
Het is inmiddels gelukt! Dank voor de tutorial en handige website!
Hartelijk dank voor deze tutorial! Eindelijk eentje die het doet 🙂
Ik had er al meerdere geprobeerd, maar die brachten niet het gewenste resultaat.
Aangezien al onze devices van Apple zijn, heb ik de afgelopen tijd de aanwezigheidsdetectie met de geofencing-optie van Apple Homekit gedaan. Als het werkte, dan ging het feilloos. Echter, de betrouwbaarheid van Homebridge laat de laatste tijd regelmatig te wensen. Dit script biedt de oplossing! Ik heb Homebridge nu helemaal verwijdert.
Een puntje van aandacht heb ik nog wel.. Als je iPhone een tijdje niet gebruikt, dan wordt i.v.m. energiebesparing de wifi uitgeschakeld. Wanneer de telefoon dan ook niet in het bereik van de bluetooth-adapter is, wordt de telefoon afgemeld. De oplossing is dus om op meerdere plekken een bluetooth-signaal te peilen. Het leuke hieraan is dat ik dan meteen kan uitzoeken of ik dit dan ook kan gebruiken voor aanwezigheidsdetectie in een specifieke ruimte.
Komende tijd dus maar eens op zoek naar een goed boardje met bluetooth en wifi.
N.b. leuk om je domotica-project te volgen op deze site! Ik ben zelf sinds 2 jaar Domoticz-gebruiker en gestaag aan het uitbreiden.
Hallo John,
bedankt voor het script, maar ik heb 2 problemen met het script installeren en uitvoeren.
ten eerste: ik heb geen toegang tot de /var/lib/bluetooth directory, krijg een permission denied op de bluetooth dir. Heb dit ‘opgelost’ met user root. Is dit de juiste manier?
ten tweede: als ik het script (presence.lua) draai in domoticz, gebeurt er niets. zelfs /var/tmp/presence_check.log is leeg.
Als ik in de log van domoticz kijk zie ik de volgende regels:
2018-11-21 15:25:50.868 Error: EventSystem: in presence: error loading module ‘ssl.core’ from file ‘/usr/local/lib/lua/5.2/ssl.so’:
2018-11-21 15:25:50.868 libssl.so.1.0.0: cannot open shared object file: No such file or directory
er is duidelijk dat ik iets helemaal fout doe, maar ik weet niet wat.
Kan, wil je mij op weg helpen?
met vriendelijke groet,
Hans
zie bij:
https://ehoco.nl/installeren-raspbian-op-raspberry-pi/
Bedankt Machiel,
ik had erover gelezen en dacht, dat komt nog wel (en vergeten dus).
het script werkt nu.
Groet, Hans
Dag Joost,
Bedankt voor je duidelijke uitleg op je website. Ik ben sinds afgelopen weekend veel bezig met het leren ontdekken van Domoticz en je stappenplannen op je website zijn duidelijk. Echter gebruik ik Synology en omdat ik geen ICT achtergrond heb, weet ik niet goed wat ik met bepaalde stappen moet uitvoeren. Zo staat er in bovenstaande omschrijving bijvoorbeeld ‘Installeer de bluetooth ondersteuning met onderstaande commando’s: sudo apt-get update’. Waar moet ik deze commando invoeren? Ik heb het al geprobeerd in Putty maar dan krijg ik de melding ‘command not found’.
Tevens heb ik nog een (misschien wat rare) vraag. Weet jij misschien waar ik een handleiding of een boek kan kopen, of heb jij tips waar ik de basis van Domoticz icm scripting kan lezen. Heb namelijk ook Hue lampen ingesteld en ben inmiddels al 2 avond kwijt om er achter te komen waar ik een script in moet laden en actief moet krijgen.. Ik hoop dat jij mij verder kan helpen, thanks alvast!!
ik loop vast op het volgende:
Zoek de bluetooth directory op je Raspbery Pi, deze ziet er ongeveer zo uit: /var/lib/bluetooth/??:??:??:??:??. De vraagtekens zijn uiteraard in werkelijkheid cijfers en letters. Voor de gevonden apparaten voeg je een pincode toe aan het pincode-bestand, dit doe je met commando:
hoe zoek ik de bluetooth directory op mijn raspbery pi ?
sudo -i
cd /var/lib/bluetooth
ls
goedendag ik ben nieuw en ik heb alle stappen gevolgd tot aan het installeren van Domoticz. Helaas loop ik tegen het volgende probleem aan. ik kan namelijk de volgende folder niet vinden folder: /home/pi/domoticz/scripts/. zou ik de map moeten kunnen zien via windows verkenner?
ook viel het mij op na installatie van raspberry dat er 2 schijven zijn aangemaakt boot en nog 1 die niet toegankelijk is. Gaat er iets niet goed bij mij?
Alvast bedank voor de reactie.
lua: error loading module ‘socket.core’ from file ‘/usr/local/lib/lua/5.2/socket/core.so’:
/usr/local/lib/lua/5.2/socket/core.so: wrong ELF class: ELFCLASS32
stack traceback:
[C]: in ?
[C]: in function ‘require’
/usr/local/share/lua/5.2/socket.lua:12: in main chunk
[C]: in function ‘require’
/usr/local/share/lua/5.2/socket/http.lua:10: in main chunk
[C]: in function ‘require’
presence.lua:33: in main chunk
[C]: in ?
——————
(program exited with code: 1)
Press return to continue
ik krijg de volgende fout melding , wat is er niet oke