From 5ec19de979f91acf966e033c6832861be19f4185 Mon Sep 17 00:00:00 2001 From: stephen Date: Thu, 27 Jan 2022 10:48:21 -0500 Subject: [PATCH] Adding Tuya for lights (Uses Tuya API) Removed app_port from config, as it's depreciated. --- config.ini.dist | 6 ++- index.js | 99 +++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 100 insertions(+), 5 deletions(-) diff --git a/config.ini.dist b/config.ini.dist index f1e127e..8d14b27 100644 --- a/config.ini.dist +++ b/config.ini.dist @@ -1,7 +1,6 @@ api_pass = api_url = api_user = -app_port = asterisk_callfrom = asterisk_callto = asterisk_callerID = @@ -29,8 +28,11 @@ mqtt_server = mqtt_topic = mqtt_user = rss_url = +tuya_name = +tuya_status_url = +tuya_toggle_url = user_jid = user_name = vfc_url = weather_api_key = -weather_units = \ No newline at end of file +weather_units = diff --git a/index.js b/index.js index afb6cde..596c23a 100755 --- a/index.js +++ b/index.js @@ -44,6 +44,9 @@ const mqtt_topic = config.mqtt_topic; const mqtt_user = config.mqtt_user; const rpc_url = config.rpc_url; const rss_url = config.rss_url; +const tuya_name = config.tuya_name; +const tuya_status_url = config.tuya_status_url; +const tuya_toggle_url = config.tuya_toggle_url; const user_jid = config.user_jid; const user_name = config.user_name; const vfc_url = config.vfc_url; @@ -121,6 +124,95 @@ xmpp.on('chat', function(from, message) { }); console.log('unlocks'); } + // Tuya light control + else if (message === 'lights' || message === 'Lights') { + request(tuya_status_url,(error, res, body) => { + if (error) { + return console.log(error) + }; + + if (!error && res.statusCode == 200) { + if (res.body === "true"){ + const stat = tuya_name + ": On"; + xmpp.send(from, stat); + console.log(stat); + } else if (res.body === "false") { + const stat = tuya_name + ": Off"; + xmpp.send(from, stat); + console.log(stat); + } else { + xmpp.send(from, "Unknown reply. Please reply ping to reach an admin."); + console.log("Tuya API: Unknown reply!"); + } + } + if (!error && res.statusCode == 401) { + console.log('Invalid credentials'); + xmpp.send(from, 'Invalid credentials'); + } + if (!error && res.statusCode == 404) { + console.log('Record not found'); + xmpp.send(from, 'Record not found'); + } + if (!error && res.statusCode == 500) { + console.log('Server error.'); + xmpp.send(from, 'Server error. Please ping admin'); + } + }); + console.log('lights status'); + } + + else if (message === tuya_name + ' on') { + request(tuya_toggle_url + "?stat=true&devname=" + tuya_name,(error, res, body) => { + if (error) { + return console.log(error) + }; + + if (!error && res.statusCode == 200) { + const stat = tuya_name + " has been turned on"; + xmpp.send(from, stat); + console.log(stat); + } + if (!error && res.statusCode == 401) { + console.log('Invalid credentials'); + xmpp.send(from, 'Invalid credentials'); + } + if (!error && res.statusCode == 404) { + console.log('Record not found'); + xmpp.send(from, 'Record not found'); + } + if (!error && res.statusCode == 500) { + console.log('Server error.'); + xmpp.send(from, 'Server error. Please ping admin'); + } + }); + console.log('lights on'); + } + else if (message === tuya_name + ' off') { + request(tuya_toggle_url + "?stat=false&devname=" + tuya_name,(error, res, body) => { + if (error) { + return console.log(error) + }; + + if (!error && res.statusCode == 200) { + const stat = tuya_name + " has been turned off"; + xmpp.send(from, stat); + console.log(stat); + } + if (!error && res.statusCode == 401) { + console.log('Invalid credentials'); + xmpp.send(from, 'Invalid credentials'); + } + if (!error && res.statusCode == 404) { + console.log('Record not found'); + xmpp.send(from, 'Record not found'); + } + if (!error && res.statusCode == 500) { + console.log('Server error.'); + xmpp.send(from, 'Server error. Please ping admin'); + } + }); + console.log('lights on'); + } // Check VFC balance else if (message === "vfc" || message === "Vfc") { @@ -236,10 +328,11 @@ xmpp.on('chat', function(from, message) { console.log(vcard) }) } - + // If the user sends something we don't have logic for, send them info about the project - else { xmpp.send(from, "This is an auto replying bot. Reply \"help\" for more info, or https://wiki.vanderwarker.family/doku.php?id=code:vxmppb:start"); - console.log('autoreply'); + else { + xmpp.send(from, "This is an auto replying bot. Reply \"help\" for more info, or https://wiki.vanderwarker.family/doku.php?id=code:vxmppb:start"); + console.log('autoreply'); } });