Giter Club home page Giter Club logo

mqtt-ir-transceiver's Introduction

MQTT IR transceiver

ESP8266 based gateway between MQTT and IR. Code compatible with PlatformIO. Works with ESP-01 (debug mode have to be disabled in globals.h)

Features

  • Receiving of IR transmission and publish it as MQTT messages
  • Receive MQTT messages and send IR signal (multiple formats supported - NEC, RC5, LG, SONY, Global Cache )
  • Storing raw IR messages on flash and transmitting via IR
  • Constant current IR LED emitter circuit (based on Analysir schematic )
  • MQTT over SSL support
  • OTA updates

##Working modes

###IR transmitting

alt text

###IR receiving

alt text

##Used librariers

##Installation

###GPIO connections:

GPIO WEMOS GPIO ESP01 Usage
13 0 IR receiver
14 3 (Uart RX) IR LED - connected via simple transistor amplifier
15 (to +3,3V) 2 (to GND) Button - used for reset configuration
2 (Wemos buildin) not used LED

For ESP01 following changes have to take place:

  • in platformio.ini change board from d1_mini to esp01_1m
  • in globals.h comment out line "#define DEBUG X"

###Schematic alt text

###BOM

  • D1,D2 - 1N4148
  • Q1 - NPN transistor
  • IR1 - IR receiver
  • IR LED1, IR LED2 - Infrared LED
  • R1 - 3.3kΩ
  • R2 - 2.5Ω

###Compilation and firmware uploading

PlatformIO and Atom editor with PlatformIO IDE package are required. See installation procedure

1. Clone the Repository

git clone https://github.com/enc-X/mqtt-ir-transceiver

or download repository

2. Import project to PlatformIO

Run Atom editor and in PlatformIO menu choose option Open Project folder.... Select folder with imported project.

3. Setup serial Port

From the list with files in the left tab open the platformio.ini and change the upload_port = com12 to the correct port with your ESP8266.

4. Build binary file

In PlatformIO menu choose option Build

5. Upload to ESP8266

Connect ESP to PC via serial adapter. In PlatformIO menu choose option Upload.

##Usage

Configuration

During first boot device will act as AP with SSID IRTRANS-XXXXXXXX (password is XXXXXXXX). Connect to this AP and go to http://192.168.4.1. Configure WIFI and MQTT paramters.

Resetting configuration

If during boot device have is pressed, device will go to configuration mode.

Controller → Device communication

Property Message format Description Example
_mqtt_prefix_/sender/storeRaw/_store_id_ \d+(,\d+) store raw codes sequence in slot no. _store_id_, last number is frequency in kHz Topic: "_mqtt_prefix_/sender/storeRaw/10"
Message: "11,43,54,65,32"
32 - is frequency in kHz
_mqtt_prefix_/sender/sendStoredRaw \d+ Transmit via IR RAW code from provided slot Topic: "_mqtt_prefix_/sender/sendStoredRaw"
Message: "1"
_mqtt_prefix_/sender/sendStoredRawSequence \d+(,\d+)* Transmit via IR sequence of RAW codes from provided slots Topic: "_mqtt_prefix_/sender/sendStoredRawSequence"
Message: "1,2,3"
_mqtt_prefix_/sender/cmd (ls|sysinfo) Execute on device command, replay in topic _mqtt_prefix_/sender/cmd/result Topic: "_mqtt_prefix_/sender/cmd"
Message: "sysinfo"
_mqtt_prefix_/sender/rawMode (1|ON|true|.*) Turn on/off reporting to controller received by device IR raw codes Topic: "_mqtt_prefix_/sender/rawMode"
Message: "1"
_mqtt_prefix_/wipe .* Wipe configuration for next boot Topic: "_mqtt_prefix_/wipe"
Message: "1"
_mqtt_prefix_/sender/(RC_5|RC_6|NEC|SAMSUNG|SONY|LG)/(\d+) \d+ Send IR signal based on type Topic: "esp8266/02sender/RC_5/12"
Message: "3294"
_mqtt_prefix_/sender/sendGC \d+(,\d+) Send Global Cache code Topic: "_mqtt_prefix_/sender/sendGC"
Message: "32000,43,54,65,32,...."
_mqtt_prefix_/sender/sendRAW \d+(,\d+) Send RAW code with given frequency Topic: "_mqtt_prefix_/sender/sendRAW"
Message: "9000,4550,550,600,600,600,...,32"
32 is frequency in kHz
_mqtt_prefix_/sender/otaURL .* Update via HTTP from URL Topic: "_mqtt_prefix_/sender/otaURL"
Message: "http://ota.server/firmware.bin"

Device → Controller communication

Property Message format Direction Example
_mqtt_prefix_/sender/cmd/result .* Result of command
_mqtt_prefix_/receiver/_type_/_bits_/_panas_addr_ \d+(,\d+)* Send to controller received IR code Topic: "_mqtt_prefix_/receiver/RC_5/12"
Message: "3294"
_mqtt_prefix_/receiver/raw \d+(,\d+)* Send to controller received RAW IR code (only when RAW mode is enabled) Topic: "_mqtt_prefix_/receiver/raw"
Message: "9000,4550,550,600,600,600,..."

Integration with OpenHab

  • Run MQTT server (mosquitto is fine)
  • Configure MQTT server for OpenHab transport
  • Register IR Transceiver to the same MQTT server (for example MQTT prefix is 'esp8266/02')
  • Example items configuration:
Group gIR <own_ir> (All)
Switch   ir_philips_on
        "Philips Power" <own_ir> (gIR)
        {mqtt=">[mosquitto:esp8266/02/sender/RC5/12:command:ON:56]", autoupdate="false"}
Switch   ir_philips_volp
        "Vol+"  <own_ir> (gIR)
        {mqtt=">[mosquitto:esp8266/02/sender/RC5/12:command:ON:1040]", autoupdate="false"}
Number ir_in_lg
        "LG IR command [%d]"    <own_ir> (gIR)
        {mqtt="<[mosquitto:esp8266/02/receiver/NEC/32:state:default]"}
Switch ir_adb_star
        "ADB 0" <own_ir) (gIR)
        {mqtt=">[mosquitto:esp8266/02/sender/sendGC:command:ON:38000,1,37,8,34,8,75,8,44,8,106,8,50,8,50,8,39,8,81,8,525,8,34,8,60,8,29,8,44,8,44,8,44,8,29,8,29,8,3058,8,34,8,75,8,44,8,106,8,50,8,50,8,39,8,81,8,525,8,34,8,101,8,70,8,44,8,44,8,44,8,29,8,29,8,3058]", autoupdate="false"}
  • Using in rules:
rule lgTVturnInfoScreen
when
        Item ir_in_lg received update 551549190
then
        // Do somenting after button press
end

rule initIRmodule
when
        System started
then
        // Turn off Philips after system start
        postUpdate(ir_philips_on,OFF)

        // Switch LG TV to HDMI 1 by Global Cache code
        publish("mosquitto","esp8266/02/sender/sendGC","38000,1,69,343,172,21,22,21,22,21,65,21,22,21,22,21,22,21,22,21,22,21,65,21,65,21,22,21,65,21,65,21,65,21,65,21,65,21,22,21,65,21,65,21,65,21,22,21,22,21,65,21,65,21,65,21,22,21,22,21,22,21,65,21,65,21,22,21,22,21,1673,343,86,21,3732")
end

mqtt-ir-transceiver's People

Contributors

piotrc4 avatar 1technophile avatar

Watchers

James Cloos 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.