Giter Club home page Giter Club logo

asteriskdomotics's Introduction

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 ([email protected])

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 :)

asteriskdomotics's People

Contributors

elpop avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.