Skip to content

Program to control Lights, doors, etc. using Open Hardware and control them using a phone line connected to Asterisk PBX.

License

Notifications You must be signed in to change notification settings

elpop/AsteriskDomotics

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AsteriskDomotics

Description

light panel

Program to control Lights, doors, etc. using Open Hardware and control them using a phone line connected to Asterisk PBX.

The main purpose of this project is:

  1. Bring a light schema to control Relays with Arduino ONE board https://www.arduino.cc/en/Main/ArduinoBoardUno

  2. Make a control vector using a Perl script to interface Asterisk PBX and the open hardware boards. http://www.asterisk.org

  3. Using the phone Dialpad to control on/off events

Steps

  1. I buy a relay board in www.buyincoins.com for about $8.00 USD light panel

  2. I use one Arduino UNO with a cost of $30.00 USD

    light panel

  3. To make Asterisk PBX to work, i purchase a Raspberry Pi in newark.com for about $55.00 USD and use RasPBX (a Debian variant for Raspberry Pi with Asterisk include).

    light panel

  4. Plus a wood board, wires, screws, sockets and electrical contacts for $35.00 USD. One EnGenius WiFi USB adapter for $30.00 USD and a power supply for $18.00 USD.

    The gran total was $176.00 USD plus a weekend of mount and programing.

  5. I connect the relay board to the Arduino UNO, this to the Raspberry PI via USB.

    The final assembly is show in this picture:

    light panel

    You can see a demo on Youtube here: https://www.youtube.com/watch?v=rcFMJC4n4dQ

Programs

I wrote one Arduino Sketch for the Relay board control (arduino/relay.ino) and the control program to bond Asterisk with (bin/arduino_control.pl).

For the Arduino programing i use the Arduino IDE.

The i wrote a Perl script to handle the serial comunication with the Arduino USB and connects to Asterisk trough the AMI (Asterisk Manager Interface) and implement an aditional socket connection to console handle.

Configuration

  1. Edit and append on the file /etc/asterisk/manager.conf the AMI configuration for the perl program:

    [arduino]
    secret=openhardware
    writetimeout = 10000
    ;read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan
    eventfilter=!Event: RTCPSent
    eventfilter=!Event: RTCPReceived
    read = system,call,log,agent,user,config,dtmf,reporting,cdr,dialplan
    write = system,call,agent,user,config,command,reporting,originate
    

    Reload the configuration with the user owner of the asterisk process with:

    asterisk -rx'manager reload'
    
  2. In the file /etc/asterisk/extensions.ael i wrote this test configuration:

    context from-internal {
        888 => {
            goto ivr,s,1;
        };
     
        777 => {
            Answer;
            MusicOnHold();
            Hangup;
        };
     
        8378 => {
            Answer;
            Playback(beep);
            UserEvent(RELAY_8378,);
            Hangup;
        }; 
        666 => {
            Answer;
            Playback(beep);
            UserEvent(RELAY_1,);
            wait(1);
            UserEvent(RELAY_1,);
            UserEvent(RELAY_2,);
            wait(1);
            UserEvent(RELAY_2,);
            UserEvent(RELAY_3,);
            wait(1);
            UserEvent(RELAY_3,);
            UserEvent(RELAY_4,);
            wait(1);
            UserEvent(RELAY_4,);
            UserEvent(RELAY_5,);
            wait(1);
            UserEvent(RELAY_5,);
            UserEvent(RELAY_6,);
            wait(1);
            UserEvent(RELAY_6,);
            UserEvent(RELAY_7,);
            wait(1);
            UserEvent(RELAY_7,);
            UserEvent(RELAY_8,);
            wait(1);
            UserEvent(RELAY_8,);
            Playback(beep);
            Hangup;
        };
    }
     
    context ivr {
        s => {
            Answer;
            Background(silence/9);
        question:
            Set(TIMEOUT(response)=5);
            Set(TIMEOUT(digit)=1);
            WaitExten();
            goto question;
        };
        _X => {
           UserEvent(RELAY_${EXTEN},);
           goto s,question;
        };
     
        t => {
            goto ivr,s,question;
        };
     
        i => {
            goto ivr,s,question;
        };
     
    }
    

    Reload the configuration:

    asterisk -rx'ael reload'
    

    I you see, i use the UserEvent fuction from the AMI interface to send custom commands to the arduino_control.pl program.

    UserEvent(RELAY_X,);
    

    where "X" is the number of the electrical Relay. I use “8378” (TEST) to check the lights and 7828 (STAT) for query the relay's status.

    You can interact directly via the 4446 TCP Port. The sample is using telnet:

    $ telnet 192.168.1.89 4446
    Trying 192.168.1.89...
    Connected to raspbx.lan.
    Escape character is '^]'.
    
    arduino_control.pl v1.0 (? for help)
    
    relay 8
    8|on
    
    relay 8
    8|off
    
    status
    Status|off|off|off|off|off|off|off|off
    
    

    you can see more options with the command "help"

    Don't forget to subscribe a SIP extension to test.

    Enjoy :)

Author

Fernando Romo (pop@cofradia.org)

License

GNU GENERAL PUBLIC LICENSE Version 3
https://www.gnu.org/licenses/gpl-3.0.en.html
See LICENSE.txt

Sponsor the project

Please sponsor this project to pay my high debt on credit cards :)

About

Program to control Lights, doors, etc. using Open Hardware and control them using a phone line connected to Asterisk PBX.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages