NodeRed programování

Home Assistant, Arduino, SDS, Raspberry, Linux, vzdálený dohled, automatizace, měření, opensource, closedsource, hotová řešení, DIY, stavebnice, komponenty, software, postupy, návody, schémata, rady, zkušenosti ...
Leo
Příspěvky: 76
Registrován: stř dub 17, 2013 1:21 pm
Reputace: 0

Re: NodeRed programování

Nový příspěvek od Leo »

Dotaz. Když mam nějaké data, které chci, aby se zachovaly, když restartuji raspberry.
Jak se to řeší? Dík.
rva
Příspěvky: 4058
Registrován: úte dub 23, 2013 10:21 am
Reputace: 663
Lokalita: Kousek od Lysé nad Labem
Systémové napětí: 48V
Výkon panelů [Wp]: 46000
Kapacita baterie [kWh]: 40
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: Kousek od Lysé nad Labem

Re: NodeRed programování

Nový příspěvek od rva »

Třeba vytvořením nové entity template? https://www.home-assistant.io/integrations/template/
_______________________________________________________________________
43 kWp, LiFePO4 62 kWh,
EPSolar 60 A/150 V ET6415N + 3x Isolar SM II (5 kW, 450 V, 80 A) + Axpert PIP 5048MS
alextccz
Příspěvky: 92
Registrován: úte led 16, 2018 2:28 pm
Reputace: 8
Lokalita: okr. Tachov
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: okr.Tachov

Re: NodeRed programování

Nový příspěvek od alextccz »

Lze ukládat přes context do paměti, po zapnutí do souboru na SDkartu
https://nodered.org/docs/user-guide/context

nebo přímo do souboru
dako
Příspěvky: 47
Registrován: pát bře 18, 2011 1:01 pm
Reputace: 2
Lokalita: Ostrava!!!
Systémové napětí: 48V
Bydliště: Ostrava!!!

Re: NodeRed programování

Nový příspěvek od dako »

Jestli mohu poradit, jako uživatel Nodered, tak než používat hodnoty (msg.payload) označkované topicem (msg.topic),
je lepší používat global hodnoty, tj. proměnné global.proměna. např. v nodu function ji lze definovat jako global.set("variable",x) kde variable je název proměnné a x je hodnota.

Global hodnotu pak lze přečíst napříč všech flow pomocí global.get("variable"),

je to rozhodně pohodlnější, jak předat libovolnému function flow více výpočtových nebo podmínkových hodnot než předávat nodu "stream" s hodnotou msg.payload a k tomu msg.topic

např.

předání hodnoty do function node na vstupu (z msg.payload) a přiřazení do globalní hodnoty SwPosSet

Kód: Vybrat vše

 global.set("SwPosSet",msg.payload);
v jiném nodu function, kde chci s touto hodnotou pracovat pak jen na začátku kódu předám

Kód: Vybrat vše

 switchPosSet = global.get('SwPosSet');
 .
 .
 .
 if (swichPosSet == 3)
 {
 ..........
 }
 
příp. můžu s hodnotou rovnou pracovat

Kód: Vybrat vše

 .
 if (global.get('SwPosSet') == 3)
 {
 ..........
 }
 
dako
Příspěvky: 47
Registrován: pát bře 18, 2011 1:01 pm
Reputace: 2
Lokalita: Ostrava!!!
Systémové napětí: 48V
Bydliště: Ostrava!!!

Re: NodeRed programování

Nový příspěvek od dako »

A ještě další tip,
pro lepší debug-ování jednotlivých function nodu je dobré přidat node.status než je vrácena hodnota msg.payload

příklad:

Kód: Vybrat vše

if (global.get('SwPosSet') == 3)
 {
 msg.payload =  global.get('ChargeCurrentSet') + 1;
 node.status({fill:"blue", shape:"dot", text: msg.payload});
 return msg;
 }
 
tak nějak to pak vypadá ve flow:
function-status.png
function-status.png (5.77 KiB) Zobrazeno 209 x
Leo
Příspěvky: 76
Registrován: stř dub 17, 2013 1:21 pm
Reputace: 0

Re: NodeRed programování

Nový příspěvek od Leo »

alextccz - Děkuji, ten context je to co potřebují, ale nedaří se.
Očučel jsem na YouTube všechny videa a stejně někde dělám chybu.
/home/leo/.node-red/settings.js
Bylo tam za komentované.

contextStorage: {
default: {
module:"localfilesystem"
},
},
A reboot.

Když otevřu uzel Change, tak tam nemam toto.
Přílohy
neni.png
alextccz
Příspěvky: 92
Registrován: úte led 16, 2018 2:28 pm
Reputace: 8
Lokalita: okr. Tachov
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: okr.Tachov

Re: NodeRed programování

Nový příspěvek od alextccz »

Tohle na výběr taky nemám. Předpokládám že je tam volba zda uložit do paměti nebo do souboru. Pravděpodobně by to mohlo souviset s těmito nastaveními https://nodered.org/docs/api/context/ ale funguje to i bez toho. V mém případě se automaticky založí se adresář Context v umístění /data/home/nodered/.node-red/context

Kód: Vybrat vše

[
    {
        "id": "fba6b9c6470fed69",
        "type": "inject",
        "z": "a5c2686a419678c5",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "pokus",
        "payload": "",
        "payloadType": "date",
        "x": 120,
        "y": 5120,
        "wires": [
            [
                "673e81397e1d60c6"
            ]
        ]
    },
    {
        "id": "2ace8c5447420afe",
        "type": "debug",
        "z": "a5c2686a419678c5",
        "name": "debug 18",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 500,
        "y": 5120,
        "wires": []
    },
    {
        "id": "001231f9c0b9db2f",
        "type": "inject",
        "z": "a5c2686a419678c5",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "pokus",
        "payloadType": "flow",
        "x": 100,
        "y": 5180,
        "wires": [
            [
                "6c4bf27e016c42ab"
            ]
        ]
    },
    {
        "id": "673e81397e1d60c6",
        "type": "change",
        "z": "a5c2686a419678c5",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "pokus",
                "pt": "flow",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 300,
        "y": 5120,
        "wires": [
            [
                "2ace8c5447420afe"
            ]
        ]
    },
    {
        "id": "6c4bf27e016c42ab",
        "type": "debug",
        "z": "a5c2686a419678c5",
        "name": "debug 19",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 360,
        "y": 5180,
        "wires": []
    }
]
dako
Příspěvky: 47
Registrován: pát bře 18, 2011 1:01 pm
Reputace: 2
Lokalita: Ostrava!!!
Systémové napětí: 48V
Bydliště: Ostrava!!!

Re: NodeRed programování

Nový příspěvek od dako »

A co tak použít node "write file"?
Snímek obrazovky z 2025-01-13 22-02-09.png
Snímek obrazovky z 2025-01-13 22-02-09.png (2.72 KiB) Zobrazeno 116 x
Leo
Příspěvky: 76
Registrován: stř dub 17, 2013 1:21 pm
Reputace: 0

Re: NodeRed programování

Nový příspěvek od Leo »

Zdravím. Dotaz. Když použiju uzel write file a nastavím si připojit k souboru, ukládají se mi data do řádku.
Není nějaký uzel read file, co by uměl přečíst jen jeden řádek?
Třeba když je v souboru 100 řadku a já potřebují jen 20 řadek.
alextccz
Příspěvky: 92
Registrován: úte led 16, 2018 2:28 pm
Reputace: 8
Lokalita: okr. Tachov
Chci prodávat energii: NE
Chci/Mám dotaci: NE
Bydliště: okr.Tachov

Re: NodeRed programování

Nový příspěvek od alextccz »

Něco takového? Používám ukládání do souboru nebo contextu jen pro jednoduché hodnoty jako stavy přepínačů nebo stavů spotřeby. Aby to přežilo případný restart.

Kód: Vybrat vše

[
    {
        "id": "e565d8319ad8d229",
        "type": "inject",
        "z": "a5c2686a419678c5",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Teplota 1",
        "payload": "10",
        "payloadType": "num",
        "x": 130,
        "y": 5100,
        "wires": [
            [
                "d79d3382892f3fba"
            ]
        ]
    },
    {
        "id": "28bf010c2a887ec8",
        "type": "inject",
        "z": "a5c2686a419678c5",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Teplota 2",
        "payload": "20",
        "payloadType": "num",
        "x": 130,
        "y": 5140,
        "wires": [
            [
                "d79d3382892f3fba"
            ]
        ]
    },
    {
        "id": "edd0a10caf3d16e1",
        "type": "inject",
        "z": "a5c2686a419678c5",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Teplota 3",
        "payload": "60",
        "payloadType": "num",
        "x": 130,
        "y": 5180,
        "wires": [
            [
                "d79d3382892f3fba"
            ]
        ]
    },
    {
        "id": "7dc98b2669a322e3",
        "type": "debug",
        "z": "a5c2686a419678c5",
        "name": "debug 18",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 520,
        "y": 5120,
        "wires": []
    },
    {
        "id": "d79d3382892f3fba",
        "type": "join",
        "z": "a5c2686a419678c5",
        "name": "",
        "mode": "custom",
        "build": "object",
        "property": "payload",
        "propertyType": "msg",
        "key": "topic",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": true,
        "timeout": "",
        "count": "3",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 330,
        "y": 5140,
        "wires": [
            [
                "7dc98b2669a322e3",
                "326757e570a8fded"
            ]
        ]
    },
    {
        "id": "326757e570a8fded",
        "type": "file",
        "z": "a5c2686a419678c5",
        "name": "",
        "filename": "/data/home/nodered/Switch/pokus.json",
        "filenameType": "str",
        "appendNewline": true,
        "createDir": true,
        "overwriteFile": "true",
        "encoding": "none",
        "x": 610,
        "y": 5160,
        "wires": [
            []
        ]
    },
    {
        "id": "f6314f71fbc81bca",
        "type": "file in",
        "z": "a5c2686a419678c5",
        "name": "",
        "filename": "/data/home/nodered/Switch/pokus.json",
        "filenameType": "str",
        "format": "utf8",
        "chunk": false,
        "sendError": false,
        "encoding": "none",
        "allProps": false,
        "x": 370,
        "y": 5240,
        "wires": [
            [
                "1c7e673fb7bb624e"
            ]
        ]
    },
    {
        "id": "e89bd45ba310d17f",
        "type": "debug",
        "z": "a5c2686a419678c5",
        "name": "debug 19",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1040,
        "y": 5240,
        "wires": []
    },
    {
        "id": "788240d37b286439",
        "type": "inject",
        "z": "a5c2686a419678c5",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 120,
        "y": 5240,
        "wires": [
            [
                "f6314f71fbc81bca"
            ]
        ]
    },
    {
        "id": "1c7e673fb7bb624e",
        "type": "json",
        "z": "a5c2686a419678c5",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 610,
        "y": 5240,
        "wires": [
            [
                "bcfc3df17f00e8e7",
                "7c71ae9ede7dc301",
                "91bbd618a18f7021"
            ]
        ]
    },
    {
        "id": "bcfc3df17f00e8e7",
        "type": "change",
        "z": "a5c2686a419678c5",
        "name": "",
        "rules": [
            {
                "t": "move",
                "p": "payload[\"Teplota 1\"]",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 830,
        "y": 5240,
        "wires": [
            [
                "e89bd45ba310d17f"
            ]
        ]
    },
    {
        "id": "7c71ae9ede7dc301",
        "type": "change",
        "z": "a5c2686a419678c5",
        "name": "",
        "rules": [
            {
                "t": "move",
                "p": "payload[\"Teplota 2\"]",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 830,
        "y": 5280,
        "wires": [
            [
                "469e43bb83092529"
            ]
        ]
    },
    {
        "id": "91bbd618a18f7021",
        "type": "change",
        "z": "a5c2686a419678c5",
        "name": "",
        "rules": [
            {
                "t": "move",
                "p": "payload[\"Teplota 3\"]",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 830,
        "y": 5320,
        "wires": [
            [
                "fff4271e29bccd52"
            ]
        ]
    },
    {
        "id": "469e43bb83092529",
        "type": "debug",
        "z": "a5c2686a419678c5",
        "name": "debug 20",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1040,
        "y": 5280,
        "wires": []
    },
    {
        "id": "fff4271e29bccd52",
        "type": "debug",
        "z": "a5c2686a419678c5",
        "name": "debug 21",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 1040,
        "y": 5320,
        "wires": []
    }
]

  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek

Kdo je online

Uživatelé prohlížející si toto fórum: Claudebot [Bot] a 0 hostů