STREGA es una empresa especializada en comunicación industrial con experiencia en Automatización y SCADA que ofrece soluciones probadas en entornos industriales reales para proporcionar un producto confiable en el mercado.
Para aprender cómo conectar una STREGA LoRa válvula inteligente inalámbrica & emisor inalámbrico controlado por tiempo a Ubidots a través de The Things Network, consulte esta guía.
En esta guía, vamos a cubrir la gestión de programadores STREGA para Ubidots
Para programar la operación automática de los programadores STREGA a través del panel de control de Ubidots, debe implementar algunos complementos en su cuenta de Ubidots. Siga los pasos a continuación con cuidado para asegurar el correcto funcionamiento.
Requisitos
1. Configurar la variable "Programador"
1. Inicie sesión en su cuenta de Ubidots.
2. Vaya a la página de Dispositivos y seleccione el dispositivo (SV/SE) para el cual desea asignar los Programadores.
Una vez que haya ingresado al dispositivo, verá una pantalla como la siguiente:
NOTA: Si su dispositivo STREGA ya está transmitiendo datos a Ubidots, podrá visualizar el dispositivo identificado con su número de serie en la sección de Dispositivos. De lo contrario, cree un nuevo dispositivo en su cuenta de Ubidots y asigne su número de serie como etiqueta del dispositivo.
3. Cree una nueva variable haciendo clic en la opción "Agregar Variable". Luego, seleccione "Raw":
4. Asigne un nombre a la variable – definido por el usuario (se recomienda mantenerlo como “programador” ya que lo estamos creando para operaciones de programador).
5. Seleccione la variable creada, luego copie el ID de la variable y guárdelo para más tarde.
2. Creación de Dashboard - Widget de HTML canvas
1. Vaya a la sección Dashboard (Datos > Dashboards) de su cuenta de Ubidots.
2. Seleccione el ícono más (+) ubicado en la parte superior derecha de la página. Luego seleccione HTML canvas como tipo de widget:
3. Primero, asigne el nombre deseado al Widget. Luego, abra el editor y coloque los siguientes códigos en la sección respectiva:
3.1. Copie y pegue el siguiente script HTML en la sección HTML:
<div class="notification--container" id="notification"> <p>Valor enviado con éxito</div></div><div class="container"> <div class="row"> <div class="two columns offset-by-one"> Seleccione el día </div> <div class="four columns"> <select name="Day" class="form__input" size="1" id="day"> <option value="">--Ningún día seleccionado--</option> <option value="14">Domingo</option> <option value="15">Lunes</option> <option value="16">Martes</option> <option value="17">Miércoles</option> <option value="18">Jueves</option> <option value="19">Viernes</option> <option value="20">Sábado</option> </select> </div> </div> <div class="row d-block"> <div class="four offset-by-three columns center">Inicio</div> <div class="four columns center">Fin</div> </div> <div class="row"> <div class="two columns offset-by-one"> Programador 1 </div> <div class="two columns"> <input type="number" step="1" placeholder="HRS" id="value1" class="form__input" /> </div> <div class="two columns"> <input type="number" step="1" placeholder="MIN" id="value2" class="form__input" /> </div> <div class="two columns"> <input type="number" step="1" placeholder="HRS" id="value3" class="form__input" /> </div> <div class="two columns"> <input type="number" step="1" placeholder="MIN" id="value4" class="form__input" /> </div> </div> <div class="row"> <div class="two columns offset-by-one"> Programador 2 </div> <div class="two columns"> <input type="number" step="1" placeholder="HRS" id="value5" class="form__input" /> </div> <div class="two columns"> <input type="number" step="1" placeholder="MIN" id="value6" class="form__input" /> </div> <div class="two columns"> <input type="number" step="1" placeholder="HRS" id="value7" class="form__input" /> </div> <div class="two columns"> <input type="number" step="1" placeholder="MIN" id="value8" class="form__input" /> </div> </div> <div class="row"> <div class="two columns offset-by-one"> Programador 3 </div> <div class="two columns"> <input type="number" step="1" placeholder="HRS" id="value9" class="form__input" /> </div> <div class="two columns"> <input type="number" step="1" placeholder="MIN" id="value10" class="form__input" /> </div> <div class="two columns"> <input type="number" step="1" placeholder="HRS" id="value11" class="form__input" /> </div> <div class="two columns"> <input type="number" step="1" placeholder="MIN" id="value12" class="form__input" /> </div> </div> <div class="row"> <div class="two columns offset-by-one"> Programador 4 </div> <div class="two columns"> <input type="number" step="1" placeholder="HRS" id="value13" class="form__input" /> </div> <div class="two columns"> <input type="number" step="1" placeholder="MIN" id="value14" class="form__input" /> </div> <div class="two columns"> <input type="number" step="1" placeholder="HRS" id="value15" class="form__input" /> </div> <div class="two columns"> <input type="number" step="1" placeholder="MIN" id="value16" class="form__input" /> </div> </div> <div class="row"> <div class="eight offset-by-two columns"> <button button type="button" class="form__button button--submit" id="send-value">Establecer Programadores</button> </div> </div></div>
3.2. Copie y pegue el siguiente script CSS en la sección CSS:
@import url("https://fonts.googleapis.com/css?family=Open+Sans");* { box-sizing: border-box;}body { font-family: "Open Sans", sans-serif; font-size: 14px;}.d-block { display: block !important;}.center { text-align: center;}.container { position: relative; width: 100%; max-width: 960px; margin: 0 auto; box-sizing: border-box;}.container .row { align-items: center; display: flex;}.column,.columns { width: 100%; float: left; box-sizing: border-box; margin-left: 4%;}.column:first-child,.columns:first-child { margin-left: 0;}.one.column,.one.columns { width: 4.66666666667%;}.two.columns { width: 13.3333333333%;}.three.columns { width: 22%;}.four.columns { width: 30.6666666667%;}.five.columns { width: 39.3333333333%;}.six.columns { width: 48%;}.seven.columns { width: 56.6666666667%;}.eight.columns { width: 65.3333333333%;}.nine.columns { width: 74%;}.ten.columns { width: 82.6666666667%;}.eleven.columns { width: 91.3333333333%;}.twelve.columns { width: 100%; margin-left: 0;}.one-third.column { width: 30.6666666667%;}.two-thirds.column { width: 65.3333333333%;}.one-half.column { width: 48%;}/* Offsets */.offset-by-one.column,.offset-by-one.columns { margin-left: 8.66666666667%;}.offset-by-two.column,.offset-by-two.columns { margin-left: 17.3333333333%;}.offset-by-three.column,.offset-by-three.columns { margin-left: 26%;}.offset-by-four.column,.offset-by-four.columns { margin-left: 34.6666666667%;}.offset-by-five.column,.offset-by-five.columns { margin-left: 43.3333333333%;}.offset-by-six.column,.offset-by-six.columns { margin-left: 52%;}.offset-by-seven.column,.offset-by-seven.columns { margin-left: 60.6666666667%;}.offset-by-eight.column,.offset-by-eight.columns { margin-left: 69.3333333333%;}.offset-by-nine.column,.offset-by-nine.columns { margin-left: 78%;}.offset-by-ten.column,.offset-by-ten.columns { margin-left: 86.6666666667%;}.offset-by-eleven.column,.offset-by-eleven.columns { margin-left: 95.3333333333%;}.offset-by-one-third.column,.offset-by-one-third.columns { margin-left: 34.6666666667%;}.offset-by-two-thirds.column,.offset-by-two-thirds.columns { margin-left: 69.3333333333%;}.offset-by-one-half.column,.offset-by-one-half.columns { margin-left: 52%;}.container:after,.row:after { content: ""; display: table; clear: both;}.row { margin-top: 14px; margin-bottom: 14px;}input { width: 100%;}.form__input { background: #ffffff; border: 1px solid #ccc; padding: 8px 4px; outline: none; width: 100%;}.form__button { background: transparent; cursor: pointer; width: 100%;}.form__button.button--submit { border: 1px solid #00bcd4; border-radius: 50px; color: #00bcd4; font-weight: bold; padding: 8px 0; transition: background-color 300ms ease-in-out; transition: color 300ms ease-out;}.form__button.button--submit:hover { background-color: #00bcd4; color: #ffffff;}.notification--container { display: none;}
3.3. Copie y pegue el siguiente script de JavaScript en la sección de JavaScript:
var $sendValue = $('#send-value');var $port = $('#day');var $value1 = $('#value1');var $value2 = $('#value2');var $value3 = $('#value3');var $value4 = $('#value4');var $value5 = $('#value5');var $value6 = $('#value6');var $value7 = $('#value7');var $value8 = $('#value8');var $value9 = $('#value9');var $value10 = $('#value10');var $value11 = $('#value11');var $value12 = $('#value12');var $value13 = $('#value13');var $value14 = $('#value14');var $value15 = $('#value15');var $value16 = $('#value16');var TOKEN = 'ASIGNE_SU_TOKEN_DE_UBIDOTS';var VARIABLE_ID = 'ASIGNE_ID_DE_VARIABLE';var $notification = $('#notification');function postValue(variable, token, callback) { var url = 'https://industrial.api.ubidots.com/api/v1.6/variables/' + variable + '/values'; var headers = { 'Content-Type': 'application/json', 'X-Auth-Token': TOKEN }; $notification.hide(); $.ajax({ data: JSON.stringify({ value: parseInt($port.val(), 10), context:{"schl1h_on":parseInt($value1.val(), 10),"schl1m_on":parseInt($value2.val(),10),"schl1h_off":parseInt($value3.val(), 10),"schl1m_off":parseInt($value4.val(),10),"schl2h_on":parseInt($value5.val(), 10),"schl2m_on":parseInt($value6.val(),10),"schl2h_off":parseInt($value7.val(), 10),"schl2m_off":parseInt($value8.val(),10), "schl3h_on":parseInt($value9.val(), 10),"schl3m_on":parseInt($value10.val(),10),"schl3h_off":parseInt($value11.val(), 10),"schl3m_off":parseInt($value12.val(),10),"schl4h_on":parseInt($value13.val(), 10),"schl4m_on":parseInt($value14.val(),10),"schl4h_off":parseInt($value15.val(), 10),"schl4m_off":parseInt($value16.val(),10) } }), method: 'POST', url: url, headers: headers, success: function (res) { callback(res.value); } });}$sendValue.on('click', function () { postValue(VARIABLE_ID, TOKEN, function (value) { $notification.show(); });});
Una vez que el código esté correctamente colocado, asigne su TOKEN de Ubidots, y el ID de la variable de la variable creada (copiado previamente) donde se indica en el código a continuación.
3.4. Agregue la siguiente biblioteca a la sección "Biblioteca de terceros":
https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js
4. En este punto, podrá ver el widget de Programadores creado en su Dashboard.
3. Crear un Evento para Programadores en Ubidots
Configuración de TTN
1. Inicie sesión en su cuenta de TTN – haga clic en Aplicación – seleccione Integración.
2. Cree una Integración HTTP para Ubidots. Asigne un ID de Proceso, seleccione la Clave de Acceso como Predeterminada, ingrese http://
en la Columna de URL y Método como POST y haga clic en guardar.
3. Vaya a la sección "Formatos de Carga", y asigne el siguiente código como codificador de su aplicación.
function Encoder(object, port) { function pad(num, len) { return ("00" + num).substr(-len);} function pad1(num, len) { return ("000" + num).substr(-len);} function pad2(num, len) { return ("0000" + num).substr(-len);} function dec_to_bho (n, base) { if (n < 0) { n = 0xFFFFFFFF + n + 1;}switch (base){case 'B':return parseInt(n, 10).toString(2);break;case 'H':return parseInt(n, 10).toString(16);break;case 'O':return parseInt(n, 10).toString(8);break;default:return("Entrada incorrecta.........");}} var bytes = []; var ports = port; var Schl_on = 10; var Schl_off = 00; var Schl_m = 0;// comando de abrir y cerrar if (port === 1) { bytes[0] = object.payload; return bytes; }// tiempo de frecuencia UL if (port === 11){ if (object.unit1===1){ bytes[0] = 128;} else{ bytes[0] = 0;} bytes[1] = object.time1; if (object.unit2===1){ bytes[2] = 128;} else{ bytes[2] = 0;} bytes[3] = object.time2; return bytes; }// configuración del estado de los Programadores if (port === 21){ bytes[0] = object.Schl_status; return bytes; } // Sincronizando RTC if (port === 13){ bytes[0] = object.Sync_RTC; return bytes; } if (port === 12){ var t0 = object.Sync_RTC; bytes[0] = parseInt(t0.substr(0,1)); bytes[1] = parseInt(t0.substr(1,1)); bytes[2] = parseInt(t0.substr(2,1)); bytes[3] = parseInt(t0.substr(3,1)); bytes[4] = parseInt(t0.substr(4,1)); bytes[5] = parseInt(t0.substr(5,1)); bytes[6] = parseInt(t0.substr(6,1)); bytes[7] = parseInt(t0.substr(7,1)); bytes[8] = parseInt(t0.substr(8,1)); bytes[9] = parseInt(t0.substr(9,1)); bytes[10] = parseInt(t0.substr(10,1)); bytes[11] = parseInt(t0.substr(11,1)); bytes[12] = parseInt(t0.substr(12,1)); bytes[13] = parseInt(t0.substr(13,1)); return bytes; }// configuración de los Programadores if (port===14 || port===15 || port===16 || port===17 || port===18 || port===19 || port===20) { bytes[0] = 255; if (object.schl1h_on==="None" || object.schl1h_on===255){ bytes[1] = 255;} else{ var a = parseInt(object.schl1h_on); var b = pad(a,2); var c = b.substr(0,1); var d = b.substr(1,1); var e = pad(dec_to_bho (c,'B'),2); var f = pad2(dec_to_bho (d,'B'),4); var g = parseInt((Schl_on+e+f),2); bytes[1] = g;} if (object.schl1m_on==="None" || object.schl1m_on===255){ bytes[2] = 255;} else{ var a1 = parseInt(object.schl1m_on); var b1 = pad(a1,2); var c1 = b1.substr(0,1); var d1 = b1.substr(1,1); var e1 = pad1(dec_to_bho (c1,'B'),3); var f1 = pad2(dec_to_bho (d1,'B'),4); var g1 = parseInt((Schl_m+e1+f1),2); bytes[2] = g1;} bytes[3] = 255; if (object.schl1h_off==="None" || object.schl1h_off===255){ bytes[4] = 255;} else{ var a2 = parseInt(object.schl1h_off); var b2 = pad(a2,2); var c2 = b2.substr(0,1); var d2 = b2.substr(1,1); var e2 = pad(dec_to_bho (c2,'B'),2); var f2 = pad2(dec_to_bho (d2,'B'),4); var g2 = parseInt((Schl_off+e2+f2),2); bytes[4] = g2;} if (object.schl1m_off==="None" || object.schl1m_off===255){ bytes[5] = 255;} else{ var a3 = parseInt(object.schl1m_off); var b3 = pad(a3,2); var c3 = b3.substr(0,1); var d3 = b3.substr(1,1); var e3 = pad1(dec_to_bho (c3,'B'),3); var f3 = pad2(dec_to_bho (d3,'B'),4); var g3 = parseInt((Schl_m+e3+f3),2); bytes[5] = g3;} bytes[6] = 255; if (object.schl2h_on==="None" || object.schl2h_on===255){ bytes[7] = 255;} else{ var a4 = parseInt(object.schl2h_on); var b4 = pad(a4,2); var c4 = b4.substr(0,1); var d4 = b4.substr(1,1); var e4 = pad(dec_to_bho (c4,'B'),2); var f4 = pad2(dec_to_bho (d4,'B'),4); var g4 = parseInt((Schl_on+e4+f4),2); bytes[7] = g4;} if (object.schl2m_on==="None" || object.schl2m_on===255){ bytes[8] = 255;} else{ var a5 = parseInt(object.schl2m_on); var b5 = pad(a5,2); var c5 = b5.substr(0,1); var d5 = b5.substr(1,1); var e5 = pad1(dec_to_bho (c5,'B'),3); var f5 = pad2(dec_to_bho (d5,'B'),4); var g5 = parseInt((Schl_m+e5+f5),2); bytes[8] = g5;} bytes[9] = 255; if (object.schl2h_off==="None" || object.schl2h_off===255){ bytes[10] = 255;} else{ var a6 = parseInt(object.schl2h_off); var b6 = pad(a6,2); var c6 = b6.substr(0,1); var d6 = b6.substr(1,1); var e6 = pad(dec_to_bho (c6,'B'),2); var f6 = pad2(dec_to_bho (d6,'B'),4); var g6 = parseInt((Schl_off+e6+f6),2); bytes[10] = g6;} if (object.schl2m_off==="None" || object.schl2m_off===255){ bytes[11] = 255;} else{ var a7 = parseInt(object.schl2m_off); var b7 = pad(a7,2); var c7 = b7.substr(0,1); var d7 = b7.substr(1,1); var e7 = pad1(dec_to_bho (c7,'B'),3); var f7 = pad2(dec_to_bho (d7,'B'),4); var g7 = parseInt((Schl_m+e7+f7),2); bytes[11] = g7;} bytes[12] = 255; if (object.schl3h_on==="None" || object.schl3h_on===255){ bytes[13] = 255;} else{ var a8 = parseInt(object.schl3h_on); var b8 = pad(a8,2); var c8 = b8.substr(0,1); var d8 = b8.substr(1,1); var e8 = pad(dec_to_bho (c8,'B'),2); var f8 = pad2(dec_to_bho (d8,'B'),4); var g8 = parseInt((Schl_on+e8+f8),2); bytes[13] = g8;} if (object.schl3m_on==="None" || object.schl3m_on===255){ bytes[14] = 255;} else{ var a9 = parseInt(object.schl3m_on); var b9 = pad(a9,2); var c9 = b9.substr(0,1); var d9 = b9.substr(1,1); var e9 = pad1(dec_to_bho (c9,'B'),3); var f9 = pad2(dec_to_bho (d9,'B'),4); var g9 = parseInt((Schl_m+e9+f9),2); bytes[14] = g9;} bytes[15] = 255; if (object.schl3h_off==="None" || object.schl3h_off===255){ bytes[16] = 255;} else{ var a10 = parseInt(object.schl3h_off); var b10 = pad(a10,2); var c10 = b10.substr(0,1); var d10 = b10.substr(1,1); var e10 = pad(dec_to_bho (c10,'B'),2); var f10 = pad2(dec_to_bho (d10,'B'),4); var g10 = parseInt((Schl_off+e10+f10),2); bytes[16] = g10;} if (object.schl3m_off==="None" || object.schl3m_off===255){ bytes[17] = 255;} else{ var a11 = parseInt(object.schl3m_off); var b11 = pad(a11,2); var c11 = b11.substr(0,1); var d11 = b11.substr(1,1); var e11 = pad1(dec_to_bho (c11,'B'),3); var f11 = pad2(dec_to_bho (d11,'B'),4); var g11 = parseInt((Schl_m+e11+f11),2); bytes[17] = g11;} bytes[18] = 255; if (object.schl4h_on==="None" || object.schl4h_on===255){ bytes[19] = 255;} else{ var a12 = parseInt(object.schl4h_on); var b12 = pad(a12,2); var c12 = b12.substr(0,1); var d12 = b12.substr(1,1); var e12 = pad(dec_to_bho (c12,'B'),2); var f12 = pad2(dec_to_bho (d12,'B'),4); var g12 = parseInt((Schl_on+e12+f12),2); bytes[19] = g12;} if (object.schl4m_on==="None" || object.schl4m_on===255){ bytes[20] = 255;} else{ var a13 = parseInt(object.schl4m_on); var b13 = pad(a13,2); var c13 = b13.substr(0,1); var d13 = b13.substr(1,1); var e13 = pad1(dec_to_bho (c13,'B'),3); var f13 = pad2(dec_to_bho (d13,'B'),4); var g13 = parseInt((Schl_m+e13+f13),2); bytes[20] = g13;} bytes[21] = 255; if (object.schl4h_off==="None" || object.schl4h_off===255){ bytes[22] = 255;} else{ var a14 = parseInt(object.schl4h_off); var b14 = pad(a14,2); var c14 = b14.substr(0,1); var d14 = b14.substr(1,1); var e14 = pad(dec_to_bho (c14,'B'),2); var f14 = pad2(dec_to_bho (d14,'B'),4); var g14 = parseInt((Schl_off+e14+f14),2); bytes[22] = g14;} if (object.schl4m_off==="None" || object.schl4m_off===255){ bytes[23] = 255;} else{ var a15 = parseInt(object.schl4m_off); var b15 = pad(a15,2); var c15 = b15.substr(0,1); var d15 = b15.substr(1,1); var e15 = pad1(dec_to_bho (c15,'B'),3); var f15 = pad2(dec_to_bho (d15,'B'),4); var g15 = parseInt((Schl_m+e15+f15),2); bytes[23] = g15;}return bytes;}}
Asegúrese de presionar "Guardar funciones de carga" para guardar los cambios realizados.
Configuración de Ubidots
1. Vaya a la sección "Evento" (Datos > Evento), y cree un nuevo evento simplemente presionando el ícono más (+) ubicado en la parte superior derecha de la página.
2. Cree un Evento utilizando la variable que ha creado para los programadores (esta es la variable creada para su programador en la página del dispositivo).
En la página “Si se activa” seleccione la variable y establezca el valor igual a 14 (=Domingo):
NOTA: Se deben crear 7 eventos por separado para cada día de la semana, ya que los puertos son diferentes para cada día en los mecanismos de los programadores STREGA; así que en total 7 eventos para 7 días.
Para los 6 eventos restantes que se deben crear, seleccione la misma variable que ha creado para los programadores en el dispositivo:
Para el domingo, establezca el valor igual a 14
Para el lunes, establezca el valor igual a 15
Para el martes, establezca el valor igual a 16
Para el miércoles, establezca el valor igual a 17
Para el jueves, establezca el valor igual a 18
Para el viernes, establezca el valor igual a 19
Para el sábado, establezca el valor igual a 20
3. Luego haga clic en la acción – crear una nueva acción – seleccione TTN Downlink.
3.1. Luego, en la siguiente página complete los parámetros requeridos:
Complete el ID de Aplicación de su cuenta de TTN, ID de Proceso (Nombre dado al crear la Integración Http), Clave de Acceso de la Aplicación (La clave de acceso que ha dado al crear la Integración Http “Clave Predeterminada” se puede encontrar en la cuenta de TTN. TTN – Aplicación - Resumen).
3.2. Escriba el ID del Dispositivo de su SV/SE, en la columna de Puerto escriba 14 para el Domingo Programación.
Para el lunes, establezca el valor en 15
Para el martes, establezca el valor en 16
Para el miércoles, establezca el valor en 17
Para el jueves, establezca el valor en 18
Para el viernes, establezca el valor en 19
Para el sábado, establezca el valor en 20
3.3. Seleccione el Tipo de Carga como Campos de Carga. Luego, cree el campo mencionado a continuación haciendo clic en Agregar Campo:
schl1h_on
schl1m_on
schl1h_off
schl1m_off
schl2h_on
schl2m_on
schl2h_off
schl2m_off
schl3h_on
schl3m_on
schl3h_off
schl3m_off
schl4h_on
schl4m_on
schl4h_off
schl4m_off
3.4. Luego asigne el valor para cada campo_de_carga. Seleccione “Contexto” del menú desplegable para el campo. Luego haga doble clic en el contexto y edítelo como context.schl1h_on
. Lo mismo debe hacerse para todas las variables de campo restantes. El nombre del contenido debe ser el mismo que el nombre del campo de carga. Consulte el punto anterior para el nombre del campo de carga.