From b5deb28a8f074cd0e5ec317210671f8a20a864ce Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sun, 28 Jul 2019 16:13:54 +0200 Subject: [PATCH] talk to tasmota over mqtt and emulate LG TV remote --- tasmota-ir-tv.pl | 180 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100755 tasmota-ir-tv.pl diff --git a/tasmota-ir-tv.pl b/tasmota-ir-tv.pl new file mode 100755 index 0000000..577c55e --- /dev/null +++ b/tasmota-ir-tv.pl @@ -0,0 +1,180 @@ +#!/usr/bin/perl +use warnings; +use strict; + +use Term::ReadKey; +use Data::Dump qw(dump); +use Time::HiRes qw(sleep); + +my $name2ir; + +while() { + chomp; + my ($code,$name) = split(/\t+/,$_,2); + $name2ir->{lc($name)} = $code; +} +warn "# name2ir = ",dump($name2ir); + +my $direction = { + A => 'UP', + B => 'DOWN', + C => 'RIGHT', + D => 'LEFT', +}; + +sub ir { + my $key = shift; + $key = lc $key; + if ( my $data = $name2ir->{$key} ) { + my $cmd = qq{mosquitto_pub -h rpi2 -q 2 -t cmnd/ir/IRSend -m '{"protocol": "NEC","bits": 32, "data": $data}'}; + warn "# [$key] $cmd\n"; + system($cmd); + } else { + warn "ERROR: missing mapping for [$key]"; + } +} + +ReadMode 4; # Turn off controls keys +my $key; +my $esc; +while(1) { + while (not defined ($key = ReadKey(1))) { + # No key yet + } + print dump($key, $esc), $/; + if ( $key eq 'q' ) { + ReadMode 0; # Reset tty mode before exiting + exit 0; + } + if ( $key eq "\e" ) { + $esc = $key; + $key = '?'; + } elsif ( $esc ) { + $esc .= $key; + } + + if ( $esc && $esc =~ /\e\[([ABCD])/ ) { + printf "arrow: %s %s\n", $1, $direction->{$1}; + ir($direction->{$1}); + $esc = ''; + } elsif ( $key eq "\e" && $esc eq "\e" ) { # single ESC + ir('BACK'); + $esc = ''; + } else { + warn "UNKNOWN esc,key = ",dump($esc, $key); + } + + ir('MENU') if $key eq 'm'; + ir('INFO') if $key eq 'i'; + ir('on/off') if $key eq 'p'; + ir('settings') if $key eq 's'; + ir('OK') if $key eq 'o' || $key eq "\n" || $key eq " "; + + ir('EXIT') if $key eq "\x7F"; # backspace + + ir('input') if $key eq 'w'; + ir('energy') if $key eq 'e'; + + ir('Q.View') if $key eq 'a'; + # s + ir('guide') if $key eq 'd'; + + ir('HDMI 1') if $key eq 'z'; + ir('HDMI 2') if $key eq 'x'; + ir('HDMI 3') if $key eq 'c'; + +} + +__DATA__ +0x20DF10EF ON/OFF +0x20DF0FF0 TV +0x20DF9E61 Ratio +0x20DFD02F Input +0x20DFA956 Energy +0x20DF8877 Key 1 +0x20DF48B7 Key 2 +0x20DFC837 Key 3 +0x20DF28D7 Key 4 +0x20DFA857 Key 5 +0x20DF6897 Key 6 +0x20DFE817 Key 7 +0x20DF18E7 Key 8 +0x20DF9867 Key 9 +0x20DFCA35 List +0x20DF08F7 Key 0 +0x20DF58A7 Q.View +0x20DF40BF Vol+ +0x20DFC03F Vol- +0x20DFCE31 Vol- +0x20DF7887 Fav +0x20DF3BC4 3D +0x20DF906F Mute +0x20DF00FF P+ +0x20DF807F P- +0x20DFC23D Settings +0x20DF55AA Info +0x20DFA25D Menu +0x20DFE01F Left +0x20DF609F Right +0x20DF02FD Up +0x20DF827D Down +0x20DF22DD OK +0x20DF14EB Back +0x20DFD52A Guide +0x20DFDA25 Exit +0x20DF4EB1 Red +0x20DF8E71 Green +0x20DFC639 Yellow +0x20DF8679 Blue +0x20DF04FB Text +0x20DF847B T.Opt +0x20DF9C63 Subtitle +0x20DF8D72 Stop +0x20DF0DF2 Play +0x20DF5DA2 Pause +0x20DFF10E Backward +0x20DF718E Forward +0x20DF7E81 Simplink +0x20DF8976 AD +0x20DF0CF3 AV Mode +0x20DF3EC1 Live TV +0x20DF42BD Live TV +0x20DF35CA Status +0x20DF50AF Audio Language +0x20DF57A8 Shortmenu +0x20DF5AA5 AV +0x20DF5EA1 online manual +0x20DF619E Volume to 50 +0x20DF21DE Volume to 80 +0x20DFE11E Volume to 100 +0x20DF6B94 Radio/TV +0x20DF708F doze function +0x20DFA35C Display off +0x20DFD728 Standby +0x20DF23DC Power on +0x20DFB44B Settings of remote +0x20DF956A Program guide +0x20DFF00F Radio/TV +0x20DF738C HDMI 1 +0x20DF33CC HDMI 2 +0x20DF9768 HDMI 3 +0x20DFFD02 Component +0x20DFF50A Live Zoom +0x20DFF20D Input info +0x20DFB24D Picture mode +0x20DF09F6 Recordings +0x20DF4AB5 Audio mode +0x20DF7B84 Register magic remote +0x20DFAE51 directly register magic remote +0x20DF1CE3 Subtitles +0x20DFCC33 Presentation in shop +0x20DFBD42 Start recording +0x20DFAD52 LG TV Plus +0x20DFDD22 Sports mode +0x20DF1EE1 Search +0x20DFDF20 Warning: instart +0x20DF7F80 Warning: Poweronly +0x20DFFF00 Warning: Easy adjust +0x20DF5FA0 Warning: instop +0x20DF5FA0 Enter Password +0x20DF3FC0 Warning: Reset to factory -- 2.20.1