Your Universal Remote Control Center
RemoteCentral.com
Custom Installers' Lounge Forum - View Post
Up level
Up level
The following page was printed from RemoteCentral.com:

Login:
Pass:
 
 

Original thread:
Post 21 made on Tuesday January 28, 2020 at 18:59
Fiasco
Senior Member
Joined:
Posts:
July 2009
1,278
The CF software is an interface builder and you can assign commands/feedback ect within the GUI builder. You can also do it with Javascript (my preference)

The CF software is free and the app is a $100 or so license per android or apple device.

You can get pretty crazy with it. Here's the CF iPad remote I made for my old house 9 years ago.







CommandFusion offers developers one free license.

Here's my Javascript for two way control as many directv receivers as you want to control

[code]

var GUI = {};

CF.userMain = function() {
try {
DTV = new DirecTV(0);
DTV.setup();
DTV.addReceiver("DirecTV 1", "Moxa_DirecTV_1",1);
DTV.addReceiver("DirecTV 2", "Moxa_DirecTV_2",2);
DTV.addReceiver("DirecTV 3", "Moxa_DirecTV_3",3);
DTV.selectReceiver("DirecTV 1");
} catch (err) {
CF.log( "DirecTV setup error " + err.message );
}
delete CF.userMain;
}

var DirecTV = function(debug) {
var self = {
systems: [],
currentsystem: "",
debug:1,
};
self.debug = debug;

// Startup calls this function, defined by last line in the script
self.setup = function() {
try {
self.log("Object Created");
} catch (e) {
self.log("Exception caught during init: " + e);
}
};

self.addReceiver = function(systemip, system232,number) {
self.log("Create Receiver " + systemip + " " + system232 + " " + number);
var temp = new DirecTV_Receiver(self.debug);
temp.setup(systemip,system232,number);
temp.Initialize();
self.systems.push(temp);

};
self.keyFavorite = function(key) {
self.currentsystem.keyFavorite(key);
};

self.getProgram = function(num) {
for ( obj in self.systems ) {
if ( self.systems[obj].number == num ) {
return self.systems[obj].program;
}
}
}

self.selectReceiver = function(system) {
self.log("Looking up system: " + system );
for ( obj in self.systems ) {
if ( self.systems[obj].systemnameIP == system ) {
CF.setJoins([
{join:"d1211", value:0},
{join:"d1212", value:0},
{join:"d1213", value:0},
{join:"d1214", value:0},
{join:"d1215", value:0},
{join:"d1216", value:0},
{join:"d1217", value:0},
{join:"d1218", value:0}
]);
self.currentsystem = self.systems[obj];
self.log("Setting current system to: " + " " + self.systems[obj].number + " " + self.systems[obj].systemnameIP );
CF.setJoin("d" + (self.systems[obj].number * 1 + 1210), 1);
CF.setJoin("s2", self.currentsystem.systemnameIP);
}
}

};

self.setTuned = function(list, listIndex, join) {
CF.getJoin(list+":"+listIndex+":"+join, function(j,v,t) {
self.log("SET CHANNEL " + t["[channel]"]);
self.currentsystem.setTuned(t["[channel]"]);
});
}


self.keyPress = function(key) {
self.log("PUSHING " + key + " on " + self.currentsystem.number);
self.currentsystem.keyPress(key);
};


// Only allow logging calls when CF is in debug mode - better performance in release mode this way
self.log = function(msg) {
if (CF.debug && self.debug) {
CF.log("DirecTV: " + msg);
}
};
return self;
};
CF.modules.push({
name: "DirecTV Controller",
object: DirecTV,
version: 1.0
});





var DirecTV_Receiver = function(debug) {
var self = {
systemnameIP: "",
systemname232: "",
number: -1,
repeat: "",
debug: 0,
program: "",
hexcommand: {
"play": "\xFA\xA5\x00\x01\xB2",
"stop": "\xFA\xA5\x00\x01\xB3",
"pause":"\xFA\xA5\x00\x01\xB0",
"record": "\xFA\xA5\x00\x01\xB5",
"rew":"\xFA\xA5\x00\x01\xB1",
"ffwd": "\xFA\xA5\x00\x01\xB4",
"advance": "\xFA\xA5\x00\x01\xB7",
"replay": "\xFA\xA5\x00\x01\xB6",
"1": "\xFA\xA5\x00\x01\xE1",
"2": "\xFA\xA5\x00\x01\xE2",
"3": "\xFA\xA5\x00\x01\xE3",
"4": "\xFA\xA5\x00\x01\xE4",
"5": "\xFA\xA5\x00\x01\xE5",
"6": "\xFA\xA5\x00\x01\xE6",
"7": "\xFA\xA5\x00\x01\xE7",
"8": "\xFA\xA5\x00\x01\xE8",
"9": "\xFA\xA5\x00\x01\xE9",
"0": "\xFA\xA5\x00\x01\xE0",
"blue": "\xFA\xA5\x00\x01\xED",
"red": "\xFA\xA5\x00\x01\xEA",
"yellow": "\xFA\xA5\x00\x01\xEB",
"green": "\xFA\xA5\x00\x01\xEC",
"chanup": "\xFA\xA5\x00\x01\xD1",
"chandown": "\xFA\xA5\x00\x01\xD2",
"menu": "\xFA\xA5\x00\x01\xF7",
"guide": "\xFA\xA5\x00\x01\xD3",
"exit": "\xFA\xA5\x00\x01\xD4",
"info": "\xFA\xA5\x00\x01\xA1",
"prev": "\xFA\xA5\x00\x01\xD6",
"up": "\xFA\xA5\x00\x01\x9C",
"down": "\xFA\xA5\x00\x01\x9D",
"left": "\xFA\xA5\x00\x01\x9B",
"right": "\xFA\xA5\x00\x01\x9A",
"select": "\xFA\xA5\x00\x01\xC3",
"power": "\xFA\xA5\x00\x01\xD5",
"poweron": "\xFA\x82",
"poweroff": "\xFA\x81",
"format": "\xFA\xA5\x00\x01\xF8",
"active": "\xFA\xA5\x00\x01\xA2",
"list": "\xFA\xA5\x00\x01\xA3",
"back": "\xFA\xA5\x00\x01\xA4",
"dash": "\xFA\xA5\x00\x01\xA5",
"enter":"\xFA\xA5\x00\x01\xA0",
"signal": "\xFA\xA5\x00\x01\x90",
"signalMT": "\xFA\xA5\x00\x01\x9D"
},
};
self.debug = debug;

self.setup = function(systemnameIP, systemname232, number) {
try {
self.systemnameIP = systemnameIP;
self.systemname232 = systemname232;
self.number = number;
CF.watch(CF.FeedbackMatchedEvent, systemnameIP, systemnameIP + "_Feedback", self.ProcessFeedback);
self.log("Setting up DirecTV Receiver: " + self.systemnameIP + " " + self.systemname232 + " " + self.number);

} catch (e) {
self.log("Exception caught during setup: " + e );
}
};

self.Initialize = function() {
//self.repeat = setInterval( self.getTuned(), 10000);
self.getTuned();
self.repeat = setInterval(function(){self.getTuned()}, 30000);
};


self.keyPress = function(key) {
if (typeof self.systemname232 == 'string') {
CF.send(self.systemname232, self.hexcommand[key]);
} else {
//CF.send(self.systemnameIP, "/remote/processKey?key="+ key);
}
};

self.getTuned = function() {
CF.send(self.systemnameIP, "/tv/getTuned" );
};
self.setTuned = function(channel) {
if (typeof self.systemname232 != 'string') {
CF.send(self.systemnameIP, "/tv/tune?major=" + channel);
} else {
var hexString = parseInt(channel).toString(16);
while ( hexString.length < 4 ) {
hexString = "0" + hexString;
};
CF.log("hex string " + hexString);

var a = hexString.substring(0,2);
var b = hexString.substring(2);
a = parseInt(a,16);
b = parseInt(b,16);

CF.send(self.systemname232, "\xFA\xA6" + String.fromCharCode(a) + String.fromCharCode(b) + "\xFF\xFF");

};

};

self.keyFavorite = function(key) {
self.setTuned(key);

};

self.ProcessFeedback = function( feedbackname, feedback) {
var fb = JSON.parse(feedback);
if ( fb.callsign == undefined ) {
fb.callsign = " ";
}
if ( fb.title == undefined ) {
fb.title = " ";
}
if ( fb.episodeTitle == undefined ) {
fb.episodeTitle = " ";
}
if ( fb.major == undefined ) {
fb.major = " ";
}
if ( fb.status.query == "/tv/getTuned" ) {
DTVsetProgramName();
CF.setJoin("s"+ (1210 * 1 + self.number), fb.callsign);
CF.setJoin("s"+ (1220 * 1 + self.number), fb.title);
CF.setJoin("s"+ (1230 * 1 + self.number), fb.episodeTitle);
CF.setJoin("s"+ (1240 * 1 + self.number), fb.major);
self.program = fb.title;
}

};



self.log = function(msg) {
if (CF.debug && self.debug) {
CF.log("DirecTV Receiver " + self.systemnameIP + ": " + msg);
}
};
return self;
};

CF.modules.push({
name: "DirecTV Receiver",
object: DirecTV_Receiver,
version: 1.0
});

DTVsetProgramName = function() {};
[/code]

Last edited by Fiasco on January 28, 2020 19:10.
Pump House on Facebook: [Link: facebook.com]


Hosting Services by ipHouse