Raspberry Pi als alarmsysteem

Een Raspberry Pi als alarmsysteem, dat is een van de redenen dat ik een Raspberry Pi heb aangeschaft. Zelf een alarmsysteem samenstellen en configureren, geheel naar eigen wens. Maar waar bestaat het alarmsysteem precies uit? Uit onderstaande punten moet mijn alarm bestaan of aan voldoen:

  • Deur- en raamsensoren
  • Bewegingssensoren
  • Binnensirene (licht en geluid)
  • Buitensirene (licht en geluid)
  • Alarm moet eenvoudig in en uit te schakelen zijn, liefst geautomatiseerd
  • Melding op mijn smartphone, indien er iets mis is
  • Er mag met het alarm niet mee te knoeien zijn (i.v.m. draadloze verbindingen)

 

Deur- en Raamsensoren

Ik heb gekozen voor de Kerui D026 sensoren, welke uitstekend samen werken met de RFXCom op de 433MHz frequentie. De sensoren zijn redelijk klein, goedkoop en eenvoudig te bevestigen met dubbelzijde tape of met bijgeleverde schroefjes. Om de sensoren zichtbaar te maken doen je in Domoticz op Allow for 5 Minutes te te klikken onder Setup -> Settings. Het is overigens niet aan te raden om Accept new Hardware Devices aan te vinken, aangezien dan ook apparaten van je buren automatisch aan Domoticz worden toegevoegd.

De nieuwe Kerui sensoren zijn direct zichtbaar bij Setup -> Devices. Het is aan te raden om de sensoren direct een duidelijk naam te geven, zoals: achterdeur, keukenraam, garagedeur, etc. (en dus niet een naam zoals in onderstaand voorbeeld).

 

Binnensirene

Mocht er ingebroken worden dan willen we de inbrekers direct wegjagen en dat doen we met de Z-Wave Neo Coolcam Sirene, welke tevens kan dienen als deurbel. Het volume is in te stellen in 3 standen, er zijn 10 melodieën voor de deurbel en één geluid voor het alarm. We moeten wel een trucje uithalen om automatisch te switchen tussen het geluid van de deurbel en het alarm. Met onderstaande links kun je het apparaat aan/uit zetten en instellen als alarm/deurbel:

Sirene aan:
http://192.168.2.152:8080/json.htm?type=command¶m=switchlight&idx=128&switchcmd=On

Sirene uit:
http://192.168.2.152:8080/json.htm?type=command¶m=switchlight&idx=128&switchcmd=Off

Alarm:
http://192.168.2.152:8080/json.htm?type=command¶m=applyzwavenodeconfig&idx=5&valuelist=7_QWxhcm0gbXVzaWM%3D

Deurbel:
http://192.168.2.152:8080/json.htm?type=command¶m=applyzwavenodeconfig&idx=5&valuelist=7_RG9vciBiZWxsIG11c2lj

Het zal je opvallen dat de ene keer het idx van switchlight wordt gebruikt en de andere keer het idx van zwavenodeconfig. Het idx van switchlight vind je bij Setup -> Devices. Het idx van zwavenodeconfig vind je met deze url: http://192.168.2.152:8080/json.htm?type=openzwavenodes&idx=9 (en dit idx vind je weer onder Setup -> Hardware).

Onderstaand vind je nog enkele parameters die je kunt gebruiken:

Geluid Low --> TG93
Geluid Middle --> TWlkZGxl
Geluid High --> SGlnaA%3D%3D
1 --> MQ%3D%3D
2 --> Mg%3D%3D
3 --> Mw%3D%3D
4 --> NA%3D%3D
5 --> NQ%3D%3D
6 --> Ng%3D%3D
7 --> Nw%3D%3D
8 --> OA%3D%3D
9 --> OQ%3D%3D
10 --> MTA%3D

Domoticz Security Panel

Zodra je een aantal deur-, raam- en bewegingssensoren aan Domoticz hebt gekoppeld kunnen we verder met het alarmsysteem. De basis om Domoticz als alarm systeem te gaan gebruiken is al klaar. Nu gaan we het security panel toevoegen, om het alarm te kunnen in- en uitschakelen en om de staat van het alarm bij te kunnen houden. Met het geïntegreerde alarmpaneel kan je het systeem in drie standen zetten: Unarmed (uitgeschakeld), Arm home (alarmsysteem aan, gebruiker thuis) en Arm away (alarmsysteem aan, gebruiker niet aanwezig). drie verschillende Ga naar Setup -> Settings en voer bij Security Panel een zelfbedachte pincode en inschakelvertraging in:

Vervolgens ga je naar Setup -> More Options -> Security Panel en schakel je met de zojuist ingevoerde pincode het alarm één keer in en uit:

Vanaf dit moment is de status van het alarm ook te vinden als virtuele schakelaar bij Device (onder Setup), je kunt het apparaat toevoegen als schakelaar door op het groene pijltje te klikken. We kunnen nu beginnen met het configureren van het alarmsysteem.

Het alarm is ook via JSON in te schakelen. Helaas gaat dat niet met je standaard code, deze moet eerst gecodeerd worden. Om je gecodeerde code te achterhalen geef je onderstaande link in in je browser:

http://192.168.2.62:8080/json.htm?type=settings

Zoek nu naar “SecPassword”, je krijgt een hele lijst te zien waar iets tussen staat als “SecPassword”: “2adcefe38fbcd3dcd45908fbab1bf628”

Onderstaand de links om het alarm een bepaalde status te geven:

ARM HOME:
http://192.168.2.62:8080/json.htm?type=command¶m=setsecstatus&secstatus=1&seccode=2adcefe38fbcd3dcd45908fbab1bf628

ARM AWAY:
http://192.168.2.62:8080/json.htm?type=command¶m=setsecstatus&secstatus=2&seccode=2adcefe38fbcd3dcd45908fbab1bf628

DISARM:
http://192.168.2.62:8080/json.htm?type=command¶m=setsecstatus&secstatus=0&seccode=2adcefe38fbcd3dcd45908fbab1bf628

GET STATUS
http://192.168.2.62:8080/json.htm?type=command¶m=getsecstatus

Virtuele schakelaars

Voor de werking van het alarmsysteem gaan we gebruik maken van virtuele schakelaars. De naam zegt het al, dit zijn niet-fysieke schakelaars, die we puur in Domoticz aanmaken om de status van het systeem op te slaan. We maken er in eerste instantie één aan, getiteld Alarmsituatie. Deze virtuele schakelaar gebruiken we om te bepalen of er een alarmsituatie is of niet. De achterliggende gedachte is dat wanneer het Domoticz beveiligingspaneel is ingeschakeld en één of meer sensors een geopend raam/deur en/of beweging detecteren, deze virtuele schakelaar wordt ingeschakeld. Op basis daarvan zullen notificaties worden gestuurd en/of sirenes worden gestart.

Om virtuele schakelaars te maken ga je eenmalig naar Setup -> Hardware en voeg je hier een device toe van het type Dummy. Als naam kun je ook gewoon “Dummy” gebruiken. Heb je dit device toegevoegd, dan verschijnt het in je lijst hardware, naast bijvoorbeeld je RFXCom of Z-Wave controller. Klik in de regel van je dummy device op de knop Create Virtual Sensors om een virtuele schakelaar aan te maken. Geef hem daarna een naam (dus bijvoorbeeld “Alarmsituatie” en kies als type Schakelaar). De schakelaar verschijnt nu in het overzicht onder Switches.

Nu we deze virtuele schakelaar hebben, kunnen we met behulp van Events (gebeurtenissen) configureren dat deze wordt ingeschakeld indien de sensors iets oppikken, dit doen we met het ingebouwde Blockly-systeem. Ga naar Setup -> More Options -> Events. Hier maken we twee nieuwe Blockly events aan, getiteld Alarm trigger – Direct en Alarm trigger – Vertraagd. Bij sommige sensors, bijvoorbeeld bij je keukenraam, moet een alarm immers direct geactiveerd worden; bij andere sensors moet het pas afgaan na een bepaalde periode, zodat je de tijd hebt om het alarm uit te schakelen als je thuis komt. Dat geldt bijvoorbeeld voor de sensor op je voordeur of de bewegingssensor in de hal.

Het Blockly-script voor Alarm trigger – Direct zie je in figuur 1 en is redelijk eenduidig: ALS security status = armed away (oftewel, het beveiligingspaneel is ingeschakeld) EN D1 Keukenraam = on (oftewel, de sensor op het keukenraam geeft aan dat deze is geopend) DAN zet Alarm situatie = on (oftewel, onze virtuele schakelaar Alarmsituatie gaat aan). Heb je meer sensors waarbij het alarm direct aan moet, dan kun je deze weer combineren: ALS security status = armed away EN (sensor 1 = on OF sensor 2 = on OF …).

Het script Alarm trigger – Vertraagd lijkt hier op, maar maakt gebruik van het blok Set … After … Seconds. Wat we hier doen is ALS security status = armed away EN (D2 Voordeur = on OR D2 Achterdeur = on OR …) DAN zet Alarm situatie = on na 30 seconden. Dat geeft genoeg tijd om het beveiligingspaneel uit te schakelen, voordat het alarm af gaat. Dit Blockly-event zie je in figuur 2.

Figuur 1: Script “Alarm trigger – Direct”
Figuur 2: Script “Alarm trigger – Vertraagd”

 

Alarm-situatie

De voorgaande Blockly-scripts, die je natuurlijk moet uitbreiden zodra je meer sensors hebt, vormen de basis van het alarmsysteem. De volgende stap is dat je definieert wat er moet gebeuren in een alarmsituatie, dus als de virtuele schakelaar Alarmsituatie wordt aangezet. Daartoe maken we nog twee Blockly scripts.

Allereest een script genaamd Alarmsituatie, waarin we alle zaken definiëren die moeten gebeuren als er een alarm is. Je ziet het in figuur 3, zodat je het eenvoudig kunt namaken. De werking is simpel: ALS Alarmsituatie = on (oftewel, de virtuele alarmschakelaar staat aan) DAN verschillende zaken. In ons voorbeeld script doen we verschillende zaken: allereerst zetten we de sirene/deurbel in de alarm-modus (zie voor meer informatie hierboven bij binnensirene). Vervolgens zetten we de gekoppelde sirene aan (voor een minuut, de tijdsduur hebben we ingesteld in de configuratie van het Z-wave apparaat).

Daarnaast gebruiken we de Send notification optie. Via de Domoticz Android app kun je notificaties ontvangen, maar je kunt ook allerhande andere varianten installeren, zoals bijvoorbeeld de Pushover diensten voor push-notificaties op iOS en Android, de Clickatell sms-dienst en vele anderen. In Blockly kun je een prioriteit voor een notificatie instellen. Kies daar voor optie 2, wat betekent dat deze altijd direct wordt doorgestuurd en bijvoorbeeld in combinatie met Pushover actief als gelezen moet worden bevestigd.

Onder het Messages gedeelte van Blockly vind je nog meer opties die je kunt instellen, zoals het versturen van sms-berichten naar andere nummers (bijvoorbeeld je buren). Tot slot zetten we de selector-switch op sirene, deze selector-switch is optioneel, zodat ik eenvoudig kan zien of sirenegeluid of deurbel-geluid ingesteld is.

Doordat het alarmsysteem onderdeel is van Domoticz en daarmee van je hele domotica set-up, kun je natuurlijk veel meer zaken bedenken en configureren. Het is bijvoorbeeld geen gek idee om bij een alarmsituatie alle lampen in je huis aan te laten gaan of misschien zelfs te laten knipperen. Als je een Hue-systeem hebt of andere gekleurde lampen, kun je die bijvoorbeeld laten knipperen tussen rood en blauw.

Figuur 3: Script “Alarm situatie”

Niet klaar om in te schakelen?

Voordat we het alarm automatisch willen laten inschakelen moeten we controleren of het systeem daar klaar voor is (lees: zijn alle deuren en ramen gesloten?). Hiervoor maken we een dummy ON/OFF schakelaar aan:

Deze schakelaar wordt aangestuurd door een eenvoudig Blockly-event:

Automatisch inschakelen

Het alarm gaan we op 2 manieren automatisch inschakelen, namelijk iedere dag tussen 23.00 en 07.00 uur én als we niet thuis zijn. Dit script kun je gebruiken voor de nachtelijke uren, uiteraard kun je er zelf wijzigingen (bv. tijdstip) in aanbrengen. Het tweede script, welke kijkt of er iemand thuis is, is gebaseerd op dit artikel. Er wordt hier gekeken of je mobiele telefoon thuis is, je maakt ook hier weer een dummy schakelaar (van je smartphone) en gebruikt deze switch vervolgens voor het tweede script.

Geknoei voorkomen

Met de stappen tot nu toe heb je een volledig werkend alarmsysteem met vrijwel alle mogelijkheden van een veel duurder professioneel systeem. Nu moet je er nog voor zorgen dat inbrekers je niet te slim af zijn. Wanneer inbrekers eenmaal binnen zijn, is doorgaans het eerste wat ze doen, je meterkast openen en de stroom deactiveren. Als dat gebeurt ligt je internetverbinding er uit voordat Domoticz een notificatie kan sturen. Professionele alarmsystemen hebben om die reden vaak een noodstroomvoorziening en een gsm-verbinding. Hoewel dat met een UPS en 4G-dongle bij Domoticz ook te realiseren valt, opteren wij voor een simpelere oplossing.

Zet ook een deur/raam-sensor op de deur van je meterkast en voeg die toe aan het Alarm trigger – Direct script. Dat zorgt ervoor dat wanneer het beveiligingspaneel is geactiveerd en deze sensor activeert, er zonder enige vertraging notificaties worden uitgestuurd en je 433MHz (of Z-Wave) sirenes worden geactiveerd. Die sirenes hebben op hun beurt altijd weer een accu aan boord en blijven dan ook loeien als de stroom wordt uitgeschakeld. De notificatie is bovendien al lang en breed verstuurd voordat de dieven de stroomvoorziening van je internetverbinding en Domoticz systeem kunnen uitschakelen.

Iets anders om je bewust van te zijn is dat criminelen met zogenaamde jammers het draadloze signaal kunnen verstoren, zodat de draadloze deur/raam- en bewegingssensors niet meer kunnen communiceren met het basisstation. Professionele alarmsystemen communiceren om de zoveel seconden met de sensors om te bekijken of deze nog actief zijn – zo nee, dan slaan ze alarm. Dat is in Domoticz ook prima na te bootsen, door middel van een script.

Voordat we het script gaan maken, maken we eerst nog een virtuele schakelaar, genaamd Jamming gedetecteerd. Deze virtuele schakelaar zullen we aanzetten als er geknoei is gedetecteerd en op basis van die schakelaar zullen we gewenste acties ondernemen. Daarnaast moet je even naar de configuratie van je Z-Wave apparaten via Instellingen, Hardware en dan de knop Instellingen bij je Z-Wave controller (bijvoorbeeld de in onze vorige workshop besproken Aeon Z-Stick Gen 5).

Configureer nu voor alle Z-Wave apparaten die een vaste verbinding hebben met het stroomnet (bijvoorbeeld inbouwschakelaars of de Neo Coolcam Power plugs) dat Enable polling is ingeschakeld. Hiermee wordt de status van de apparaten om de zoveel tijd actief gecontroleerd. Klik daarna op de regel van je Z-Wave controller en configureer hier het Poll interval, bijvoorbeeld 30 seconden. Wat je ook nog even moet doen is bij Setup -> Hardware het Index (Idx) nummer van je Z-Wave controller noteren (in ons geval 8).

Het script om jamming te detecteren kan helaas niet met Blockly gemaakt worden, maar enkel met LUA. Het script vind je hier. Conceptueel doet het script het volgende: het vraagt via de interne Domoticz API een lijst op van alle Z-Wave gekoppelde Z-Wave apparaten. Voor alle Z-Wave apparaten wordt bekeken of polling is ingeschakeld en zo ja, op welk tijdstip dit voor het laatst succesvol is gebeurd. Is dat langer dan 60 seconden geleden, dan wordt een interne variabele jammingdetected op true gezet en op basis daarvan wordt de virtuele schakelaar Jamming gedetecteerd in- of uitgeschakeld.

In principe kun je het script één op één overnemen, maar let wel op regel 3: daar moet je gebruikersnaam, het wachtwoord, het IP-adres en de poort van je eigen Domoticz-installatie invoeren en het Index-nummer van je Z-Wave controller juist configureren.

Ten slotte maken we nog een Blockly-event Jamming gedetecteerd, waarin we configureren wat er moet gebeuren als er geknoei is gedetecteerd. Ons voorbeeld van figuur 7 is vrij basaal: als het beveiligingspaneel is ingeschakeld én de virtuele schakelaar Jamming gedetecteerd staat aan, dan wordt er een alarmnotificatie verstuurd en gaat de sirene 1 minuut af. Je kunt er hier bijvoorbeeld ook voor kiezen om altijd een notificatie te versturen (ongeacht of het alarm is ingeschakeld) en bijvoorbeeld indien het geval dat het alarm is ingeschakeld ook de sirene af te laten gaan, door de virtuele schakelaar Alarm situatie aan te zetten.

Figuur 7 – Beveiligingspaneel is ingeschakeld + de virtuele schakelaar Jamming gedetecteerd staat aan = notificatie + sirene voor 1 minuut

 

Met deze voorzorgsmaatregelen heb je de basis gelegd voor een heel behoorlijk alarmsysteem, op basis van je bestaande domotica-installatie en Domoticz.

 

13 gedachten over “Raspberry Pi als alarmsysteem

  • 28 mei 2019 om 13:51
    Permalink

    Hoi,

    Bedankt voor je uitleg. Ik heb alles ingesteld zoals je omschreven heb. Op 1 ding na werkt alles, misschien kan je me helpen.
    Het alarm werkt op zich en ik krijg mail en push bericht een melding dat het alarm af gaat.
    Echtert wat er niet gebeurd is dat mijn lichten aan gaan wat ik in het script heb gezet ipv een alarm want die heb ik (nog) niet. In de log komt geen foutmelding en alles lijkt goed te gaan.
    Wat zou dit kunnen zijn?

    Beantwoorden
  • 29 mei 2019 om 07:41
    Permalink

    Hoi Tessen,

    Wat heb je precies waar neergezet?

    Beantwoorden
    • 31 mei 2019 om 12:53
      Permalink

      Ik kan geen screenshot plaatsen hier zie ik dus ik zal het proberen te omschrijven.

      If, Alarmsituatie = on
      Do, set woonkamer schakelaar = on AND slaapkamer lampjes = ON

      Else if Alarmsituatie = ON
      set, woonkamer schakelaar = OFF and slaapkamer lampjes = OFF

      Onder beide heb ik nog een notificatie aan staan

      Beantwoorden
      • 31 mei 2019 om 23:26
        Permalink

        Je hebt 2x Alarmsituatie = ON als voorwaarde gebruikt. Probeer onderstaande maar eens:

        if (alarmsituatie = on) and (woonkamer schakelaar = off or slaapkamer lampjes = off) then
        do, set woonkamer schakelaar = on
        do, set slaapkamer lampjes = on

        else if (alarmsituatie = off) and (woonkamer schakelaar = on or slaapkamer lampjes = on) then
        do, set, woonkamer schakelaar = off
        do, set slaapkamer lampjes = off

        Beter is het om alles in dzVents of LUA te zetten, ik zal binnenkort dit artikel eens bijwerken, gebruik Blockly helemaal niet meer.

        Beantwoorden
          • 5 juni 2019 om 18:18
            Permalink

            Je hebt de ‘haakjes’ niet goed staan, daarom werkt het schakelen niet.

          • 5 juni 2019 om 21:30
            Permalink

            Haakjes? In mijn screenshot zitten geen haakjes, of snap ik je niet goed.

          • 5 juni 2019 om 22:49
            Permalink

            In je voorbeeld zeg je: SET (woonkamer schakelaar = (On AND (slaapkamer nachtlampjes = On)))
            Dat moet zijn: SET (woonkamer schakelaar = On) AND (slaapkamer nachtlampjes = On)

  • 6 juni 2019 om 11:09
    Permalink

    Ook in mijn geschreven voorbeeld staan geen haakjes. Om ook meer duidelijkheid te geven stuur ik een plaatje van hoe ik het nu heb staan dus ik dacht dat je reageerde op mijn screenshot https://ibb.co/HC2DXSj

    Dus geen haakjes of wat dan ook 😉 Of zit ik er nu totaal naast te kijken?

    Beantwoorden
    • 6 juni 2019 om 20:18
      Permalink

      Nou…dan maar even in Blockly-taal ;). Bij beide SET staat On en Off on het verkeerde blok. Ze moeten beiden in het blok van ‘SET woonkamer schakelaar’ staan.

      Dat is nou precies een groot nadeel van Blockly’s. Zoals eerder aangegeven; probeer een LUA- of dzVents script te maken. In het begin even lastiger, maar als je het eenmaal door hebt véél fijner!

      Beantwoorden
  • 6 juni 2019 om 20:30
    Permalink

    pff, nou dat was een hele bevalling zeg, maar het werkt eindelijk.
    Bedankt voor je doorzettingsvermogen om deze slimmerik te helpen 😉
    top

    Beantwoorden
  • 11 juni 2019 om 18:21
    Permalink

    Hoi, allereerst bedankt voor de heldere uitleg.
    Bij mij blijft de “alarmsituatie” actief.
    Hoe reset ik deze?
    Ik gebruik Neo Coolcam stekkers gekoppelt aan 12v adapter met daaraan sirenes.

    Beantwoorden
  • 26 juli 2019 om 13:14
    Permalink

    Hoi, het lukt mij niet om Figuur 1: Script “Alarm trigger – Direct” na te maken in Blockly. Ik kan alle losse puzzelstukjes uit de figuur namaken, maar dat ene blauwe puzzelstukje met ‘and’ erin kan ik nergens vinden. Ik heb me wezenloos gezocht. Is dit via een berichtje duidelijk te maken of wordt dat lastig?

    Beantwoorden

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *