piotrC4 / mqtt-ir-transceiver

ESP8266 based bidirectional bridge between MQTT and IR (change MQTT message to IR signal and change received IR signal to MQTT message)
142 stars 34 forks source link
esp8266 global-cache ir mqtt openhab

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

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:

Schematic

alt text

BOM

Requirements:

1. Clone the Repository into VS Code

In VS Code press F1 enter ''git: clone'' + Enter and insert link to my repository (https://github.com/piotrC4/mqtt-ir-transceiver)

2. Modify platformio.ini (optional)

Edit platformio.ini and setup upload_port variable acording to system settings if PlatofmIO can'd identify proper COM port

3. Build binary file

In PlatformIO menu choose PROJECT TASKS -> Build

4. Upload firmware to ESP8266

Connect ESP to PC via serial adapter. In PlatformIO menu choose option PROJECT TASKS -> 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

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