SonOff Tasmota in emoncms tramite Node-RED

Rispondi
semper79
Messaggi: 12
Iscritto il: gio nov 10, 2022 12:33 pm

SonOff Tasmota in emoncms tramite Node-RED

Messaggio da semper79 »

Eccomi (finalmente!),
dopo aver promesso, ormai da tempo, di buttare giù 2 righe su come leggere le informazioni che vanno dal contatore al nostro inverter.
Come molti di voi già sanno (almeno spero!) io ho utilizzato un SonOff della Itead, inizialmente era un vecchio SonOff (rimarchiato) poi ho deciso di passare ad Itead e confermo che la qualità è nettamente superiore.
Dalla prima indicazione che avevo dato sul canale TG (SonOff POW da 16A senza display) sono poi passato ad installare la versione con display da 20A.

Dopo questa breve premessa passiamo alla configurazione di tutto il sistema, la distribuzione che ho utilizzato è quella presente qui nel forum creata da Ilario (che ringrazio) viewtopic.php?t=4 comprende già tutti in software (emoncms, MQTT, Node-RED) che ho utilizzato per portare i dati dal nostro SonOff su emoncms e da lì fare tutto ciò che si vuole.

Occorrente Hardware:
SonOff Itead 20A con Display.

Occorrente Software:
Distro Rpi che riporta già tutti i software necessari viewtopic.php?t=4
Firmware per SonOff Tasmota (la guida si trova un pò dappertutto e non starò a dare indicazioni come fare questo procedimento)

Iniziamo con la configurazione del SonOff, lo potrete raggiungere all'indirizzo IP che avete impostato manualmente o tramite il Dhcp del vostro router lo dovreste "scovare" tra gli apparati connessi alla vostra rete.

Pagina iniziale:
TasmotaHome.jpg
TasmotaHome.jpg (50.28 KiB) Visto 766 volte
Pagina di configurazione:
TasmotaConfiguration.jpg
TasmotaConfiguration.jpg (68.71 KiB) Visto 766 volte
Pagina di configurazione del broker MQTT (di dafault queste sono le credenziali user: emonpi e password: emonpimqtt2016):
TasmotaMQTT.jpg
TasmotaMQTT.jpg (43.91 KiB) Visto 766 volte
Date quindi un nome che utilizzerete poi in Node-RED per poterlo intercettare tra tutti i broadcast che riceverete sul broker MQTT:
TasmotaOther.jpg
TasmotaOther.jpg (45.25 KiB) Visto 766 volte
Una volta fatta questa configurazione potrete verificare se il dato arriva correttamente al broker, per far questo consiglio MQTT-Explorer mettendo indirizzo e credenziali dovreste vedere una serie di dati, filtrando sulla parte alta del programma potrete trova il vostro sonoff in base al nome assegnato precedentemente:
MQTTExplorer.jpg
MQTTExplorer.jpg (53.14 KiB) Visto 766 volte
A questo punto, appurato che tutto è trasmesso nel modo corretto si può procedere ad intercettare il dato tramite Node-RED per inviarlo a emoncms.

Aprite il vostro browser e digitate l'indirizzo del vostro raspi con la distro FV-AppTotal seguito dalla porta 1880 (nel mio caso http://192.168.0.117:1880), aggiungete le librerie inerenti a tasmota node-red-contrib-tasmota nella sezione che trovate in alto a dx cliccate sull'hamburger (icona con 3 liee) e poi selezionare "manage palette" (aiuta a creare il flow, ma potrete tranquillamente usare anche le libreie MQTT in ricezione per leggere i dati del vostro SonOff con firmware Tasmota).
NodeREDPalette.jpg
NodeREDPalette.jpg (13.55 KiB) Visto 766 volte
NodeREDPaletteInstall.jpg
NodeREDPaletteInstall.jpg (19.48 KiB) Visto 766 volte
A questo punto potrete importare il flusso che posto qui sotto cliccando sempre su hamburger e selezionate "import node", incollate nel box il flusso, selezionate new flow e date import avrete importato a questo punto un nuovo flusso con le impostazioni che qui sotto vi posto (lo trovate nel post successivo).

Importazione di un flusso, copiate ed incollate il flusso presente nel terzo post FlowTasmotaEnel.txt e selezionate “new flow” date poi un click su import dovrebbe importarvi il flusso come mostrato nell’immagine sotto:
NodeREDImport.jpg
NodeREDImport.jpg (15.01 KiB) Visto 766 volte
NodeREDImportFlow.jpg
NodeREDImportFlow.jpg (13.92 KiB) Visto 766 volte
Questo il risultato una volta importato il Flusso:
NodeREDFlow.jpg
NodeREDFlow.jpg (83.59 KiB) Visto 766 volte
Ora saranno riportati i passaggi da seguire per sistemare tutto l’occorrente rispetto alla vostra installazione, ricordate che una volta finita la configurazione dovrete “compilare” il flusso dando un click sul tasto in alto a dx Deploy.

Impostazione di aggiornamento con injectin modo che richieda un invio continuo (ogni 10 secondi nel mio caso) oltre che del dato anche del timestamp nel messaggio:
InjectionRepeat.jpg
InjectionRepeat.jpg (27.64 KiB) Visto 766 volte
Tasmota ENEL e sua configurazione per leggere il broker nel modo corretto:
SensorTasmota.jpg
SensorTasmota.jpg (22.64 KiB) Visto 766 volte
Configurazione del nodo "switch" e passare il dato corretto allo step successivo (payload.ENERGY.Power, payload.ENERGY.Voltage, payload.ENERGY.Current):
Switch.jpg
Switch.jpg (19.54 KiB) Visto 766 volte
Qui un esempio di configurazione del nodo emoncms con la destinazione che desideriamo (es. EnelPowerBOXDate, sarà il nome che troverete in emoncms nella sezione input):
SendToEmoncms.jpg
SendToEmoncms.jpg (19.17 KiB) Visto 766 volte
Continuo in un secondo post perchè non posso aggiungere altre immagini... ;)
Ultima modifica di semper79 il lun mag 01, 2023 1:36 pm, modificato 6 volte in totale.
semper79
Messaggi: 12
Iscritto il: gio nov 10, 2022 12:33 pm

Re: SonOff Tasmota in emoncms tramite Node-RED

Messaggio da semper79 »

Ora non resta che andare sul emoncms e visualizzare se nella parte di input i dati iniziano ad arrivare nel modo corretto, di seguito un esempio (SonOff spento) con tutti i dati in entrata ad emoncms a "0":
EmoncmsValue0.jpg
EmoncmsValue0.jpg (32.23 KiB) Visto 758 volte
Ed ora un esempio (SonOff acceso) con dati valorizzati (i valori sono bassi in quanto il nostro inverter era in produzione, quindi dal nostro gestore pesca una potenza molto bassa):
EmoncmsValueX.jpg
EmoncmsValueX.jpg (34.18 KiB) Visto 758 volte
A questo punto potrete decidere come tracciare questi dati in emoncms.
Spero che questo tutorial possa esservi di aiuto.

Buon sole a tutti
Semper79
Ultima modifica di semper79 il lun mag 01, 2023 1:24 pm, modificato 1 volta in totale.
semper79
Messaggi: 12
Iscritto il: gio nov 10, 2022 12:33 pm

Re: SonOff Tasmota in emoncms tramite Node-RED

Messaggio da semper79 »

Ecco il Flow da importare:

[
{
"id": "7a631af1af58de8b",
"type": "tab",
"label": "FlowEnelConsumption.New",
"disabled": false,
"info": "",
"env": []
},
{
"id": "49dd54cdfa18ada2",
"type": "change",
"z": "7a631af1af58de8b",
"name": "Power",
"rules": [
{
"t": "move",
"p": "payload.ENERGY.Power",
"pt": "msg",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 430,
"y": 160,
"wires": [
[
"7c302b59a5a1b14c",
"294df363db8eef5d"
]
]
},
{
"id": "5bfcf26109c06fe0",
"type": "inject",
"z": "7a631af1af58de8b",
"name": "Repeat",
"props": [
{
"p": "payload"
},
{
"p": "topic",
"vt": "str"
}
],
"repeat": "10",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"payload": "",
"payloadType": "date",
"x": 120,
"y": 160,
"wires": [
[
"b41737b40044d254"
]
]
},
{
"id": "7c302b59a5a1b14c",
"type": "debug",
"z": "7a631af1af58de8b",
"name": "Power",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 630,
"y": 160,
"wires": []
},
{
"id": "b41737b40044d254",
"type": "Tasmota Sensor",
"z": "7a631af1af58de8b",
"broker": "526d281e65fe62b4",
"device": "SonoffEnelBOX",
"name": "ENEL",
"outputs": 1,
"uidisabler": false,
"fullTopic": "",
"cmndPrefix": "",
"statPrefix": "",
"telePrefix": "",
"qos": 1,
"retain": false,
"rules": [],
"outputTopic": "",
"x": 250,
"y": 160,
"wires": [
[
"49dd54cdfa18ada2",
"6f68b2f38dc986e8",
"5c2fcb58ec906aa0"
]
]
},
{
"id": "294df363db8eef5d",
"type": "emoncms",
"z": "7a631af1af58de8b",
"name": "Power",
"emonServer": "b30c68ae524d7d3c",
"nodegroup": "EnelPowerBOXDate",
"datatype": "json",
"x": 630,
"y": 100,
"wires": []
},
{
"id": "6f68b2f38dc986e8",
"type": "change",
"z": "7a631af1af58de8b",
"name": "Voltage",
"rules": [
{
"t": "move",
"p": "payload.ENERGY.Voltage",
"pt": "msg",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 440,
"y": 280,
"wires": [
[
"8b3d5b5486402f69",
"624f7d2d0ce63bae"
]
]
},
{
"id": "5c2fcb58ec906aa0",
"type": "change",
"z": "7a631af1af58de8b",
"name": "Current",
"rules": [
{
"t": "move",
"p": "payload.ENERGY.Current",
"pt": "msg",
"to": "payload",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 440,
"y": 400,
"wires": [
[
"7266b21363c65d81",
"b4de3e750375c7dc"
]
]
},
{
"id": "8b3d5b5486402f69",
"type": "emoncms",
"z": "7a631af1af58de8b",
"name": "Voltage",
"emonServer": "b30c68ae524d7d3c",
"nodegroup": "EnelVoltageBOXDate",
"datatype": "json",
"x": 640,
"y": 220,
"wires": []
},
{
"id": "7266b21363c65d81",
"type": "emoncms",
"z": "7a631af1af58de8b",
"name": "Current",
"emonServer": "b30c68ae524d7d3c",
"nodegroup": "EnelCurrentBOXDate",
"datatype": "json",
"x": 640,
"y": 360,
"wires": []
},
{
"id": "624f7d2d0ce63bae",
"type": "debug",
"z": "7a631af1af58de8b",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 650,
"y": 280,
"wires": []
},
{
"id": "b4de3e750375c7dc",
"type": "debug",
"z": "7a631af1af58de8b",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 650,
"y": 420,
"wires": []
},
{
"id": "526d281e65fe62b4",
"type": "tasmota-mqtt-broker",
"name": "MQTT.Emon",
"broker": "192.168.0.117",
"port": "1883",
"clientid": "",
"usetls": false,
"keepalive": "60",
"cleansession": true
},
{
"id": "b30c68ae524d7d3c",
"type": "emoncms-server",
"server": "http://localhost",
"name": "emoncms"
}
]
Ultima modifica di semper79 il lun mag 01, 2023 1:21 pm, modificato 1 volta in totale.
Jackson
Messaggi: 2
Iscritto il: sab ott 29, 2022 5:01 pm

Re: SonOff Tasmota in emoncms tramite Node-RED

Messaggio da Jackson »

Codice: Seleziona tutto

[
  {
    "id": "7a631af1af58de8b",
    "type": "tab",
    "label": "FlowEnelConsumption.New",
    "disabled": false,
    "info": "",
    "env": []
  },
  {
    "id": "49dd54cdfa18ada2",
    "type": "change",
    "z": "7a631af1af58de8b",
    "name": "Power",
    "rules": [
      {
        "t": "move",
        "p": "payload.ENERGY.Power",
        "pt": "msg",
        "to": "payload",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 430,
    "y": 160,
    "wires": [["7c302b59a5a1b14c", "294df363db8eef5d"]]
  },
  {
    "id": "5bfcf26109c06fe0",
    "type": "inject",
    "z": "7a631af1af58de8b",
    "name": "Repeat",
    "props": [
      {
        "p": "payload"
      },
      {
        "p": "topic",
        "vt": "str"
      }
    ],
    "repeat": "10",
    "crontab": "",
    "once": false,
    "onceDelay": 0.1,
    "topic": "",
    "payload": "",
    "payloadType": "date",
    "x": 120,
    "y": 160,
    "wires": [["b41737b40044d254"]]
  },
  {
    "id": "7c302b59a5a1b14c",
    "type": "debug",
    "z": "7a631af1af58de8b",
    "name": "Power",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 630,
    "y": 160,
    "wires": []
  },
  {
    "id": "b41737b40044d254",
    "type": "Tasmota Sensor",
    "z": "7a631af1af58de8b",
    "broker": "526d281e65fe62b4",
    "device": "SonoffEnelBOX",
    "name": "ENEL",
    "outputs": 1,
    "uidisabler": false,
    "fullTopic": "",
    "cmndPrefix": "",
    "statPrefix": "",
    "telePrefix": "",
    "qos": 1,
    "retain": false,
    "rules": [],
    "outputTopic": "",
    "x": 250,
    "y": 160,
    "wires": [["49dd54cdfa18ada2", "6f68b2f38dc986e8", "5c2fcb58ec906aa0"]]
  },
  {
    "id": "294df363db8eef5d",
    "type": "emoncms",
    "z": "7a631af1af58de8b",
    "name": "Power",
    "emonServer": "b30c68ae524d7d3c",
    "nodegroup": "EnelPowerBOXDate",
    "datatype": "json",
    "x": 630,
    "y": 100,
    "wires": []
  },
  {
    "id": "6f68b2f38dc986e8",
    "type": "change",
    "z": "7a631af1af58de8b",
    "name": "Voltage",
    "rules": [
      {
        "t": "move",
        "p": "payload.ENERGY.Voltage",
        "pt": "msg",
        "to": "payload",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 440,
    "y": 280,
    "wires": [["8b3d5b5486402f69", "624f7d2d0ce63bae"]]
  },
  {
    "id": "5c2fcb58ec906aa0",
    "type": "change",
    "z": "7a631af1af58de8b",
    "name": "Current",
    "rules": [
      {
        "t": "move",
        "p": "payload.ENERGY.Current",
        "pt": "msg",
        "to": "payload",
        "tot": "msg"
      }
    ],
    "action": "",
    "property": "",
    "from": "",
    "to": "",
    "reg": false,
    "x": 440,
    "y": 400,
    "wires": [["7266b21363c65d81", "b4de3e750375c7dc"]]
  },
  {
    "id": "8b3d5b5486402f69",
    "type": "emoncms",
    "z": "7a631af1af58de8b",
    "name": "Voltage",
    "emonServer": "b30c68ae524d7d3c",
    "nodegroup": "EnelVoltageBOXDate",
    "datatype": "json",
    "x": 640,
    "y": 220,
    "wires": []
  },
  {
    "id": "7266b21363c65d81",
    "type": "emoncms",
    "z": "7a631af1af58de8b",
    "name": "Current",
    "emonServer": "b30c68ae524d7d3c",
    "nodegroup": "EnelCurrentBOXDate",
    "datatype": "json",
    "x": 640,
    "y": 360,
    "wires": []
  },
  {
    "id": "624f7d2d0ce63bae",
    "type": "debug",
    "z": "7a631af1af58de8b",
    "name": "",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "false",
    "statusVal": "",
    "statusType": "auto",
    "x": 650,
    "y": 280,
    "wires": []
  },
  {
    "id": "b4de3e750375c7dc",
    "type": "debug",
    "z": "7a631af1af58de8b",
    "name": "",
    "active": true,
    "tosidebar": true,
    "console": false,
    "tostatus": false,
    "complete": "payload",
    "targetType": "msg",
    "statusVal": "",
    "statusType": "auto",
    "x": 650,
    "y": 420,
    "wires": []
  },
  {
    "id": "526d281e65fe62b4",
    "type": "tasmota-mqtt-broker",
    "name": "MQTT.Emon",
    "broker": "192.168.0.117",
    "port": "1883",
    "clientid": "",
    "usetls": false,
    "keepalive": "60",
    "cleansession": true
  },
  {
    "id": "b30c68ae524d7d3c",
    "type": "emoncms-server",
    "server": "http://localhost",
    "name": "emoncms"
  }
]

Ottima guida! Sarebbe oportuno inserire un Syntax Highlighting, cosi il codice diventa molto piu chiaro! Scusami se mi sono permesso di fare reply con il codice, ma cosi sembra piu chiaro!
Puoi provare a usare anche il servizio codefile.io, e postare diretamente il link!
Esempio deltuo codice Flow: https://codefile.io/f/mOWMRukZln
Ultima modifica di Jackson il mar mag 02, 2023 9:04 am, modificato 1 volta in totale.
Rispondi