<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>HMI archivos - Brandon Engineer</title>
	<atom:link href="https://brandon-engineer.com/en/category/hmi-2/feed/" rel="self" type="application/rss+xml" />
	<link>https://brandon-engineer.com/en/category/hmi-2/</link>
	<description>Blog para compartir sobre programación y tecnología industrial</description>
	<lastbuilddate>Wed, 13 Nov 2024 20:16:36 +0000</lastbuilddate>
	<language>en-US</language>
	<sy:updateperiod>
	hourly	</sy:updateperiod>
	<sy:updatefrequency>
	1	</sy:updatefrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://brandon-engineer.com/wp-content/uploads/2024/03/favicon.ico</url>
	<title>HMI archivos - Brandon Engineer</title>
	<link>https://brandon-engineer.com/en/category/hmi-2/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Como guardar y visualizar datos en base de datos GRATIS</title>
		<link>https://brandon-engineer.com/en/como-guardar-y-visualizar-datos-en-base-de-datos-gratis/</link>
					<comments>https://brandon-engineer.com/en/como-guardar-y-visualizar-datos-en-base-de-datos-gratis/#respond</comments>
		
		<dc:creator><![CDATA[Brandon]]></dc:creator>
		<pubdate>Tue, 12 Nov 2024 18:16:10 +0000</pubdate>
				<category><![CDATA[Dashboard]]></category>
		<category><![CDATA[Fuxa]]></category>
		<category><![CDATA[HMI]]></category>
		<category><![CDATA[SCADA]]></category>
		<guid ispermalink="false">https://brandon-engineer.com/?p=3723</guid>

					<description><![CDATA[<p>Introducción Hace poco una persona tenia dudas de como almacenar datos del consumo de la red en una base de datos y yo le comentaba que se puede hacer con costes muy reducidos o incluso gratuitos Hardware Para este ejercicio práctico se usará un dispositivo de domótica por su reducido coste https://amzn.to/3CjvGMA Si necesitas varios...</p>
<p>La entrada <a href="https://brandon-engineer.com/en/como-guardar-y-visualizar-datos-en-base-de-datos-gratis/">Como guardar y visualizar datos en base de datos GRATIS</a> se publicó primero en <a href="https://brandon-engineer.com/en">Brandon Engineer</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div data-elementor-type="wp-post" data-elementor-id="3723" class="elementor elementor-3723" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-5765033 e-flex e-con-boxed e-con e-parent" data-id="5765033" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-b12fa69 elementor-widget elementor-widget-text-editor" data-id="b12fa69" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.19.0 - 28-02-2024 */
.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}</style>				<h2>Introduction</h2>
<p>Hace poco una persona tenia dudas de como almacenar datos del consumo de la red en una base de datos y yo le comentaba que se puede hacer con costes muy reducidos o incluso gratuitos</p>
<h2>Hardware</h2>
<p>Para este ejercicio práctico se usará un dispositivo de domótica por su reducido coste</p>
<p><img fetchpriority="high" decoding="async" class="alignnone size-large wp-image-3728" src="https://brandon-engineer.com/wp-content/uploads/2024/11/tasmota-enchufe-inteligente-1024x480.gif" alt="" width="751" height="352" srcset="https://brandon-engineer.com/wp-content/uploads/2024/11/tasmota-enchufe-inteligente-1024x480.gif 1024w, https://brandon-engineer.com/wp-content/uploads/2024/11/tasmota-enchufe-inteligente-300x141.gif 300w, https://brandon-engineer.com/wp-content/uploads/2024/11/tasmota-enchufe-inteligente-768x360.gif 768w, https://brandon-engineer.com/wp-content/uploads/2024/11/tasmota-enchufe-inteligente-1536x721.gif 1536w, https://brandon-engineer.com/wp-content/uploads/2024/11/tasmota-enchufe-inteligente-18x8.gif 18w, https://brandon-engineer.com/wp-content/uploads/2024/11/tasmota-enchufe-inteligente-600x281.gif 600w" sizes="(max-width: 751px) 100vw, 751px" /></p>
<p><a href="https://amzn.to/3CjvGMA">https://amzn.to/3CjvGMA</a></p>
<p>Si necesitas varios siempre puedes comprar un pack para ahorrar dinero:</p>
<p><a href="https://amzn.to/3Oq3VoF">https://amzn.to/3Oq3VoF</a></p>
<p>Para la inserción en base de datos usaremos un servidor en red con linux aunque yo recomiendo un IPC con procesador ARM por tener diversificado las funciones de cada dispositivo</p>
<h2>Software</h2>
<h3>Como instalar Docker en ubuntu</h3>
<p>Para la instalación del software empezaremos por instalar el gestor de contenedores de Docker en servidor linux basado en ubuntu</p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-f3cf97b e-flex e-con-boxed e-con e-parent" data-id="f3cf97b" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-615a20e e-flex e-con-boxed e-con e-child" data-id="615a20e" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-c649b4e elementor-widget elementor-widget-code-highlight" data-id="c649b4e" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>sudo apt update
sudo apt upgrade
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt upgrade
sudo apt install docker-ce docker-ce-cli containerd.io
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-2e9230c e-flex e-con-boxed e-con e-parent" data-id="2e9230c" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-b44b28b elementor-widget elementor-widget-text-editor" data-id="b44b28b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Por ultimo verificamos que esta instalado correctamente</p>						</div>
				</div>
				<div class="elementor-element elementor-element-103c584 elementor-widget elementor-widget-code-highlight" data-id="103c584" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>sudo docker --version</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-3466514 e-flex e-con-boxed e-con e-parent" data-id="3466514" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-0ef3c0b elementor-widget elementor-widget-text-editor" data-id="0ef3c0b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h3>Como instalar Node Red en Docker</h3>
<p>Para el software de inserción en base de datos instalaremos Node Red que es un software de open source que nos permitiré conectar con infinidad de protocolos de comunicación e insertar en base de datos</p>						</div>
				</div>
				<div class="elementor-element elementor-element-bf2b2e7 elementor-widget elementor-widget-code-highlight" data-id="bf2b2e7" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>docker run -d --name mynodered -p 1880:1880 --restart unless-stopped nodered/node-red
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-eab14ec e-flex e-con-boxed e-con e-parent" data-id="eab14ec" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-6cfa3a1 elementor-widget elementor-widget-text-editor" data-id="6cfa3a1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Una vez ya instalado podemos proceder a acceder a los datos que nos comparte el dispositivo de Tasmota con su servidor web en mi caso esta almacenada en esta dirección IP (se recomienda usar la guía de configuración de la conexión por wifi del dispositivo para configurarlo correctamente):</p>
<p><a href="http://192.168.0.34/">http://192.168.0.34</a></p>
<p>El cual nos dará la información sobre el enchufe:</p>
<p><img decoding="async" class="alignnone size-full wp-image-3731" src="https://brandon-engineer.com/wp-content/uploads/2024/11/tasmota-interfaz-web.gif" alt="" width="679" height="643" /></p>
<p>Para obtener los datos nos podemos dirigir a la siguiente:</p>
<p><a href="http://192.168.0.34/cm?cmnd=STATUS%200">http://192.168.0.34/cm?cmnd=STATUS%200</a></p>
<p>El cual podemos ver que esta toda la información en un JSON</p>						</div>
				</div>
				<div class="elementor-element elementor-element-517941a elementor-widget elementor-widget-code-highlight" data-id="517941a" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-json line-numbers">
				<code readonly="true" class="language-json">
					<xmp>   "ENERGY": {
      "TotalStartTime": "2024-11-06T09:10:05",
      "Total": 1.058,
      "Yesterday": 0.268,
      "Today": 0.206,
      "Power": 0,
      "ApparentPower": 0,
      "ReactivePower": 0,
      "Factor": 0,
      "Voltage": 208,
      "Current": 0
    },</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-4d13443 e-flex e-con-boxed e-con e-parent" data-id="4d13443" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-270511d elementor-widget elementor-widget-text-editor" data-id="270511d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Ahora procederemos a programar la función ciclica que recopilará la información para insertarla en la base de datos para ello haremos lo siguiente:</p>
<p>-Añadimos nodo que se ejecuta cada 3 segundos</p>
<p>-Normalizamos la hora para poder insertarla en la base de datos</p>
<p>-Obtenemos los datos mediante una petición HTTP mediante el método &#8220;GET&#8221;</p>
<p>-Extraemos los datos que nos interesa del JSON</p>
<p>-Creamos la consulta con los datos extraídos</p>
<p>-Insertamos en nuestro servidor</p>
<p>-Mostramos en consola para comprobar que todo funciona correctamente</p>
<p><img decoding="async" class="alignnone size-full wp-image-3732" src="https://brandon-engineer.com/wp-content/uploads/2024/11/flujo-tasmota.gif" alt="" width="1022" height="242" /></p>						</div>
				</div>
				<div class="elementor-element elementor-element-bd2e25a elementor-widget elementor-widget-code-highlight" data-id="bd2e25a" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-json line-numbers">
				<code readonly="true" class="language-json">
					<xmp>[
    {
        "id": "72594c6cf3e187c5",
        "type": "debug",
        "z": "a7cda68e269cad0e",
        "name": "debug 25",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 720,
        "y": 940,
        "wires": []
    },
    {
        "id": "e49938d64834e868",
        "type": "http request",
        "z": "a7cda68e269cad0e",
        "name": "",
        "method": "GET",
        "ret": "txt",
        "paytoqs": "ignore",
        "url": "http://192.168.0.34/cm?cmnd=STATUS%200",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 530,
        "y": 880,
        "wires": [
            [
                "273d22936082a16a"
            ]
        ]
    },
    {
        "id": "7957f9fe99d9eee6",
        "type": "inject",
        "z": "a7cda68e269cad0e",
        "name": "",
        "props": [
            {
                "p": "date",
                "v": "iso",
                "vt": "date"
            }
        ],
        "repeat": "3",
        "crontab": "",
        "once": true,
        "onceDelay": "3",
        "topic": "",
        "x": 200,
        "y": 880,
        "wires": [
            [
                "23d3e98baab1ce6a"
            ]
        ]
    },
    {
        "id": "273d22936082a16a",
        "type": "function",
        "z": "a7cda68e269cad0e",
        "name": "Extraer datos del JSON",
        "func": "// Convierte msg.payload a string si no lo es\nvar payloadStr = msg.payload.toString();\n\n// Elimina espacios en blanco al inicio y al final\npayloadStr = payloadStr.trim();\n\n// Si el payload comienza y termina con comillas dobles, las elimina\nif (payloadStr.startsWith('\"') && payloadStr.endsWith('\"')) {\n    payloadStr = payloadStr.substring(1, payloadStr.length - 1);\n}\n\n// Reemplaza las comillas dobles escapadas por comillas dobles reales\npayloadStr = payloadStr.replace(/\\\\\"/g, '\"');\n\ntry {\n    // Parsea el string a objeto JSON\n    var payloadObj = JSON.parse(payloadStr);\n\n    // Verifica si existen los datos de ENERGY\n    if (payloadObj.StatusSNS && payloadObj.StatusSNS.ENERGY) {\n        // Asigna los valores de ENERGY al payload\n        msg.payload = payloadObj.StatusSNS.ENERGY;\n    } else {\n        node.error(\"No se encontró 'StatusSNS.ENERGY' en el payload\", msg);\n        return null;\n    }\n} catch (e) {\n    // Maneja errores de parseo\n    node.error(\"Error al parsear JSON: \" + e.message, msg);\n    return null;\n}\n\nreturn msg;\n",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 250,
        "y": 940,
        "wires": [
            [
                "456e7462c5d896e9"
            ]
        ]
    },
    {
        "id": "4086d7eafeeaf2bd",
        "type": "mysql-r2",
        "z": "a7cda68e269cad0e",
        "name": "",
        "host": "192.168.0.125",
        "database": "****",
        "username": "****",
        "password": "****",
        "sql": "",
        "port": "****",
        "pooling": false,
        "waitForConnections": true,
        "connectionLimit": "10",
        "queueTimeout": "10000",
        "x": 580,
        "y": 940,
        "wires": [
            [
                "72594c6cf3e187c5"
            ]
        ]
    },
    {
        "id": "456e7462c5d896e9",
        "type": "template",
        "z": "a7cda68e269cad0e",
        "name": "",
        "field": "sql",
        "fieldType": "msg",
        "format": "handlebars",
        "syntax": "mustache",
        "template": "INSERT INTO `Grafana`.`Consume` (`con_date`, `con_voltage`, `con_current`, `con_power`, `con_AppPower`, `con_ReactPower`, `con_PowerFactor`, `con_EnergyToday`) VALUES ('{{date}}', '{{payload.Voltage}}', {{payload.Current}}, {{payload.Power}}, {{payload.ApparentPower}}, {{payload.ReactivePower}}, {{payload.Factor}}, {{payload.Today}});",
        "output": "str",
        "x": 440,
        "y": 940,
        "wires": [
            [
                "4086d7eafeeaf2bd"
            ]
        ]
    },
    {
        "id": "23d3e98baab1ce6a",
        "type": "function",
        "z": "a7cda68e269cad0e",
        "name": "Normalizar hora",
        "func": "// Obtiene la fecha original de msg.date\nvar originalDate = msg.date;\n\n// Verifica si msg.date está definido\nif (!originalDate) {\n    node.error(\"msg.date no está definido.\", msg);\n    return null;\n}\n\n// Convierte la cadena de fecha a un objeto Date\nvar dateObj = new Date(originalDate);\n\n// Verifica si la fecha es válida\nif (isNaN(dateObj.getTime())) {\n    node.error(\"La fecha proporcionada no es válida: \" + originalDate, msg);\n    return null;\n}\n\n// Extrae los componentes de la fecha y hora en UTC\nvar year = dateObj.getUTCFullYear();\nvar month = ('0' + (dateObj.getUTCMonth() + 1)).slice(-2);\nvar day = ('0' + dateObj.getUTCDate()).slice(-2);\nvar hours = ('0' + dateObj.getUTCHours()).slice(-2);\nvar minutes = ('0' + dateObj.getUTCMinutes()).slice(-2);\nvar seconds = ('0' + dateObj.getUTCSeconds()).slice(-2);\n\n// Formatea la fecha al formato deseado\nmsg.date = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n\nreturn msg;\n",
        "outputs": 1,
        "timeout": 0,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 360,
        "y": 880,
        "wires": [
            [
                "e49938d64834e868"
            ]
        ]
    }
]</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-f21ee3f e-flex e-con-boxed e-con e-parent" data-id="f21ee3f" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-5acf0be elementor-widget elementor-widget-text-editor" data-id="5acf0be" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h3>Como instalar Grafana</h3>
<p>Para la visualización utilizaremos Grafana el cual tiene una gran variedad de herramientas de visualización en mi caso hare que sea accesible por el puerto 1882</p>						</div>
				</div>
				<div class="elementor-element elementor-element-23f7571 elementor-widget elementor-widget-code-highlight" data-id="23f7571" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>docker run -d --name mygrafana -p 1882:3000 --restart unless-stopped grafana/grafana</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-784305b e-flex e-con-boxed e-con e-parent" data-id="784305b" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-3d04157 elementor-widget elementor-widget-text-editor" data-id="3d04157" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Una vez listo yo recomiendo realizar las siguientes configuraciones para poder acceder a los gráficos sin tener que iniciar sesión cada vez que se arranque el visualizador</p>						</div>
				</div>
				<div class="elementor-element elementor-element-9ceb8fb elementor-widget elementor-widget-code-highlight" data-id="9ceb8fb" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>docker exec -it -u root mygrafana /bin/sh
vi /etc/grafana/grafana.ini</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-4eb9428 e-flex e-con-boxed e-con e-parent" data-id="4eb9428" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-2a5c1ed elementor-widget elementor-widget-text-editor" data-id="2a5c1ed" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Ahora habilitaremos la visualización de forma anonima modificando estas lineas:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-6f30881 elementor-widget elementor-widget-code-highlight" data-id="6f30881" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>[auth.anonymous]
enabled = true
org_role = Viewer</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-0c50920 e-flex e-con-boxed e-con e-parent" data-id="0c50920" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-1b32d09 elementor-widget elementor-widget-text-editor" data-id="1b32d09" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Por último habilitaremos el uso de graficas en iframes</p>						</div>
				</div>
				<div class="elementor-element elementor-element-0526fec elementor-widget elementor-widget-code-highlight" data-id="0526fec" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>[security]
allow_embedding = true</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-d77b6f8 e-flex e-con-boxed e-con e-parent" data-id="d77b6f8" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-e36de2f elementor-widget elementor-widget-text-editor" data-id="e36de2f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Una vez listo configuraremos nuestras gráficas como deseemos en mi caso tengo estas gráficas</p>
<p><img loading="lazy" decoding="async" class="alignnone size-large wp-image-3733" src="https://brandon-engineer.com/wp-content/uploads/2024/11/graficas-tasmota-1024x470.gif" alt="" width="751" height="345" srcset="https://brandon-engineer.com/wp-content/uploads/2024/11/graficas-tasmota-1024x470.gif 1024w, https://brandon-engineer.com/wp-content/uploads/2024/11/graficas-tasmota-300x138.gif 300w, https://brandon-engineer.com/wp-content/uploads/2024/11/graficas-tasmota-768x353.gif 768w, https://brandon-engineer.com/wp-content/uploads/2024/11/graficas-tasmota-18x8.gif 18w, https://brandon-engineer.com/wp-content/uploads/2024/11/graficas-tasmota-600x276.gif 600w" sizes="(max-width: 751px) 100vw, 751px" /></p>
<h3>Como instalar FUXA</h3>
<p>Para la instalación de Fuxa como SCADA de código abierto al tener ya instalado docker es tan sencillo como hacer una pull del repositorio de github y hacer que se autoarranque al iniciar el servidor</p>						</div>
				</div>
				<div class="elementor-element elementor-element-4160b0e elementor-widget elementor-widget-code-highlight" data-id="4160b0e" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>docker run -d \
  --name fuxa \
  -p 1881:1881 \
  -v fuxa_appdata:/usr/src/app/FUXA/server/_appdata \
  -v fuxa_db:/usr/src/app/FUXA/server/_db \
  -v fuxa_logs:/usr/src/app/FUXA/server/_logs \
  -v fuxa_shapes:/usr/src/app/FUXA/client/assets/lib/svgeditor/shapes \
  -v fuxa_images:/usr/src/app/FUXA/server/_images \
  --restart unless-stopped \
  frangoteam/fuxa:latest
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-a7974db e-flex e-con-boxed e-con e-parent" data-id="a7974db" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-0020442 elementor-widget elementor-widget-text-editor" data-id="0020442" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Ya tenemos listo ahora es tan facil como crear un proyecto usar el objeto &#8220;iFrame&#8221; de Fuxa y ya podemos empezar a visualizar los datos</p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-5ea2259 e-flex e-con-boxed e-con e-parent" data-id="5ea2259" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-7cb7810 elementor-widget elementor-widget-video" data-id="7cb7810" data-element_type="widget" data-settings="{&quot;video_type&quot;:&quot;hosted&quot;,&quot;controls&quot;:&quot;yes&quot;}" data-widget_type="video.default">
				<div class="elementor-widget-container">
			<style>/*! elementor - v3.19.0 - 28-02-2024 */
.elementor-widget-video .elementor-widget-container{overflow:hidden;transform:translateZ(0)}.elementor-widget-video .elementor-wrapper{aspect-ratio:var(--video-aspect-ratio)}.elementor-widget-video .elementor-wrapper iframe,.elementor-widget-video .elementor-wrapper video{height:100%;width:100%;display:flex;border:none;background-color:#000}@supports not (aspect-ratio:1/1){.elementor-widget-video .elementor-wrapper{position:relative;overflow:hidden;height:0;padding-bottom:calc(100% / var(--video-aspect-ratio))}.elementor-widget-video .elementor-wrapper iframe,.elementor-widget-video .elementor-wrapper video{position:absolute;top:0;right:0;bottom:0;left:0}}.elementor-widget-video .elementor-open-inline .elementor-custom-embed-image-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background-size:cover;background-position:50%}.elementor-widget-video .elementor-custom-embed-image-overlay{cursor:pointer;text-align:center}.elementor-widget-video .elementor-custom-embed-image-overlay:hover .elementor-custom-embed-play i{opacity:1}.elementor-widget-video .elementor-custom-embed-image-overlay img{display:block;width:100%;aspect-ratio:var(--video-aspect-ratio);-o-object-fit:cover;object-fit:cover;-o-object-position:center center;object-position:center center}@supports not (aspect-ratio:1/1){.elementor-widget-video .elementor-custom-embed-image-overlay{position:relative;overflow:hidden;height:0;padding-bottom:calc(100% / var(--video-aspect-ratio))}.elementor-widget-video .elementor-custom-embed-image-overlay img{position:absolute;top:0;right:0;bottom:0;left:0}}.elementor-widget-video .e-hosted-video .elementor-video{-o-object-fit:cover;object-fit:cover}.e-con-inner>.elementor-widget-video,.e-con>.elementor-widget-video{width:var(--container-widget-width);--flex-grow:var(--container-widget-flex-grow)}</style>		<div class="e-hosted-video elementor-wrapper elementor-open-inline">
					<video class="elementor-video" src="https://brandon-engineer.com/wp-content/uploads/2024/11/fuxa-tasmota.mkv" controls="" preload="metadata"></video>
				</div>
				</div>
				</div>
					</div>
				</div>
				</div><p>La entrada <a href="https://brandon-engineer.com/en/como-guardar-y-visualizar-datos-en-base-de-datos-gratis/">Como guardar y visualizar datos en base de datos GRATIS</a> se publicó primero en <a href="https://brandon-engineer.com/en">Brandon Engineer</a>.</p>
]]></content:encoded>
					
					<wfw:commentrss>https://brandon-engineer.com/en/como-guardar-y-visualizar-datos-en-base-de-datos-gratis/feed/</wfw:commentrss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://brandon-engineer.com/wp-content/uploads/2024/11/fuxa-tasmota.mkv" length="2417836" type="video/x-matroska" />

			</item>
		<item>
		<title>Instalar Fuxa en Raspberry pi</title>
		<link>https://brandon-engineer.com/en/instalar-fuxa-en-raspberry-pi/</link>
					<comments>https://brandon-engineer.com/en/instalar-fuxa-en-raspberry-pi/#respond</comments>
		
		<dc:creator><![CDATA[Brandon]]></dc:creator>
		<pubdate>Sun, 20 Oct 2024 16:39:43 +0000</pubdate>
				<category><![CDATA[Dashboard]]></category>
		<category><![CDATA[Fuxa]]></category>
		<category><![CDATA[HMI]]></category>
		<category><![CDATA[SCADA]]></category>
		<guid ispermalink="false">https://brandon-engineer.com/?p=3690</guid>

					<description><![CDATA[<p>En este post voy a publicar una guia paso a paso de como instalar Fuxa y configurarlo para su optimo rendimiento. Introducción FUXA es un proyecto de openSource liderado por Fangoteam el cual tiene un repositorio en github con el que consigue un SCADA con software OpenSource con la opción de hacer un pago para...</p>
<p>La entrada <a href="https://brandon-engineer.com/en/instalar-fuxa-en-raspberry-pi/">Instalar Fuxa en Raspberry pi</a> se publicó primero en <a href="https://brandon-engineer.com/en">Brandon Engineer</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div data-elementor-type="wp-post" data-elementor-id="3690" class="elementor elementor-3690" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-e644a50 e-flex e-con-boxed e-con e-parent" data-id="e644a50" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-e33aa8b elementor-widget elementor-widget-code-highlight" data-id="e33aa8b" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>sudo apt-get update
sudo apt-get upgrade</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-5765033 e-flex e-con-boxed e-con e-parent" data-id="5765033" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-b12fa69 elementor-widget elementor-widget-text-editor" data-id="b12fa69" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h3>Instalar docker en raspberry pi</h3>
<p>Para la instalación de docker deberemos seguir los siguientes pasos</p>						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-f3cf97b e-flex e-con-boxed e-con e-parent" data-id="f3cf97b" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-615a20e e-flex e-con-boxed e-con e-child" data-id="615a20e" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-c649b4e elementor-widget elementor-widget-code-highlight" data-id="c649b4e" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/raspbian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/raspbian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-2e9230c e-flex e-con-boxed e-con e-parent" data-id="2e9230c" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-b44b28b elementor-widget elementor-widget-text-editor" data-id="b44b28b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<h2>Instalar y configurar Fuxa en Raspberry pi</h2>
<p>Para la instalación de Fuxa he seguido el manual que tienen en la <a href="https://github.com/frangoteam/FUXA/wiki/Installing-and-Running">wiki</a></p>						</div>
				</div>
				<div class="elementor-element elementor-element-103c584 elementor-widget elementor-widget-code-highlight" data-id="103c584" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>sudo docker pull frangoteam/fuxa:latest</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-3466514 e-flex e-con-boxed e-con e-parent" data-id="3466514" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-0ef3c0b elementor-widget elementor-widget-text-editor" data-id="0ef3c0b" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Si leemos la wiki veremos que nos recomiendan para que al volver a arrancar se mantengan los datos guardados usar este comando:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-bf2b2e7 elementor-widget elementor-widget-code-highlight" data-id="bf2b2e7" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>sudo docker run -d -p 1881:1881 -v fuxa_appdata:/usr/src/app/FUXA/server/_appdata -v fuxa_db:/usr/src/app/FUXA/server/_db -v fuxa_logs:/usr/src/app/FUXA/server/_logs -v fuxa_shapes:/usr/src/app/FUXA/client/assets/lib/svgeditor/shapes -v fuxa_images:/usr/src/app/FUXA/server/_images frangoteam/fuxa:latest
</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-eab14ec e-flex e-con-boxed e-con e-parent" data-id="eab14ec" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-6cfa3a1 elementor-widget elementor-widget-text-editor" data-id="6cfa3a1" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Pero como yo quiero que el SCADA se ejecute automáticamente al arrancar el sistema operativo he decidido añadirlo como servicio que se auto ejecute al inicio. Para ello deberemos teclear</p>						</div>
				</div>
				<div class="elementor-element elementor-element-517941a elementor-widget elementor-widget-code-highlight" data-id="517941a" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>sudo nano /etc/rc.local</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-4d13443 e-flex e-con-boxed e-con e-parent" data-id="4d13443" data-element_type="container" data-settings="{&quot;content_width&quot;:&quot;boxed&quot;}" data-core-v316-plus="true">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-270511d elementor-widget elementor-widget-text-editor" data-id="270511d" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
							<p>Y agregaremos el comando el fichero por ejemplo a mi se me queda el archivo así:</p>						</div>
				</div>
				<div class="elementor-element elementor-element-bd2e25a elementor-widget elementor-widget-code-highlight" data-id="bd2e25a" data-element_type="widget" data-widget_type="code-highlight.default">
				<div class="elementor-widget-container">
					<div class="prismjs-default copy-to-clipboard">
			<pre data-line="" class="highlight-height language-bash line-numbers">
				<code readonly="true" class="language-bash">
					<xmp>#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Your command here
sudo docker run -d -p 1881:1881 -v fuxa_appdata:/usr/src/app/FUXA/server/_appdata -v fuxa_db:/usr/src/app/FUXA/server/_db -v fuxa_logs:/usr/src/app/FUXA/server/_logs -v fuxa_shapes:/usr/src/app/FUXA/client/assets/lib/svgeditor/shapes -v fuxa_images:/usr/src/app/FUXA/server/_images frangoteam/fuxa:latest


exit 0</xmp>
				</code>
			</pre>
		</div>
				</div>
				</div>
					</div>
				</div>
				</div><p>La entrada <a href="https://brandon-engineer.com/en/instalar-fuxa-en-raspberry-pi/">Instalar Fuxa en Raspberry pi</a> se publicó primero en <a href="https://brandon-engineer.com/en">Brandon Engineer</a>.</p>
]]></content:encoded>
					
					<wfw:commentrss>https://brandon-engineer.com/en/instalar-fuxa-en-raspberry-pi/feed/</wfw:commentrss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>