Victron, Monitoring, Waarschuwingen en Alarmen

Pagina: 1
Acties:

Acties:
  • +5 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

Victron Monitoring, Waarschuwingen en Alarmen

Inhoudsopgave
E-mail verzenden vanuit Node Red
Nodes met Alarm Entiteiten
Wachttijd bij het verwerken van Waarschuwingen en Alarmen
Grid Lost Alarm
Een Analoge Alarm Sensor (Temperatuur)
Waarom Temperatuur Monitoren?
Drie Externe Temperatuur Sensors
Laat de Alarmbellen Rinkelen
Een Alarm Luiden via Home Assistant
Een Potentiaalvrij Contact als Alarm
Victron Omvormers Softwarematig Uitschakelen
Externe Apparaten Uitschakelen
Alle Waarschuwingen en Alarmen in één Flow

Er zijn in dit forum diverse topics over het ontwerpen van een Victron installatie, over de aansturing van een Victron installatie en bijvoorbeeld over veiligheid van een ESS.

In de Victron (Remote) Console worden soms meldingen getoond die aangeven of er iets 'bijzonders' is gebeurd. Daar moet je wel zelf naar kijken, ook al toont het scherm een attentie-teken in de rechter-bovenhoek. Het is nuttig als het systeem je hier actief informeert of - indien van toepassing, hier zelf actie op onderneemt.
Afbeeldingslocatie: https://tweakers.net/i/rBlYix1PE_5bPmhcb7zF0wuvYYo=/800x/filters:strip_icc():strip_exif()/f/image/ZWcNkkQD7hTEJmb1OPntTfgE.jpg?f=fotoalbum_large

In dit topic zal ik in de komende dagen en weken enkele mogelijkheden beschrijven die ikzelf gebruik bij het monitoren van mijn Victron installatie. Ik wil dit geen cursus noemen maar eerder informatie-snippers die kunnen dienen ter inspiratie van eigen toepassingen.

Ik baseer mijn methoden op Node Red. Voor het installeren van Node Red zie Venus OS Large image: Installeer Node-RED.

Disclaimer: Voor heel veel zaken die ik hierna ga beschrijven zijn er alternatieven.
Met hetgeen ik ga beschrijven wil ik deze mogelijkheden zeker niet diskwalificeren.
Mijn toepassing(en) zijn dan slechts een andere optie of aanpak.

[ Voor 45% gewijzigd door MJ de Bruijn op 12-09-2024 14:09 ]


Acties:
  • 0 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

E-mail

Om meldingen 'actief' te ontvangen heb je een medium nodig. Ik gebruik hiervoor e-mail.

Natuurlijk bestaan er ook andere push mogelijkheden. Ik geef de voorkeur aan e-mail omdat ik dit toch regelmatig raadpleeg en mijn telefoon een signaal geeft. Bij eventueel uitval van het Victron-systeem na een storing (of erger) heb je tevens een logboek (zwarte doos) van wat er is misgegaan.

Ik heb een apart tabblad gemaakt voor de E-mail node. Het is mogelijk om de E-mail vanaf andere tabbladen te koppelen. De E-mail Node is te vinden onder palet-groep Social.
Afbeeldingslocatie: https://tweakers.net/i/mxLWVER13LVws_isfwx8G7bWWgM=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/rayO9i5BblJGzInoJT9h9WtD.jpg?f=user_large

Door te dubbel-klikken op de E-mail Node open je de instellingen.
Afbeeldingslocatie: https://tweakers.net/i/NTUdKmTysv3KoDbDVuLo7g-1F3o=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/aTdi6m9ODiyv3kbn2Yfg7ZmK.jpg?f=user_large

Voor een Tweaker zullen de diverse velden bekend zijn.

Als dit is ingevuld wil je natuurlijk weten of het ook werkt. Daarvoor voegen we een test-bericht toe.
Afbeeldingslocatie: https://tweakers.net/i/OSjOnmienmLb5P5kQRdQ0RSSyVc=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/tQh2FqelK7pvmyx7IfoNgYTc.jpg?f=user_large

Afbeeldingslocatie: https://tweakers.net/i/KfoBpXh88uEfVVd9W-TS9lucmY8=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/zUT6EsOXBMTCu9ahRCdGC7V6.jpg?f=user_large

Ik gebruik een Link Out Node en een Link In Node. Als dat hier goed werkt kun je ook vanaf andere plaatsen een Link Out Node toevoegen om een E-mail te verzenden.

Afbeeldingslocatie: https://tweakers.net/i/mkwCmXt9Y2m9BBZ6WN4MUOSm3Ps=/800x/filters:strip_icc():strip_exif()/f/image/N13QOTVxxql0h03x4ogbLfws.jpg?f=fotoalbum_large

Oke, tijd om je eerste e-mail te verzenden vanuit Node Red.

Afbeeldingslocatie: https://tweakers.net/i/D1eeZkOsHfO_VkLXGs5JPpr2pJA=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/9qyQj1p6hg2pXJNbjsQCMC9Z.jpg?f=user_large

[ Voor 10% gewijzigd door MJ de Bruijn op 28-08-2024 11:17 ]


Acties:
  • 0 Henk 'm!

  • AteZ
  • Registratie: Juni 2001
  • Laatst online: 21-09 13:57
Wat is het verschil met de functionaliteit die al in VRM zit? ik krijg daaruit al emails als er een alarm is en daar is ook logging terug te vinden.

sexy: use feather kinky:use entire chicken ...


Acties:
  • 0 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02
AteZ schreef op woensdag 28 augustus 2024 @ 11:13:
Wat is het verschil met de functionaliteit die al in VRM zit? ik krijg daaruit al emails als er een alarm is en daar is ook logging terug te vinden.
Het verschil zal (moeten) zijn dat ik in de bijdragen die ik hierna (later) ga toevoegen zal laten zien hoe je monitoring naar je eigen wens kunt instellen en hoe je het systeem daarop kunt laten reageren.
Het versturen van e-mails is een eerste stapje. Er zullen meer (en grotere) stappen komen.

Acties:
  • +1 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

Alarm Entiteiten

De Victron systemen hebben intern diverse sensors of logische instellingen die waarschuwingen of alarmen kunnen genereren. Deze gegevens (eigenschappen / entiteiten) zijn ook beschikbaar in Node Red.

Afbeeldingslocatie: https://tweakers.net/i/XWUzKlUXkiO0_yxC8nAgLH9Ywi8=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/UMRyAMDuDcowIEuYhASEAwEh.jpg?f=user_large

De Node VE.Bus System bevat de meeste entiteiten voor Alarmen.
Kies uit de volgende lijst de gewenste Alarm entiteit.

Afbeeldingslocatie: https://tweakers.net/i/4UamQbn6cRqAjL0IjvTMyufAE0U=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/AxbTfW31WOGR8DjgFhCxpapa.jpg?f=user_large

Geef bij het Node Label een zinvolle naam. Deze naam zal bij latere verwerking aangeven wat de bron van een Waarschuwing of Alarm is geweest. Een Alarm-entiteit kent over het algemeen drie mogelijke waarden.

Afbeeldingslocatie: https://tweakers.net/i/DkLLBNk34PhtwYG2xrrqi9j30A0=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/6O0LYBO0GRzKwJlW7Kro324t.jpg?f=user_large

De aldus ingerichte Node produceert normaal gesproke circa iedere 5 seconden de waarde 0 (OK), 1 (Waarschuwing) of 2 (Alarm) op de uitgang.
Hier speelt de instelling Only Changes een rol. Daar kom ik later op terug.
Het uitgaande bericht heeft de naam van de Alarm-Node als topic en de waarde (0, 1 of 2) als payload.

Meestal zijn we alleen geïnteresseerd in de waarde 1 of 2.
Met een Switch Node kan de enkelvoudige invoer worden gesplitst in drie uitgangen.

Afbeeldingslocatie: https://tweakers.net/i/rqOm2WGhuBjHJFKRQjrSyjWXkk8=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/ikoIiXoFlXXNqJsuM7P9drTK.jpg?f=user_large

Afhankelijk van de waarde van de invoer zal rechts steeds slechts één uitgang een message afleveren. Alleen voor berichten met de waarde 1 of 2 willen we een e-mail ontvangen. We verbinden daarom alleen uitgangen 2 (= Waarschuwing) en 3 (= Alarm) met de volgende node.

Afbeeldingslocatie: https://tweakers.net/i/Cg-H0KZewsGNuscymnIDik2Y0vs=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/AICbfcvwopraydl8eGaP2i8O.jpg?f=user_large

De e-mail moet natuurlijk een (redelijk) begrijpelijke tekst bevatten en niet alleen een nummer. Daarom wordt er een Change Node toegevoegd die de nummers naar een tekst omzet.

Afbeeldingslocatie: https://tweakers.net/i/_jqkT4rK1MWvUsW4whAU8Nx9QDU=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/iYNbhnACnfAlJnhXbUaJEnzb.jpg?f=user_large

De uitvoer van deze Change Node bevat nu als topic de Alarm-naam en als payload het woord Waarschuwing of Alarm. Deze uitvoer wordt via een Link Node naar de E-mail Node gestuurd die we
eerder hebben gemaakt.
Het topic zal gebruikt worden als onderwerp van de e-mail. De payload is de inhoud van de e-mail.

Als er nu een Waarschuwing of een Alarm optreedt zal deze direct per e-mail worden verzonden.

Hier is de instelling Only Changes van belang. Als je deze niet aanvinkt zal de Node iedere 5 seconden een melding produceren. Je zult dan ook om de 5 seconden een e-mail ontvangen.
Door Only Changes wel aan te vinken zal de Node alleen veranderingen melden, dus alleen als de status van 0 (OK) naar 1 (Waarschuwing) of 2 (Alarm) gaat. Ook een overgang van 1 naar 2 zal worden doorgegeven. Aldus wordt er alleen voor een verandering een e-mail gemaakt.

Om te weten of dit werkt kun je wachten tot de temperatuur een keertje extreem hoog wordt. Een beter alternatief is om zelf test-waarden te kunnen invoegen.

Maak drie Inject Nodes aan.

Afbeeldingslocatie: https://tweakers.net/i/6OkmqWJLQFuVl66yPbZq_RH8I1c=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/VgNE6dvUpT44QJwLmKJS3s3N.jpg?f=user_large

Vul deze met de volgende gegevens. Let op dat bij payload numeriek wordt geselecteerd (0 9) en bij topic tekst (A Z).

Afbeeldingslocatie: https://tweakers.net/i/_XcZ7txg2PPXAWFg1fS9rDgt288=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/m9eQfLARLVyOCR4PoSfyQF7M.jpg?f=user_large

Afbeeldingslocatie: https://tweakers.net/i/pyWbnC_PVNX5PdA2HYYFJfwQFMA=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/3idb7DxMJv6O5yGZOunmvz9v.jpg?f=user_large

Afbeeldingslocatie: https://tweakers.net/i/mAUIBfjjYH6bMOdPAKevQLuTBzs=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/dK3xjpOXpSMMkwIsQsEb7Wdb.jpg?f=user_large

Je kunt nu zelf eenvoudig proberen wat er gebeurt als je een waarde 0, 1 of 2 aanbiedt.

Happy testing...

In de volgende bijdrage zal ik een wachttijd toevoegen zodat een kort Alarm niet direct tot een e-mail leidt, maar pas als het Alarm langere tijd actief blijft.

In plaats van een Temperatuur Alarm kan aldus voor iedere Alarm entiteit zo'n Node-treintje (een flow) worden opgezet. In een latere bijdrage zal ik laten zien hoe een hele reeks Alarm entiteiten kan worden verwerkt.

Disclaimer: Voor alle voorbeelden die ik hiervoor heb beschreven zijn ook andere mogelijkheden, vaak beter. Het gaat mij niet om het beste of mooiste programma, maar om een begrijpelijke methode die beginners en geïntereseerden kan helpen eigen toepassingen te maken.

Acties:
  • +3 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

Wachttijd bij het verwerken van Waarschuwingen en Alarmen

De meeste alarm-nodes geven iedere 5 seconden hun status door.
Het kan voorkomen dat een Waarschuwing of een Alarm slechts kortstondig actief is. Bijvoorbeeld door een piekbelasting of een schakel-impuls.
In zo'n geval wil je niet dat een monitor-applicatie meteen de melding doorgeeft.
Dit moet wel als de Waarschuwing of Alarm langere tijd aanhoudt.

Let wel, dit is geen algemene regel, het betreft persoonlijke vookeuren en is afhankelijk van het type Alarm.

Om een wachttijd toe te voegen kan gebruik gemaakt worden van een Trigger Node.

Afbeeldingslocatie: https://tweakers.net/i/roEezJjVusKEi_SzJMP5PJZe7Js=/800x/filters:strip_icc():strip_exif()/f/image/YgYfSvnF3hs1qipBIwsHra3h.jpg?f=fotoalbum_large

In dit voorbeeld heb ik een Trigger Node met een wachttijd van 12 seconden toegevoegd voor Waarschuwingen en een Trigger Node met een wachttijd van 62 seconden toegevoegd voor Alarmen.

De keuze voor de wachttijd is arbitrair. 12 Seconden houdt in dat drie opéénvolgende meldingen een Waarschuwing moeten zijn. Bij 62 seconden moet de Alarm-melding 1 minuut, ofwel 12 opéénvolgende meldingen, aanhouden.

Een Trigger Node wordt gestart door ieder inkomend bericht. Dan begint meteen de wachttijd te lopen. Bij een nieuw bericht met een payload met waarde 0 wordt de Trigger, en dus de wachttijd, gereset en gestopt tot het volgende binnenkomende bericht.
Om een Trigger te kunnen starten én stoppen moet deze dus zowel de Waarschuwing- en Alarm-berichten ontvangen, maar óók de OK-berichten met de waarde 0.

Afbeeldingslocatie: https://tweakers.net/i/VxGitLHoIe7VG0fZVXOFbtBt0n8=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/iAUzFTvoBL2w7NBIaD8mcOZs.jpg?f=user_large

Daarom is vanaf de Splits Node zowel de bovenste uitgang (waarde 0) als de middelste uitgang (waarde 1) met de 12-seconden Trigger verbonden.
Evenzo zijn ook de bovenste uitgang (waarde 0) en de onderste uitgang (waarde 2) met de 62-seconden Trigger verbonden.

Als een Trigger niet wordt gereset zal deze de daartoe ingestelde waarde als uitgaande payload versturen.

Afbeeldingslocatie: https://tweakers.net/i/Pa0trWJd4ypSppPapfeXFS92lfc=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/xRbcpbM9fD0y1uWIkwB3iSJ0.jpg?f=user_large

Toelichting:
Als een bericht binnenkomt wordt er in eerste instantie geen bericht doorgestuurd. Het bericht verdwijnt in het niets. Wel wordt er een timer gestart van 12 seconden.
Als er verder niets gebeurt zal na 12 seconden een uitgaand bericht met payload 1 worden gestuurd, ofwel een Waarschuwings-melding.
Maar, als er in de tussentijd een nieuw bericht wordt ontvangen met payload 0, zal de timer worden gereset en wordt er geen uitgaand bericht verzonden.

Bij de 62-seconden Trigger werkt dit analoog.

Afbeeldingslocatie: https://tweakers.net/i/h-aM6ewImPCQ1gdBf9A-sUfuuII=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/NcUeSMQ93si7KENdnamQkOQT.jpg?f=user_large

Zodra een bericht binnenkomt zal een timer van 62 seconden worden gestart.
Bij ieder nieuw bericht met payload 0, zal ook hier de timer worden gereset en wordt er geen uitgaand bericht gezonden.
En, zolang er een minuut lang geen OK-melding komt zal de Trigger na 62 seconden een uitgaand bericht met payload 2 sturen, ofwel een Alarm-melding.

Met deze werkwijze kunnen onnodige Waarschuwingen en valse of te vroege Alarm-meldingen worden uitgefilterd.

Voor e-mails is dit misschien niet heel relevant, maar wanneer we later automatisch acties (zoals uitschakelen) aan Alarm-meldingen gaan koppelen is een kleine wachttijd opeens heel zinvol.

Met de aldus aangepaste flow kunnen we de werking weer uitproberen met behulp van de Test-knoppen.
Wanneer Test 1 of Test 2 wordt aangeklikt zal bij de bijbehorende Trigger Node een blauw vierkantje verschijnen. Dat geeft aan dat de wachttijd gestart is.
Wanneer je vervolgens, binnen de wachttijd, Test 0 aanklikt zal het blauwe blokje weer verdwijnen.
Het verdwijnt overigens ook als de wachttijd afloopt zonder reset.

Wederom succes gewenst!

Disclaimer: Ook hier kan de gewenste oplossing op andere manieren bereikt worden.
Ook de Trigger Nodes kunnen anders worden ingericht om hetzelfde resultaat te verkrijgen.
Deze variaties zullen mogelijk in latere bijdragen aan de orde komen.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
[
    {
        "id": "100259299cda6482",
        "type": "victron-input-vebus",
        "z": "d760142041278588",
        "service": "com.victronenergy.vebus/276",
        "path": "/Alarms/HighTemperature",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Alarms/HighTemperature",
            "type": "enum",
            "name": "Temperature",
            "enum": {
                "0": "Ok",
                "1": "Warning",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "Temperatuur Alarm",
        "onlyChanges": true,
        "x": 186,
        "y": 320,
        "wires": [
            [
                "b523fbc43bd71254"
            ]
        ]
    },
    {
        "id": "b523fbc43bd71254",
        "type": "switch",
        "z": "d760142041278588",
        "name": "Splits in 0, 1 of 2",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "0",
                "vt": "num"
            },
            {
                "t": "eq",
                "v": "1",
                "vt": "num"
            },
            {
                "t": "eq",
                "v": "2",
                "vt": "num"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 3,
        "x": 384,
        "y": 272,
        "wires": [
            [
                "8bf78dea4c21bb7a",
                "893304049a9d2b6e"
            ],
            [
                "8bf78dea4c21bb7a"
            ],
            [
                "893304049a9d2b6e"
            ]
        ]
    },
    {
        "id": "e0b579eec367be50",
        "type": "link out",
        "z": "d760142041278588",
        "name": "link out 1",
        "mode": "link",
        "links": [
            "937f02372220657c"
        ],
        "x": 815,
        "y": 352,
        "wires": []
    },
    {
        "id": "9d4fc0306e413329",
        "type": "change",
        "z": "d760142041278588",
        "name": "Vertaal 0, 1 of 2 naar tekst",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "0",
                "fromt": "num",
                "to": "OK",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "1",
                "fromt": "num",
                "to": "Waarschuwing",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "2",
                "fromt": "num",
                "to": "Alarm",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 638,
        "y": 352,
        "wires": [
            [
                "e0b579eec367be50"
            ]
        ]
    },
    {
        "id": "76d22f304fe86838",
        "type": "inject",
        "z": "d760142041278588",
        "name": "Test 0",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Test waarde 0 = OK",
        "payload": "0",
        "payloadType": "num",
        "x": 146,
        "y": 208,
        "wires": [
            [
                "b523fbc43bd71254"
            ]
        ]
    },
    {
        "id": "5583e70750710ae8",
        "type": "inject",
        "z": "d760142041278588",
        "name": "Test 1",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Test waarde 1 = Waarschuwing",
        "payload": "1",
        "payloadType": "num",
        "x": 146,
        "y": 240,
        "wires": [
            [
                "b523fbc43bd71254"
            ]
        ]
    },
    {
        "id": "a359c57aa02abbae",
        "type": "inject",
        "z": "d760142041278588",
        "name": "Test 2",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Test waarde 2 = Alarm",
        "payload": "2",
        "payloadType": "num",
        "x": 146,
        "y": 272,
        "wires": [
            [
                "b523fbc43bd71254"
            ]
        ]
    },
    {
        "id": "8bf78dea4c21bb7a",
        "type": "trigger",
        "z": "d760142041278588",
        "name": "Wachttijd 12s, daarna zend 1",
        "op1": "",
        "op2": "1",
        "op1type": "nul",
        "op2type": "num",
        "duration": "12",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "0",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 648,
        "y": 256,
        "wires": [
            [
                "9d4fc0306e413329"
            ]
        ]
    },
    {
        "id": "893304049a9d2b6e",
        "type": "trigger",
        "z": "d760142041278588",
        "name": "Wachttijd 62s, daarna zend 2",
        "op1": "",
        "op2": "2",
        "op1type": "nul",
        "op2type": "num",
        "duration": "62",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "0",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 648,
        "y": 304,
        "wires": [
            [
                "9d4fc0306e413329"
            ]
        ]
    }
]

[ Voor 57% gewijzigd door MJ de Bruijn op 31-08-2024 13:41 ]


Acties:
  • 0 Henk 'm!

  • Q
  • Registratie: November 1999
  • Laatst online: 22:24

Q

Au Contraire Mon Capitan!

Bedankt voor deze uitleg!
Heb jij ook voorbeelden van onnodige (intermittent) meldingen of warnings die je met deze methode weg wilt filteren?

Acties:
  • +1 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02
Q schreef op vrijdag 30 augustus 2024 @ 11:21:
Heb jij ook voorbeelden van onnodige (intermittent) meldingen of warnings die je met deze methode weg wilt filteren?
Ik heb een enkele keer een Inverter Overload op L2 in de log.
Ik vermoed een piek van waterkoker, koffiezetter en magnetron tegelijkertijd.

Koffietijd:
Afbeeldingslocatie: https://tweakers.net/i/9OlMS6JCcZIL1s5x0cDrOXrT8Dk=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/TGXymydc0yjDAV1XtSASP6WP.jpg?f=user_large

Maar... ik heb aan mijn Alarmen ook een methode toegevoegd die mijn Victron-installatie uitschakelt (dat zal ik in een latere bijdrage beschrijven).
Bij een korte Overload moet dat niet, maar bij een lange Overload wel.

Hiervoor is een wachttijd zeker zinvol.

Acties:
  • 0 Henk 'm!

  • Activate
  • Registratie: November 2007
  • Laatst online: 11-09 00:37
Heb as we speak ook een alarm, ik heb hem geprobeerd te wissen hij komt echter direct terug :

Afbeeldingslocatie: https://tweakers.net/i/u2PR7SiyD_h56oKaxVLFqxOS6Rc=/800x/filters:strip_exif()/f/image/ggBSzLcvseM9iMzYA4Yo8J8L.png?f=fotoalbum_large

Alles lijkt ook normaal te werken, heb de Cerbo al gereset zonder succes, ik weet even niet wat ik hiermee moet?

Acties:
  • 0 Henk 'm!

  • Heronimo
  • Registratie: Februari 2006
  • Laatst online: 23:07
Activate schreef op vrijdag 30 augustus 2024 @ 12:52:
Heb as we speak ook een alarm, ik heb hem geprobeerd te wissen hij komt echter direct terug :

[Afbeelding]

Alles lijkt ook normaal te werken, heb de Cerbo al gereset zonder succes, ik weet even niet wat ik hiermee moet?
Kan meerdere dingen betekenen. Hiervoor heb je de error logs nodig van de SerialBattery driver. Zie ook: https://mr-manuel.github....nternal-calculation-error

Acties:
  • 0 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02
Even voor de zekerheid, de bron van het alarm staat in de koptekst van het scherm (zoiets kun je snel over het hoofd zien).
@Heronimo heeft dat al herkend en je verwezen naar de mogelijke eerste stap van je oplossing.
Ook je leverancier zou je moeten kunnen verder helpen.

Helaas heb ik van dit onderdeel geen verdere kennis.

Toch ben ik nieuwsgierig. Op welke wijze ben je op het Alarm geattendeerd?

Acties:
  • 0 Henk 'm!

  • Activate
  • Registratie: November 2007
  • Laatst online: 11-09 00:37
Het klopt dat de JK BMS een melding geeft, het vreemde dat er in de log niets staat, het lijkt erop dat de Cerbo deze fout aanmaakt?

Na tien minuten was deze ook weer weg en alles draait normaal....vreemd.....

Acties:
  • +2 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

Grid Lost Alarm

Als de stroom uitvalt gaat het licht uit.
Meestal...
Behalve als je de off-grid mogelijkheid van Victron gebruikt.
In dat geval...

Op het moment dat ik dit schrijf heb ik ruim een jaar mijn Victron installatie. In die tijd heb ik zeven (7!) keer een stroomonderbreking gehad. Dat komt deels omdat er in onze wijk werd gewerkt, maar ook los daarvan is het een paar keer opgetreden.
Ik merkte daar niets van tot een buurvrouw vroeg of ik ook geen elektriciteit had.
Uh... dat weet ik niet, dan moet ik even kijken.

Als de stroom uitvalt wil je wellicht maatregelen nemen om je energieverbruik te verminderen.
Maar dan moet je het wel weten. Dit kan ook relevant zijn als je niet thuis bent. Ook dan kun/moet je misschien iets ondernemen.
Kortom, het is nuttig om een bericht te ontvangen zodra de stroom uitvalt.
En later, wanneer de energievoorziening weer is hersteld.

Afbeeldingslocatie: https://tweakers.net/i/0O4n3AUHrJdrGPCFRg_CFV5NFKc=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/o1ATtF5xxhUmbx1i5oaGyNje.jpg?f=user_large

Victron kent ook een Alarm Grid Lost. Dit Alarm levert alleen de waarden 0 (OK) of 2 (Alarm).

Afbeeldingslocatie: https://tweakers.net/i/sou-59gl-mksMJzlLSvOepdRaaM=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/RxVLpoGUSMPuGcHxF1p5iTK0.jpg?f=user_large

Nu is het zo dat bij het starten van een installatie of bij het opnieuw activeren van Node Red (Deploy) een Node altijd z'n actuele waarde stuurt.
Bij 'gewone' Alarm Nodes is dat prima, omdat de waarde 0 (OK) meteen een Reset is. Deze wordt niet per e-mail verder gestuurd.
Maar, bij een Grid Lost Node heeft de waarde 0 óók de betekenis dat het Grid weer hersteld is, maar alleen ná een stroomonderbreking.
Daarom moeten we de eerste melding (0) onderscheppen zodat niet bij iedere start of Deploy een e-mail wordt verstuurd.

Afbeeldingslocatie: https://tweakers.net/i/yzJbT2cwWXzSvgk24d82xoOR_A4=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/v4PktIoV47zvf4wUW86UCDbe.jpg?f=user_large

De Filter Node geeft alleen wijzigingen door, maar door de instelling 'ignore initial value' wordt er geen 0 verstuurd bij starten.
Een (latere) wijziging van 0 naar 1 wordt wel doorgegeven en daarna ook de terug-wijziging van 1 naar 0. Dan is er ook echt sprake van dat het Grid weer is hersteld.

Bij de vertaling van de betekenis van de codes kun je bij code 0 nu ook zinvol aangeven dat het Grid weer is hersteld.

Afbeeldingslocatie: https://tweakers.net/i/ow4TmYg7FRu0wMnl2J7mxVUcCnU=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/mCsE3s99ziSzNr2h2tok3HAb.jpg?f=user_large

Samengevat is dit een heel simpele Flow die af en toe nuttig kan zijn.

Als je dit wilt testen... Schakel gewoon de stroom uit.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
[
    {
        "id": "95abdeea91ed697e",
        "type": "victron-input-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Alarms/GridLost",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Alarms/GridLost",
            "type": "enum",
            "name": "Grid lost alarm",
            "enum": {
                "0": "Ok",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "Grid Lost Alarm",
        "onlyChanges": false,
        "x": 128,
        "y": 1472,
        "wires": [
            [
                "eb3c4b6a9053749f"
            ]
        ]
    },
    {
        "id": "5862858152650c0d",
        "type": "change",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Vertaal 0 of 2 naar tekst",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "0",
                "fromt": "num",
                "to": "Grid Lost Hersteld",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "2",
                "fromt": "num",
                "to": "Grid Lost Alarm",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 478,
        "y": 1472,
        "wires": [
            [
                "88979c8ea2ec4af7"
            ]
        ]
    },
    {
        "id": "88979c8ea2ec4af7",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Send Temp to E-mail",
        "mode": "link",
        "links": [
            "937f02372220657c"
        ],
        "x": 625,
        "y": 1472,
        "wires": []
    },
    {
        "id": "eb3c4b6a9053749f",
        "type": "rbe",
        "z": "4af0ca0c4d0e6ba7",
        "name": "",
        "func": "rbei",
        "gap": "",
        "start": "",
        "inout": "out",
        "septopics": false,
        "property": "payload",
        "topi": "topic",
        "x": 290,
        "y": 1472,
        "wires": [
            [
                "5862858152650c0d"
            ]
        ]
    }
]
Ga naar Inhoudsopgave

[ Voor 30% gewijzigd door MJ de Bruijn op 01-09-2024 13:47 ]


Acties:
  • 0 Henk 'm!

  • John245
  • Registratie: Januari 2020
  • Laatst online: 05:57
MJ de Bruijn schreef op zaterdag 31 augustus 2024 @ 11:49:

Grid Lost Alarm

Als de stroom uitvalt gaat het licht uit.
Meestal...
Behalve als je de off-grid mogelijkheid van Victron gebruikt.
In dat geval...

Op het moment dat ik dit schrijf heb ik ruim een jaar mijn Victron installatie. In die tijd heb ik zeven (7!) keer een stroomonderbreking gehad. Dat komt deels omdat er in onze wijk werd gewerkt, maar ook los daarvan is het een paar keer opgetreden.
Ik merkte daar niets van tot een buurvrouw vroeg of ik ook geen elektriciteit had.
Uh... dat weet ik niet, dan moet ik even kijken.

Als de stroom uitvalt wil je wellicht maatregelen nemen om je energieverbruik te verminderen.
Maar dan moet je het wel weten. Dit kan ook relevant zijn als je niet thuis bent. Ook dan kun/moet je misschien iets ondernemen.
Kortom, het is nuttig om een bericht te ontvangen zodra de stroom uitvalt.
En later, wanneer de energievoorziening weer is hersteld.

[Afbeelding]

Victron kent ook een Alarm Grid Lost. Dit Alarm levert alleen de waarden 0 (OK) of 2 (Alarm).

[Afbeelding]

Nu is het zo dat bij het starten van een installatie of bij het opnieuw activeren van Node Red (Deploy) een Node altijd z'n actuele waarde stuurt.
Bij 'gewone' Alarm Nodes is dat prima, omdat de waarde 0 (OK) meteen een Reset is. Deze wordt niet per e-mail verder gestuurd.
Maar, bij een Grid Lost Node heeft de waarde 0 óók de betekenis dat het Grid weer hersteld is, maar alleen ná een stroomonderbreking.
Daarom moeten we de eerste melding (0) onderscheppen zodat niet bij iedere start of Deploy een e-mail wordt verstuurd.

[Afbeelding]

De Filter Node geeft alleen wijzigingen door, maar door de instelling 'ignore initial value' wordt er geen 0 verstuurd bij starten.
Een (latere) wijziging van 0 naar 1 wordt wel doorgegeven en daarna ook de terug-wijziging van 1 naar 0. Dan is er ook echt sprake van dat het Grid weer is hersteld.

Bij de vertaling van de betekenis van de codes kun je bij code 0 nu ook zinvol aangeven dat het Grid weer is hersteld.

[Afbeelding]

Samengevat is dit een heel simpele Flow die af en toe nuttig kan zijn.

Als je dit wilt testen... Schakel gewoon de stroom uit.
Je weet dat ik dit topic een mooi initiatief vindt.

Alhoewel ik zelf gebruik van push meldingen is het voor anderen misschien makkelijker als je de JSON beschikbaar stelt zodat ze de flow kunnen importeren.

Tibber; 3-fase Victron ESS, 38,4 kWh opslag; gasloos sinds 2013; Nibe F1245-10PC; SAP; HomeSeer4; Proxmox 8


Acties:
  • 0 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02
John245 schreef op zaterdag 31 augustus 2024 @ 13:06:
Alhoewel ik zelf gebruik van push meldingen is het voor anderen misschien makkelijker als je de JSON beschikbaar stelt zodat ze de flow kunnen importeren.
Ik snap je punt.

De invulling van de velden in de Nodes is afhankelijk van de bestaande apparatuur. Dat betekent dat geïmporteerde nodes niet altijd (zonder aanpassingen) werken. Er moet dus toch gesleuteld worden.
Ook een e-mail Node is zeer individueel. Die zou ik moeten weglaten waardoor een geïmporteerde flow onvolledig zou zijn.

Verder is het mijn idee om een cursus te maken, geen kant-en-klaar product. Ik kan (en wil) ook geen ondersteuning bieden op mijn voorbeelden. Gebruikers moeten deze aan hun eigen situatie aanpassen.

EDIT: Weet je wat, voortschrijdend inzicht, ik ga het gewoon af en toe toch wel doen. Baat het niet, het schaadt ook niet.

[ Voor 9% gewijzigd door MJ de Bruijn op 31-08-2024 13:44 ]


Acties:
  • 0 Henk 'm!

  • John245
  • Registratie: Januari 2020
  • Laatst online: 05:57
MJ de Bruijn schreef op zaterdag 31 augustus 2024 @ 13:30:
[...]

Ik snap je punt.

De invulling van de velden in de Nodes is afhankelijk van de bestaande apparatuur. Dat betekent dat geïmporteerde nodes niet altijd (zonder aanpassingen) werken. Er moet dus toch gesleuteld worden.
Ook een e-mail Node is zeer individueel. Die zou ik moeten weglaten waardoor een geïmporteerde flow onvolledig zou zijn.

Verder is het mijn idee om een cursus te maken, geen kant-en-klaar product. Ik kan (en wil) ook geen ondersteuning bieden op mijn voorbeelden. Gebruikers moeten deze aan hun eigen situatie aanpassen.

EDIT: Weet je wat, voortschrijdend inzicht, ik ga het gewoon af en toe toch wel doen. Baat het niet, het schaadt ook niet.
Het probleem is altijd de juiste balans te vinden. En bij deze eenvoudige flows is het nut nog beperkt maar bjij uitgebreide flows kan een JSON makkelijk zijn.

Tibber; 3-fase Victron ESS, 38,4 kWh opslag; gasloos sinds 2013; Nibe F1245-10PC; SAP; HomeSeer4; Proxmox 8


Acties:
  • +1 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

Een Analoge Alarm Sensor (Temperatuur)

Hiervoor hebben we gezien hoe bestaande Alarm entiteiten gebruikt kunnen worden om Waarschuwingen of Alarmen te genereren.
Maar soms zijn er entiteiten die een numerieke waarde leveren in een range van laag naar hoog, bijvoorbeeld temperatuur sensoren.
Een lage waarde is meestal goed, een hogere waarde kan tot een Waarschuwing leiden en een heel hoge waarde moet dan een Alarm opleveren.

Afbeeldingslocatie: https://tweakers.net/i/jbpA-oAVWs8n0PJvHZAkq9zhgj4=/800x/filters:strip_icc():strip_exif()/f/image/2AaQrGsz6uYY7gryxAKWMjA2.jpg?f=fotoalbum_large

In dit voorbeeld gebruik ik de temperatuur sensor van mijn batterij systeem.

Afbeeldingslocatie: https://tweakers.net/i/_K3I9ftrB_5Z9LFF6ix_2wDBMS4=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/PaJzWzahD294R1Rjt7iza5CT.jpg?f=user_large

Deze Battery Monitor Node produceert iedere vijf seconden de actuele temperatuur van het Batterij systeem, of, als je het vakje Only Changes gebruikt, alleen veranderingen bij één graad omhoog of één graad omlaag.

Om de waarden in graden Celcius om te zetten in logica OK, Waarschuwing of Alarm voegen we een Switch Node toe.

Afbeeldingslocatie: https://tweakers.net/i/RCTuzJpvrGZ-OGOhzvTxRx1lOHE=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/S2snwdr72oY2Cwx47MsnJZrA.jpg?f=user_large

Een waarde van 34 graden of minder levert een bericht op op de bovenste uitgang. Een waarde van 40 graden of minder levert een waarde op op de middelste uitgang. En alle overige waarden, dus 41 graden of hoger, leveren een bericht op op de onderste uitgang.

Gebruik de optie stopping after first match, anders zou een temperatuur van bijvoorbeeld 30 graden niet alleen een bericht op de bovenste uitgang opleveren, maar ook op de middelste uitgang.

Afbeeldingslocatie: https://tweakers.net/i/5k1rhGnak6UafVgzSxO4bi8M4uY=/800x/filters:strip_icc():strip_exif()/f/image/3k6FnvyqBZwpw16yqRC6afhs.jpg?f=fotoalbum_large

Iedere uitgang van de drie Change Nodes krijgt nu een eigen vertaling van de temperatuur naar een verklarende tekst.

Afbeeldingslocatie: https://tweakers.net/i/kQtyT9sF3s-eLF1aK9Awt12ps6Q=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/qJ9SVkM4MXHQ7jyey6MWkgGl.jpg?f=user_large

Afbeeldingslocatie: https://tweakers.net/i/2cah6i-zyTlV-Uyidw5bhwPfQYM=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/3VWJsgYG474OtDCC52qXrhNL.jpg?f=user_large

Afbeeldingslocatie: https://tweakers.net/i/lL2nL4uxmE-UKWYylNCChqcm1KQ=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/170K0ySP0gZYVPNz7QPifZTS.jpg?f=user_large

Deze instellingen spreken voor zichzelf.

Om te kunnen testen gebruiken we nu een Debug Node. Voor diegenen die al bekend zijn met Node Red is dit ouwe koek, maar voor beginners laat ik het toch even zien.

Afbeeldingslocatie: https://tweakers.net/i/Brqr4Y5z7PMm50i3EFtFAIdqyjg=/800x/filters:strip_icc():strip_exif()/f/image/8HDrIWMIVgRpuQBxHTLalU9T.jpg?f=fotoalbum_large

Bij iedere verandering komt er in het Debug-scherm een melding.

Afbeeldingslocatie: https://tweakers.net/i/vT2SaMSa-W7YVIJKKWlF3VBz83I=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/U5QX8Ct5LxsXXwKRNLPdQ967.jpg?f=user_large

Testen kan door in de Node Batterij Temperatuur de grenswaarden aan te passen.
Als je (tijdelijk) het vinkje Only Changes uitzet krijg je iedere 5 seconden de actuele status te zien.

Op dit moment wordt de melding Temperatuur OK, Waarschuwing of Alarm dus alleen nog in het Debug scherm getoond.

Door een Link Node naar de E-mail Node toe te voegen worden Waarschuwingen en Alarm-meldingen ook per e-mail verzonden.

Afbeeldingslocatie: https://tweakers.net/i/LU8NGoOUh6LfywSpZVerImJhR2o=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/Cz1Fl2pufqwpO55WvmvI19gt.jpg?f=user_large

In dit voorbeeld worden alleen Waarschuwingen en Alarmen gemaild. Wanneer je ook de uitgang van de OK-Node met de E-mail Link Node verbindt zal ook het Temperatuur OK bericht worden verstuurd.
Voor het maken van een E-mail Node, zie hier.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
[
    {
        "id": "b6bb2c7d2367648e",
        "type": "victron-input-battery",
        "z": "d760142041278588",
        "service": "com.victronenergy.battery/512",
        "path": "/Dc/0/Temperature",
        "serviceObj": {
            "service": "com.victronenergy.battery/512",
            "name": "Totle Power"
        },
        "pathObj": {
            "path": "/Dc/0/Temperature",
            "type": "float",
            "name": "Battery temperature (°C)"
        },
        "name": "Batterij Temperatuur",
        "onlyChanges": true,
        "roundValues": "0",
        "x": 182,
        "y": 528,
        "wires": [
            [
                "a1fb6e296def8bd7"
            ]
        ]
    },
    {
        "id": "a1fb6e296def8bd7",
        "type": "switch",
        "z": "d760142041278588",
        "name": "Batt Temp OK, Warning, Alarm",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "lte",
                "v": "34",
                "vt": "num"
            },
            {
                "t": "lte",
                "v": "40",
                "vt": "num"
            },
            {
                "t": "else"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 3,
        "x": 430,
        "y": 528,
        "wires": [
            [
                "f6cfc65ff0803de9"
            ],
            [
                "8cfdc59ec21be279"
            ],
            [
                "fca80c0b2b74de54"
            ]
        ]
    },
    {
        "id": "f6cfc65ff0803de9",
        "type": "change",
        "z": "d760142041278588",
        "name": "OK",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "Informatie Batterij Temperatuur",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "Batterij Temperatuur OK",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 666,
        "y": 496,
        "wires": [
            [
                "59a164d3bf52761b"
            ]
        ]
    },
    {
        "id": "8cfdc59ec21be279",
        "type": "change",
        "z": "d760142041278588",
        "name": "Warning",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "Waarschuwing Batterij Temperatuur",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "Batterij Temperatuur vrij hoog",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 676,
        "y": 528,
        "wires": [
            [
                "59a164d3bf52761b",
                "de63cdeea6aeb41a"
            ]
        ]
    },
    {
        "id": "fca80c0b2b74de54",
        "type": "change",
        "z": "d760142041278588",
        "name": "Alarm",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "ALARM Batterij Temperatuur",
                "tot": "str"
            },
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "Batterij Temperatuur te hoog",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 666,
        "y": 560,
        "wires": [
            [
                "59a164d3bf52761b",
                "de63cdeea6aeb41a"
            ]
        ]
    },
    {
        "id": "59a164d3bf52761b",
        "type": "debug",
        "z": "d760142041278588",
        "name": "debug Batterij Temperatuur",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 968,
        "y": 496,
        "wires": []
    },
    {
        "id": "de63cdeea6aeb41a",
        "type": "link out",
        "z": "d760142041278588",
        "name": "Link Temperatuur Alarm to E-mail",
        "mode": "link",
        "links": [
            "937f02372220657c"
        ],
        "x": 865,
        "y": 560,
        "wires": []
    }
]
Ga naar Inhoudsopgave

Acties:
  • +1 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

Waarom temperaturen monitoren?

Een lezer suggereerde me om ook aan te geven waarom monitoring zinvol is en dan met name temperatuur monitoring.

Victron apparaten en ook kant-en-klare batterij-systemen hebben ingebouwd monitoring en zullen dus in extreme situaties een Waarschuwing of Alarm produceren.
Zoals we hebben gezien kun je deze Waarschuwingen en Alarmen in de gaten houden en zonodig (bijvoorbeeld via een e-mail) doorsturen.
Ik heb al aangekondigd dat ik verderop in deze cursus ook zal laten zien hoe je op basis van deze meldingen je hele installatie kunt uitschakelen.

Maar, zo'n ingebouwde sensor heeft waarschijnlijk vrij algemene en hoge grenswaarden. Op zich goed, maar het is prettig om al in een eerder stadium een uitzonderlijke temperatuur-ontwikkeling waar te nemen. Er is een (grote?) kans dat er dan al iets bijzonders aan de hand is.

Om te weten wat 'uitzonderlijk' is moet je eerst een tijdje de feitelijk temperaturen monitoren. Dit kan met een programma zoals Home Assistant. Als je dat niet hebt moet je een tijdje steekproeven nemen met de weergave in de Victron Console, met name als je weet of merkt dat de apparaten intensief bezig zijn.

Afbeeldingslocatie: https://tweakers.net/i/6dyBtiN1KC-gyByw41Be02f27qk=/800x/filters:strip_icc():strip_exif()/f/image/EjxBCjJIj3DYnWGHRg8IerF9.jpg?f=fotoalbum_large

De interne temperatuur van mijn batterij-systeem blijft normaal gesproken binnen de grenzen van 20 tot 32 graden. Daarom heb ik de grens voor een waarschuwing in de voorgaande bijdrage ingesteld op 34 graden. Als de temperatuur boven de 40 graden zou komen, zou dat héél bijzonder zijn. Vandaar dat ik daar een Alarm voor heb ingesteld.

Ik ken de interne grenswaarden van mijn systeem-alarmen niet, maar ik vermoed dat deze veel hoger liggen. Zo kan ik (letterlijk) mijn eigen grenzen instellen.

De Multiplussen leveren een temperatuur van de uitstromende lucht die een stuk hoger ligt.

Afbeeldingslocatie: https://tweakers.net/i/TucnbeDB_bmYMfTENuqX-h0M7U8=/800x/filters:strip_icc():strip_exif()/f/image/wNCaCNWMTOuqFE2BvHYLp97k.jpg?f=fotoalbum_large

In de volgende bijdrage laat ik zien hoe ik deze externe temperatuur-sensors monitor.
Hier geldt dat ik normaal gesproken een temperatuur binnen de grenzen 24 tot 42 graden verwacht.
Daarom heb ik een grens van 45 graden ingesteld voor een Waarschuwing en 50 graden voor een Alarm.
Dit zou bijvoorbeeld kunnen optreden als er een ventilator defect raakt.
Ook hier krijg ik dus een bericht ruim vóór de Multiplus in paniek raakt. En dan heb ik tijd om onderzoek te doen. Wellicht kan ik een écht defect of verdere (ernstige) escalatie voorkomen.

Nog even deze. Dit is de temperatuur van mijn SolarEdge installatie.

Afbeeldingslocatie: https://tweakers.net/i/AeeLqdtH7y0oA7hMDxzVIvVt8ew=/800x/filters:strip_icc():strip_exif()/f/image/GHGoqkAzrDgcXBxTDXcBdQfe.jpg?f=fotoalbum_large

Deze wordt intern best heet, tot wel 55 graden.
Maar dat is al heel lang zo en dus blijkbaar normaal en dus OK (denk ik).
Maar, als de temperatuur boven 60 graden komt gaat mijn monitoring zeker actie ondernemen.
Ook hier ga ik niet wachten tot er iets vloeibaars onder uit de omvormer stroomt.

Wat ik zelf niet begrijp is waarom iedere dag, ongeveer een half uur na opstarten, de temperatuur ineens vijf graden omlaag gaat, en dan weer omhoog. Iemand een idee?

Ga naar Inhoudsopgave

Acties:
  • 0 Henk 'm!

  • Q
  • Registratie: November 1999
  • Laatst online: 22:24

Q

Au Contraire Mon Capitan!

Ik denk dat de solaredge een redelijk ‘dom’ algoritme toepast om de fans aan te sturen. Je ziet op een aantal dagen dat op de piek de temperatuur yoyo’t tussen 50 en 55 graden. Ik denk dat zoiets ook aan de hand kan zijn bij de startup en dat het niets te maken heeft met de opstart tijd maar die 40 graden grens die mogelijk bij de productie op dat moment een trigger raakt.

Ik vind persoonlijk dat iedere engineer straf verdient die op deze manier temperatuur regelt (dom aan/uit bij grenswaarden), ze zouden een PID controller moeten toepassen in software zodat je, vloeiend, natuurlijk gedrag krijgt dat ook beter is voor de levensduur van de fans.

Ik weet niet of software zoals NodeRed wél iets slims kan doen zoals PIDs of fan curves laten tunen, dus voel je niet aangesproken 😆 ik doel vooral op de slimme mensen die de omvormers bouwen.

[ Voor 14% gewijzigd door Q op 01-09-2024 16:23 ]


Acties:
  • +1 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

Drie Externe Temperatuur Sensors

Bij de levering van mijn Multiplussen waren drie temperatuur-sensors bijgesloten. Deze zijn in principe bedoeld om de temperatuur van batterijen te monitoren.
Maar, omdat mijn batterij-systemen ingebouwde temperatuur-sensors hebben, waren deze dus 'over'.

Ik heb de temperatuur-sensors geplaatst in de uitgaande luchtstroom van mijn Multiplussen, dus bovenaan in het midden. Ik heb ze ongeveer twee centimeter naar beneden laten zakken. Ze hangen gewoon los aan hun draadjes.

De drie temperatuur-sensors heb ik verbonden met de daarvoor bestemde ingangen van de Cerbo GX. Deze kunnen worden geactiveerd in de Console.

Afbeeldingslocatie: https://tweakers.net/i/OCgdZKOX7XoOJoCTEEQdP8ep-68=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/eXBjPcvaKsn2lLNNC0EdKyiT.jpg?f=user_large

Het instellen van de temperatuur-sensors als device valt buiten het bestek van dit onderwerp.

Deze temperatuur-sensors zijn nu ook beschikbaar als separate Node in Node Red.

Afbeeldingslocatie: https://tweakers.net/i/oC2SrEo8BwRcQmYMTOFy9sE-6kg=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/mPGgiGiW13mp7IjeeaIqTOwq.jpg?f=user_large

Indien je een drie-fasen opstelling hebt moet je dit voor drie Multiplussen en drie Nodes herhalen. Zorg dat iedere Node een 'eigen' naam krijgt.

Afbeeldingslocatie: https://tweakers.net/i/zTEDQ6tYevxwj5qSVMF_veQ--bU=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/kpJHURbiKVNwlr31hAdYburO.jpg?f=user_large

Voor de verwerking van de gegevens van de drie temperatuur-sensors gebruiken we één 'logica'. Hierbij is het belangrijk dat de invoer-gegevens uit elkaar gehouden kunnen worden. Dit gaat door middel van de sensor-naam (het Node Label). Geen iedere temperatuur-sensor een eigen naam.

Afbeeldingslocatie: https://tweakers.net/i/ne9J8gwmsmDQzWAR44B6LTZ_etM=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/17wpueLFSdCpyejxAqOGEyao.jpg?f=user_large

De Multiplus temperatuur-sensors hebben andere grenswaarden dan de Batterij temperatuur-sensor.
De temperatuur-waarden worden in de Switch Node gesplitst naar drie relevante situaties: OK, Waarschuwing of Alarm.

Afbeeldingslocatie: https://tweakers.net/i/cic6Fbxnr323M7x0P4NHp-YMqOQ=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/S0se89sabsEtn1BbBVpGOK9W.jpg?f=user_large

De Switch Node levert nu de actuele temperatuur op één van de drie uitgangen. De vertaling hiervan gaat op een andere wijze dan in het hiervoor beschreven voorbeeld.

Afbeeldingslocatie: https://tweakers.net/i/t3X6HtzqdM3GOOF0-73jt2DdwDE=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/l9FeNeKwFWUiTaER0LALIckC.jpg?f=user_large

In het hiervoor beschreven voorbeeld werd het bericht met de temperatuur omgezet in een tekst 'OK´, 'Waarschuwing' of 'Alarm'. Meer was niet nodig omdat de tekst direct naar de E-mail werd gezonden.
Nu willen de de temperaturen meer concreet gaan 'bewaken'. Daarbij moeten we de Nodes uit elkaar houden en moet het niet zo zijn dat een 'OK' van de ene sensor een 'Waarschuwing' van een andere sensor reset.

Afbeeldingslocatie: https://tweakers.net/i/hJnXF8scjRhggYcEorGKU-4M3LY=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/msp1rzreivQCwuZ4oSxJ7zE1.jpg?f=user_large

Afbeeldingslocatie: https://tweakers.net/i/FNaOpgosCbvWaQEAMAA3wKyWBhk=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/CW0nSdgdn2lYLY7ScRpV0M3N.jpg?f=user_large

Afbeeldingslocatie: https://tweakers.net/i/THrhaB_CPK3bsoXMnCzRmNLMp5I=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/31xzM76F95hN6kaoK1xjLCo0.jpg?f=user_large

De temperaturen worden aldus omgezet naar de voor alarm sensors gebruikelijke numerieke waarden 0, 1 en 2.

Let op: Bij deze Change Nodes wordt het topic NIET aangepast.
Het topic van de naam (het Node Label) van de temperatuur-nodes wordt ongewijzigd verder doorgegeven.

Om niet bij een tijdelijke (te) hoge waarde meteen een bericht te krijgen passen we een wachttijd toe.

Afbeeldingslocatie: https://tweakers.net/i/lDT579w5-eN2HVL4w6bFCnV3ufk=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/DMGBmwyyOt08qNOLqTutQSaY.jpg?f=user_large

Het maken van de wachttijden Nodes wordt hier beschreven.
Echter, hier wordt een andere instelling gebruikt dan in het eerdere voorbeeld.

Afbeeldingslocatie: https://tweakers.net/i/_dM_W9A-2leP_M4L1AVIKMwh1rk=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/hZGek7FpmTmXZvmGUYnmT0Sl.jpg?f=user_large

Het aanpassen van de Trigger Node voor de 62 seconden wachttijd gaat op dezelfde wijze.
Probeer dit nu zelf.

We ronden nu de gehele Flow af.

Afbeeldingslocatie: https://tweakers.net/i/1VLBsaEVGb9MyZ43T3KsKI5l-u0=/800x/filters:strip_icc():strip_exif()/f/image/ZXWLZYDm2zrAr5m3m4p0glNa.jpg?f=fotoalbum_large

De vertaling van de waarden 0, 1 en 2 naar tekst staat in de laatste Change Node (zie ook hier). Deze stuurt een bericht via een Link Node aan de e-mail Node.

Testen van deze Flow kan door bij één of meerdere Temperatuur Sensor Nodes de grenswaarden tijdelijk aan te passen.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
[
    {
        "id": "538ca86b10cdad12",
        "type": "victron-input-temperature",
        "z": "d760142041278588",
        "service": "com.victronenergy.temperature/24",
        "path": "/Temperature",
        "serviceObj": {
            "service": "com.victronenergy.temperature/24",
            "name": "Multiplus II (1) Temp"
        },
        "pathObj": {
            "path": "/Temperature",
            "type": "float",
            "name": "Temperature (°C)"
        },
        "name": "Multiplus II (1) Temp",
        "onlyChanges": true,
        "roundValues": "0",
        "x": 170,
        "y": 688,
        "wires": [
            [
                "357a9536860a04b8"
            ]
        ]
    },
    {
        "id": "997462ae01e001b4",
        "type": "victron-input-temperature",
        "z": "d760142041278588",
        "service": "com.victronenergy.temperature/25",
        "path": "/Temperature",
        "serviceObj": {
            "service": "com.victronenergy.temperature/25",
            "name": "Multiplus II (2) Temp"
        },
        "pathObj": {
            "path": "/Temperature",
            "type": "float",
            "name": "Temperature (°C)"
        },
        "name": "Multiplus II (2) Temp",
        "onlyChanges": true,
        "roundValues": "0",
        "x": 170,
        "y": 736,
        "wires": [
            [
                "357a9536860a04b8"
            ]
        ]
    },
    {
        "id": "4e542646b27847d7",
        "type": "victron-input-temperature",
        "z": "d760142041278588",
        "service": "com.victronenergy.temperature/26",
        "path": "/Temperature",
        "serviceObj": {
            "service": "com.victronenergy.temperature/26",
            "name": "Multiplus II (3) Temp"
        },
        "pathObj": {
            "path": "/Temperature",
            "type": "float",
            "name": "Temperature (°C)"
        },
        "name": "Multiplus II (3) Temp",
        "onlyChanges": true,
        "roundValues": "0",
        "x": 170,
        "y": 784,
        "wires": [
            [
                "357a9536860a04b8"
            ]
        ]
    },
    {
        "id": "357a9536860a04b8",
        "type": "switch",
        "z": "d760142041278588",
        "name": "Multiplus Temp --> OK, Warning, Alarm",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "lte",
                "v": "50",
                "vt": "num"
            },
            {
                "t": "lte",
                "v": "55",
                "vt": "num"
            },
            {
                "t": "else"
            }
        ],
        "checkall": "false",
        "repair": false,
        "outputs": 3,
        "x": 458,
        "y": 736,
        "wires": [
            [
                "102e3a93340724eb"
            ],
            [
                "f4a69562bbe7a601"
            ],
            [
                "d1377256d574b569"
            ]
        ]
    },
    {
        "id": "102e3a93340724eb",
        "type": "change",
        "z": "d760142041278588",
        "name": "--> 0",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "0",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 702,
        "y": 704,
        "wires": [
            [
                "d20c32d93a67ace4",
                "333d3f8b8dc8e3bb"
            ]
        ]
    },
    {
        "id": "f4a69562bbe7a601",
        "type": "change",
        "z": "d760142041278588",
        "name": "--> 1",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "1",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 702,
        "y": 736,
        "wires": [
            [
                "d20c32d93a67ace4"
            ]
        ]
    },
    {
        "id": "d1377256d574b569",
        "type": "change",
        "z": "d760142041278588",
        "name": "--> 2",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "2",
                "tot": "num"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 702,
        "y": 768,
        "wires": [
            [
                "333d3f8b8dc8e3bb"
            ]
        ]
    },
    {
        "id": "d20c32d93a67ace4",
        "type": "trigger",
        "z": "d760142041278588",
        "name": "Wachttijd 12s, daarna zend 1",
        "op1": "",
        "op2": "1",
        "op1type": "nul",
        "op2type": "num",
        "duration": "12",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "0",
        "bytopic": "topic",
        "topic": "topic",
        "outputs": 1,
        "x": 968,
        "y": 720,
        "wires": [
            [
                "f3c2434ef024a5a0"
            ]
        ]
    },
    {
        "id": "333d3f8b8dc8e3bb",
        "type": "trigger",
        "z": "d760142041278588",
        "name": "Wachttijd 62s, daarna zend 2",
        "op1": "",
        "op2": "2",
        "op1type": "nul",
        "op2type": "num",
        "duration": "62",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "0",
        "bytopic": "topic",
        "topic": "topic",
        "outputs": 1,
        "x": 964,
        "y": 768,
        "wires": [
            [
                "f3c2434ef024a5a0"
            ]
        ]
    },
    {
        "id": "f3c2434ef024a5a0",
        "type": "change",
        "z": "d760142041278588",
        "name": "Vertaal 0, 1 of 2 naar tekst",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "0",
                "fromt": "num",
                "to": "OK",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "1",
                "fromt": "num",
                "to": "Waarschuwing",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "2",
                "fromt": "num",
                "to": "Alarm",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 766,
        "y": 848,
        "wires": [
            [
                "b509179e85376c82"
            ]
        ]
    },
    {
        "id": "b509179e85376c82",
        "type": "link out",
        "z": "d760142041278588",
        "name": "Link Multiplus Temperatuur to E-mail",
        "mode": "link",
        "links": [
            "937f02372220657c"
        ],
        "x": 945,
        "y": 848,
        "wires": []
    }
]
Ga naar Inhoudsopgave

Acties:
  • 0 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

Laat de Alarmbellen Rinkelen

Tot dusverre hebben we de Waarschuwingen en Alarmen per e-mail verzonden.
Op zich is dat al een stuk sneller dan wachten tot je af en toe je console opent om berichten te bekijken.
Voor sommige Waarschuwingen of Alarmen wil je wellicht nog sneller geïnformeerd worden.
Dit kan bijvoorbeeeld door een akoestisch signaal.

Een eerste eenvoudige mogelijkheid is om een (bestaande?) deurbel te gebruiken.
Deze kan gebruik maken van een (bestaande?) deurbel-transformator.
In plaats van de bel-drukknop gebruiken we een relais van de Cerbo.

Afbeeldingslocatie: https://tweakers.net/i/XUAS4qj-VgzSskvk4nS2AO2gFVI=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/aDOziQzqRYIl3NNit23GreNh.jpg?f=user_large

Een Cerbo GX heeft twee relais om externe apparaten te schakelen. Relais 1 wordt 'standaard' gebruikt om een pomp te schakelen. Daarom gebruiken we hier relais 2.

Afbeeldingslocatie: https://tweakers.net/i/kT4wT5GO6ENMM1BAIYk16WBA7yo=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/p6pd4asouW0oy0rwR2SwyKpN.jpg?f=user_large

Zoals je ziet gebruikt het relais alleen de waarden 0 (uit) en 1 (aan).

Vóór de Relay Node komen drie andere nodes:

Afbeeldingslocatie: https://tweakers.net/i/LJ3tLIuW1V0OoRnaSY7WYTg3yMQ=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/YoAnJleT5FtukVBZizyrizF2.jpg?f=user_large

Allereerst een Link In Node. Deze kan worden gebruikt om vanaf diverse andere plaatsen het relais te kunnen oproepen.

Afbeeldingslocatie: https://tweakers.net/i/0lPUtipj63LIPIJG9DC2E5lDIbY=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/DxzG6ltaeutG4CYlYovphCIG.jpg?f=user_large

Om te zorgen dat ook de standaard gebruikte waarde voor alarmen (2) kan worden gebruikt plaatsen we er een Switch Node tussen. Deze reageert op de invoer-waarden 0, 1 en 2.

Afbeeldingslocatie: https://tweakers.net/i/qZ_THSG0MYjHzmyoB6zbc4tjAmY=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/fVO2l5KoT6coOKI5bRkvsxlf.jpg?f=user_large

Door de middelste (waarde 1) en de onderste uitgang (waarde 2) samen verder te leiden zullen zowel Waarschuwingen als Alarmen tot een actie van het relais leiden.

En om te zorgen dat het rinkelen na 30 seconden ook weer stopt gebruiken we een Trigger Node.

Afbeeldingslocatie: https://tweakers.net/i/t1BbCSzc6sysv9qevqR8hTPJfP4=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/1Pjp3D9z8txbyT3AiwiqINTL.jpg?f=user_large

Bij ieder binnenkomend bericht (dus of een 1 of een 2) stuurt de Trigger Node een 1 naar de uitgang. Hiermee wordt het relais ingeschakeld.
Na 30 seconden stuurt de Trigger Node uit zichzelf een 0 naar de uitgang. Hierdoor wordt het relais weer uitgeschakeld. Dan moet het rinkelen ophouden.

Afbeeldingslocatie: https://tweakers.net/i/01Jz41TNh4at967z_reK6tk-Vuo=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/MElzPNLEMm22x2LnL0Q8UCMd.jpg?f=user_large

Om te kunnen testen maken we drie Inject Nodes aan die de numerieke waarden 0, 1 of 2 kunnen verzenden. Deze worden gekoppeld aan een Link Out Node is is gelinkt aan de Link In Node van het relais-treintje.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
[
    {
        "id": "0f640eec59efea12",
        "type": "victron-output-relay",
        "z": "d760142041278588",
        "service": "com.victronenergy.system/0",
        "path": "/Relay/1/State",
        "serviceObj": {
            "service": "com.victronenergy.system/0",
            "name": "Venus device"
        },
        "pathObj": {
            "path": "/Relay/1/State",
            "type": "enum",
            "name": "Venus relay 2 state",
            "enum": {
                "0": "Open",
                "1": "Closed"
            },
            "writable": true
        },
        "initial": "0",
        "name": "Relais 2",
        "onlyChanges": false,
        "x": 692,
        "y": 1056,
        "wires": []
    },
    {
        "id": "d09b4f7911d72f0c",
        "type": "inject",
        "z": "d760142041278588",
        "name": "Test 0",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Test waarde 0",
        "payload": "0",
        "payloadType": "num",
        "x": 158,
        "y": 928,
        "wires": [
            [
                "d0ab102ee53a59cd"
            ]
        ]
    },
    {
        "id": "50fa0c46b78fe703",
        "type": "inject",
        "z": "d760142041278588",
        "name": "Test 1",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Test waarde 1",
        "payload": "1",
        "payloadType": "num",
        "x": 158,
        "y": 960,
        "wires": [
            [
                "d0ab102ee53a59cd"
            ]
        ]
    },
    {
        "id": "40964ec301547173",
        "type": "inject",
        "z": "d760142041278588",
        "name": "Test 2",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Test waarde 2",
        "payload": "2",
        "payloadType": "num",
        "x": 158,
        "y": 992,
        "wires": [
            [
                "d0ab102ee53a59cd"
            ]
        ]
    },
    {
        "id": "689c3a352084b306",
        "type": "link in",
        "z": "d760142041278588",
        "name": "Link ingang Relais 2",
        "links": [
            "d0ab102ee53a59cd"
        ],
        "x": 95,
        "y": 1072,
        "wires": [
            [
                "9bce285555093934"
            ]
        ]
    },
    {
        "id": "d0ab102ee53a59cd",
        "type": "link out",
        "z": "d760142041278588",
        "name": "Link Uitgang naar Relais 2",
        "mode": "link",
        "links": [
            "689c3a352084b306"
        ],
        "x": 351,
        "y": 960,
        "wires": []
    },
    {
        "id": "2d4c292d4207e63d",
        "type": "trigger",
        "z": "d760142041278588",
        "name": "Uit na 30s",
        "op1": "1",
        "op2": "0",
        "op1type": "num",
        "op2type": "num",
        "duration": "30",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 480,
        "y": 1088,
        "wires": [
            [
                "0f640eec59efea12"
            ]
        ]
    },
    {
        "id": "9bce285555093934",
        "type": "switch",
        "z": "d760142041278588",
        "name": "Verdeel 0, 1 en 2",
        "property": "payload",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "0",
                "vt": "num"
            },
            {
                "t": "eq",
                "v": "1",
                "vt": "num"
            },
            {
                "t": "eq",
                "v": "2",
                "vt": "num"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 3,
        "x": 250,
        "y": 1072,
        "wires": [
            [
                "0f640eec59efea12"
            ],
            [
                "2d4c292d4207e63d"
            ],
            [
                "2d4c292d4207e63d"
            ]
        ]
    }
]
Ga naar Inhoudsopgave

Acties:
  • +1 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

Een Alarm Luiden via Home Assistant

Hiervoor heb je gezien hoe we vanuit Node Red een bel kunnen laten rinkelen. Op zich is dat een goede methode omdat het onafhankelijk is van andere automatiserings-systemen.

Maar... Als je (bijvoorbeeld) Home Assistant hebt kun je een Waarschuwing of Alarm ook daaraan doorgeven. In dit voorbeeld gebruik ik voor zowel Waarschuwing als Alarm één methode.

Allereerst moet je in Node Red de Home Assistant integratie actief hebben. Wellicht heb je dat al. Zo niet, verdiep je dan in het installeren van Paletten.
Instellingen --> Manage Palette --> Tabblad Install --> selecteer "node-red-contrib-home-assistant-websocket".

Om dit te kunnen gebruiken moet je een Configuratie Node inrichten.

Afbeeldingslocatie: https://tweakers.net/i/uWc-iz45oK86d_msegGJsX-vAEw=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/nJT8MalEhBx01B8OZCfiQxGs.jpg?f=user_large

Afbeeldingslocatie: https://tweakers.net/i/7uyT6dSo0lO77wWbU8OLbxIJj2Q=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/vuHl6q5151Avhjlc9ZKsTsGN.jpg?f=user_large

Voor details over het invullen, zie de documentatie van de Node via het knopje met het boek-icoon helemaal links onder: Show Help.

Afbeeldingslocatie: https://tweakers.net/i/hh7iznbTjLFrJEfgKH51rUbbBs0=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/lsacfMDKG81aIUhiYL4VEXCK.jpg?f=user_large

In de Node lijst zijn nu alle Home Assistant Nodes toegevoegd.

We maken een Node voor het aanzetten van het Alarm en een separate Node voor het uitzetten van het Alarm. Dit wordt verderop toegelicht.

Afbeeldingslocatie: https://tweakers.net/i/HoJUA5RDHibzN5VMuHpcbEuk5js=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/xDkidwHA7INh4SXYHOC1hMpm.jpg?f=user_large

Om een bericht te kunnen sturen moet er in Home Assistant ook een ontvangende entiteit zijn.
We gebruiken hiervoor een zogenaamde Helper.

De volgende handelingen worden in Home Assistant uitgevoerd:

Instellingen --> Apparaten en Diensten --> Helpers --> Klik dan rechtsonder: "Helper Aanmaken" --> Selecteer Type "Schakelaar"

Geef als naam: "Helper Victron Warning" en selecteer een pictogram naar smaak, bijvoorbeeld "mdi:home-alert-outline¨. De Helper wordt nu gemaakt. Als je deze opent voor wijzigen zie je:

Afbeeldingslocatie: https://tweakers.net/i/KPyAlQvx9E-RVCBeYO335xPsk3Q=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/a2Ph9La631Led5FfIZPefy95.jpg?f=user_large

Deze Helper moet nu ook beschikbaar zijn in Node Red.

Afbeeldingslocatie: https://tweakers.net/i/HoJUA5RDHibzN5VMuHpcbEuk5js=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/xDkidwHA7INh4SXYHOC1hMpm.jpg?f=user_large

Met de bovenste Node wordt de Helper ingeschakeld:

Afbeeldingslocatie: https://tweakers.net/i/UfINgFcX6A3bjbggfLcOjQ5nSPw=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/Cm5M2B45kMPwq5VUk8Yp45Jq.jpg?f=user_large

Met de onderste Node wordt de Helper uitgeschakeld:

Afbeeldingslocatie: https://tweakers.net/i/_oBei__vph-rRVS85YWB_zv8wb8=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/pF944GLjlkSwKS3FCoMZAjAS.jpg?f=user_large

Om deze logica niet al te ingewikkeld te maken is deze zo ontworpen dat er alleen een "aan" bericht hoeft te worden verzonden. De Trigger Node zorgt zelf voor uitschakeling na 30 seconden.

Afbeeldingslocatie: https://tweakers.net/i/wWi8dOLlMA_vxKNVLCDrMl8Ggsg=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/JY2EEXuuEl7SbgKrB1sR0wdf.jpg?f=user_large

De Link In Node zorgt ervoor dat je deze logica vanuit alle andere Flows kunt aanroepen. Let wel op dat je alleen de Waarschuwing of Alarm uitgangen gebruikt en niet de OK uitgangen.

Toch zijn we nog niet klaar. We kunnen nu wel in Home Assistant een Schakelaar aan zetten, maar dan gebeurt er nog niets. In Home Assistant moet er een actie gestart worden op het moment dat de schakelaar van "uit" naar "aan" omschakelt. Dat gaat via een Automatisering.

Ikzelf heb in huis drie stuks Klik-Aan-Klik-Uit deurbellen. Ik heb een automatisering gemaakt die alle deurbellen het tring-tring geluid laat afspelen, steeds met een tussenpoos van 5 seconden. Dit wordt twee keer herhaald. Dat is ruim voldoende om (als je thuis bent) je te waarschuwen dat je op onderzoek moet uitgaan.

Afbeeldingslocatie: https://tweakers.net/i/ZoAYcQrt9baFUrSvZLP-rtibfhw=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/9z7Mo7hteGkLWIx6lwhE0bfc.jpg?f=user_large

Afbeeldingslocatie: https://tweakers.net/i/ht0qgEzNG4-bGnDe-6oWQiCzMjA=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/Iacto53dzQvSth3ICUcpoiWi.jpg?f=user_large

Dit alles bij elkaar biedt weer veel opties om uit te proberen.
Tip: Test bij voorkeur als andere huisgenoten niet thuis zijn.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
[
    {
        "id": "0c1f5feb31a57e15",
        "type": "api-call-service",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Set Victron Warning ON",
        "server": "289362b880855228",
        "version": 5,
        "debugenabled": false,
        "domain": "input_boolean",
        "service": "turn_on",
        "areaId": [],
        "deviceId": [],
        "entityId": [
            "input_boolean.helper_victron_warning"
        ],
        "data": "",
        "dataType": "json",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "all",
        "x": 246,
        "y": 1472,
        "wires": [
            []
        ]
    },
    {
        "id": "1d2327fd9f46c791",
        "type": "api-call-service",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Set Victron Warning Off",
        "server": "289362b880855228",
        "version": 5,
        "debugenabled": false,
        "domain": "input_boolean",
        "service": "turn_off",
        "areaId": [],
        "deviceId": [],
        "entityId": [
            "input_boolean.helper_victron_warning"
        ],
        "data": "",
        "dataType": "json",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "all",
        "x": 402,
        "y": 1520,
        "wires": [
            []
        ]
    },
    {
        "id": "523d9977be63df35",
        "type": "link in",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link ingang Victron Alarm",
        "links": [
            "41f1ac8051a83bd7",
            "deb25dac3ea828d1"
        ],
        "x": 67,
        "y": 1504,
        "wires": [
            [
                "0c1f5feb31a57e15",
                "88e1382e8b01d54c"
            ]
        ]
    },
    {
        "id": "88e1382e8b01d54c",
        "type": "trigger",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Uit na 30s",
        "op1": "",
        "op2": "0",
        "op1type": "nul",
        "op2type": "num",
        "duration": "30",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 196,
        "y": 1520,
        "wires": [
            [
                "1d2327fd9f46c791"
            ]
        ]
    },
    {
        "id": "53ece337f0a22b17",
        "type": "inject",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Test HA Alarm",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Test Home Assistant Alarm",
        "payload": "1",
        "payloadType": "num",
        "x": 126,
        "y": 1424,
        "wires": [
            [
                "41f1ac8051a83bd7"
            ]
        ]
    },
    {
        "id": "41f1ac8051a83bd7",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link Test naar Victron Alarm",
        "mode": "link",
        "links": [
            "523d9977be63df35"
        ],
        "x": 299,
        "y": 1424,
        "wires": []
    },
    {
        "id": "289362b880855228",
        "type": "server",
        "name": "Home Assistant Api",
        "version": 5,
        "addon": false,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": false,
        "heartbeat": false,
        "heartbeatInterval": "30",
        "areaSelector": "friendlyName",
        "deviceSelector": "friendlyName",
        "entitySelector": "friendlyName",
        "statusSeparator": ": ",
        "statusYear": "hidden",
        "statusMonth": "short",
        "statusDay": "numeric",
        "statusHourCycle": "h23",
        "statusTimeFormat": "h:m:s",
        "enableGlobalContextStore": false
    }
]
Ga naar Inhoudsopgave

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

Een Potentiaalvrij Contact als Alarm

Voor veel mensen zal hier de eerste vraag zijn: "Wat is een potentiaalvrij contact?"
Dat is de technisch term die (onder andere Victron) gebruikt voor (bijvoorbeeld) een relais.
Het betekent dat er een contact kan worden gemaakt zonder dat er een elektrische verbinding is tussen de "oorsprong" en de "ontvanger".

Een Cerbo heeft een aantal binaire ingangen. Als de twee contactpunten van zo'n ingang worden verbonden zal de Cerbo dit registreren. Dit kan daarna in Node Red worden vastgesteld.
Dus, als er een extern apparaat is dat een relais kan schakelen, dan kan er een (veilig) signaal worden gegeven aan de Cerbo.

Afbeeldingslocatie: https://tweakers.net/i/T0ZhamBK8EApvjeLWAP6SEzRmwk=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/2un1wIxMM2FrfenIli71cjv3.jpg?f=user_large

Iedere Digital Input kan voor meerdere doeleinden gebruikt worden.

Afbeeldingslocatie: https://tweakers.net/i/KTkzg6ywru8XZ-5h9uq2lSICweg=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/MhVwBvLpA2JVu4aOGyQB6LAW.jpg?f=user_large

Ik heb één Digital Input in gebruik voor een rookalarm.

In Node Red zijn de geactiveerde Digital Input Nodes beschikbaar:

Afbeeldingslocatie: https://tweakers.net/i/i3tSxWWuuO60XtIqCiJpAsXGLGc=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/o8XeRmov9CJoH7PSerrSGT47.jpg?f=user_large


Afbeeldingslocatie: https://tweakers.net/i/CKBIwIE1jr5dVInRAZGYxIbigp4=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/XVyugXblgbZISgLObU9gItsT.jpg?f=user_large

De Digital Input Node levert (zoals inmiddels bekend) een waarde 0, 1 of 2.
Via een Link Node kun je deze koppelen aan E-mail (wellicht is dat in dit geval iets te traag) of een akoestisch alarm of een Home Assistant melding.

Wellicht vraag je je nu af hoe een rookmelder zo'n Digital Input kan schakelen.
Daarvoor heb je een rookmelder nodig met een relais. Als de rookmelder in de waarschuwings-stand gaat zal deze het relais inschakelen. Dat relais verbindt dan de twee contactpunten van de digitale ingang.

Het installeren van zo'n rookmelder heb ik eerder hier beschreven.


Een andere toepassing van een potentiaalvrij alarm kan zijn een alarm-knop.

Afbeeldingslocatie: https://tweakers.net/i/mVf9cMZxf-6OzWnLcrN7-ABkgfU=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/pgvSLZlID1Xif2rIZhnX7x5b.jpg?f=user_large

Hiermee kun je - in een relevante situatie - bijvoorbeeld je gehele installatie afsluiten.
De instructie hoe je dit doet volgt in een latere bijdrage.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[
    {
        "id": "60af61270d330776",
        "type": "victron-input-digitalinput",
        "z": "d760142041278588",
        "service": "com.victronenergy.digitalinput/1",
        "path": "/Alarm",
        "serviceObj": {
            "service": "com.victronenergy.digitalinput/1",
            "name": "Smoke alarm"
        },
        "pathObj": {
            "path": "/Alarm",
            "type": "enum",
            "name": "Digital input alarm",
            "enum": {
                "0": "No alarm",
                "1": "Warning",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "Smoke Alarm",
        "onlyChanges": true,
        "x": 154,
        "y": 1216,
        "wires": [
            [
                "c91bfc4e4cea977c"
            ]
        ]
    },
    {
        "id": "c91bfc4e4cea977c",
        "type": "link out",
        "z": "d760142041278588",
        "name": "Link Process Alarms naar Victron Alarm",
        "mode": "link",
        "links": [
            "523d9977be63df35"
        ],
        "x": 321,
        "y": 1216,
        "wires": []
    }
]
Ga naar Inhoudsopgave

Acties:
  • +2 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

Victron Omvormers Softwarematig Uitschakelen

In de bijdragen tot dusverre heb ik beschreven op welke wijze Waarschuwingen en Alarmen kunnen worden "doorgegeven" zodat je - of iemand anders - actie kunt ondernemen. Afhankelijk van de gewenste snelheid kan dit bijvoorbeeld per E-mail door een akoestisch alarm of via een Home Assistant melding.

Er kunnen situaties zijn waarbij het een goed idee is om de Victon Omvormers uit te schakelen zonder op menselijke actie te wachten. Denk aan oververhitting of een rook-alarm. In deze bijdrage beschrijf ik hoe Victron Omvormers softwarematig kunnen worden uitgeschakeld.

Ik begin met een heleboel waarschuwingen:
  • Als je het onderstaande of iets anders van deze beschrijving niet volledig begrijpt, gebruik het dan niet.
  • Deze toepassing kan en mag op geen enkele wijze een vervanging zijn van enig andere veiligheidsvoorziening zoals werkschakelaars, noodstop, zekeringen, veilige groepenkast enzovoort.
  • Het (onverwacht) uitschakelen van de stroom in huis (in de nacht) betekent dat het huis plotseling donker is. Dit kan vluchten bemoeilijken. Mensen kunnen in paniek raken.
  • Het (onverwacht) uitschakelen van de stroom in huis kan gevolgen hebben voor apparaten. Telefoons kunnen niet meer werken. Medische apparatuur kan/zal uitvallen. Bij servers of computers kan gegevensverlies optreden. "Witgoed" houdt er waarschijnlijk ook niet van.
  • Disclaimer: Ik ben per saldo amateur en kan ik niet garanderen dat mijn beschrijving (in alle gevallen) juist en correct zal werken en/of geschikt is voor de achterliggende apparatuur of infrastructuur.
  • Uiteindelijk ben je als eigenaar of eindgebruiker van het Victron Systeem volledig zelf verantwoordelijk voor het wel of niet gebruiken van deze toepassing met alle bijbehorende consequenties in de meest brede zin.
Zo. Dat staat.

Nu het leuke deel.

Victron Omvormers hebben een fysieke aan/uit schakelaar. Deze zit meestal rechtsonder (op een moeilijk bereikbare plaats).
In Node Red is ook een software variant van de aan/uit schakelaar. Deze "overruled" de instelling van de hardware schakelaar.

Afbeeldingslocatie: https://tweakers.net/i/JyNJDTBRuJlJoS2g98sBSC8LulI=/800x/filters:strip_icc():strip_exif()/f/image/qJrKuuSz5Qu6gOJkjWBmxWHx.jpg?f=fotoalbum_large

De software-schakelaar kan instellen dat de omvormer gebruikt wordt voor alleen opladen, alleen inverter, of aan of uit.

Afbeeldingslocatie: https://tweakers.net/i/iuJRGZg665TRTFuNV0XHCbkk-58=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/57uwRoXaiE4hGjWCupVRvusP.jpg?f=user_large

Voor deze toepassing zijn alleen de waarden 3 (on) en 4 (off) relevant.

Je schakelt de Victron Omvormers uit door deze entiteit op 4 te zetten.
Inschakelen kan daarna uitsluitend door de fysieke schakelaars op de Victron Omvormers eerst op "off" te zetten (midden positie) en daarna op "on" (voorzijde indrukken).

Als de software-instelling op 4 blijft staan zal de Victron na het opstarten direct weer uitschakelen. Daarom is het belangrijk dat het systeem tijdens het opstarten de waarde zelf naar 3 (= on) wijzigt.
Dit gaat door de instelling Initial Value 3 = on (zie hierboven).

Echter, ik heb gemerkt dat dit (bij mij) niet altijd (tijdig) gebeurt. Mogelijk komt dit omdat ik een heel uitgebreide Node Red programmering heb toegevoegd. Dan wordt deze Node wellicht net te laat geactiveerd.

Daarom "forceer" ik een instelling naar de waarde 3 via een Inject Node.

Afbeeldingslocatie: https://tweakers.net/i/h2twJtwlYVCK5QnBKHoqv8E1YH0=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/RoZXYVWkjBaerq6clyePlLsI.jpg?f=user_large

Dit is de instelling van de Inject Node.

Afbeeldingslocatie: https://tweakers.net/i/Z6HirOVQGvoxrhjFk8q9xf42aV0=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/1OJQqofrOTRNqpNjs0MoHcfA.jpg?f=user_large

Deze Inject wordt bij opstarten éénmalig uitgevoerd.

Afbeeldingslocatie: https://tweakers.net/i/cCJJWKvTq-_St2ApQX9DyLy8tr4=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/uebq0CIDUigMRUQs2eOLzDN1.jpg?f=user_large

Aan de linkerzijde van de Flow zit een Link In Node.
Deze kan worden gebruikt om vanaf alle andere Alarm-Flows het uitschakelen aan te roepen.
Iedere (!) invoerwaarde zal het proces activeren, behalve de waarde 0.

Na de ingang heb ik een Trigger Node met een wachttijd toegevoegd van 62 seconden. Dat betekent dat er (nog) niets gebeurt.
Indien er binnen die minuut een nieuw bericht binnenkomt met payload 0, dan zal het uitschakel-proces worden afgebroken en gebeurt er verder niets.

Afbeeldingslocatie: https://tweakers.net/i/OqThrSADzN_d5hocaQ9Mkjr-iEs=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/xiObAGAMO9d3Ghrr5hsEJFZL.jpg?f=user_large

Als er geen 0-bericht wordt ontvangen zal de Trigger Node na 62 seconden de waarde 4 verzenden.

Dit bericht wordt (ook) verzonden aan de e-mail logica. Dat is belangrijk omdat daarmee wordt vastgelegd waarom het systeem "opeens" uitschakelt.
Als het goed is, is ook al eerder in het Alarm-proces een e-mail verzonden met de feitelijke alarm-melding.

Om de e-mail tijd te geven om "de deur uit te gaan" heb ik nog een extra wachttijd van 5 seconden toegevoegd. Dan komt het bericht met de waarde 4 aan bij de VE.Bus System Control Node en zal de Victron Omvormer pardoes uitschakelen.

De hierboven genoemde wachttijden zijn arbitrair.
Voor sommige alarmen vind je een wachttijd van 62+5 seconden wellict veel te lang. Misschien duurt het verzenden van e-mail langer dan 5 seconden en moet die wachttijd worden vergroot.
Dit moet je zelf bepalen en kun je natuurlijk in de beschreven nodes eenvoudig aanpassen.

Voor het opnieuw inschakelen moet je eerst alle Victron Omvormers fysiek op uit zetten, en daarna stuk voor stuk weer aan.

Als je dit wilt testen, doe dat dan overdag. Informeer je huisgenoten en schakel kritische apparaten in huis eerst uit.

Veel succes en (wellicht?) veel plezier.

Let op!
Als je de Victron Omvormer(s) uitschakelt staan nog heel veel onderdelen onder spanning.
Dit geldt met name voor de batterijen.

OK, toch nog even dit.
Als je iets niet goed doet kan het gebeuren dat de Victrons na het opstarten direct weer uitschakelen.
Bijvoorbeeld is er iets mis met de Node Red instructie om de software-switch op 3 te zetten.
Ik heb dit zelf een keer gehad.
Mijn oplossing is geweest om de Cerbo los te koppelen van de Multiplussen en daarna de Multiplussen te herstarten. Daarna heb ik de Cerbo aangesloten en bij de Remote Console aangegeven dat Node Red in de Veilige Modus moest starten.
Bij mij was daarna de aanpassing om bij starten direct de "3" te injecteren (zie hierboven).

Ik doe geen uitspraken over de kans dat zoiets (of iets anders) gebeurt. Echter, ik ben bang dat ik je dan helaas niet kan helpen.

Lastig hè?

Hieronder staat de Javascriptcode van de beschreven flow.
Deze bijdrage kan ik slechts twee dagen veranderen.
Controleer vóór gebruik of er verder in dit topic geen aanvullingen of wijzigingen staan.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
[
    {
        "id": "b536daad489cf114",
        "type": "victron-output-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Mode",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Mode",
            "type": "enum",
            "name": "Switch Position",
            "remarks": "<p>Note that <tt>/ModeIsAdjustable</tt> needs to be set to 1.</p> ",
            "enum": {
                "1": "Charger Only",
                "2": "Inverter Only",
                "3": "On",
                "4": "Off"
            },
            "writable": true
        },
        "initial": "3",
        "name": "Multiplus 3=On; 4=Off",
        "onlyChanges": false,
        "x": 732,
        "y": 1248,
        "wires": []
    },
    {
        "id": "b295abb9945344a4",
        "type": "trigger",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Timeout 62s, then send 4 = Off",
        "op1": "",
        "op2": "4",
        "op1type": "nul",
        "op2type": "num",
        "duration": "62",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "0",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 254,
        "y": 1280,
        "wires": [
            [
                "06d4022b7da81dae",
                "61fea031afc5b0db"
            ]
        ]
    },
    {
        "id": "d728418da60af3c3",
        "type": "link in",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Entry Point Victron Power Off",
        "links": [
            "5e60b73ca8478204"
        ],
        "x": 65,
        "y": 1280,
        "wires": [
            [
                "b295abb9945344a4"
            ]
        ]
    },
    {
        "id": "36781a721e82cab6",
        "type": "inject",
        "z": "4af0ca0c4d0e6ba7",
        "name": "On Deploy: Send 3 = Victron On",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "0.1",
        "topic": "",
        "payload": "3",
        "payloadType": "num",
        "x": 426,
        "y": 1216,
        "wires": [
            [
                "b536daad489cf114"
            ]
        ]
    },
    {
        "id": "1d7e042c471e8057",
        "type": "comment",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Reset any previous Off command",
        "info": "",
        "x": 430,
        "y": 1184,
        "wires": []
    },
    {
        "id": "f850cfe0886d6c8d",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Send Temp to E-mail",
        "mode": "link",
        "links": [
            "937f02372220657c"
        ],
        "x": 703,
        "y": 1328,
        "wires": []
    },
    {
        "id": "61fea031afc5b0db",
        "type": "change",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Set Switch Code to Text",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "1",
                "fromt": "num",
                "to": "Info: Set Switch Victron Charger Only",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "2",
                "fromt": "num",
                "to": "Info: Set Switch Victron Inverter Only",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "3",
                "fromt": "num",
                "to": "Info: Set Switch Victron On",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "4",
                "fromt": "num",
                "to": "Alarm: Info: Set Switch Victron Off - Shutdown Victron",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 542,
        "y": 1328,
        "wires": [
            [
                "f850cfe0886d6c8d"
            ]
        ]
    },
    {
        "id": "06d4022b7da81dae",
        "type": "delay",
        "z": "4af0ca0c4d0e6ba7",
        "name": "",
        "pauseType": "delay",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 492,
        "y": 1280,
        "wires": [
            [
                "b536daad489cf114"
            ]
        ]
    }
]
Ga naar Inhoudsopgave

Acties:
  • +2 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

Externe Apparaten Uitschakelen

Hierboven hebben we gezien hoe je - in geval van een Alarm - de Victron Omvormers kunt uitschakelen.
Hierdoor kan de stroom in huis wegvallen (ik weet dat dit afhankelijk is van de wijze van aansluiten).

Wanneer de stroom zal worden uitgeschakeld kan het zinvol zijn om bepaalde apparaten in huis tevoren uit te schakelen. Een voorbeeld daarvan is een NAS (ook hier weet ik dat je een NAS met een UPS kunt beschermen en dat een UPS een 'eigen' uitschakel-mechanisme heeft). Andere voorbeelden: huis-automatisering (Home Assistant), satelliet-ontvangers, televisies enz.

In deze bijdrage laat ik zien hoe ik mijn eigen NAS, een Synology DiskStation, automatisch wordt uitgeschakeld in de minuut voordat mijn Victron omvormers automatisch worden uitgeschakeld.

Zoals de meeste op Linux gebaseerde apparaten kan mijn NAS met het shutdown commando worden uitgeschakeld. Analoog kan deze werkwijze ook worden toegepast op veel andere Linux apparaten.

Er zijn een paar randvoorwaarden:
  • Het apparaat moet benaderbaar zijn via SSH.
  • Er moet worden ingelogd met 'genoeg' autorisatie.
  • Het apparaat moet het shutdown commando via SSH accepteren.
De benodigde onderdelen/instellingen/services etc. moeten op het betreffende apparaat worden geactiveerd. De manier waarop valt buiten het bestek van deze bijdrage.

In Node Red moet een methode worden geïnstalleerd om SSH commando's te verzenden.
Ik gebruik hiervoor de invoeg-toepassing BigSSH. Deze kan worden toegevoegd via het palette-menu:

Afbeeldingslocatie: https://tweakers.net/i/fr-ARI1OupniinLfXLs1LxGloL8=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/93iiHA9Z3EW5O9zVg01hpxb7.jpg?f=user_large

Installeer nu de invoeg-toepassing node-red-contrib-bigssh.

Afbeeldingslocatie: https://tweakers.net/i/fIwOGqJWdMMtuFOYPgn-Sx2nA2w=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/rlbhkqwg0I4SSvRzsjvr2CxE.jpg?f=user_large

De Node bigssh is nu beschikbaar in de sectie network van Node Red.

Afbeeldingslocatie: https://tweakers.net/i/fHIZ6oiG9XSnsUuuh6H_77Ngi10=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/zDfofU803PhnHDpz6tqt2vE0.jpg?f=user_large

De parameters zijn in principe heel eenvoudig.

Afbeeldingslocatie: https://tweakers.net/i/ZAPUiFi9jIXYwViSbtwyvg3RG44=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/7LHvDzBgqrK4MjFBvo7Erujp.jpg?f=user_large

Bij credentials type je de username en het IP-adres van het uit te schakelen apparaat.
Bijvoorbeeld: admin@10.11.22.33

Bij command type je het volledige commando om het apparaat uit te schakelen. Dat zal vaak ook het wachtwoord bevatten ten behoeve van de shutdown instructie.
Bijvoorbeeld: /bin/echo 'wachtwoord' | sudo -S poweroff

Voor degenen die niet heel bekend zijn met Linux:
- /bin/echo is een programma dat de tekst die erop volgt leest en daarna doorstuurt naar een volgend gedeelte.
- 'wachtwoord' is het wachtwoord van de gebruiker die bij credentials is ingevuld. Deze gebruiker moet voldoende rechten hebben om het shutdown commando uit te mogen voeren.
- het verticale streepje wordt het pipe teken (character) genoemd. Dit zorgt ervoor dat de uitvoer van het linker gedeelte (in dit geval het wachtwoord) wordt doorgestuurd als invoer aan het rechter gedeelte.
- sudo is een afkorting van Super User Do. Het betekent dat de instructie rechts daarvan met de hoogste autorisatie moet worden uitgevoerd.
- -S shutdown is de uit te voeren instructie waarbij de -S ervoor zorgt dat de instructie het wachtwoord niet vanaf een scherm verwacht maar vanaf de pipe

Helaas zijn alle apparaten verschillend ontworpen en daarnaast ook nog eens verschillend ingericht met een variëteit aan instellingen. Er is dus een behoorlijk grote kans dat de hier beschreven instructie nét iets anders zal moeten zijn. Dat is een kwestie van studie en uitproberen. Ook hier kan ik je - helaas - niet mee helpen.

Er worden enkele andere Nodes gebruikt:

Afbeeldingslocatie: https://tweakers.net/i/cj8adctRZCS4aGmvHYcKeisP5IE=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/GqyfH8UQdvputqnobc4H6LYS.jpg?f=user_large

Een Link In Node (links) die kan worden aangeroepen vanaf alle Alarm-flows die hiervoor zijn beschreven. Iedere payload zal worden geaccepteerd om de BigSSH Node te activeren.

Deze Link In Node is ook gekoppeld aan een e-mail logica, waarbij eerst nog even het onderwerp een verklarende tekst meekrijgt.

De BigSSH Node heeft drie Debug nodes als uitvoer. Deze zijn essentieel bij testen en debug-activiteiten.

Tenslotte zie je bovenaan nog een Test-Node die via een Link Out Node het shutdown-process kan activeren. Hiermee kun je testen zonder elders een Alarm te activeren.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
[
    {
        "id": "970bd4d28b18dca1",
        "type": "bigssh",
        "z": "4af0ca0c4d0e6ba7",
        "name": "DiskStation PowerOff",
        "commandLine": "/bin/echo 'wachtwoord' | sudo -S poweroff",
        "commandArgs": "",
        "minError": 1,
        "minWarning": 1,
        "noStdin": false,
        "format": "utf8",
        "payloadIsArg": false,
        "myssh": "13eca0dfb95a59d8",
        "x": 244,
        "y": 1008,
        "wires": [
            [
                "2f8a6ad627d022fe"
            ],
            [
                "ea473d784579bc1c"
            ],
            [
                "2e805f5899c472f4"
            ]
        ]
    },
    {
        "id": "2f8a6ad627d022fe",
        "type": "debug",
        "z": "4af0ca0c4d0e6ba7",
        "name": "BigSSH stdout",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 496,
        "y": 976,
        "wires": []
    },
    {
        "id": "ea473d784579bc1c",
        "type": "debug",
        "z": "4af0ca0c4d0e6ba7",
        "name": "BigSSH status",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 496,
        "y": 1008,
        "wires": []
    },
    {
        "id": "2e805f5899c472f4",
        "type": "debug",
        "z": "4af0ca0c4d0e6ba7",
        "name": "BigSSH stderr",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 496,
        "y": 1040,
        "wires": []
    },
    {
        "id": "07b9d8c013aebfab",
        "type": "link in",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Entry Point DiskStation Power Off",
        "links": [
            "2eea61084001a9b8",
            "1a00c89cd96796aa"
        ],
        "x": 65,
        "y": 1008,
        "wires": [
            [
                "1d597bbe26d31899",
                "970bd4d28b18dca1"
            ]
        ]
    },
    {
        "id": "1d597bbe26d31899",
        "type": "change",
        "z": "4af0ca0c4d0e6ba7",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "Alarm: Shutdown DiskStation",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 214,
        "y": 1088,
        "wires": [
            [
                "8598c41e009dc8f8"
            ]
        ]
    },
    {
        "id": "8598c41e009dc8f8",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Send to E-mail",
        "mode": "link",
        "links": [
            "937f02372220657c"
        ],
        "x": 431,
        "y": 1088,
        "wires": []
    },
    {
        "id": "0a401e9321977bde",
        "type": "inject",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Test Poweroff",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "Button Test Poweroff pressed",
        "payloadType": "str",
        "x": 142,
        "y": 928,
        "wires": [
            [
                "1a00c89cd96796aa"
            ]
        ]
    },
    {
        "id": "1a00c89cd96796aa",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to DiskStation Power Off",
        "mode": "link",
        "links": [
            "07b9d8c013aebfab"
        ],
        "x": 303,
        "y": 928,
        "wires": []
    },
    {
        "id": "13eca0dfb95a59d8",
        "type": "SSH_Credentials",
        "host": "10.11.22.33",
        "port": "22",
        "userlabel": "admin@10.11.22.33"
    }
]
Ga naar Inhoudsopgave

Acties:
  • +1 Henk 'm!

  • Q
  • Registratie: November 1999
  • Laatst online: 22:24

Q

Au Contraire Mon Capitan!

SSH toegang en security
Het afsluiten van Linux systemen via SSH kan een prima oplossing zijn voor jouw situatie.

Het is wel belangrijk om je af te vragen of je SSH wachtwoorden aan je NodeRed installatie wilt toevoegen, omdat dit een aanvalsvector kan worden op je andere systemen. Vaak kiezen mensen ook om alleen SSH toegang via keys toe te staan en wachtwoord authenticatie te verbieden. Voor een thuis-situatie kun je zelf je keuze maken of je dat nodig vind.

Leuk Q dat je zeurt over security. Maar wat is het alternatief dan?

Vanuit security oogpunt zou het mooier zijn als je in plaats van een push mechanisme, een pull mechanisme implementeert.

Dat zou de vorm kunnen hebben van een script op iedere Linux machine die luistert naar een MQTT kanaal op de Cerbo gx.

https://community.victron...ocal-via-mqtt-broker.html

Als op een speciaal MQTT kanaal een 'shutdown' bericht voorbij komt, dan zal dit script de shudown zelf uitvoeren. Geen SSH toegang nodig.

Ik heb hier een voorbeeld gevonden wat misschien kan helpen om zo'n script te maken.

https://gist.github.com/D...80b67359c8de6230c6b1dafa2

Ik weet zelf ook niet hoe je eventueel via NodeRed een MQTT bericht kunt versturen, dus dat moet je dan ook zelf uitzoeken. Zie echter deze reactie.

Deze aanpak is mogelijk wel veiliger, maar je moet wel genoeg kennis hebben om dit zelf op te zetten en je moet ook voor jezelf bepalen welk risico je wilt lopen en jij kunt alleen voor jezelf bepalen wat realistisch is. Als je toch voor de SSH route gaat, prima, dat is nu een geinformeerde beslissing. :D

[ Voor 4% gewijzigd door Q op 07-09-2024 16:03 ]


Acties:
  • +2 Henk 'm!

  • John245
  • Registratie: Januari 2020
  • Laatst online: 05:57
Q schreef op zaterdag 7 september 2024 @ 15:52:
Het afsluiten van Linux systemen via SSH kan een prima oplossing zijn voor jouw situatie.

Het is wel belangrijk om je af te vragen of je SSH wachtwoorden aan je NodeRed installatie wilt toevoegen, omdat dit een aanvalsvector kan worden op je andere systemen. Vaak kiezen mensen ook om alleen SSH toegang via keys toe te staan en wachtwoord authenticatie te verbieden. Voor een thuis-situatie kun je zelf je keuze maken of je dat nodig vind.

Leuk Q dat je zeurt over security. Maar wat is het alternatief dan?

Vanuit security oogpunt zou het mooier zijn als je in plaats van een push mechanisme, een pull mechanisme implementeert.

Dat zou de vorm kunnen hebben van een script op iedere Linux machine die luistert naar een MQTT kanaal op de Cerbo gx.

https://community.victron...ocal-via-mqtt-broker.html

Als op een speciaal MQTT kanaal een 'shutdown' bericht voorbij komt, dan zal dit script de shudown zelf uitvoeren. Geen SSH toegang nodig.

Ik heb hier een voorbeeld gevonden wat misschien kan helpen om zo'n script te maken.

https://gist.github.com/D...80b67359c8de6230c6b1dafa2

Ik weet zelf ook niet hoe je eventueel via NodeRed een MQTT bericht kunt versturen, dus dat moet je dan ook zelf uitzoeken.

Deze aanpak is mogelijk wel veiliger, maar je moet wel genoeg kennis hebben om dit zelf op te zetten en je moet ook voor jezelf bepalen welk risico je wilt lopen en jij kunt alleen voor jezelf bepalen wat realistisch is. Als je toch voor de SSH route gaat, prima, dat is nu een geinformeerde beslissing. :D
@Q @MJ de Bruijn
Via Node-RED is het heel simpel om MQTT berichten te versturen. Zo heb ik heel mijn Victron systeem aan HomeSeer gekoppeld.
Afbeeldingslocatie: https://tweakers.net/i/Gxdhtnd9m_BWK6j5X0sWlBCyKqY=/800x/filters:strip_exif()/f/image/R2qmaFeJ7VW9mWo4FbjPxlD5.png?f=fotoalbum_large

Tibber; 3-fase Victron ESS, 38,4 kWh opslag; gasloos sinds 2013; Nibe F1245-10PC; SAP; HomeSeer4; Proxmox 8


Acties:
  • +1 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02
Q schreef op zaterdag 7 september 2024 @ 15:52:
SSH toegang en security
Vanuit security oogpunt zou het mooier zijn als je in plaats van een push mechanisme, een pull mechanisme implementeert.
Dank voor je reactie.
Ik weet dat MQTT bestaat, het staat aan bij mijn Victron implementatie, ik denk dat het ook ergens gebruikt wordt, maar veel meer weet ik er ook niet van.

Allereerst over push of pull.
Bij het afsluiten van een systeem in een Alarm situatie is een snelle reactie zeer belangrijk. Dat is een voordeel van push.
Een pull methode zou een vertraging kunnen opleveren. Hier schiet mijn kennis over MQTT te kort om te weten of dit een polling methode toepast of een trigger methode met directe reactie op een binnenkomend bericht. Ik heb vooralsnog geen idee van een mogelijke vertraging.

Ik vind het vermelden van leesbare wachtwoorden in Node Red ook matig, ook al heb ik geen enkele toegang vanaf buiten. Vooralsnog werkt het. Het belang is ook beperkt. De kans op werkelijk gebruik is heel klein. Dus, ik ben terughoudend om hier veel tijd in te steken.

Ik heb de sites van je verwijzingen bekeken. Die verwachten al heel veel achtergrond kennis. Een stap-voor-stap benadering zoals ik hiervoor steeds heb geprobeerd heb om te gebruiken zou hier heel plezierig zijn, niet alleen voor mij maar ook voor andere geïnteresseerden.

Dus, als je jouw kennis hier in kleine brokjes wilt delen, wat mij betreft heel graag.

Acties:
  • 0 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02
John245 schreef op zaterdag 7 september 2024 @ 16:00:
Via Node-RED is het heel simpel om MQTT berichten te versturen. Zo heb ik heel mijn Victron systeem aan HomeSeer gekoppeld.
[Afbeelding]
Je afbeelding ziet er indrukwekkend uit.

Ik begrijp dat HomeSeer een alternatief is voor Home Assistant (en omgekeerd).
Jij hebt dus een methode gemaakt om de waarden van je Victron Systeem over te seinen naar HomeSeer. Begrijp ik dat goed? Ik zie dat er ook een Homeseer integratie is voor Node Red. Gebruik je die niet?

Wellicht kun je voor andere Homeseer gebruikers je werkwijze via MQTT nader toelichten? Wellicht zelfs met een stap-voor-stap methode?

Dat kan weer inspiratie zijn voor andere toepassingen om de gegevens van Victron te monitoren.

Acties:
  • 0 Henk 'm!

  • John245
  • Registratie: Januari 2020
  • Laatst online: 05:57
MJ de Bruijn schreef op zaterdag 7 september 2024 @ 18:47:
[...]

Dank voor je reactie.
Ik weet dat MQTT bestaat, het staat aan bij mijn Victron implementatie, ik denk dat het ook ergens gebruikt wordt, maar veel meer weet ik er ook niet van.

Allereerst over push of pull.
Bij het afsluiten van een systeem in een Alarm situatie is een snelle reactie zeer belangrijk. Dat is een voordeel van push.
Een pull methode zou een vertraging kunnen opleveren. Hier schiet mijn kennis over MQTT te kort om te weten of dit een polling methode toepast of een trigger methode met directe reactie op een binnenkomend bericht. Ik heb vooralsnog geen idee van een mogelijke vertraging.

Ik vind het vermelden van leesbare wachtwoorden in Node Red ook matig, ook al heb ik geen enkele toegang vanaf buiten. Vooralsnog werkt het. Het belang is ook beperkt. De kans op werkelijk gebruik is heel klein. Dus, ik ben terughoudend om hier veel tijd in te steken.

Ik heb de sites van je verwijzingen bekeken. Die verwachten al heel veel achtergrond kennis. Een stap-voor-stap benadering zoals ik hiervoor steeds heb geprobeerd heb om te gebruiken zou hier heel plezierig zijn, niet alleen voor mij maar ook voor andere geïnteresseerden.

Dus, als je jouw kennis hier in kleine brokjes wilt delen, wat mij betreft heel graag.
MQTT is geen polling methode. Dat is ook de reden dat ik de MQTT route ben gegaan voor de implementatie van het Victron systeem in HomeSeer in plaats van Modbus.

Je zou dus gewoon een MQTT bericht kunnen maken dat door al je clients opgepakt wordt. In het specifieke geval van @Q heb ik geen ervaring. Ik heb hier nog een APC UPS er tussen en daarmee communiceert Synology. Mijn Proxmox servers gebruiken Powerchute (ook van APS).

Tibber; 3-fase Victron ESS, 38,4 kWh opslag; gasloos sinds 2013; Nibe F1245-10PC; SAP; HomeSeer4; Proxmox 8


Acties:
  • +1 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02
John245 schreef op zaterdag 7 september 2024 @ 18:55:
MQTT is geen polling methode. Dat is ook de reden dat ik de MQTT route ben gegaan voor de implementatie van het Victron systeem in HomeSeer in plaats van Modbus.
Ok, dus als mijn Victron Node Red een relevant MQTT bericht publiceert, en mijn NAS luistert daar naar, dan zal deze direct en zonder vetraging reageren?

Een interessante optie ! Oke, nu nog 'even' realiseren.

Kun je aangeven welke Node Red MQTT integratie je hebt gekozen? Ik zie er een flink aantal (meer dan 100).

Acties:
  • 0 Henk 'm!

  • John245
  • Registratie: Januari 2020
  • Laatst online: 05:57
MJ de Bruijn schreef op zaterdag 7 september 2024 @ 18:53:
[...]

Je afbeelding ziet er indrukwekkend uit.

Ik begrijp dat HomeSeer een alternatief is voor Home Assistant (en omgekeerd).
Jij hebt dus een methode gemaakt om de waarden van je Victron Systeem over te seinen naar HomeSeer. Begrijp ik dat goed? Ik zie dat er ook een Homeseer integratie is voor Node Red. Gebruik je die niet?

Wellicht kun je voor andere Homeseer gebruikers je werkwijze via MQTT nader toelichten? Wellicht zelfs met een stap-voor-stap methode?

Dat kan weer inspiratie zijn voor andere toepassingen om de gegevens van Victron te monitoren.
HomeSeer is een alternatief voor Home-Assistant en omgekeerd. Toen ik in 2010 met HomeSeer starte bestond Home-Assistant nog niet.

Ik gebruik de MQTT node om te Cerbo uit te lezen en een andere MQTT Node om de waarden naar HomeSeer te schrijven.

Node om naar HomeSeer te schrijven:
Afbeeldingslocatie: https://tweakers.net/i/PvgrrIDsxDBBpjMJnUreixXatZA=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/I6pfxVaRkK3o1Shrr3K5g8nd.png?f=user_large

In HomeSeer is een MQTT plugin actief (mcsMQTT) die het topic (hieronder weergegeven omdat het in de Node niet volledig leesbaar is) vertaalt naar een naam. systeem en ruimte aan en het sub device (zie hieronder).
Victron-ESS/Pylontech Battery Overview/Battery State of Charge (%)

Afbeeldingslocatie: https://tweakers.net/i/GhNd9f8rha-6kpwkTFguSGBkK_s=/800x/filters:strip_exif()/f/image/6x8sD1x7MynZ1aswTY658lld.png?f=fotoalbum_large

In dit geval gebruik ik dus niet de HomeSeer contrib. Deze gebruik ik wel voor bijvoorbeeld Modbus.

Volgens mij is er ook een integratie om Home_Assistant aan HomeSeer te koppelen. Er is ook een plugin om Home Assistant devices te gebruiken binnen HomeSeer.

Tibber; 3-fase Victron ESS, 38,4 kWh opslag; gasloos sinds 2013; Nibe F1245-10PC; SAP; HomeSeer4; Proxmox 8


Acties:
  • 0 Henk 'm!

  • John245
  • Registratie: Januari 2020
  • Laatst online: 05:57
MJ de Bruijn schreef op zaterdag 7 september 2024 @ 19:01:
[...]

Ok, dus als mijn Victron Node Red een relevant MQTT bericht publiceert, en mijn NAS luistert daar naar, dan zal deze direct en zonder vetraging reageren?

Een interessante optie ! Oke, nu nog 'even' realiseren.

Kun je aangeven welke Node Red MQTT integratie je hebt gekozen? Ik zie er een flink aantal (meer dan 100).
Heb jij deze Nodes niet standaard? Ik zie nergens onder Manage Palete wat er op duidt dat ik hiervoor een contrib gebruik.

Afbeeldingslocatie: https://tweakers.net/i/5WOEk13M7kRB0WMOA3qirxv-5fM=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/pUJ88nfnm7LvkdbVHje27FxH.png?f=user_large

Tibber; 3-fase Victron ESS, 38,4 kWh opslag; gasloos sinds 2013; Nibe F1245-10PC; SAP; HomeSeer4; Proxmox 8


Acties:
  • +1 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02
Het is wat. Ze staan er zo maar tussen. 8)7

Ik heb naar een integratie gezocht zonder bij de Nodes te kijken.

Dank voor je afbeelding.

[ Voor 167% gewijzigd door MJ de Bruijn op 07-09-2024 19:21 ]


Acties:
  • 0 Henk 'm!

  • John245
  • Registratie: Januari 2020
  • Laatst online: 05:57
MJ de Bruijn schreef op zaterdag 7 september 2024 @ 19:01:
[...]

Ok, dus als mijn Victron Node Red een relevant MQTT bericht publiceert, en mijn NAS luistert daar naar, dan zal deze direct en zonder vetraging reageren?

Een interessante optie ! Oke, nu nog 'even' realiseren.

Kun je aangeven welke Node Red MQTT integratie je hebt gekozen? Ik zie er een flink aantal (meer dan 100).
Dit reageert inderdaad zonder enige vertraging.

Tibber; 3-fase Victron ESS, 38,4 kWh opslag; gasloos sinds 2013; Nibe F1245-10PC; SAP; HomeSeer4; Proxmox 8


Acties:
  • +1 Henk 'm!

  • John245
  • Registratie: Januari 2020
  • Laatst online: 05:57
MJ de Bruijn schreef op zaterdag 7 september 2024 @ 19:01:
[...]

Ok, dus als mijn Victron Node Red een relevant MQTT bericht publiceert, en mijn NAS luistert daar naar, dan zal deze direct en zonder vetraging reageren?

Een interessante optie ! Oke, nu nog 'even' realiseren.

Kun je aangeven welke Node Red MQTT integratie je hebt gekozen? Ik zie er een flink aantal (meer dan 100).
En als je met MQTT aan de slag wel is de MQTT explorer wel handig. Verbinden met je Cerbo en je ziet gelijk alle topics.

Afbeeldingslocatie: https://tweakers.net/i/lyUcQBByzA4wAw6zs_fgbHw1tIw=/800x/filters:strip_exif()/f/image/JmOwA8MsuH8zNSvefnbfIspk.png?f=fotoalbum_large

Tibber; 3-fase Victron ESS, 38,4 kWh opslag; gasloos sinds 2013; Nibe F1245-10PC; SAP; HomeSeer4; Proxmox 8


Acties:
  • 0 Henk 'm!

  • John245
  • Registratie: Januari 2020
  • Laatst online: 05:57
MJ de Bruijn schreef op zaterdag 7 september 2024 @ 19:19:
Het is wat. Ze staan er zo maar tussen. 8)7

Ik heb naar een integratie gezocht zonder bij de Nodes te kijken.

Dank voor je afbeelding.
MQTT is zo standaard dat dat in Node-RED ingebakken zit.

Tibber; 3-fase Victron ESS, 38,4 kWh opslag; gasloos sinds 2013; Nibe F1245-10PC; SAP; HomeSeer4; Proxmox 8


Acties:
  • +1 Henk 'm!

  • Q
  • Registratie: November 1999
  • Laatst online: 22:24

Q

Au Contraire Mon Capitan!

MJ de Bruijn schreef op zaterdag 7 september 2024 @ 18:47:
[...]

Dank voor je reactie.
Ik weet dat MQTT bestaat, het staat aan bij mijn Victron implementatie, ik denk dat het ook ergens gebruikt wordt, maar veel meer weet ik er ook niet van.

Allereerst over push of pull.
Bij het afsluiten van een systeem in een Alarm situatie is een snelle reactie zeer belangrijk. Dat is een voordeel van push.
Een pull methode zou een vertraging kunnen opleveren. Hier schiet mijn kennis over MQTT te kort om te weten of dit een polling methode toepast of een trigger methode met directe reactie op een binnenkomend bericht. Ik heb vooralsnog geen idee van een mogelijke vertraging.
Ik had dit even toe moeten lichten: push/pull vanuit security oogpunt wil niet zeggen push/poll.

MQTT is een publish/subscribe systeem voor berichten. John lichte dit ook al toe maar om expliciet te zijn: MQTT is (kort door de bocht) bedoeld voor near real-time berichten doorsturen naar ‘subscribers’ dus je hebt niet te maken met de vertraging van polling.

MQTT is top als communicatie mechanisme tussen systemen.

Ik gebruik zelf MQTT voor mijn zelfbouw frutsel om een 12V 25A charger via een zigbee 220V schakelaar te starten als de Tibber prijzen laag zijn. Dat is effectief instant. Een zigbee ikea remote gebruik ik om de inverter aan of uit te zetten. (Bij prijzen boven de 30cent gaat hij altijd aan om over de dure uren te springen).
Dit is allemaal in Python gefrutselt en de code is een drama, maar het werkt wel goed.

Acties:
  • +3 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02

Alle Waarschuwingen en Alarmen verwerken in één Flow

Hierboven heb ik een aantal methode uitgelegd hoe waarschuwingen en alarmen kunnen worden verwerkt.

Het is natuurlijk mogelijk om voor iedere alarm-entiteit een eigen logica (In Node Red: Flow) te maken, maar dan wordt er veel dubbel gedaan.
Ook bestaat het risico dat de "OK" melding van de ene entiteit een "Warning" van een endere entiteit uitschakelt en ongedaan maakt.

Hierom heb ik een Flow gemaakt waar alle (door mij gebruikte) Waarschuwingen en Alarmen worden gecombineerd. Alle signalen worden verwerkt door een Node Red Functie.

Afbeeldingslocatie: https://tweakers.net/i/tRJDpYWCGYfgKfLrKMzjSbaLJuE=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/e6L9QAR69Ln3HiMnC6byEN07.jpg?f=user_large

Afbeeldingslocatie: https://tweakers.net/i/PFM6eKZejLmncw5VdY8fAmAVdNs=/full-fit-in/4920x3264/filters:max_bytes(3145728):no_upscale():strip_icc():fill(white):strip_exif()/f/image/bf3f2V2IO5nWnKFD2pl68lAy.jpg?f=user_large

De programmeertaal van een Node Red Functie is Javascript. De programma-code van de Functie Process Alarms heb ik met commentaar gedocumenteerd.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
// Function Process Alarms
// This function will be triggered by every Node
// that sends it output to the Link In Node

context = context || {};

// The context will hold the state of previous messages
if (context.LastAlarm == null)
{
    context.LastAlarm = {};
}
if (context.LastWarning == null)
{
    context.LastWarning = {};
}

const Now = new Date();
let NowInSeconds = Math.floor(Now.getTime() / 1000);

var StateText = msg.topic;
var StateColor = "black";

// These variables will hold the result of all tests
var AlarmLevel = 0;
var AlarmText = "";

// Now process the sensor that triggered this Flow

// External temperature sensors
if ( (msg.topic == "Multiplus 1 Temp")
  || (msg.topic == "Multiplus 2 Temp")
  || (msg.topic == "Multiplus 3 Temp")
   )
{
    if (msg.payload > 55) 
        { AlarmLevel = 2;
          AlarmText = "> 55" 
        }
    else if (msg.payload > 50) 
        { AlarmLevel = 1;
          AlarmText = "> 50" 
        }
    else
        { Alarmlevel = 0;
          AlarmText = "<= 50" 
        }
}

// Battery temperature sensors
else if ( (msg.topic == "Totle Power Temp")
       || (msg.topic == "Totle Cell Temp")
       || (msg.topic == "Battery_Temp")
   )
{
    if (msg.payload > 40) 
        { AlarmLevel = 2;
          AlarmText = "> 40" 
        }
    else if (msg.payload > 34) 
        { AlarmLevel = 1;
          AlarmText = "> 34" 
        }
    else
        { Alarmlevel = 0;
          AlarmText = "<= 34" 
        }
}

// Test buttons
else if (msg.topic == "Test")
{
    if (msg.payload == 2) 
        { AlarmLevel = 2;
          AlarmText = "2" 
        }
    else if (msg.payload == 1) 
        { AlarmLevel = 1;
          AlarmText = "1" 
        }
    else
        { Alarmlevel = 0;
          AlarmText = "0" 
        }
}

// Alarm sensors
else if ( (msg.topic == "Battery Temp Alarm")
       || (msg.topic == "System Temp Alarm")
       || (msg.topic == "System Temp Sensor Alarm")
       || (msg.topic == "L1 Temp Alarm")
       || (msg.topic == "L2 Temp Alarm")
       || (msg.topic == "L3 Temp Alarm")
       || (msg.topic == "Smoke Alarm")
       || (msg.topic == "Smoke_Alarm")
        )
{
    if (msg.payload == 2) 
        { AlarmLevel = 2;
          AlarmText = "Alarm" 
        }
    else if (msg.payload == 1) 
        { AlarmLevel = 1;
          AlarmText = "Warning" 
        }
    else
        { Alarmlevel = 0;
          AlarmText = "Off" 
        }
}

// Overload sensors
else if ( (msg.topic == "L1 Overload Alarm")
       || (msg.topic == "L2 Overload Alarm")
       || (msg.topic == "L3 Overload Alarm")
       || (msg.topic == "Overload")
        )
{
    if (msg.payload == 2) 
        { AlarmLevel = 1; // Not Critical
          AlarmText = "Alarm" 
        }
    else if (msg.payload == 1) 
        { AlarmLevel = 1;
          AlarmText = "Warning" 
        }
    else
        { Alarmlevel = 0;
          AlarmText = "Off" 
        }
}

// Some Technical Error
else if ( (msg.topic == "BMS_Error")
        )
{
    // No Warning Level 2
    if (msg.payload == 1) 
        { AlarmLevel = 1;
          AlarmText = "Warning" 
        }
    else
        { Alarmlevel = 0;
          AlarmText = "Off" 
        }
}

// Some Technical Error
else if ( (msg.topic == "VE_Bus_Error")
        )
{   // There are many Warning codes.
    if (msg.payload == 0) 
        { Alarmlevel = 0;
          AlarmText = "Off" 
        }
    else // all Warning codes
        { AlarmLevel = 1;
          AlarmText = "Warning: " + msg.payload;
        }
}

else
{
    node.warn("Unknown Sensor: " + msg.topic);
    AlarmLevel = 1;
    AlarmText = "Unknown Sensor"; 
}

// Show and send Result

if (AlarmLevel == 2)
{   // The current sensor has set an Alarm
    StateColor = "red";

    if (context.LastAlarm[msg.topic] == null)
    {   // this is a new Alarm
        context.LastAlarm[msg.topic] = NowInSeconds;
        msg.topic = msg.topic + " - " + AlarmText;
    }
    else if (Number(context.LastAlarm[msg.topic]) > NowInSeconds - 15*60)
    {   // The Alarm has occured before in the last 15 minutes
        msg = null;
    }
    else
    {   // The Alarm has occured before, but longer than 15 minutes ago
        context.LastAlarm[msg.topic] = NowInSeconds;
        msg.topic = msg.topic + " - " + AlarmText;
    }
}

else if (AlarmLevel == 1)
{   // The current sensor has set a warning
    context.LastAlarm[msg.topic] = 0; // reset
    
    StateColor = "yellow";

    if (context.LastWarning[msg.topic] == null)
    {   // this is a new Warning
        context.LastWarning[msg.topic] = NowInSeconds;
        msg.topic = msg.topic + " - " + AlarmText;
    }
    else if (Number(context.LastWarning[msg.topic]) > NowInSeconds - 15*60)
    {   // The Warning has occured before in the last 15 minutes
        msg = null;
    }
    else
    {   // The Warning has occured before, but longer than 15 minutes ago
        context.LastWarning[msg.topic] = NowInSeconds;
        msg.topic = msg.topic + " - " + AlarmText;
    }
}

else if (AlarmLevel == 0)
{   // The current sensor is OK
    context.LastAlarm[msg.topic] = 0; // reset
    context.LastWarning[msg.topic] = 0; // reset
    
    StateColor = "green";

}

// Check if any Alarm is active

// Start with default values Alarm off
let msgAlarm12sec = { topic: "Alarm", payload: 0 };
let msgAlarm62sec = { topic: "Alarm", payload: 0 };

for (var AlarmName in context.LastAlarm)
{
    let AlarmSec = Number(context.LastAlarm[AlarmName]);
    if (AlarmSec == 0) 
    { // alarm not active
        
    }
    else if ((AlarmSec + 62) < NowInSeconds) 
    { // Alarm active for 62 secs
        msgAlarm62sec = {topic: "Alarm " + AlarmName, payload: 62 }
    }
    else if ((AlarmSec + 12) < NowInSeconds) 
    { // Alarm active for 12 secs
        msgAlarm12sec = {topic: "Alarm " + AlarmName, payload: 12 }
    }
}


if (msg != null)
{   // Show status
    node.status( {fill: StateColor,
                  shape: "dot",
                  text: "AlarmLevel " 
                  + AlarmLevel + "; " + StateText + " - " + AlarmText }
               );
}


if (AlarmLevel == 0)
    {
        return [msg, null, null, msgAlarm12sec, msgAlarm62sec];
    }
else if (AlarmLevel == 1)
    {
        return [null, msg, null, msgAlarm12sec, msgAlarm62sec];
    }
else if (AlarmLevel == 2)
    {
        return [null, null, msg, msgAlarm12sec, msgAlarm62sec];
    } 
Voor lezers met programmeer-ervaring moet dit (hopelijk) te begrijpen zijn.
Aanpassen of uitbreiden met extra alarm-entiteiten moet ook goed te doen zijn.

De overige Nodes heb ik hierboven toegelicht.

In verband met de maximale lengte van een bijdrage plaats ik de volledige flow hierna.

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02
Dit is deel 1 van de volledige Flow:

Let op:
Dit is de stand van "vandaag". Er kunnen wijzigingen of verbeteringen komen.
Omdat ik een bijdrage slechts twee dagen kan aanpassen is het niet mogelijk
om hier een gewijzigde versie te plaatsen.
Controleer of niet verderop in dit topic een meer actuele versie is opgenomen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
[
    {
        "id": "b9220033397b653a",
        "type": "victron-input-temperature",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.temperature/24",
        "path": "/Temperature",
        "serviceObj": {
            "service": "com.victronenergy.temperature/24",
            "name": "Multiplus II (1) Temp"
        },
        "pathObj": {
            "path": "/Temperature",
            "type": "float",
            "name": "Temperature (°C)"
        },
        "name": "Multiplus 1 Temp",
        "onlyChanges": false,
        "x": 128,
        "y": 160,
        "wires": [
            [
                "dbf4d63eb68cf19f"
            ]
        ]
    },
    {
        "id": "ab11204bcb54ad94",
        "type": "victron-input-temperature",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.temperature/25",
        "path": "/Temperature",
        "serviceObj": {
            "service": "com.victronenergy.temperature/25",
            "name": "Multiplus II (2) Temp"
        },
        "pathObj": {
            "path": "/Temperature",
            "type": "float",
            "name": "Temperature (°C)"
        },
        "name": "Multiplus 2 Temp",
        "onlyChanges": false,
        "x": 128,
        "y": 208,
        "wires": [
            [
                "dbf4d63eb68cf19f"
            ]
        ]
    },
    {
        "id": "b36f73010eb72ca3",
        "type": "victron-input-temperature",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.temperature/26",
        "path": "/Temperature",
        "serviceObj": {
            "service": "com.victronenergy.temperature/26",
            "name": "Multiplus II (3) Temp"
        },
        "pathObj": {
            "path": "/Temperature",
            "type": "float",
            "name": "Temperature (°C)"
        },
        "name": "Multiplus 3 Temp",
        "onlyChanges": false,
        "x": 128,
        "y": 256,
        "wires": [
            [
                "dbf4d63eb68cf19f"
            ]
        ]
    },
    {
        "id": "aef0dec01549c057",
        "type": "victron-input-battery",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.battery/512",
        "path": "/Dc/0/Temperature",
        "serviceObj": {
            "service": "com.victronenergy.battery/512",
            "name": "Totle Power"
        },
        "pathObj": {
            "path": "/Dc/0/Temperature",
            "type": "float",
            "name": "Battery temperature (°C)"
        },
        "name": "Totle Power Temp",
        "onlyChanges": false,
        "roundValues": "0",
        "x": 138,
        "y": 304,
        "wires": [
            [
                "ed7b59de423d6252"
            ]
        ]
    },
    {
        "id": "9006468467444f73",
        "type": "victron-input-battery",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.battery/512",
        "path": "/Alarms/HighTemperature",
        "serviceObj": {
            "service": "com.victronenergy.battery/512",
            "name": "Totle Power"
        },
        "pathObj": {
            "path": "/Alarms/HighTemperature",
            "type": "enum",
            "name": "High battery temperature alarm",
            "enum": {
                "0": "No alarm",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "Battery Temp Alarm",
        "onlyChanges": false,
        "roundValues": "0",
        "x": 138,
        "y": 352,
        "wires": [
            [
                "5a5a97dfea59b7ef"
            ]
        ]
    },
    {
        "id": "e0793e250b5c15a9",
        "type": "victron-input-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Alarms/HighTemperature",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Alarms/HighTemperature",
            "type": "enum",
            "name": "Temperature",
            "enum": {
                "0": "Ok",
                "1": "Warning",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "System Temp Alarm",
        "onlyChanges": false,
        "x": 138,
        "y": 400,
        "wires": [
            [
                "c17e0dbddfdc713c"
            ]
        ]
    },
    {
        "id": "8189f542cd267c7f",
        "type": "victron-input-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Alarms/L1/HighTemperature",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Alarms/L1/HighTemperature",
            "type": "enum",
            "name": "Temperature alarm L1",
            "enum": {
                "0": "Ok",
                "1": "Warning",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "L1 Temp Alarm",
        "onlyChanges": false,
        "x": 128,
        "y": 496,
        "wires": [
            [
                "6ea03e76deff545d"
            ]
        ]
    },
    {
        "id": "1807f7c129a43158",
        "type": "victron-input-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Alarms/L2/HighTemperature",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Alarms/L2/HighTemperature",
            "type": "enum",
            "name": "Temperature alarm L2",
            "enum": {
                "0": "Ok",
                "1": "Warning",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "L2 Temp Alarm",
        "onlyChanges": false,
        "x": 128,
        "y": 544,
        "wires": [
            [
                "6ea03e76deff545d"
            ]
        ]
    },
    {
        "id": "c3af0c30ba57879c",
        "type": "victron-input-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Alarms/L3/HighTemperature",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Alarms/L3/HighTemperature",
            "type": "enum",
            "name": "Temperature alarm L3",
            "enum": {
                "0": "Ok",
                "1": "Warning",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "L3 Temp Alarm",
        "onlyChanges": false,
        "x": 128,
        "y": 592,
        "wires": [
            [
                "6ea03e76deff545d"
            ]
        ]
    },
    {
        "id": "c7e2bc36b8b9b825",
        "type": "victron-input-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Alarms/TemperatureSensor",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Alarms/TemperatureSensor",
            "type": "enum",
            "name": "Temperature sensor alarm",
            "enum": {
                "0": "Ok",
                "1": "Warning",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "System Temp Sensor Alarm",
        "onlyChanges": false,
        "x": 168,
        "y": 448,
        "wires": [
            [
                "c43170b011f64fff"
            ]
        ]
    },
    {
        "id": "988923a0c4e24031",
        "type": "victron-input-digitalinput",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.digitalinput/1",
        "path": "/Alarm",
        "serviceObj": {
            "service": "com.victronenergy.digitalinput/1",
            "name": "Smoke alarm"
        },
        "pathObj": {
            "path": "/Alarm",
            "type": "enum",
            "name": "Digital input alarm",
            "enum": {
                "0": "No alarm",
                "1": "Warning",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "Smoke_Alarm",
        "onlyChanges": false,
        "x": 518,
        "y": 480,
        "wires": [
            [
                "e8179cdb8240e5ba"
            ]
        ]
    },
    {
        "id": "14bf6e5e1cb0785f",
        "type": "inject",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Test 0",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": 0.1,
        "topic": "Test",
        "payload": "0",
        "payloadType": "num",
        "x": 126,
        "y": 48,
        "wires": [
            [
                "24e57ea84211d723"
            ]
        ]
    },
    {
        "id": "f1be442051ed152c",
        "type": "inject",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Test 1",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Test",
        "payload": "1",
        "payloadType": "num",
        "x": 126,
        "y": 80,
        "wires": [
            [
                "24e57ea84211d723"
            ]
        ]
    },
    {
        "id": "4f5c9b96fa5fdf7a",
        "type": "inject",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Test 2",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Test",
        "payload": "2",
        "payloadType": "num",
        "x": 126,
        "y": 112,
        "wires": [
            [
                "24e57ea84211d723"
            ]
        ]
    },
    {
        "id": "ab59291145b83c83",
        "type": "victron-input-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Alarms/L1/Overload",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Alarms/L1/Overload",
            "type": "enum",
            "name": "Overload alarm L1",
            "enum": {
                "0": "Ok",
                "1": "Warning",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "L1 Overload Alarm",
        "onlyChanges": false,
        "x": 538,
        "y": 272,
        "wires": [
            [
                "46f059de8eddc845"
            ]
        ]
    },
    {
        "id": "a81c5696f747a49e",
        "type": "victron-input-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Alarms/L2/Overload",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Alarms/L2/Overload",
            "type": "enum",
            "name": "Overload alarm L2",
            "enum": {
                "0": "Ok",
                "1": "Warning",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "L2 Overload Alarm",
        "onlyChanges": false,
        "x": 538,
        "y": 320,
        "wires": [
            [
                "46f059de8eddc845"
            ]
        ]
    },
    {
        "id": "a333547bd5583be8",
        "type": "victron-input-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Alarms/L3/Overload",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Alarms/L3/Overload",
            "type": "enum",
            "name": "Overload alarm L3",
            "enum": {
                "0": "Ok",
                "1": "Warning",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "L3 Overload Alarm",
        "onlyChanges": false,
        "x": 538,
        "y": 368,
        "wires": [
            [
                "46f059de8eddc845"
            ]
        ]
    },
    {
        "id": "46f059de8eddc845",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to Process Alarms",
        "mode": "link",
        "links": [
            "5707da1b66ae9c60"
        ],
        "x": 719,
        "y": 320,
        "wires": []
    },
    {
        "id": "24e57ea84211d723",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to Process Alarms",
        "mode": "link",
        "links": [
            "5707da1b66ae9c60"
        ],
        "x": 321,
        "y": 80,
        "wires": []
    },
    {
        "id": "dbf4d63eb68cf19f",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to Process Alarms",
        "mode": "link",
        "links": [
            "5707da1b66ae9c60"
        ],
        "x": 319,
        "y": 208,
        "wires": []
    },
    {
        "id": "5a5a97dfea59b7ef",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to Process Alarms",
        "mode": "link",
        "links": [
            "5707da1b66ae9c60"
        ],
        "x": 319,
        "y": 352,
        "wires": []
    },
    {
        "id": "6ea03e76deff545d",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to Process Alarms",
        "mode": "link",
        "links": [
            "5707da1b66ae9c60"
        ],
        "x": 319,
        "y": 544,
        "wires": []
    },
    {
        "id": "c43170b011f64fff",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to Process Alarms",
        "mode": "link",
        "links": [
            "5707da1b66ae9c60"
        ],
        "x": 319,
        "y": 448,
        "wires": []
    },
    {
        "id": "ed7b59de423d6252",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to Process Alarms",
        "mode": "link",
        "links": [
            "5707da1b66ae9c60"
        ],
        "x": 319,
        "y": 304,
        "wires": []
    },
    {
        "id": "c17e0dbddfdc713c",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to Process Alarms",
        "mode": "link",
        "links": [
            "5707da1b66ae9c60"
        ],
        "x": 319,
        "y": 400,
        "wires": []
    },
    {
        "id": "e8179cdb8240e5ba",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to Process Alarms",
        "mode": "link",
        "links": [
            "5707da1b66ae9c60"
        ],
        "x": 719,
        "y": 480,
        "wires": []
    },
    {
        "id": "4e1d4c7d686e9e51",
        "type": "victron-input-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Bms/Error",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Bms/Error",
            "type": "enum",
            "name": "VE.Bus BMS error",
            "enum": {
                "0": "No",
                "1": "Yes"
            }
        },
        "initial": "",
        "name": "BMS_Error",
        "onlyChanges": false,
        "x": 508,
        "y": 160,
        "wires": [
            [
                "f9bfedb199410ff8"
            ]
        ]
    },
    {
        "id": "f9bfedb199410ff8",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to Process Alarms",
        "mode": "link",
        "links": [
            "5707da1b66ae9c60"
        ],
        "x": 719,
        "y": 160,
        "wires": []
    },
    {
        "id": "84aba1d0343a2000",
        "type": "victron-input-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Alarms/Overload",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Alarms/Overload",
            "type": "enum",
            "name": "Overload",
            "enum": {
                "0": "Ok",
                "1": "Warning",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "Overload",
        "onlyChanges": false,
        "x": 508,
        "y": 416,
        "wires": [
            [
                "46f059de8eddc845"
            ]
        ]
    },
    {
        "id": "7fab6c6b931294ca",
        "type": "victron-input-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/VebusError",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/VebusError",
            "type": "enum",
            "name": "VE.Bus Error",
            "enum": {
                "0": "No error",
                "1": "VE.Bus Error 1: Device is switched off because one of the other phases in the system has switched off",
                "2": "VE.Bus Error 2: New and old types MK2 are mixed in the system",
                "3": "VE.Bus Error 3: Not all, or more than, the expected devices were found in the system",
                "4": "VE.Bus Error 4: No other device whatsoever detected",
                "5": "VE.Bus Error 5: Overvoltage on AC-out",
                "6": "VE.Bus Error 6: Error in DDC Program",
                "7": "VE.Bus Error 7:  BMS connected, which requires an Assistant, but no assistant found",
                "8": "VE.Bus Error 8: Ground relay test failed",
                "9": "VE.Bus Error 9",
                "10": "VE.Bus Error 10: System time synchronisation problem occurred",
                "11": "VE.Bus Error 11: Relay test fault",
                "12": "VE.Bus Error 12",
                "13": "VE.Bus Error 13",
                "14": "VE.Bus Error 14: Device cannot transmit data",
                "15": "VE.Bus Error 15",
                "16": "VE.Bus Error 16: Awaiting configuration or dongle missing",
                "17": "VE.Bus Error 17: Phase master missing",
                "18": "VE.Bus Error 18: AC Overvoltage on the output of a slave has occurred while already switched off",
                "19": "VE.Bus Error 19",
                "20": "VE.Bus Error 20",
                "21": "VE.Bus Error 21",
                "22": "VE.Bus Error 22: This device cannot function as slave",
                "23": "VE.Bus Error 23",
                "24": "VE.Bus Error 24: Switch-over system protection initiated",
                "25": "VE.Bus Error 25: Firmware incompatibility. The firmware of one of the connected device is not sufficiently up to date to operate in conjunction with this device",
                "26": "VE.Bus Error 26: Internal error",
                "27": "VE.Bus Error 27",
                "28": "VE.Bus Error 28",
                "29": "VE.Bus Error 29",
                "30": "VE.Bus Error 30",
                "31": "VE.Bus Error 31",
                "32": "VE.Bus Error 32"
            }
        },
        "initial": "",
        "name": "VE_Bus_Error",
        "onlyChanges": false,
        "x": 518,
        "y": 208,
        "wires": [
            [
                "eb444fb345461219"
            ]
        ]
    },
    {
        "id": "eb444fb345461219",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to Process Alarms",
        "mode": "link",
        "links": [
            "5707da1b66ae9c60"
        ],
        "x": 719,
        "y": 208,
        "wires": []
    },
    {
        "id": "53dafccaa11901d1",
        "type": "victron-input-system",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.system/0",
        "path": "/Dc/Battery/Temperature",
        "serviceObj": {
            "service": "com.victronenergy.system/0",
            "name": "Venus system"
        },
        "pathObj": {
            "path": "/Dc/Battery/Temperature",
            "type": "float",
            "name": "Battery temperature (°C)"
        },
        "name": "Battery_Temp",
        "onlyChanges": false,
        "roundValues": "0",
        "x": 118,
        "y": 640,
        "wires": [
            [
                "51f3059053099b8b"
            ]
        ]
    },
    {
        "id": "51f3059053099b8b",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to Process Alarms",
        "mode": "link",
        "links": [
            "5707da1b66ae9c60"
        ],
        "x": 319,
        "y": 640,
        "wires": []
    },
    {
        "id": "5707da1b66ae9c60",
        "type": "link in",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Entry Point Process Alarms",
        "links": [
            "46f059de8eddc845",
            "24e57ea84211d723",
            "dbf4d63eb68cf19f",
            "5a5a97dfea59b7ef",
            "6ea03e76deff545d",
            "c43170b011f64fff",
            "ed7b59de423d6252",
            "c17e0dbddfdc713c",
            "13ebbe026de5e4fc",
            "e8179cdb8240e5ba",
            "f9bfedb199410ff8",
            "eb444fb345461219",
            "51f3059053099b8b"
        ],
        "x": 69,
        "y": 784,
        "wires": [
            [
                "e444243c2c97ed9e"
            ]
        ]
    }
]

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02
Dit is deel 2 van de volledige Flow
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
[
    {
        "id": "b536daad489cf114",
        "type": "victron-output-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Mode",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Mode",
            "type": "enum",
            "name": "Switch Position",
            "remarks": "<p>Note that <tt>/ModeIsAdjustable</tt> needs to be set to 1.</p> ",
            "enum": {
                "1": "Charger Only",
                "2": "Inverter Only",
                "3": "On",
                "4": "Off"
            },
            "writable": true
        },
        "initial": "3",
        "name": "Multiplus 3=On; 4=Off",
        "onlyChanges": false,
        "x": 772,
        "y": 1184,
        "wires": []
    },
    {
        "id": "b295abb9945344a4",
        "type": "trigger",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Timeout 62s, then send 4 = Off",
        "op1": "",
        "op2": "4",
        "op1type": "nul",
        "op2type": "num",
        "duration": "62",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "0",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 230,
        "y": 1216,
        "wires": [
            [
                "06d4022b7da81dae",
                "61fea031afc5b0db"
            ]
        ]
    },
    {
        "id": "e444243c2c97ed9e",
        "type": "function",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Process Alarms",
        "func": "// Function Process Alarms\n// This function will be triggered by every Node\n// that sends it output to the Link In Node\n\ncontext = context || {};\n\n// The context will hold the state of previous messages\nif (context.LastAlarm == null)\n{\n    context.LastAlarm = {};\n}\nif (context.LastWarning == null)\n{\n    context.LastWarning = {};\n}\n\nconst Now = new Date();\nlet NowInSeconds = Math.floor(Now.getTime() / 1000);\n\nvar StateText = msg.topic;\nvar StateColor = \"black\";\n\n// These variables will hold the result of all tests\nvar AlarmLevel = 0;\nvar AlarmText = \"\";\n\n// Now process the sensor that triggered this Flow\n\n// External temperature sensors\nif ( (msg.topic == \"Multiplus 1 Temp\")\n  || (msg.topic == \"Multiplus 2 Temp\")\n  || (msg.topic == \"Multiplus 3 Temp\")\n   )\n{\n    if (msg.payload > 55) \n        { AlarmLevel = 2;\n          AlarmText = \"> 55\" \n        }\n    else if (msg.payload > 50) \n        { AlarmLevel = 1;\n          AlarmText = \"> 50\" \n        }\n    else\n        { Alarmlevel = 0;\n          AlarmText = \"<= 50\" \n        }\n}\n\n// Battery temperature sensors\nelse if ( (msg.topic == \"Totle Power Temp\")\n       || (msg.topic == \"Totle Cell Temp\")\n       || (msg.topic == \"Battery_Temp\")\n   )\n{\n    if (msg.payload > 40) \n        { AlarmLevel = 2;\n          AlarmText = \"> 40\" \n        }\n    else if (msg.payload > 34) \n        { AlarmLevel = 1;\n          AlarmText = \"> 34\" \n        }\n    else\n        { Alarmlevel = 0;\n          AlarmText = \"<= 34\" \n        }\n}\n\n// Test buttons\nelse if (msg.topic == \"Test\")\n{\n    if (msg.payload == 2) \n        { AlarmLevel = 2;\n          AlarmText = \"2\" \n        }\n    else if (msg.payload == 1) \n        { AlarmLevel = 1;\n          AlarmText = \"1\" \n        }\n    else\n        { Alarmlevel = 0;\n          AlarmText = \"0\" \n        }\n}\n\n// Alarm sensors\nelse if ( (msg.topic == \"Battery Temp Alarm\")\n       || (msg.topic == \"System Temp Alarm\")\n       || (msg.topic == \"System Temp Sensor Alarm\")\n       || (msg.topic == \"L1 Temp Alarm\")\n       || (msg.topic == \"L2 Temp Alarm\")\n       || (msg.topic == \"L3 Temp Alarm\")\n       || (msg.topic == \"Smoke Alarm\")\n       || (msg.topic == \"Smoke_Alarm\")\n        )\n{\n    if (msg.payload == 2) \n        { AlarmLevel = 2;\n          AlarmText = \"Alarm\" \n        }\n    else if (msg.payload == 1) \n        { AlarmLevel = 1;\n          AlarmText = \"Warning\" \n        }\n    else\n        { Alarmlevel = 0;\n          AlarmText = \"Off\" \n        }\n}\n\n// Overload sensors\nelse if ( (msg.topic == \"L1 Overload Alarm\")\n       || (msg.topic == \"L2 Overload Alarm\")\n       || (msg.topic == \"L3 Overload Alarm\")\n       || (msg.topic == \"Overload\")\n        )\n{\n    if (msg.payload == 2) \n        { AlarmLevel = 1; // Not Critical\n          AlarmText = \"Alarm\" \n        }\n    else if (msg.payload == 1) \n        { AlarmLevel = 1;\n          AlarmText = \"Warning\" \n        }\n    else\n        { Alarmlevel = 0;\n          AlarmText = \"Off\" \n        }\n}\n\n// Some Technical Error\nelse if ( (msg.topic == \"BMS_Error\")\n        )\n{\n    // No Warning Level 2\n    if (msg.payload == 1) \n        { AlarmLevel = 1;\n          AlarmText = \"Warning\" \n        }\n    else\n        { Alarmlevel = 0;\n          AlarmText = \"Off\" \n        }\n}\n\n// Some Technical Error\nelse if ( (msg.topic == \"VE_Bus_Error\")\n        )\n{   // There are many Warning codes.\n    if (msg.payload == 0) \n        { Alarmlevel = 0;\n          AlarmText = \"Off\" \n        }\n    else // all Warning codes\n        { AlarmLevel = 1;\n          AlarmText = \"Warning: \" + msg.payload;\n        }\n}\n\nelse\n{\n    node.warn(\"Unknown Sensor: \" + msg.topic);\n    AlarmLevel = 1;\n    AlarmText = \"Unknown Sensor\"; \n}\n\n// Show and send Result\n\nif (AlarmLevel == 2)\n{   // The current sensor has set an Alarm\n    StateColor = \"red\";\n\n    if (context.LastAlarm[msg.topic] == null)\n    {   // this is a new Alarm\n        context.LastAlarm[msg.topic] = NowInSeconds;\n        msg.topic = msg.topic + \" - \" + AlarmText;\n    }\n    else if (Number(context.LastAlarm[msg.topic]) > NowInSeconds - 15*60)\n    {   // The Alarm has occured before in the last 15 minutes\n        msg = null;\n    }\n    else\n    {   // The Alarm has occured before, but longer than 15 minutes ago\n        context.LastAlarm[msg.topic] = NowInSeconds;\n        msg.topic = msg.topic + \" - \" + AlarmText;\n    }\n}\n\nelse if (AlarmLevel == 1)\n{   // The current sensor has set a warning\n    context.LastAlarm[msg.topic] = 0; // reset\n    \n    StateColor = \"yellow\";\n\n    if (context.LastWarning[msg.topic] == null)\n    {   // this is a new Warning\n        context.LastWarning[msg.topic] = NowInSeconds;\n        msg.topic = msg.topic + \" - \" + AlarmText;\n    }\n    else if (Number(context.LastWarning[msg.topic]) > NowInSeconds - 15*60)\n    {   // The Warning has occured before in the last 15 minutes\n        msg = null;\n    }\n    else\n    {   // The Warning has occured before, but longer than 15 minutes ago\n        context.LastWarning[msg.topic] = NowInSeconds;\n        msg.topic = msg.topic + \" - \" + AlarmText;\n    }\n}\n\nelse if (AlarmLevel == 0)\n{   // The current sensor is OK\n    context.LastAlarm[msg.topic] = 0; // reset\n    context.LastWarning[msg.topic] = 0; // reset\n    \n    StateColor = \"green\";\n\n}\n\n// Check if any Alarm is active\n\n// Start with default values Alarm off\nlet msgAlarm12sec = { topic: \"Alarm\", payload: 0 };\nlet msgAlarm62sec = { topic: \"Alarm\", payload: 0 };\n\nfor (var AlarmName in context.LastAlarm)\n{\n    let AlarmSec = Number(context.LastAlarm[AlarmName]);\n    if (AlarmSec == 0) \n    { // alarm not active\n        \n    }\n    else if ((AlarmSec + 62) < NowInSeconds) \n    { // Alarm active for 62 secs\n        msgAlarm62sec = {topic: \"Alarm \" + AlarmName, payload: 62 }\n    }\n    else if ((AlarmSec + 12) < NowInSeconds) \n    { // Alarm active for 12 secs\n        msgAlarm12sec = {topic: \"Alarm \" + AlarmName, payload: 12 }\n    }\n}\n\n\nif (msg != null)\n{   // Show status\n    node.status( {fill: StateColor,\n                  shape: \"dot\",\n                  text: \"AlarmLevel \" \n                  + AlarmLevel + \"; \" + StateText + \" - \" + AlarmText }\n               );\n}\n\n\nif (AlarmLevel == 0)\n    {\n        return [msg, null, null, msgAlarm12sec, msgAlarm62sec];\n    }\nelse if (AlarmLevel == 1)\n    {\n        return [null, msg, null, msgAlarm12sec, msgAlarm62sec];\n    }\nelse if (AlarmLevel == 2)\n    {\n        return [null, null, msg, msgAlarm12sec, msgAlarm62sec];\n    } \n \n",
        "outputs": 5,
        "timeout": "4",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 196,
        "y": 784,
        "wires": [
            [
                "c10df28c0c87fcfc"
            ],
            [
                "705f2825632eec13",
                "f7081b529d076bfb"
            ],
            [
                "705f2825632eec13",
                "f7081b529d076bfb"
            ],
            [
                "2eea61084001a9b8"
            ],
            [
                "5e60b73ca8478204"
            ]
        ]
    },
    {
        "id": "963bbc5a02528f27",
        "type": "trigger",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Timeout 12s, then pre-shutdown",
        "op1": "",
        "op2": "Home Assistant Alarm. Pre-shutdown phase.",
        "op1type": "nul",
        "op2type": "str",
        "duration": "12",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "0",
        "bytopic": "topic",
        "topic": "topic",
        "outputs": 1,
        "x": 230,
        "y": 992,
        "wires": [
            [
                "970bd4d28b18dca1",
                "1d597bbe26d31899"
            ]
        ]
    },
    {
        "id": "970bd4d28b18dca1",
        "type": "bigssh",
        "z": "4af0ca0c4d0e6ba7",
        "name": "DiskStation PowerOff",
        "commandLine": "/bin/echo 'Wachtwoord' | sudo -S poweroff",
        "commandArgs": "",
        "minError": 1,
        "minWarning": 1,
        "noStdin": false,
        "format": "utf8",
        "payloadIsArg": false,
        "myssh": "13eca0dfb95a59d8",
        "x": 516,
        "y": 992,
        "wires": [
            [
                "2f8a6ad627d022fe"
            ],
            [
                "ea473d784579bc1c"
            ],
            [
                "2e805f5899c472f4"
            ]
        ]
    },
    {
        "id": "2f8a6ad627d022fe",
        "type": "debug",
        "z": "4af0ca0c4d0e6ba7",
        "name": "BigSSH stdout",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 752,
        "y": 960,
        "wires": []
    },
    {
        "id": "ea473d784579bc1c",
        "type": "debug",
        "z": "4af0ca0c4d0e6ba7",
        "name": "BigSSH status",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 752,
        "y": 992,
        "wires": []
    },
    {
        "id": "2e805f5899c472f4",
        "type": "debug",
        "z": "4af0ca0c4d0e6ba7",
        "name": "BigSSH stderr",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 752,
        "y": 1024,
        "wires": []
    },
    {
        "id": "07b9d8c013aebfab",
        "type": "link in",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Entry Point DiskStation Power Off",
        "links": [
            "2eea61084001a9b8",
            "1a00c89cd96796aa"
        ],
        "x": 67,
        "y": 992,
        "wires": [
            [
                "963bbc5a02528f27"
            ]
        ]
    },
    {
        "id": "2eea61084001a9b8",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to DiskStation Power Off",
        "mode": "link",
        "links": [
            "07b9d8c013aebfab"
        ],
        "x": 431,
        "y": 800,
        "wires": []
    },
    {
        "id": "1d597bbe26d31899",
        "type": "change",
        "z": "4af0ca0c4d0e6ba7",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "topic",
                "pt": "msg",
                "to": "Alarm: Shutdown DiskStation",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 486,
        "y": 1072,
        "wires": [
            [
                "8598c41e009dc8f8"
            ]
        ]
    },
    {
        "id": "8598c41e009dc8f8",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Send Temp to E-mail",
        "mode": "link",
        "links": [
            "937f02372220657c"
        ],
        "x": 687,
        "y": 1072,
        "wires": []
    },
    {
        "id": "c10df28c0c87fcfc",
        "type": "debug",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Alarm OK",
        "active": false,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "topic",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 476,
        "y": 704,
        "wires": []
    },
    {
        "id": "e91433ff9f39640b",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Send Temp to E-mail",
        "mode": "link",
        "links": [
            "937f02372220657c"
        ],
        "x": 687,
        "y": 768,
        "wires": []
    },
    {
        "id": "705f2825632eec13",
        "type": "debug",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Alarms",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 476,
        "y": 736,
        "wires": []
    },
    {
        "id": "eaa28817f500862a",
        "type": "comment",
        "z": "4af0ca0c4d0e6ba7",
        "name": "E-mail",
        "info": "",
        "x": 786,
        "y": 768,
        "wires": []
    },
    {
        "id": "f7081b529d076bfb",
        "type": "rbe",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Only Changes",
        "func": "rbe",
        "gap": "",
        "start": "",
        "inout": "out",
        "septopics": true,
        "property": "payload",
        "topi": "topic",
        "x": 496,
        "y": 768,
        "wires": [
            [
                "e91433ff9f39640b",
                "deb25dac3ea828d1"
            ]
        ]
    },
    {
        "id": "d728418da60af3c3",
        "type": "link in",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Entry Point Victron Power Off",
        "links": [
            "5e60b73ca8478204"
        ],
        "x": 69,
        "y": 1216,
        "wires": [
            [
                "b295abb9945344a4"
            ]
        ]
    },
    {
        "id": "5e60b73ca8478204",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Goto Link Victron Power Off",
        "mode": "link",
        "links": [
            "d728418da60af3c3"
        ],
        "x": 431,
        "y": 832,
        "wires": []
    },
    {
        "id": "36781a721e82cab6",
        "type": "inject",
        "z": "4af0ca0c4d0e6ba7",
        "name": "On Deploy: Send 3 = Victron On",
        "props": [
            {
                "p": "payload"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": true,
        "onceDelay": "0.1",
        "topic": "",
        "payload": "3",
        "payloadType": "num",
        "x": 402,
        "y": 1152,
        "wires": [
            [
                "b536daad489cf114"
            ]
        ]
    },
    {
        "id": "f850cfe0886d6c8d",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Send Temp to E-mail",
        "mode": "link",
        "links": [
            "937f02372220657c"
        ],
        "x": 687,
        "y": 1264,
        "wires": []
    },
    {
        "id": "95abdeea91ed697e",
        "type": "victron-input-vebus",
        "z": "4af0ca0c4d0e6ba7",
        "service": "com.victronenergy.vebus/276",
        "path": "/Alarms/GridLost",
        "serviceObj": {
            "service": "com.victronenergy.vebus/276",
            "name": "MultiPlus-II 48/3000/35-32"
        },
        "pathObj": {
            "path": "/Alarms/GridLost",
            "type": "enum",
            "name": "Grid lost alarm",
            "enum": {
                "0": "Ok",
                "2": "Alarm"
            }
        },
        "initial": "",
        "name": "Grid Lost Alarm",
        "onlyChanges": false,
        "x": 148,
        "y": 1344,
        "wires": [
            [
                "eb3c4b6a9053749f"
            ]
        ]
    },
    {
        "id": "5862858152650c0d",
        "type": "change",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Vertaal 0 of 2 naar tekst",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "0",
                "fromt": "num",
                "to": "Grid Lost Hersteld",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "2",
                "fromt": "num",
                "to": "Grid Lost Alarm",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 526,
        "y": 1344,
        "wires": [
            [
                "88979c8ea2ec4af7",
                "850c900577338571"
            ]
        ]
    },
    {
        "id": "88979c8ea2ec4af7",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Send Temp to E-mail",
        "mode": "link",
        "links": [
            "937f02372220657c"
        ],
        "x": 687,
        "y": 1328,
        "wires": []
    },
    {
        "id": "eb3c4b6a9053749f",
        "type": "rbe",
        "z": "4af0ca0c4d0e6ba7",
        "name": "",
        "func": "rbei",
        "gap": "",
        "start": "",
        "inout": "out",
        "septopics": false,
        "property": "payload",
        "topi": "topic",
        "x": 310,
        "y": 1344,
        "wires": [
            [
                "5862858152650c0d"
            ]
        ]
    },
    {
        "id": "61fea031afc5b0db",
        "type": "change",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Set Switch Code to Text",
        "rules": [
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "1",
                "fromt": "num",
                "to": "Info: Set Switch Victron Charger Only",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "2",
                "fromt": "num",
                "to": "Info: Set Switch Victron Inverter Only",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "3",
                "fromt": "num",
                "to": "Info: Set Switch Victron On",
                "tot": "str"
            },
            {
                "t": "change",
                "p": "payload",
                "pt": "msg",
                "from": "4",
                "fromt": "num",
                "to": "Alarm: Info: Set Switch Victron Off - Shutdown Victron",
                "tot": "str"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 526,
        "y": 1264,
        "wires": [
            [
                "f850cfe0886d6c8d"
            ]
        ]
    },
    {
        "id": "06d4022b7da81dae",
        "type": "delay",
        "z": "4af0ca0c4d0e6ba7",
        "name": "",
        "pauseType": "delay",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "1",
        "rateUnits": "second",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": false,
        "allowrate": false,
        "outputs": 1,
        "x": 476,
        "y": 1216,
        "wires": [
            [
                "b536daad489cf114"
            ]
        ]
    },
    {
        "id": "0c1f5feb31a57e15",
        "type": "api-call-service",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Set Victron Warning ON",
        "server": "289362b880855228",
        "version": 5,
        "debugenabled": false,
        "domain": "input_boolean",
        "service": "turn_on",
        "areaId": [],
        "deviceId": [],
        "entityId": [
            "input_boolean.helper_victron_warning"
        ],
        "data": "",
        "dataType": "json",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "all",
        "x": 282,
        "y": 1488,
        "wires": [
            []
        ]
    },
    {
        "id": "1d2327fd9f46c791",
        "type": "api-call-service",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Set Victron Warning Off",
        "server": "289362b880855228",
        "version": 5,
        "debugenabled": false,
        "domain": "input_boolean",
        "service": "turn_off",
        "areaId": [],
        "deviceId": [],
        "entityId": [
            "input_boolean.helper_victron_warning"
        ],
        "data": "",
        "dataType": "json",
        "mergeContext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "all",
        "x": 438,
        "y": 1536,
        "wires": [
            []
        ]
    },
    {
        "id": "523d9977be63df35",
        "type": "link in",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link ingang Victron Alarm",
        "links": [
            "41f1ac8051a83bd7",
            "deb25dac3ea828d1",
            "c91bfc4e4cea977c",
            "850c900577338571"
        ],
        "x": 67,
        "y": 1520,
        "wires": [
            [
                "0c1f5feb31a57e15",
                "88e1382e8b01d54c"
            ]
        ]
    },
    {
        "id": "88e1382e8b01d54c",
        "type": "trigger",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Uit na 30s",
        "op1": "",
        "op2": "0",
        "op1type": "nul",
        "op2type": "num",
        "duration": "30",
        "extend": false,
        "overrideDelay": false,
        "units": "s",
        "reset": "",
        "bytopic": "all",
        "topic": "topic",
        "outputs": 1,
        "x": 232,
        "y": 1536,
        "wires": [
            [
                "1d2327fd9f46c791"
            ]
        ]
    },
    {
        "id": "53ece337f0a22b17",
        "type": "inject",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Test HA Alarm",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "Test Home Assistant Alarm",
        "payload": "1",
        "payloadType": "num",
        "x": 138,
        "y": 1440,
        "wires": [
            [
                "41f1ac8051a83bd7"
            ]
        ]
    },
    {
        "id": "41f1ac8051a83bd7",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link Test naar Victron Alarm",
        "mode": "link",
        "links": [
            "523d9977be63df35"
        ],
        "x": 335,
        "y": 1440,
        "wires": []
    },
    {
        "id": "deb25dac3ea828d1",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link Process Alarms naar Victron Alarm",
        "mode": "link",
        "links": [
            "523d9977be63df35"
        ],
        "x": 687,
        "y": 800,
        "wires": []
    },
    {
        "id": "54860dfd8e394524",
        "type": "comment",
        "z": "4af0ca0c4d0e6ba7",
        "name": "HA Alarm",
        "info": "",
        "x": 796,
        "y": 800,
        "wires": []
    },
    {
        "id": "850c900577338571",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link Test naar Victron Alarm",
        "mode": "link",
        "links": [
            "523d9977be63df35"
        ],
        "x": 687,
        "y": 1360,
        "wires": []
    },
    {
        "id": "0a401e9321977bde",
        "type": "inject",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Test Poweroff",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "Button Test Poweroff pressed",
        "payloadType": "str",
        "x": 142,
        "y": 912,
        "wires": [
            [
                "1a00c89cd96796aa"
            ]
        ]
    },
    {
        "id": "1a00c89cd96796aa",
        "type": "link out",
        "z": "4af0ca0c4d0e6ba7",
        "name": "Link to DiskStation Power Off",
        "mode": "link",
        "links": [
            "07b9d8c013aebfab"
        ],
        "x": 303,
        "y": 912,
        "wires": []
    },
    {
        "id": "13eca0dfb95a59d8",
        "type": "SSH_Credentials",
        "host": "10.11.22.33",
        "port": "22",
        "userlabel": "admin@10.11.22.33"
    },
    {
        "id": "289362b880855228",
        "type": "server",
        "name": "Home Assistant Api",
        "version": 5,
        "addon": false,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": false,
        "heartbeat": false,
        "heartbeatInterval": "30",
        "areaSelector": "friendlyName",
        "deviceSelector": "friendlyName",
        "entitySelector": "friendlyName",
        "statusSeparator": ": ",
        "statusYear": "hidden",
        "statusMonth": "short",
        "statusDay": "numeric",
        "statusHourCycle": "h23",
        "statusTimeFormat": "h:m:s",
        "enableGlobalContextStore": false
    }
]

Acties:
  • 0 Henk 'm!

  • Jazsie
  • Registratie: Juni 2006
  • Laatst online: 08:02
MJ de Bruijn schreef op zaterdag 7 september 2024 @ 19:01:
[...]

Ok, dus als mijn Victron Node Red een relevant MQTT bericht publiceert, en mijn NAS luistert daar naar, dan zal deze direct en zonder vetraging reageren?

Een interessante optie ! Oke, nu nog 'even' realiseren.

Kun je aangeven welke Node Red MQTT integratie je hebt gekozen? Ik zie er een flink aantal (meer dan 100).
Via MQTT werkt top, heb ik ook. Gebruik ik infeite overal waar dit mogeljk is,

Clients "subscriben" naar een topic en ieder bericht daarin wordt gelijk opgepakt.
Maar ook feedback geven is instant.

MQTT Mosquitto wordt vervangen door FlashMQ in VenusOS, FlashMQ is nog meer robuuster dan MQTT Mosquitto.

Wellicht dus ook tzt kijkje nemen naar FlashMQ.

3600 Wp op 0° (vrijwel plat) | 3900Wp op 10°


Acties:
  • +2 Henk 'm!

  • John245
  • Registratie: Januari 2020
  • Laatst online: 05:57
Jazsie schreef op dinsdag 24 september 2024 @ 09:26:
[...]


Via MQTT werkt top, heb ik ook. Gebruik ik infeite overal waar dit mogeljk is,

Clients "subscriben" naar een topic en ieder bericht daarin wordt gelijk opgepakt.
Maar ook feedback geven is instant.

MQTT wordt vervangen door FlashMQ in VenusOS, FlashMQ is nog meer robuuster dan MQTT.

Wellicht dus ook tzt kijkje nemen naar FlashMQ.
Is FlashMQ niet gewoon een andere MQTT broker?

Tibber; 3-fase Victron ESS, 38,4 kWh opslag; gasloos sinds 2013; Nibe F1245-10PC; SAP; HomeSeer4; Proxmox 8


Acties:
  • +2 Henk 'm!

  • Jazsie
  • Registratie: Juni 2006
  • Laatst online: 08:02
Klopt, ik zeg het verkeerd. Bedoelde Mosquitto wordt vervangen door FlashMQ in VenusOS.

MQTT blijft MQTT, zal voor ons niet spannend zijn behalve dat ik mijn HA MQTT instance direct verbonden heb met de MQTT instance van de Cerbo.

FlashMQ ondersteund momenteel geen "broker to broker" verbinding, dus dat is in mijn geval wel een dingetje.

[ Voor 59% gewijzigd door Jazsie op 24-09-2024 11:10 ]

3600 Wp op 0° (vrijwel plat) | 3900Wp op 10°


Acties:
  • +1 Henk 'm!

  • MJ de Bruijn
  • Registratie: November 2016
  • Laatst online: 21-09 18:02
Deze vraag is oorspronkelijk afkomstig uit Het grote Victron Off-Grid topic
Willie Wortel schreef op dinsdag 27 mei 2025 @ 08:29:
Voor verzenden Emails moet ik eerst de email nodes downloaden via Hamburger/palette/install/ zoek email. Maar er staan er wel uit 50 verschillende te kiezen die ik kan downloaden. Welke is aanbevolen. Wil wel graag dezelfde hebben (want die werkt dan). Dank.
Inderdaad zijn er een heleboel verschillende e-mail-nodes. Misschien is dat wel nodig.... :+

De naam van de door mij gebruikte e-mail-integratie is: "node-red-node-email".
Deze heeft drie nodes: e-mail; e-mail in; e-mail mta.
Omschrijving in het palette: "Node-RED nodes to send and receive simple emails."

Succes!
Pagina: 1