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:
Pagina di configurazione:
Pagina di configurazione del broker MQTT (di dafault queste sono le credenziali user: emonpi e password: emonpimqtt2016):
Date quindi un nome che utilizzerete poi in Node-RED per poterlo intercettare tra tutti i broadcast che riceverete sul broker MQTT:
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:
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).
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:
Questo il risultato una volta importato il Flusso:
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:
Tasmota ENEL e sua configurazione per leggere il broker nel modo corretto:
Configurazione del nodo "switch" e passare il dato corretto allo step successivo (payload.ENERGY.Power, payload.ENERGY.Voltage, payload.ENERGY.Current):
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):
Continuo in un secondo post perchè non posso aggiungere altre immagini...
SonOff Tasmota in emoncms tramite Node-RED
SonOff Tasmota in emoncms tramite Node-RED
Ultima modifica di semper79 il lun mag 01, 2023 1:36 pm, modificato 6 volte in totale.
Re: SonOff Tasmota in emoncms tramite Node-RED
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":
Spero che questo tutorial possa esservi di aiuto.
Buon sole a tutti
Semper79
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):
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.
Re: SonOff Tasmota in emoncms tramite Node-RED
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"
}
]
[
{
"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.
Re: SonOff Tasmota in emoncms tramite Node-RED
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"
}
]
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.