Acties:
  • 0 Henk 'm!

  • ocaj
  • Registratie: Juli 2011
  • Niet online
Goede ideeën om eens mee te experimenteren. Ik denk dat ik het voorlopig maar even laat zoals het is. Ik ben de enige gebruiker van het dashboard, dus ik onthoud voor nu wel gewoon dat ik maar 1 keer per 30 seconden die switch om zet (is ook geen praktische use-case om dat vaker te doen).

Nu eerst maar eens een paar dagen afwachten of de vervanging van het traffic light door de enkele inject om 13:00 gaat helpen om de trigger betrouwbaarder te laten werken.

Acties:
  • 0 Henk 'm!

  • Imperial Guard
  • Registratie: Februari 2006
  • Laatst online: 12-06 21:50
habbekrats schreef op woensdag 5 januari 2022 @ 20:25:
Even een vraagje, ik probeer steeds meer te doen in node red. Mijn Omnik PV omvermer heb ik in HA. Op HA draait ook nodered.
Onderstaand is de bedoeling om de data ook naar pv output te sturen
Dit werkt wel, echter 2 dingen zijn niet helemaal ok

1: Als de zon niet meer schijnt en de PV uit is ontvang ik ook geen data meer, echter gaat wel elek 5 minuten nog data weg. Dat is onnodig en geeft een slecht PvOutput grafiek
Nou had ik gedacht om te kijken als de PV omvormer temperatuur > 10 graden de 5 minuten time vrij te geven.
Alleen heeft de 5 minuten timer geen ingangs connector.

2 De data van mijn slimme meter verbruik komt via MQTT, deze hebben ook geen ingangsconnector.
Als ik dit er bij zet wordt bijna om de 10 seconden de data verzonden, PVouput mag ik maximaal 60x per uur een post doen.

Hoe zou ik dit op kunnen lossen?
[Afbeelding]
Hoe heb je dit uiteindelijk opgelost? :)

Acties:
  • 0 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 10:07
Ik heb met v2.2.2 issues met MQTT. Heb voor zowel Node-RED als Eclipse-MQTT een aparte container draaien. MQTT loopt als een zonnetje (apparaten en MQTT Explorer hebben nul issues), maar Node-RED loopt constant te stuiteren zie ik in de logs van de MQTT broker:

code:
1
2
3
4
5
2022-05-09T12:43:40.537231509Z 1652100220: New connection from 172.17.0.1:58132 on port 1883.
2022-05-09T12:43:40.537445620Z 1652100220: Client nodered_1634cd3321e0cfed already connected, closing old connection.
2022-05-09T12:43:40.537699930Z 1652100220: New client connected from 172.17.0.1:58132 as nodered_1634cd3321e0cfed (p2, c1, k30).
2022-05-09T12:43:40.538392161Z 1652100220: New connection from 172.17.0.1:58136 on port 1883.
2022-05-09T12:43:40.540986152Z 1652100220: Client nodered_1634cd3321e0cfed already connected, closing old connection.

En zo nog vele regels. Als ik Node-RED herstart dan gaat het weer goed.

Ik dacht: laat ik eens kijken of er nog updates voor Node-RED zijn. Maar het Docker image is al 3 mnd. niet bijgewerkt (ik zit op 'latest') en ook op GitHub sinds februari geen nieuwe releases meer. Iemand een idee waarom het daar zo rustig is? In mijn beleving werd het Docker image in het verleden veel vaker bijgewerkt.

[ Voor 3% gewijzigd door ThinkPad op 09-05-2022 14:47 ]


Acties:
  • 0 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 15-06 22:25
Nevermind

[ Voor 98% gewijzigd door Toppe op 10-05-2022 12:24 ]

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • 0 Henk 'm!

  • Cafun
  • Registratie: Maart 2002
  • Laatst online: 15-06 21:03
CAD-tekenaar schreef op vrijdag 29 april 2022 @ 19:18:
Hebben er meerdere personen last van Node-Red die maar blijft herstarten?
Vanaf vandaag omstreeks 18.34 uur is het gestart. Node-Red blijft maar herstarten.
Ik heb de laatste week geen aanpassingen gedaan en de herstarts zijn spontaan begonnen.
(Automatisch starten bij opstarten en Watchdog zijn aangezet.)

Heeft iemand hier een verklaring voor en/of weet iemand de oplossing?
[Afbeelding]
Heb je de oorzaak al gevonden?
Ik heb het gehad na een update van een pallet. Ik dacht dat Hue Magic bij mij het probleem veroorzaakte.

Acties:
  • +3 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 10:07
Weer eens lekker aan de knutsel geweest met Node-RED. Ik heb laatst een aantal extra zonnepanelen gelegd en daar via Marktplaats een stel gebruikte micro-omvormers en een centrale uitleeshub voor gekocht. Is van het merk 'Envertech'. Chinese hardware met bijbehorende bedroevende portal. Stroom opwekken doen ze prima, maar Chinese IoT, brrrrr :X

Er bleek gelukkig al een uitleesscript te zijn (Python). Maar die werkt via MQTT en voor het script zelf moest ik ook nog weer een aparte Docker container draaien. Ik gebruik nergens anders in huis MQTT en daarnaast werkte het niet stabiel (zie eerdere post hierboven) dus ik wilde af van die overhead om twee containers te moeten draaien om 3 zonnepanelen uit te lezen 8)7 .

Uiteindelijk heb ik het nu opgelost met twee blokjes in Node-RED :D Best wel leerzaam ook om zoiets te reverse-engineeren

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

De output van de function node:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
msg.payload : Object
    object
    11123654: object
        pac: 1.41
        vpv: 25.48
        vac: 229.94
        freq: 50.01
        etotal: 12.99
        temperature: 8.73
    11124491: object
        pac: 25.34
        vpv: 32.96
        vac: 231.75
        freq: 50.02
        etotal: 8.2
        temperature: 11.38
    11124603: object
        pac: 12.08
        vpv: 23.1
        vac: 231.73
        freq: 50.01
        etotal: 21.63
        temperature: 8.82


De inhoud van die function node die het verwerken van de TCP data doet:
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
var bridge = msg.payload;

if (bridge.length > 60) {

    var mi1_id = bridge.readUInt32BE(20).toString(16);
    var mi2_id = bridge.readUInt32BE(52).toString(16);
    var mi3_id = bridge.readUInt32BE(84).toString(16);
    
    var dc1 = parseFloat((bridge.readUInt16BE(26)/512).toFixed(2));
    var dc2 = parseFloat((bridge.readUInt16BE(58)/512).toFixed(2)); 
    var dc3 = parseFloat((bridge.readUInt16BE(90)/512).toFixed(2)); 
    
    var power1 = parseFloat((bridge.readUInt16BE(28)/64).toFixed(2));
    var power2 = parseFloat((bridge.readUInt16BE(60)/64).toFixed(2)); 
    var power3 = parseFloat((bridge.readUInt16BE(92)/64).toFixed(2)); 
    
    var total1 = parseFloat((bridge.readUInt32BE(30)/8192).toFixed(2));
    var total2 = parseFloat((bridge.readUInt32BE(62)/8192).toFixed(2)); 
    var total3 = parseFloat((bridge.readUInt32BE(94)/8192).toFixed(2)); 
    
    var temp1 = parseFloat(((((bridge.readUInt8(34)*256)+bridge.readUInt8(35))/128)-40).toFixed(2));
    var temp2 = parseFloat(((((bridge.readUInt8(66)*256)+bridge.readUInt8(67))/128)-40).toFixed(2));
    var temp3 = parseFloat(((((bridge.readUInt8(98)*256)+bridge.readUInt8(99))/128)-40).toFixed(2));
   
    var ac1 = parseFloat((bridge.readUInt16BE(36)/64).toFixed(2)); 
    var ac2 = parseFloat((bridge.readUInt16BE(68)/64).toFixed(2)); 
    var ac3 = parseFloat((bridge.readUInt16BE(100)/64).toFixed(2)); 
    
    var freq1 = parseFloat((bridge.readUInt8(38) + (bridge.readUInt8(39)/256)).toFixed(2));
    var freq2 = parseFloat((bridge.readUInt8(70) + (bridge.readUInt8(71)/256)).toFixed(2));
    var freq3 = parseFloat((bridge.readUInt8(102) + (bridge.readUInt8(103)/256)).toFixed(2));

    msg.payload = {
        [mi1_id]: {
        "pac": power1,
        "vpv": dc1,
        "vac": ac1,
        "freq": freq1,
        "etotal": total1,
        "temperature": temp1
        },
        [mi2_id]: {
            "pac": power2,
            "vpv": dc2,
            "vac": ac2,
            "freq": freq2,
            "etotal": total2,
            "temperature": temp2
        },
        [mi3_id]: { 
            "pac": power3,
            "vpv": dc3,
            "vac": ac3,
            "freq": freq3,
            "etotal": total3,
            "temperature": temp3
        }
    }

    var nodestate = {
        text: 'Pac1: ' + power1 + 'W Pac2: ' + power2 + 'W' + 'Pac3: ' + power3 + 'W'
    };
    node.status(nodestate);
    
    return msg;

}
Het zou nog mooier zijn om iets met een forEach te doen (de data van de omvormers zit in principe op een vaste afstand van elkaar in de TCP hex datastream) maar dat vond ik nog wat te ingewikkeld. Ik heb ook maar 3 omvormers dus dit is nog goed te behappen met de hand.

De data toon ik dan weer in Grafana :)

Acties:
  • 0 Henk 'm!

  • CAD-tekenaar
  • Registratie: November 2008
  • Laatst online: 15-06 22:16
Cafun schreef op woensdag 11 mei 2022 @ 20:44:
[...]


Heb je de oorzaak al gevonden?
Ik heb het gehad na een update van een pallet. Ik dacht dat Hue Magic bij mij het probleem veroorzaakte.
Volgens mij is het na enige tijd vanzelf opgelost. De oorzaak heb ik dus niet kunnen achterhalen. Ik zou je adviseren je systeem een keer te herstarten. Kan nooit kwaad.

Acties:
  • 0 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 15-06 22:25
Ik weet niet zo goed of deze hier moet, of in het Home Assistant topic maar ik ga het hier proberen.

Op dit moment heb ik een flow aangemaakt die gestart wordt zodra een lamp aan gaat, ik wacht 5 minuten (als test) om dan een notificatie te versturen, hiervoor gebruik ik deze functie:
code:
1
2
3
4
5
6
7
8
msg.payload = "Verlichting in "+msg.data.new_state.attributes.friendly_name+" staat nog aan!"
msg.action = {
    action: msg.data.entity_id,
    title: "Schakel uit",
    icon: "sfsymbols:alarm",
    destructive: false
}
return msg;


Vervolgens heb ik een Events all aangemaakt met als Event type: mobile_app_notification_action. Bij msg.topic geef ik $outputData("eventData").event_type mee.

Nu gebruik ik een switch om te bepalen wat de action is. Maar dat zorgt dus voor een vrij lange lijst met verschillende opties terwijl ze allemaal wel naar het zelfde resultaat gaan: Zet de lamp uit.

Ik zoek dus een manier om eenvoudig een extra "data set" mee te geven zoals msg.dataset zodat ik alleen maar hoef te controleren of de response vanuit de notificatie deze waarde heeft. Als dat zo is kan ik namelijk alles doorsturen naar de call service node.

Waarom zo moeilijk? Ik gebruik op dit moment meerdere flows met die soort notificaties er in maar controleer ze allemaal op de zelfde manier en dat is niet wenselijk.

De hele 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
[
    {
        "id": "85ed41d1b523eda1",
        "type": "subflow",
        "name": "Notification",
        "info": "3rdParty_DirectionDown_Haptic.caf\n3rdParty_DirectionUp_Haptic.caf\n3rdParty_Failure_Haptic.caf\n3rdParty_Retry_Haptic.caf\n3rdParty_Start_Haptic.caf\n3rdParty_Stop_Haptic.caf\n3rdParty_Success_Haptic.caf\naccess_scan_complete.caf\nAccessSanComplete_Haptic\nacknowledgment_received.caf\nacknowledgment_sent.caf\nalarm.caf\nAlarm_Haptic.caf\nAlarm_Nightstand_Haptic.caf\nAlert_3rdParty_Haptic.caf\nAlert_3rdParty_Salient_Haptic.caf\nAlert_ActivityFriendsGoalAttained_Haptic.caf\nAlert_ActivityGoalAttained_Haptic.caf\nAlert_ActivityGoalAttained_Salient_Haptic.caf\nAlert_ActivityGoalBehind_Haptic.caf\nAlert_ActivityGoalBehind_Salient_Haptic.caf\nAlert_ActivityGoalClose_Haptic.caf\nAlert_BatteryLow_10p_Haptic.caf\nAlert_BatteryLow_5p_Haptic.caf\nAlert_BatteryLow_5p_Salient_Haptic.caf\nAlert_Calendar_Haptic.caf\nAlert_Calendar_Salient_Haptic.caf\nAlert_Health_Haptic.caf\nAlert_Mail_Haptic.caf\nAlert_Mail_Salient_Haptic.caf\nAlert_MapsDirectionsInApp_Haptic.caf\nAlert_Messages_1_Haptic.caf\nAlert_Messages_1_Salient_Haptic.caf\nAlert_Messages_2_Haptic.caf\nAlert_Messages_3_Haptic.caf\nAlert_PassbookBalance_Haptic.caf\nAlert_PassbookGeofence_Haptic.caf\nAlert_PassbookGeofence_Salient_Haptic.caf\nAlert_PhotostreamActivity_Haptic.caf\nAlert_ReminderDue_Haptic.caf\nAlert_ReminderDue_Salient_Haptic.caf\nAlert_SpartanConnected_LowLatency_Haptic.caf\nAlert_SpartanConnecting_Haptic.caf\nAlert_SpartanConnecting_LowLatency_Haptic.caf\nAlert_SpartanDisconnected_LowLatency_Haptic.caf\nAlert_Voicemail_Haptic.caf\nAlert_Voicemail_Salient_Haptic.caf\nAlert_WalkieTalkie_Haptic.caf\nAnticipate.caf\nAutoUnlock_Haptic.caf\nBatteryMagsafe_Haptic.caf\nBeat_Haptic.caf\nbegin_record.caf\nBloom.caf\nBuddyMigrationStart_Haptic.caf\nBuddyPairingFailure_Haptic.caf\nBuddyPairingRemoteConnection_Haptic.caf\nBuddyPairingRemoteTap_Haptic.caf\nBuddyPairingSuccess_Haptic.caf\nbusy_tone_ansi.caf\nbusy_tone_cept.caf\ncall_waiting_tone_ansi.caf\ncall_waiting_tone_cept.caf\nCalypso.caf\ncamera_shutter_burst.caf\ncamera_shutter_burst_begin.caf\ncamera_shutter_burst_end.caf\ncamera_timer_countdown.caf\ncamera_timer_final_second.caf\nCameraCountdownImminent_Haptic.caf\nCameraCountdownTick_Haptic.caf\nCameraShutter_Haptic.caf\nChoo_Choo.caf\nconnect_power.caf\nct-busy.caf\nct-call-waiting.caf\nct-congestion.caf\nct-error.caf\nct-keytone2.caf\nct-path-ack.caf\nDescent.caf\nDetent_Haptic.caf\nDoNotDisturb_Haptic.caf\ndtmf-0.caf\ndtmf-1.caf\ndtmf-2.caf\ndtmf-3.caf\ndtmf-4.caf\ndtmf-5.caf\ndtmf-6.caf\ndtmf-7.caf\ndtmf-8.caf\ndtmf-9.caf\ndtmf-pound.caf\ndtmf-star.caf\nend_call_tone_cept.caf\nend_record.caf\nengage_power.caf\nengage_power_short.caf\nET_BeginNotification_Haptic.caf\nET_BeginNotification_Salient_Haptic.caf\nET_RemoteTap_Receive_Haptic.caf\nET_RemoteTap_Send_Haptic.caf\nFanfare.caf\nfocus_change_app_icon.caf\nfocus_change_keyboard.caf\nfocus_change_large.caf\nfocus_change_small.caf\ngo_to_sleep_alert.caf\nGoToSleep_Haptic.caf\nHealthNotificaiton.caf\nHourlyChime_Haptic.caf\nHummingbirdCompletion_Haptic.caf\nHummingbirdNotification_Haptic.caf\njbl_ambiguous.caf\njbl_begin.caf\njbl_cancel.caf\njbl_confirm.caf\njbl_no_match.caf\nkey_press_click.caf\nkey_press_delete.caf\nkey_press_modifier.caf\nkeyboard_press_clear.caf\nkeyboard_press_delete.caf\nkeyboard_press_normal.caf\nLadder.caf\nlock.caf\nlong_low_short_high.caf\nlow_power.caf\nmail-sent.caf\nMessagesIncoming_Haptic.caf\nMessagesOutgoing_Haptic.caf\nmiddle_9_short_double_low.caf\nMinuet.caf\nmultiway_invitation.caf\nMultiwayInvitation.caf\nMultiwayJoin.caf\nMultiwayLeave.caf\nnavigation_pop.caf\nnavigation_push.caf\nNavigationGenericManeuver_Haptic.caf\nNavigationGenericManeuver_Salient_Haptic.caf\nNavigationLeftTurn_Haptic.caf\nNavigationLeftTurn_Salient_Haptic.caf\nNavigationRightTurn_Haptic.caf\nNavigationRightTurn_Salient_Haptic.caf\nnew-mail.caf\nNews_Flash.caf\nnfc_scan_complete.caf\nNoir.caf\nNotification_Haptic.caf\nNotification_Salient_Haptic.caf\nOnOffPasscodeFailure_Haptic.caf\nOnOffPasscodeUnlock_Haptic.caf\nOnOffPasscodeUnlockCampanion_Haptic.caf\nOrbExit_Haptic.caf\nOrbLayers_Haptic.caf\npayment_failure.caf\npayment_success.caf\nPhoneAnswer_Haptic.caf\nPhoneHangUp_Haptic.caf\nPhoneHold_Haptic.caf\nphotoShutter.caf\nPhotosZoomDetent_Haptic.caf\nPreview_AudioAndHaptic.caf\nQB_Dictation_Haptic.caf\nQB_Dictation_Off_Haptic.caf\nReceivedMessage.caf\nRemoteCameraShutterBurstBegin_Haptic.caf\nRemoteCameraShutterBurstEnd_Haptic.caf\nringback_tone_ansi.caf\nringback_tone_aus.caf\nringback_tone_cept.caf\nringback_tone_hk.caf\nringback_tone_uk.caf\nRingerChanged.caf\nRingtone_2_Ducked_Haptic-sashimi.caf\nRingtone_2_Haptic-sashimi.caf\nRingtone_UK_Haptic.caf\nRingtone_US_Haptic.caf\nRingtoneDucked_UK_Haptic.caf\nRingtoneDucked_US_Haptic.caf\nSalientNotification_Haptic.caf\nSedentaryTimer_Haptic.caf\nSedentaryTimer_Salient_Haptic.caf\nSentMessage.caf\nshake.caf\nSherwood_Forest.caf\nshort_double_high.caf\nshort_double_low.caf\nshort_low_high.caf\nSIMToolkitCallDropped.caf\nSIMToolkitGeneralBeep.caf\nSIMToolkitNegativeACK.caf\nSIMToolkitPositiveACK.caf\nSIMToolkitSMS.caf\nSiriAutoSend_Haptic.caf\nSiriStart_Haptic.caf\nSiriStopFailure_Haptic.caf\nSiriStopSuccess_Haptic.caf\nsms-received1.caf\nsms-received1.caf\nsms-received2.caf\nsms-received3.caf\nsms-received4.caf\nsms-received5.caf\nsms-received6.caf\nSOSEmergencyContactTextPrompt_Haptic.caf\nSOSFallDetection_Haptic-Newton.caf\nSpell.caf\nStockholm_Haptic.caf\nStockholmActive_Haptic.caf\nStockholmActiveSingleCycle_Haptic.caf\nStockholmFailure_Haptic.caf\nStopwatchLap_Haptic.caf\nStopwatchReset_Haptic.caf\nStopwatchStart_Haptic.caf\nStopwatchStop_Haptic.caf\nSuspense.caf\nSwish.caf\nSwTest1_Haptic.caf\nSystemStartup_Haptic.caf\nTelegraph.caf\nTimer_Haptic.caf\nTimerCancel_Haptic.caf\nTimerPause_Haptic.caf\nTimerStart_Haptic.caf\nTimerWheelHoursDetent_Haptic.caf\nTimerWheelMinutesDetent_Haptic.caf\nTink.caf\nTiptoes.caf\nTock.caf\ntweet_sent.caf\nTypewriters.caf\nUISwipe_Haptic.caf\nUISwitch_Off_Haptic.caf\nUISwitch_On_Haptic.caf\nUpdate.caf\nussd.caf\nvc~ended.caf\nvc~invitation-accepted.caf\nvc~ringing.caf\nvc~ringing_watch.caf\nVoiceOver_Click_Haptic.caf\nWalkieTalkieActiveEnd_Haptic.caf\nWalkieTalkieActiveStart_Haptic.caf\nWalkieTalkieReceiveEnd_Haptic.caf\nWalkieTalkieReceiveStart_Haptic.caf\nwarsaw.caf\nWarsaw_Haptic.caf\nwheels_of_time.caf\nWorkoutComplete_Haptic.caf\nWorkoutCompleteAutoDetect.caf\nWorkoutCountdown_Haptic.caf\nWorkoutPaceAbove.caf\nWorkoutPaceBelow.caf\nWorkoutPaused_Haptic.caf\nWorkoutPressStart_Haptic.caf\nWorkoutResumed_Haptic.caf\nWorkoutResumedAutoDetect.caf\nWorkoutSaved_Haptic.caf\nWorkoutSelect_Haptic.caf\nWorkoutStartAutoDetect.caf",
        "category": "",
        "in": [
            {
                "x": 40,
                "y": 40,
                "wires": [
                    {
                        "id": "b43de5f2819711c2"
                    }
                ]
            }
        ],
        "out": [],
        "env": [
            {
                "name": "title",
                "type": "str",
                "value": "",
                "ui": {
                    "icon": "font-awesome/fa-header",
                    "label": {
                        "en-US": "Message title"
                    },
                    "type": "input",
                    "opts": {
                        "types": [
                            "str"
                        ]
                    }
                }
            },
            {
                "name": "message",
                "type": "str",
                "value": "",
                "ui": {
                    "icon": "font-awesome/fa-envelope-o",
                    "type": "input",
                    "opts": {
                        "types": [
                            "str"
                        ]
                    }
                }
            },
            {
                "name": "user",
                "type": "str",
                "value": "",
                "ui": {
                    "icon": "font-awesome/fa-users",
                    "label": {
                        "en-US": "Receiver"
                    },
                    "type": "select",
                    "opts": {
                        "opts": [
                            {
                                "l": {
                                    "en-US": "Evert-Job"
                                },
                                "v": "ALL_DEVICES"
                            },
                            {
                                "l": {
                                    "en-US": "Pascalle"
                                },
                                "v": "mobile_app_iphone_van_pascalle"
                            },
                            {
                                "l": {
                                    "en-US": "Alle bewoners"
                                },
                                "v": "ALL_IPHONES"
                            }
                        ]
                    }
                }
            },
            {
                "name": "image",
                "type": "str",
                "value": "",
                "ui": {
                    "icon": "font-awesome/fa-image",
                    "label": {
                        "en-US": "Image URL"
                    },
                    "type": "input",
                    "opts": {
                        "types": [
                            "str"
                        ]
                    }
                }
            },
            {
                "name": "audio",
                "type": "str",
                "value": "",
                "ui": {
                    "icon": "font-awesome/fa-file-audio-o",
                    "label": {
                        "en-US": "Custom sound"
                    },
                    "type": "select"
                }
            },
            {
                "name": "ignore",
                "type": "bool",
                "value": "true",
                "ui": {
                    "icon": "font-awesome/fa-hand-stop-o",
                    "label": {
                        "en-US": "Ignore payload?"
                    },
                    "type": "checkbox"
                }
            },
            {
                "name": "location",
                "type": "bool",
                "value": "false",
                "ui": {
                    "icon": "font-awesome/fa-location-arrow",
                    "label": {
                        "en-US": "Request loction?"
                    },
                    "type": "checkbox"
                }
            },
            {
                "name": "critical?",
                "type": "bool",
                "value": "false",
                "ui": {
                    "icon": "font-awesome/fa-warning",
                    "label": {
                        "en-US": "Critical message?"
                    },
                    "type": "checkbox"
                }
            }
        ],
        "meta": {
            "module": "homeassistant-notification",
            "author": "Toppe <toppe@toppe.nl>",
            "license": "Apache-2.0"
        },
        "color": "#3FADB5",
        "inputLabels": [
            "Connect to node that start notification"
        ],
        "icon": "font-awesome/fa-mobile-phone"
    },
    {
        "id": "5a5d26f88b8ad3d4",
        "type": "api-call-service",
        "z": "85ed41d1b523eda1",
        "name": "",
        "server": "1d523c9b04aaa68e",
        "version": 3,
        "debugenabled": false,
        "service_domain": "notify",
        "service": "",
        "entityId": "",
        "data": "",
        "dataType": "jsonata",
        "mergecontext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "x": 350,
        "y": 40,
        "wires": [
            []
        ]
    },
    {
        "id": "b43de5f2819711c2",
        "type": "function",
        "z": "85ed41d1b523eda1",
        "name": "Do the magic",
        "func": "//Get environment variables\n//Get all the environment variables \nmsg.title = env.get(\"title\");\nmsg.message = env.get(\"message\");\nmsg.receiver = env.get(\"user\");\nmsg.critical = env.get(\"critical?\");\nmsg.locationupdate = env.get(\"location\");\nmsg.imageurl = env.get(\"image\");\nmsg.actiondata = env.get(\"actiondata\");\nmsg.customaudio = env.get(\"audio\");\nmsg.ignore = env.get(\"ignore\");\n\n//Check if all loggedin devices should recieve notification\n//Groups can be created in the configuration.yaml file of HA\n/*if(msg.receiver == 'all'){\n    msg.receiver = 'notify'\n} else if(msg.receiver == 'evert-job'){\n    msg.receiver = 'ALL_DEVICES'\n} else if(msg.receiver == 'iphones'){\n    msg.receiver = 'ALL_IPHONES'\n} */\n\n//Check if input requested a location update\nif(msg.locationupdate){ msg.message = 'request_location_update' }\n\n//Check if msg.payload has content. If so, ignore msg.message\nif(!msg.ignore){\n    msg.message = msg.payload\n}\n\n//Check if msg.message has content. If not, send a warning message.\nif(!msg.message) { msg.message = \"Er wordt een notificatie verstuurd zonder inhoud.\" }\n\n    msg.payload = {\n        data :{ \n        title : msg.title,\n        message : msg.message,\n        data: {\n            push: {\n\n            },\n            actions: [msg.action]\n        }\n    },\n        service : msg.receiver\n    }\n    \n//Check if user supplied a image URL\nif (msg.imageurl) {\n  msg.payload.data.data.image = msg.imageurl\n}\n\n//Check if user supplied a custom sound\nif (msg.customaudio) {\n  msg.payload.data.data.push.sound = msg.customaudio;\n}\n\n//Check if user marked message as critical\nif (msg.critical) {\n    msg.payload.data.data.push.sound = {}\n    msg.payload.data.data.push.sound.sound = \"default\",\n    msg.payload.data.data.push.sound.critical = 1\n    msg.payload.data.data.push.sound.volume = 1\n}\n\n//Remove all other properties \ndelete msg.actiondata\ndelete msg.imageurl\ndelete msg.locationupdate\ndelete msg.critical\ndelete msg.receiver\ndelete msg.message\ndelete msg.title\ndelete msg.action\ndelete msg.customaudio\n\n\n//Return payload\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 180,
        "y": 40,
        "wires": [
            [
                "5a5d26f88b8ad3d4"
            ]
        ]
    },
    {
        "id": "7c039b673aba69a8",
        "type": "debug",
        "z": "85ed41d1b523eda1",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 470,
        "y": 260,
        "wires": []
    },
    {
        "id": "88712f6ce36298f2",
        "type": "tab",
        "label": "Playground",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "27d6fe7b98e1d22d",
        "type": "server-state-changed",
        "z": "88712f6ce36298f2",
        "name": "",
        "server": "1d523c9b04aaa68e",
        "version": 3,
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "entityidfilter": "light.badkamer",
        "entityidfiltertype": "exact",
        "outputinitially": false,
        "state_type": "str",
        "haltifstate": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "outputs": 2,
        "output_only_on_state_change": true,
        "for": "10",
        "forType": "num",
        "forUnits": "minutes",
        "ignorePrevStateNull": false,
        "ignorePrevStateUnknown": false,
        "ignorePrevStateUnavailable": false,
        "ignoreCurrentStateUnknown": false,
        "ignoreCurrentStateUnavailable": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "eventData"
            },
            {
                "property": "topic",
                "propertyType": "msg",
                "value": "",
                "valueType": "triggerId"
            }
        ],
        "x": 150,
        "y": 100,
        "wires": [
            [
                "18927f747021ed3f"
            ],
            []
        ]
    },
    {
        "id": "9ba95d1a7000ae61",
        "type": "subflow:85ed41d1b523eda1",
        "z": "88712f6ce36298f2",
        "name": "",
        "env": [
            {
                "name": "title",
                "value": "Verlichting",
                "type": "str"
            },
            {
                "name": "message",
                "value": "Velichting staat te lang aan!",
                "type": "str"
            },
            {
                "name": "user",
                "value": "ALL_DEVICES",
                "type": "str"
            },
            {
                "name": "audio",
                "value": null,
                "type": "str"
            },
            {
                "name": "ignore",
                "type": "bool",
                "value": "false"
            }
        ],
        "x": 690,
        "y": 120,
        "wires": []
    },
    {
        "id": "4b0138ea035b4ee0",
        "type": "api-current-state",
        "z": "88712f6ce36298f2",
        "name": "",
        "server": "1d523c9b04aaa68e",
        "version": 3,
        "outputs": 1,
        "halt_if": "",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "entity_id": "light.entree_2",
        "state_type": "str",
        "blockInputOverrides": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "entity"
            }
        ],
        "for": 0,
        "forType": "num",
        "forUnits": "minutes",
        "override_topic": false,
        "state_location": "payload",
        "override_payload": "msg",
        "entity_location": "data",
        "override_data": "msg",
        "x": 320,
        "y": 460,
        "wires": [
            [
                "f306bf14322339a9",
                "8028b088b77d4f89"
            ]
        ]
    },
    {
        "id": "bb77d1ec80a14899",
        "type": "inject",
        "z": "88712f6ce36298f2",
        "name": "",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "payload": "",
        "payloadType": "date",
        "x": 90,
        "y": 460,
        "wires": [
            [
                "4b0138ea035b4ee0"
            ]
        ]
    },
    {
        "id": "f306bf14322339a9",
        "type": "debug",
        "z": "88712f6ce36298f2",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 640,
        "y": 460,
        "wires": []
    },
    {
        "id": "8028b088b77d4f89",
        "type": "function",
        "z": "88712f6ce36298f2",
        "name": "",
        "func": "msg.payload = \"Lampje aan\"\nmsg.action = {\n    action: msg.data.entity_id,\n    title: \"Schakel uit\",\n    icon: \"sfsymbols:alarm\",\n    destructive: false\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 490,
        "y": 580,
        "wires": [
            [
                "f306bf14322339a9",
                "0c82b05bbb09e8d4"
            ]
        ]
    },
    {
        "id": "18927f747021ed3f",
        "type": "function",
        "z": "88712f6ce36298f2",
        "name": "",
        "func": "msg.payload = \"Verlichting in \"+msg.data.new_state.attributes.friendly_name+\" staat nog aan!\"\nmsg.action = {\n    action: msg.data.entity_id,\n    title: \"Schakel uit\",\n    icon: \"sfsymbols:alarm\",\n    destructive: false\n}\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 400,
        "y": 120,
        "wires": [
            [
                "9ba95d1a7000ae61"
            ]
        ]
    },
    {
        "id": "2f2ba38edbc85962",
        "type": "server-state-changed",
        "z": "88712f6ce36298f2",
        "name": "",
        "server": "1d523c9b04aaa68e",
        "version": 3,
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "entityidfilter": "light.entree_2",
        "entityidfiltertype": "exact",
        "outputinitially": false,
        "state_type": "str",
        "haltifstate": "on",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "outputs": 2,
        "output_only_on_state_change": true,
        "for": "5",
        "forType": "num",
        "forUnits": "minutes",
        "ignorePrevStateNull": false,
        "ignorePrevStateUnknown": false,
        "ignorePrevStateUnavailable": false,
        "ignoreCurrentStateUnknown": false,
        "ignoreCurrentStateUnavailable": false,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "entityState"
            },
            {
                "property": "data",
                "propertyType": "msg",
                "value": "",
                "valueType": "eventData"
            },
            {
                "property": "topic",
                "propertyType": "msg",
                "value": "",
                "valueType": "triggerId"
            }
        ],
        "x": 140,
        "y": 160,
        "wires": [
            [
                "18927f747021ed3f",
                "4b4c65dd773db750"
            ],
            []
        ]
    },
    {
        "id": "4b4c65dd773db750",
        "type": "debug",
        "z": "88712f6ce36298f2",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "true",
        "targetType": "full",
        "statusVal": "",
        "statusType": "auto",
        "x": 390,
        "y": 160,
        "wires": []
    },
    {
        "id": "0c82b05bbb09e8d4",
        "type": "subflow:85ed41d1b523eda1",
        "z": "88712f6ce36298f2",
        "name": "",
        "env": [
            {
                "name": "user",
                "value": "ALL_DEVICES",
                "type": "str"
            },
            {
                "name": "audio",
                "value": null,
                "type": "str"
            }
        ],
        "x": 680,
        "y": 520,
        "wires": []
    },
    {
        "id": "fd21e098a24ac4d1",
        "type": "server-events",
        "z": "88712f6ce36298f2",
        "name": "Check for response",
        "server": "1d523c9b04aaa68e",
        "version": 1,
        "event_type": "mobile_app_notification_action",
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "waitForRunning": true,
        "outputProperties": [
            {
                "property": "payload",
                "propertyType": "msg",
                "value": "",
                "valueType": "eventData"
            },
            {
                "property": "topic",
                "propertyType": "msg",
                "value": "$outputData(\"eventData\").event_type",
                "valueType": "jsonata"
            }
        ],
        "x": 110,
        "y": 220,
        "wires": [
            [
                "3e7dcf61d2dcd726",
                "f45375f8ef9a46ab"
            ]
        ]
    },
    {
        "id": "3e7dcf61d2dcd726",
        "type": "switch",
        "z": "88712f6ce36298f2",
        "name": "",
        "property": "payload.event.action",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "light.entree_2",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "light.badkamer",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 290,
        "y": 220,
        "wires": [
            [
                "ba92f591b24ec49a",
                "f45375f8ef9a46ab"
            ],
            [
                "ba92f591b24ec49a",
                "f45375f8ef9a46ab"
            ]
        ]
    },
    {
        "id": "ba92f591b24ec49a",
        "type": "api-call-service",
        "z": "88712f6ce36298f2",
        "name": "",
        "server": "1d523c9b04aaa68e",
        "version": 3,
        "debugenabled": false,
        "service_domain": "light",
        "service": "turn_off",
        "entityId": "",
        "data": "{ \"entity_id\": $join(payload.event.action, \",\") }",
        "dataType": "jsonata",
        "mergecontext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "x": 480,
        "y": 220,
        "wires": [
            []
        ]
    },
    {
        "id": "f45375f8ef9a46ab",
        "type": "debug",
        "z": "88712f6ce36298f2",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 390,
        "y": 300,
        "wires": []
    },
    {
        "id": "1d523c9b04aaa68e",
        "type": "server",
        "name": "Home Assistant",
        "version": 2,
        "addon": false,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": true,
        "heartbeat": false,
        "heartbeatInterval": "30"
    }
]

[ Voor 95% gewijzigd door ThinkPad op 23-05-2022 13:08 . Reden: lap code binnen quote-tags gezet ivm scrollen ]

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • 0 Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
Toppe schreef op zondag 22 mei 2022 @ 09:45:
Ik weet niet zo goed of deze hier moet, of in het Home Assistant topic maar ik ga het hier proberen.

Op dit moment heb ik een flow aangemaakt die gestart wordt zodra een lamp aan gaat, ik wacht 5 minuten (als test) om dan een notificatie te versturen, hiervoor gebruik ik deze functie:
code:
1
2
3
4
5
6
7
8
msg.payload = "Verlichting in "+msg.data.new_state.attributes.friendly_name+" staat nog aan!"
msg.action = {
    action: msg.data.entity_id,
    title: "Schakel uit",
    icon: "sfsymbols:alarm",
    destructive: false
}
return msg;


Vervolgens heb ik een Events all aangemaakt met als Event type: mobile_app_notification_action. Bij msg.topic geef ik $outputData("eventData").event_type mee.

Nu gebruik ik een switch om te bepalen wat de action is. Maar dat zorgt dus voor een vrij lange lijst met verschillende opties terwijl ze allemaal wel naar het zelfde resultaat gaan: Zet de lamp uit.

Ik zoek dus een manier om eenvoudig een extra "data set" mee te geven zoals msg.dataset zodat ik alleen maar hoef te controleren of de response vanuit de notificatie deze waarde heeft. Als dat zo is kan ik namelijk alles doorsturen naar de call service node.

Waarom zo moeilijk? Ik gebruik op dit moment meerdere flows met die soort notificaties er in maar controleer ze allemaal op de zelfde manier en dat is niet wenselijk.
Even checken of ik begrijp wat je wilt...

Er doet zich een situatie voor (lamp badkamer is al 10 minuten aan) waarvoor je een notificatie stuurt.
In de notificatie wil je een actie kunnen selecteren (doe lamp uit).
In een generieke notificatie-actie-handler wil je de actie afvangen en uitvoeren. Deze handler moet ook andere notificaties-acties kunnen afhandelen.

Als dit klopt:

Kun je de actie die je nu meegeeft aan de notificatie (het entity_id van de lamp) niet vervangen door iets anders/uitgebreiders. Misschien een stukje json met daarin de actie ("doe lamp uit") EN het entity_id?
Dan kun je in je handler dit uit elkaar trekken en de juiste actie uitvoeren.
Je bent dan flexibel zodat je ook compleet ander soort acties kunt uitvoeren.

Maar goed, geen uitgebreide ervaring met notificaties, dus misschien kan dit niet ;)

Feel free to Buy me a coffee


Acties:
  • 0 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 15-06 22:25
musicpixel schreef op zondag 22 mei 2022 @ 12:59:
[...]


Even checken of ik begrijp wat je wilt...

Er doet zich een situatie voor (lamp badkamer is al 10 minuten aan) waarvoor je een notificatie stuurt.
In de notificatie wil je een actie kunnen selecteren (doe lamp uit).
In een generieke notificatie-actie-handler wil je de actie afvangen en uitvoeren. Deze handler moet ook andere notificaties-acties kunnen afhandelen.

Als dit klopt:

Kun je de actie die je nu meegeeft aan de notificatie (het entity_id van de lamp) niet vervangen door iets anders/uitgebreiders. Misschien een stukje json met daarin de actie ("doe lamp uit") EN het entity_id?
Dan kun je in je handler dit uit elkaar trekken en de juiste actie uitvoeren.
Je bent dan flexibel zodat je ook compleet ander soort acties kunt uitvoeren.

Maar goed, geen uitgebreide ervaring met notificaties, dus misschien kan dit niet ;)
Ja, dat zou kunnen werken alleen krijg ik op een of andere manier geen goeie JSON mee gestuurd en als ik wel iets mee kan sturen dan lukt het mij niet om hem weer uit elkaar te trekken. We blijven zoeken :+

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • +1 Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
Toppe schreef op zondag 22 mei 2022 @ 13:15:
[...]


Ja, dat zou kunnen werken alleen krijg ik op een of andere manier geen goeie JSON mee gestuurd en als ik wel iets mee kan sturen dan lukt het mij niet om hem weer uit elkaar te trekken. We blijven zoeken :+
In plaats van JSON kun je ook proberen om zoiets te specificeren bij je action:
"lamp_uit|entity_id1,entity_id2" en dan splitten op | en eventueel de entity_ids op , splitten. Makkelijker, maar minder flexibel.

Feel free to Buy me a coffee


Acties:
  • +3 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 10:07
offtopic:
@Toppe (en anderen): als je een lang stuk code hebt dan kun je het code-blok nog binnen quote-tags zetten hier op Tweakers. Dan wordt het ingeklapt, scheelt weer een versleten duim voor de smartphonegebruikers die niet meer langs 693 regels code hoeven te scrollen ;)

[ Voor 10% gewijzigd door ThinkPad op 23-05-2022 13:10 ]


Acties:
  • +2 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 15-06 22:25
Simpele subflow om gesproken tekst over een HomePod te spelen. Deze gebruikt de HA Cloud TTS service. Tevens gaat de media verder met spelen (en op originele volume!) als deze ook speelde voor de TTS.

Het enige wat je hoeft te doen is de speaker in de subflow aan te passen en een functie maken met een msg.payload met daarin de tekst die uitgesproken moet worden.
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
[{
    "id": "a6a82e343a3adeae",
    "type": "subflow",
    "name": "Spraak bericht",
    "info": "",
    "category": "",
    "in": [{
        "x": 20,
        "y": 80,
        "wires": [{
            "id": "ce5adc76eaeb354d"
        }]
    }],
    "out": [],
    "env": [],
    "meta": {},
    "color": "#DDAA99"
}, {
    "id": "ce5adc76eaeb354d",
    "type": "api-current-state",
    "z": "a6a82e343a3adeae",
    "name": "",
    "server": "54cc4b277fe5ce1b",
    "version": 3,
    "outputs": 1,
    "halt_if": "",
    "halt_if_type": "str",
    "halt_if_compare": "is",
    "entity_id": "media_player.kitchen",
    "state_type": "str",
    "blockInputOverrides": false,
    "outputProperties": [{
        "property": "state",
        "propertyType": "msg",
        "value": "",
        "valueType": "entity"
    }, {
        "property": "data",
        "propertyType": "msg",
        "value": "",
        "valueType": "entity"
    }],
    "for": "0",
    "forType": "num",
    "forUnits": "minutes",
    "override_topic": false,
    "state_location": "payload",
    "override_payload": "msg",
    "entity_location": "data",
    "override_data": "msg",
    "x": 200,
    "y": 80,
    "wires": [
        ["98168b72bc81aacd"]
    ]
}, {
    "id": "da22f92073683702",
    "type": "api-call-service",
    "z": "a6a82e343a3adeae",
    "name": "",
    "server": "54cc4b277fe5ce1b",
    "version": 5,
    "debugenabled": false,
    "domain": "tts",
    "service": "cloud_say",
    "areaId": [],
    "deviceId": [],
    "entityId": ["media_player.kitchen"],
    "data": "{\"message\":msg.payload}",
    "dataType": "jsonata",
    "mergeContext": "",
    "mustacheAltTags": false,
    "outputProperties": [],
    "queue": "none",
    "x": 610,
    "y": 80,
    "wires": [
        ["fea5c98353581298"]
    ]
}, {
    "id": "f1957bde1a06e8cc",
    "type": "switch",
    "z": "a6a82e343a3adeae",
    "name": "",
    "property": "state.state",
    "propertyType": "msg",
    "rules": [{
        "t": "eq",
        "v": "playing",
        "vt": "str"
    }],
    "checkall": "true",
    "repair": false,
    "outputs": 1,
    "x": 970,
    "y": 80,
    "wires": [
        ["cf6e588d5839cfe3"]
    ]
}, {
    "id": "cf6e588d5839cfe3",
    "type": "api-call-service",
    "z": "a6a82e343a3adeae",
    "name": "",
    "server": "54cc4b277fe5ce1b",
    "version": 5,
    "debugenabled": false,
    "domain": "media_player",
    "service": "media_play",
    "areaId": [],
    "deviceId": [],
    "entityId": ["media_player.kitchen"],
    "data": "",
    "dataType": "jsonata",
    "mergeContext": "",
    "mustacheAltTags": false,
    "outputProperties": [],
    "queue": "none",
    "x": 1150,
    "y": 80,
    "wires": [
        []
    ]
}, {
    "id": "98168b72bc81aacd",
    "type": "api-call-service",
    "z": "a6a82e343a3adeae",
    "name": "",
    "server": "54cc4b277fe5ce1b",
    "version": 5,
    "debugenabled": false,
    "domain": "media_player",
    "service": "media_pause",
    "areaId": [],
    "deviceId": [],
    "entityId": ["media_player.kitchen"],
    "data": "",
    "dataType": "jsonata",
    "mergeContext": "",
    "mustacheAltTags": false,
    "outputProperties": [],
    "queue": "none",
    "x": 200,
    "y": 360,
    "wires": [
        ["fb0f03a72a685939"]
    ]
}, {
    "id": "fb0f03a72a685939",
    "type": "api-call-service",
    "z": "a6a82e343a3adeae",
    "name": "",
    "server": "54cc4b277fe5ce1b",
    "version": 5,
    "debugenabled": false,
    "domain": "media_player",
    "service": "volume_set",
    "areaId": [],
    "deviceId": [],
    "entityId": ["media_player.kitchen"],
    "data": "{\"volume_level\":\"0.7\"}",
    "dataType": "jsonata",
    "mergeContext": "",
    "mustacheAltTags": false,
    "outputProperties": [],
    "queue": "none",
    "x": 510,
    "y": 360,
    "wires": [
        ["da22f92073683702"]
    ]
}, {
    "id": "fea5c98353581298",
    "type": "api-call-service",
    "z": "a6a82e343a3adeae",
    "name": "",
    "server": "54cc4b277fe5ce1b",
    "version": 5,
    "debugenabled": false,
    "domain": "media_player",
    "service": "volume_set",
    "areaId": [],
    "deviceId": [],
    "entityId": ["media_player.kitchen"],
    "data": "{\"volume_level\":msg.state.attributes.volume_level}",
    "dataType": "jsonata",
    "mergeContext": "",
    "mustacheAltTags": false,
    "outputProperties": [],
    "queue": "none",
    "x": 810,
    "y": 120,
    "wires": [
        ["f1957bde1a06e8cc"]
    ]
}, {
    "id": "54cc4b277fe5ce1b",
    "type": "server",
    "name": "Home Assistant",
    "version": 2,
    "addon": true,
    "rejectUnauthorizedCerts": true,
    "ha_boolean": "y|yes|true|on|home|open",
    "connectionDelay": true,
    "cacheJson": true,
    "heartbeat": false,
    "heartbeatInterval": "30"
}]

[ Voor 97% gewijzigd door Toppe op 30-05-2022 15:53 ]

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • 0 Henk 'm!

  • ericplan
  • Registratie: Mei 2006
  • Laatst online: 10:12

ericplan

5180 Wp PV

Een vraag waar ik even niet uit kom. Ik heb een Finder 7m.38 kWh-meter die ik via Modbus gekoppeld heb in Node Red.
Een aantal registers zijn van het formaat Signed Long Value (32-bit) en daar kan de node buffer-parser prima mee overweg om twee 16-bit registers te combineren. Dat heb ik werkend.

Een hoop andere registers zijn van het volgende type:
T5 Unsigned Measurement (32 bit)
bits # 31..24 Decade Exponent(Signed 8 bit)
bits # 23..00 Binary Unsigned Value (24 bit)
Example: 123456*10-3 stored as FD01 E240(16)

Hoe krijg ik daar iets leesbaars uit? Als ik de buffer van twee opeenvolgende 16-bit registers uitlees krijg ik:
0: 0xff
1: 0x0
2: 0x9
3: 0x7

De waarde die daarbij hoort zou 231.1 Volt zijn. Heeft iemand een voorbeeld flow/formule?

A'dam PVOutput


Acties:
  • 0 Henk 'm!

  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 15-06 17:59
ericplan schreef op donderdag 2 juni 2022 @ 22:00:
Een vraag waar ik even niet uit kom. Ik heb een Finder 7m.38 kWh-meter die ik via Modbus gekoppeld heb in Node Red.
Een aantal registers zijn van het formaat Signed Long Value (32-bit) en daar kan de node buffer-parser prima mee overweg om twee 16-bit registers te combineren. Dat heb ik werkend.

Een hoop andere registers zijn van het volgende type:
T5 Unsigned Measurement (32 bit)
bits # 31..24 Decade Exponent(Signed 8 bit)
bits # 23..00 Binary Unsigned Value (24 bit)
Example: 123456*10-3 stored as FD01 E240(16)

Hoe krijg ik daar iets leesbaars uit? Als ik de buffer van twee opeenvolgende 16-bit registers uitlees krijg ik:
0: 0xff
1: 0x0
2: 0x9
3: 0x7

De waarde die daarbij hoort zou 231.1 Volt zijn. Heeft iemand een voorbeeld flow/formule?
Heb je een 'float' geprobeerd met de buffer parser?
Anders zou ik het in een functie node doen, met bitshifts en maskering kun je de individuele delen dan scheiden en een berekening uitvoeren

Acties:
  • 0 Henk 'm!

  • ericplan
  • Registratie: Mei 2006
  • Laatst online: 10:12

ericplan

5180 Wp PV

Step5 schreef op vrijdag 3 juni 2022 @ 08:55:
[...]
Heb je een 'float' geprobeerd met de buffer parser?
Anders zou ik het in een functie node doen, met bitshifts en maskering kun je de individuele delen dan scheiden en een berekening uitvoeren
Ben weer iets verder. Met de buffer-parser kan ik de output scheiden in twee delen. Het 8-bit gedeelte, de exponent komt keurig in de payload. Met type "hex" kan ik de 3 resterende bytes samenvoegen tot één hex-waarde. Nu een simpele functie-node maken om die twee te combineren.

Voordeel van de buffer-parser is natuurlijk wel dat ik dit grapje voor een reeks adressen kan uitvoeren. Bijvoorbeeld de spanning op L1, L2, L3 en gemiddeld. De scheelt weer een leesactie op de Modbus.

A'dam PVOutput


Acties:
  • +1 Henk 'm!

  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 15-06 17:59
ericplan schreef op vrijdag 3 juni 2022 @ 09:40:
[...]

Ben weer iets verder. Met de buffer-parser kan ik de output scheiden in twee delen. Het 8-bit gedeelte, de exponent komt keurig in de payload. Met type "hex" kan ik de 3 resterende bytes samenvoegen tot één hex-waarde. Nu een simpele functie-node maken om die twee te combineren.

Voordeel van de buffer-parser is natuurlijk wel dat ik dit grapje voor een reeks adressen kan uitvoeren. Bijvoorbeeld de spanning op L1, L2, L3 en gemiddeld. De scheelt weer een leesactie op de Modbus.
zat ff te pielen,

Hier een voorbeeldje, die verwerkt het hele 32 bits 'double word':

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let exp, num;

let w1 = 0xFD01E240
let w2 = 0xFF000907

exp = (w1 & 0xFF000000) >> 24 
num = (w1 & 0x00FFFFFF) * Math.pow(10, exp)
node.warn("w1 num=" + num)

exp = (w2 & 0xFF000000)  >> 24
num = (w2 & 0x00FFFFFF) * Math.pow(10, exp)
node.warn("w2 num=" + num)

msg.payload = num;

return msg;

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

Acties:
  • 0 Henk 'm!

  • ericplan
  • Registratie: Mei 2006
  • Laatst online: 10:12

ericplan

5180 Wp PV

@Step5 Uit de buffer-parser komt een object met twee delen (Mantisse, Exponent)

Heb het voorlopig zo in een functienode staan:
code:
1
2
msg.payload = parseInt("0x"+msg.payload.Mantisse) * Math.pow(10, msg.payload.Exponent);
return msg;

Ik krijg de waardes eruit die ik wil, dus voorlopig tevreden.

A'dam PVOutput


Acties:
  • 0 Henk 'm!

  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 15-06 17:59
ericplan schreef op vrijdag 3 juni 2022 @ 10:19:
@Step5 Uit de buffer-parser komt een object met twee delen (Mantisse, Exponent)

Heb het voorlopig zo in een funtienode staan:
code:
1
2
msg.payload = parseInt("0x"+msg.payload.Mantisse) * Math.pow(10, msg.payload.Exponent);
return msg;

Ik krijg de waardes eruit die ik wil, dus voorlopig tevreden.
Prima natuurlijk :)

Waarom doe je trouwens "parseInt("0x"+msg.payload.Mantisse)" ?
Is die payload.Mantisse niet gewoon een getal?

Acties:
  • 0 Henk 'm!

  • ericplan
  • Registratie: Mei 2006
  • Laatst online: 10:12

ericplan

5180 Wp PV

Step5 schreef op vrijdag 3 juni 2022 @ 11:18:
[...]
Prima natuurlijk :)

Waarom doe je trouwens "parseInt("0x"+msg.payload.Mantisse)" ?
Is die payload.Mantisse niet gewoon een getal?
Nee, de buffer-parser kan niet overweg met een 24-bit unsigned binary, maar hij kan dit wel als hex uitvoeren. Payload.Mantisse is in hex, vandaar de conversiestap.

A'dam PVOutput


Acties:
  • 0 Henk 'm!

  • ericplan
  • Registratie: Mei 2006
  • Laatst online: 10:12

ericplan

5180 Wp PV

Misschien gaat de maker van buffer-parser ermee aan de slag.

https://discourse.nodered...3-1-2/25879/52?u=ericplan

A'dam PVOutput


Acties:
  • 0 Henk 'm!

  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 15-06 17:59
Het verhaal (reacties) wat ik daar lees klopt volgens mij niet helemaal met jouw eerste post, daar heb je het over 8 bit signed, wat dus 1 sign bit is, en 7 bits voor de exponent. En 24 bits voor de mantissa.
Het voorbeeld wat in je laatste link gegeven wordt is 1 sign bit, 8 bits voor exponent en de overige (23) bits voor de mantissa.

Acties:
  • 0 Henk 'm!

  • ericplan
  • Registratie: Mei 2006
  • Laatst online: 10:12

ericplan

5180 Wp PV

Step5 schreef op vrijdag 3 juni 2022 @ 19:52:
[...]
Het verhaal (reacties) wat ik daar lees klopt volgens mij niet helemaal met jouw eerste post, daar heb je het over 8 bit signed, wat dus 1 sign bit is, en 7 bits voor de exponent. En 24 bits voor de mantissa.
Het voorbeeld wat in je laatste link gegeven wordt is 1 sign bit, 8 bits voor exponent en de overige (23) bits voor de mantissa.
Nee, ik zit ook even te kijken hoe ik moet reageren. Wat Steve zegt klopt volgens mij niet. Dit is overigens de link naar het modbus-manual van de 7M series. En bovendien krijg ik met mijn formule wel correcte waardes voor het voltage.
https://cdn.findernet.com...7M24-7M38_v2_30062021.pdf

Krijg het voorlopig nog niet werkend met FloatBE. Niet in de buurt zelfs.

[ Voor 4% gewijzigd door ericplan op 03-06-2022 20:41 ]

A'dam PVOutput


Acties:
  • 0 Henk 'm!

  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 15-06 17:59
ericplan schreef op vrijdag 3 juni 2022 @ 20:39:
[...]

Nee, ik zit ook even te kijken hoe ik moet reageren. Wat Steve zegt klopt volgens mij niet. Dit is overigens de link naar het modbus-manual van de 7M series. En bovendien krijg ik met mijn formule wel correcte waardes voor het voltage.
https://cdn.findernet.com...7M24-7M38_v2_30062021.pdf

Krijg het voorlopig nog niet werkend met FloatBE. Niet in de buurt zelfs.
Op zich prima als het zo werkt, maar ik zie in je PDF dat het apparaat naastt 'T5', ook waarden in T_float ondersteund, en die zoudendan wel direct met FloatBE geconverteerd kunnen worden.
Misschien is dat nog een optie?

Afbeeldingslocatie: https://tweakers.net/i/4dGev8IzZna6Q7zwhKZ_rZuA19M=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/KRMDV2bhm2zwKZ9v77UZd3Py.png?f=user_large

Acties:
  • +1 Henk 'm!

  • ericplan
  • Registratie: Mei 2006
  • Laatst online: 10:12

ericplan

5180 Wp PV

@Step5 Zie nu pas dat 30107-30108 in T5 dezelfde data oplevert als 32500-32501 in t_float. Mijn probleem is dus opgelost. De manual is niet heel erg duidelijk

[ Voor 3% gewijzigd door ericplan op 03-06-2022 22:15 ]

A'dam PVOutput


Acties:
  • +1 Henk 'm!

  • etienne001
  • Registratie: September 2005
  • Laatst online: 06-06 20:42
Ik probeer de ventilatie hier aan te sturen dmv de verlichting op het toilet.
Als de lamp langer dan 2 minuten aan is dan wil ik graag de ventilatie aan voor 5 minuten.
Is de lamp korter aan dan 5 minuten dan hoeft er niets te gebeuren.
Ik ben een beetje aan het puzzelen met onderstaand, maar dit doet niet helemaal wat ik wil.

Afbeeldingslocatie: https://tweakers.net/i/oqZKsJAOrzwDqdHV6aBDp-Fz8xU=/800x/filters:strip_icc():strip_exif()/f/image/KKEziqWRoz0hFu6ub8kYSwN6.jpg?f=fotoalbum_large
Wat kan ik hiervoor het beste gebruiken?
Als de lamp nu korter dan 2 minuten aan gaat dan doet de ventilatie niets, gaat de lamp langer aan dan start de ventilatie, gaat de lamp uit dan blijft deze geen 5 minuten nadraaien, maar gaat ook direct uit.

[ Voor 12% gewijzigd door etienne001 op 09-06-2022 22:39 ]


Acties:
  • 0 Henk 'm!

  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 15-06 17:59
etienne001 schreef op donderdag 9 juni 2022 @ 22:16:
Ik probeer de ventilatie hier aan te sturen dmv de verlichting op het toilet.
Als de lamp langer dan 2 minuten aan is dan wil ik graag de ventilatie aan voor 5 minuten.
Is de lamp korter aan dan 5 minuten dan hoeft er niets te gebeuren.
Ik ben een beetje aan het puzzelen met onderstaand, maar dit doet niet helemaal wat ik wil.

[Afbeelding]
Wat kan ik hiervoor het beste gebruiken?
Als de lamp nu korter dan 2 minuten aan gaat dan doet de ventilatie niets, gaat de lamp langer aan dan start de ventilatie, gaat de lamp uit dan blijft deze geen 5 minuten nadraaien, maar gaat ook direct uit.
Zo van het plaatje is er niet veel van te zeggen. Misschien kun je de flow (gedeeltelijk) exporteren en hier posten?
Er zijn hier ook wel eerder voorbeelden geplaatst, ff in het topic terugzoeken

Acties:
  • 0 Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
etienne001 schreef op donderdag 9 juni 2022 @ 22:16:
Als de lamp langer dan 2 minuten aan is dan wil ik graag de ventilatie aan voor 5 minuten.
Is de lamp korter aan dan 5 minuten dan hoeft er niets te gebeuren.
Dit gaat natuurlijk nooit.

Moet de ventilatie nou aan of uit als de lamp tussen 2 en 5 minuten aan is?

Feel free to Buy me a coffee


Acties:
  • 0 Henk 'm!

  • etienne001
  • Registratie: September 2005
  • Laatst online: 06-06 20:42
musicpixel schreef op vrijdag 10 juni 2022 @ 19:30:
[...]


Dit gaat natuurlijk nooit.

Moet de ventilatie nou aan of uit als de lamp tussen 2 en 5 minuten aan is?
Je hebt gelijk idd het moet binnen de 2 minuten zijn ipv 5 minuten.
Step5 schreef op donderdag 9 juni 2022 @ 23:18:
[...]

Zo van het plaatje is er niet veel van te zeggen. Misschien kun je de flow (gedeeltelijk) exporteren en hier posten?
Er zijn hier ook wel eerder voorbeelden geplaatst, ff in het topic terugzoeken
Ik zal eens even zoeken wat ik kan vinden, op de 1e zoekopdrachten (toilet en wc) kon ik zo niet zo snel wat vinden. Weer wat leesvoer voor vanavond.

Ik maak nu gebruik van het onderstaande:
code:
1
[{"id":"4be2e5e916deda16","type":"server-state-changed","z":"5c0f055863d8c339","name":"Licht toilet","server":"1942d160.7834af","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"switch.toilet","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":"2","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":80,"y":700,"wires":[["64dd14934130e7f3"]]},{"id":"64dd14934130e7f3","type":"switch","z":"5c0f055863d8c339","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"on","vt":"str"},{"t":"eq","v":"off","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":510,"y":700,"wires":[["6982638f357ee953"],["5882bec5f216c734"]]},{"id":"6982638f357ee953","type":"change","z":"5c0f055863d8c339","name":"","rules":[{"t":"set","p":"hum","pt":"flow","to":"1990","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":700,"wires":[["6666824cf0be0f45"]]},{"id":"47a5be5ff5554cc5","type":"change","z":"5c0f055863d8c339","name":"","rules":[{"t":"set","p":"hum","pt":"flow","to":"0","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":870,"y":780,"wires":[["6666824cf0be0f45"]]},{"id":"5882bec5f216c734","type":"delay","z":"5c0f055863d8c339","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"minutes","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":700,"y":780,"wires":[["47a5be5ff5554cc5"]]},{"id":"1942d160.7834af","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30}]

[ Voor 60% gewijzigd door etienne001 op 10-06-2022 20:54 ]


Acties:
  • +1 Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
@etienne001

Ik zou triggeren op zowel de aan als de uit van de lamp.

Even uit mijn hoofd:

Bij aan:
- wacht 2 minuten (delay)
- doe ventilator aan
- wacht 5 minuten (delay)
- doe ventilator uit

Bij uit:
- reset de delay van 2 minuten hierboven (als ie in de 2m delay zit dan wordt de delay en ook de rest vd flow gecanceled); reset = stuur een msg.reset naar de delay node

Als je er niet uit komt wil ik m wel even maken in NodeRed

Feel free to Buy me a coffee


Acties:
  • 0 Henk 'm!

  • etienne001
  • Registratie: September 2005
  • Laatst online: 06-06 20:42
@musicpixel
Dank voor je uitgebreide info _/-\o_
Het eerste gedeelte zal ik zeker wel uitkomen, dat 2e gedeelte met de reset is nieuw voor mij.
Ik ga hier even mee prutsen, weer een nieuwe leercurve :)
Mocht ik er niet uitkomen dan zal ik je aanbod graag aannemen om een voorbeeld te creëren.

Acties:
  • 0 Henk 'm!

  • Melantrix
  • Registratie: Maart 2009
  • Laatst online: 10-06 11:07
musicpixel schreef op vrijdag 10 juni 2022 @ 22:31:
@etienne001

Ik zou triggeren op zowel de aan als de uit van de lamp.

Even uit mijn hoofd:

Bij aan:
- wacht 2 minuten (delay)
- doe ventilator aan
- wacht 5 minuten (delay)
- doe ventilator uit

Bij uit:
- reset de delay van 2 minuten hierboven (als ie in de 2m delay zit dan wordt de delay en ook de rest vd flow gecanceled); reset = stuur een msg.reset naar de delay node

Als je er niet uit komt wil ik m wel even maken in NodeRed
Ik ben echt niet geoefend in node red maar kan je niet bij lamp aan een Depay van twee minuten doen, checken of de lamp aan staat, of yes de ventilator aan zetten, of no niks?

"Never attribute to malice that which is adequately explained by stupidity"


Acties:
  • +1 Henk 'm!

  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 15-06 17:59
etienne001 schreef op vrijdag 10 juni 2022 @ 20:53:
[...]


Je hebt gelijk idd het moet binnen de 2 minuten zijn ipv 5 minuten.


[...]


Ik zal eens even zoeken wat ik kan vinden, op de 1e zoekopdrachten (toilet en wc) kon ik zo niet zo snel wat vinden. Weer wat leesvoer voor vanavond.
Ff zoeken op 'delay'. Meestal voor een lampje wat langer aan maar het verhaal met de delay node is doorgaans hetzelfde, ook met het sturen van 'reset' zoals al gezegd.
Als ik achter mijn pc zit kan ik ook wel ff naar je flow kijken maar nu ff niet ;)

Acties:
  • +1 Henk 'm!

  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 15-06 17:59
Melantrix schreef op zaterdag 11 juni 2022 @ 00:30:
[...]

Ik ben echt niet geoefend in node red maar kan je niet bij lamp aan een Depay van twee minuten doen, checken of de lamp aan staat, of yes de ventilator aan zetten, of no niks?
Als je in combinatie met home assistant werkt zou dat kunnen. Maar meestal reageer je op een trigger en stuur je het bericht al dan niet door of ergens anders heen.
Een delay node vertraagt het doorsturen van een bericht.
Vandaar je soms een reset moet sturen.
Bijvoorbeeld
Lamp aan -> delay 2 minuten -> actie
Lamp uit -> reset delay ( = geen actie wanneer delay nog niet verstreken)
Wanneer je dat laatste niet doet, loopt de tijd door.
Als je bijvoorbeeld dit doet:
Knop aan -> lamp aan
Knop uit -> delay -> lamp uit
Gelijk weer Knop aan -> ?
Dan blijft de lamp aan, de delay loopt intussen door en zet even later de lamp uit, terwijl de knop nog aan staat.
Hier moet je dus bij 'knop aan' ook een reset naar de delay voor 'uit' sturen.

Acties:
  • 0 Henk 'm!

  • Obelixxx
  • Registratie: Juli 2020
  • Laatst online: 11:10
Hoi,

Wie van de specialisten kan me helpen met onderstaande?
Ik probeer mijn tuinberegening werkend te krijgen.
Ik krijg een run_time status ergens van een irrigatie integratie in Home Assistant.
Die status, een getal in seconden, wil ik als delay gebruiken in mijn flow, die dus na het inschakelen van een zone, die zone, na die delay weer uitschakelt.
Ik probeer de delay als override variable te gebruiken in de time delay.
Maar ik heb het idee dat de detectie van de variabele niet goed gaat, of dat ie niet als override toegepast kan worden.
Wie kan me op weg helpen?

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

code:
1
[{"id":"1f20acd6.0e9483","type":"tab","label":"Sprinkler Tests","disabled":false,"info":""},{"id":"3913534bfd0fdd7b","type":"bigtimer","z":"1f20acd6.0e9483","outtopic":"","outpayload1":"","outpayload2":"","name":"Big Timer","comment":"","lat":0,"lon":0,"starttime":"690","endtime":"810","starttime2":0,"endtime2":0,"startoff":"-6","endoff":"-3","startoff2":0,"endoff2":0,"offs":0,"outtext1":"on","outtext2":"off","timeout":1440,"sun":true,"mon":true,"tue":true,"wed":true,"thu":true,"fri":true,"sat":true,"jan":true,"feb":true,"mar":true,"apr":true,"may":true,"jun":true,"jul":true,"aug":true,"sep":true,"oct":true,"nov":true,"dec":true,"day1":0,"month1":0,"day2":0,"month2":0,"day3":0,"month3":0,"day4":0,"month4":0,"day5":0,"month5":0,"day6":0,"month6":0,"day7":0,"month7":0,"day8":0,"month8":0,"day9":0,"month9":0,"day10":0,"month10":0,"day11":0,"month11":0,"day12":0,"month12":0,"d1":0,"w1":0,"d2":0,"w2":0,"d3":0,"w3":0,"d4":0,"w4":0,"d5":0,"w5":0,"d6":0,"w6":0,"xday1":0,"xmonth1":0,"xday2":0,"xmonth2":0,"xday3":0,"xmonth3":0,"xday4":0,"xmonth4":0,"xday5":0,"xmonth5":0,"xday6":0,"xmonth6":0,"xday7":0,"xmonth7":0,"xday8":0,"xmonth8":0,"xday9":0,"xmonth9":0,"xday10":0,"xmonth10":0,"xday11":0,"xmonth11":0,"xday12":0,"xmonth12":0,"xd1":0,"xw1":0,"xd2":0,"xw2":0,"xd3":0,"xw3":0,"xd4":0,"xw4":0,"xd5":0,"xw5":0,"xd6":0,"xw6":0,"suspend":false,"random":false,"randon1":false,"randoff1":false,"randon2":false,"randoff2":false,"repeat":true,"atstart":true,"odd":false,"even":false,"x":100,"y":60,"wires":[[],[],["61790bb6dabf9c62"]]},{"id":"73f9a07903bf4246","type":"api-call-service","z":"1f20acd6.0e9483","name":"Sprinkler Gras Aan","server":"8372e37b.28447","version":5,"debugenabled":false,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.on_off_light_121"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":730,"y":120,"wires":[["23189403e09fecab"]]},{"id":"61790bb6dabf9c62","type":"switch","z":"1f20acd6.0e9483","name":"aan of uit?","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"on","vt":"str"},{"t":"eq","v":"off","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":390,"y":120,"wires":[["161cea8c98ade36f"],[]]},{"id":"161cea8c98ade36f","type":"api-current-state","z":"1f20acd6.0e9483","name":"Run time","server":"8372e37b.28447","version":3,"outputs":2,"halt_if":"0","halt_if_type":"num","halt_if_compare":"gt","entity_id":"sensor.smart_irrigation_daily_adjusted_run_time","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":580,"y":240,"wires":[["73f9a07903bf4246"],[]]},{"id":"db26eb16a6e67066","type":"inject","z":"1f20acd6.0e9483","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"on","payloadType":"str","x":90,"y":220,"wires":[["61790bb6dabf9c62"]]},{"id":"23189403e09fecab","type":"delay","z":"1f20acd6.0e9483","name":"","pauseType":"delayv","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":960,"y":80,"wires":[["f20f0549a2227063"]]},{"id":"f20f0549a2227063","type":"api-call-service","z":"1f20acd6.0e9483","name":"Sprinkler Gras Uit","server":"8372e37b.28447","version":5,"debugenabled":false,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.on_off_light_121"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1010,"y":180,"wires":[[]]},{"id":"5da420b6760e9eb4","type":"server-state-changed","z":"1f20acd6.0e9483","name":"Run time detection","server":"8372e37b.28447","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.smart_irrigation_daily_adjusted_run_time","entityidfiltertype":"exact","outputinitially":true,"state_type":"str","haltifstate":"0","halt_if_type":"num","halt_if_compare":"gt","outputs":2,"output_only_on_state_change":true,"for":"0","forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"}],"x":110,"y":320,"wires":[["7f461e526b56a2f9"],[]]},{"id":"0c80564dc22459c1","type":"debug","z":"1f20acd6.0e9483","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":870,"y":340,"wires":[]},{"id":"7f461e526b56a2f9","type":"change","z":"1f20acd6.0e9483","name":"Delay Set","rules":[{"t":"set","p":"delay","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":340,"wires":[["0c80564dc22459c1"]]},{"id":"8372e37b.28447","type":"server","name":"Home Assistant","version":1,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]


Toch echt puur NodeRed vraagstuk => verplaatst

[ Voor 0% gewijzigd door Septillion op 13-06-2022 12:16 ]


Acties:
  • +1 Henk 'm!

  • DeadMetal
  • Registratie: Mei 2002
  • Laatst online: 10:17
Obelixxx schreef op maandag 13 juni 2022 @ 12:13:
Hoi,

Wie van de specialisten kan me helpen met onderstaande?
Ik probeer mijn tuinberegening werkend te krijgen.
Ik krijg een run_time status ergens van een irrigatie integratie in Home Assistant.
Die status, een getal in seconden, wil ik als delay gebruiken in mijn flow, die dus na het inschakelen van een zone, die zone, na die delay weer uitschakelt.
Ik zou persoonlijk eerst de sprinkler aanzetten, en daarna pas die 'runtime' gaan ophalen. Bij het ophalen van de runtime-waarde zet je de 'state type' dropdown expliciet op 'number' zodat je ermee kan rekenen.
Daarna moet je die waarde *1000 doen via bijv. een functienode om hem om te rekenen naar milliseconden.

Tenslotte kopieer je de waarde via een change node van msg.payload naar msg.delay (set msg.delay to the value of msg.payload).

Dan is hij geschikt als input voor de delay-node. Daarbij moet je de 2e dropdown instellen op 'override delay with msg.delay'. Dan zal die delay node gaan kijken naar de binnenkomende msg.delay waarde (in milliseconden).

[ Voor 2% gewijzigd door DeadMetal op 13-06-2022 15:56 . Reden: typo ]


Acties:
  • 0 Henk 'm!

  • Obelixxx
  • Registratie: Juli 2020
  • Laatst online: 11:10
DeadMetal schreef op maandag 13 juni 2022 @ 12:30:
[...]


Ik zou persoonlijk eerst de sprinker aanzetten, en daarna pas die 'runtime' gaan ophalen. Bij het ophalen van de runtime-waarde zet je de 'state type' dropdown expliciet op 'number' zodat je ermee kan rekenen.
Daarna moet je die waarde *1000 doen via bijv. een functienode om hem om te rekenen naar milliseconden.

Tenslotte kopieer je de waarde via een change node van msg.payload naar msg.delay (set msg.delay to the value of msg.payload).

Dan is hij geschikt als input voor de delay-node. Daarbij moet je de 2e dropdown instellen op 'override delay with msg.delay'. Dan zal die delay node gaan kijken naar de binnenkomende msg.delay waarde (in milliseconden).
Het gaat volgens mij nu lukken, dank voor de hulp!

[ Voor 19% gewijzigd door Obelixxx op 13-06-2022 13:19 ]


Acties:
  • 0 Henk 'm!

  • icecreamfarmer
  • Registratie: Januari 2003
  • Laatst online: 11-06 09:37

icecreamfarmer

en het is

Voor een jaar werkte mij alexa koppelingen goed. Ik kom nu echter terug van vakantie en krijg deze foutmelding:
Flows stopped due to missing node types.

alexa-home-conf
alexa-home
Ik krijg ze ook niet meer terug gevonden. Zijn er alternatieven hiervoor? En waar kan ik zien wat er mee gebeurd is? Want al mijn flows werken nu niet meer.

ik zie ik zie wat jij niet ziet


Acties:
  • +1 Henk 'm!
@icecreamfarmer Ik denk dat jij NodeRED als addon van Home Assistant draait en gewoon geupdatet hebt zonder de releasechanges te lezen?
https://github.com/hassio-addons/addon-node-red/releases

Acties:
  • 0 Henk 'm!

  • icecreamfarmer
  • Registratie: Januari 2003
  • Laatst online: 11-06 09:37

icecreamfarmer

en het is

lolgast schreef op zondag 19 juni 2022 @ 00:07:
@icecreamfarmer Ik denk dat jij NodeRED als addon van Home Assistant draait en gewoon geupdatet hebt zonder de releasechanges te lezen?
https://github.com/hassio-addons/addon-node-red/releases
Ja na een tijdje update hij vanzelf.
Maar de nodes die verwijderd zijn zijn niet degene die ik gebruikte. Mijn alexa nodes waren zelf toegevoegd.

Edit: Blijkbaar was dat wel de skill die ik gebruikte. Alle Alexa local skills krijg ik niet werkend.
Maar handig dat ze die uit het palet gooien. 8)7

[ Voor 27% gewijzigd door icecreamfarmer op 19-06-2022 11:37 ]

ik zie ik zie wat jij niet ziet


Acties:
  • 0 Henk 'm!

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 10:06
EDIT: Probleem gevonden. Ik had dus blijkbaar ooit een verkeerde shortcut gemaakt onder instellingen (hamburger menu) >> keyboard shortcuts. Daar heb ik de Shortcut N weggehaald die ik per ongeluk had toegevoegd, en nu werkt alles weer.

--------------------------------------------------------

Ik heb hier op de één of andere manier iets heel geks.

Op alle Windows computers werkt de letter N niet in Nodered.
Via de ipad of via mijn telefoon werkt alles prima.

Heeft iemand enig idee waar ik het probleem kan zoeken, want het werkt echt onder alles verder. Het is dus enkel en alleen bij Nodered onder Windows.

[ Voor 36% gewijzigd door Wachten... op 30-06-2022 16:20 ]

Als je dit kunt lezen, dan werkt mij Signature!


Acties:
  • 0 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 15-06 22:25
Weet iemand of het mogelijk is om naar een specifiek woord te zoeken in een payload? Ik heb een payload met wat data er in:

code:
1
A2 10189 Rit 89814 Raadhuisweg Akersloot



Ik wil dus Node-Red laten kijken of een bepaald woord er in voorkomt zodat ik een notificatie kan versturen. Wat ik ook probleem, het lukt me niet echt :(

Edit: Er zit geen logica in de berichten, splitten op spaties heeft dus ook geen nut.

[ Voor 11% gewijzigd door Toppe op 01-07-2022 13:05 ]

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • +1 Henk 'm!
@Toppe Dat kan toch gewoon met de switch-node?
Afbeeldingslocatie: https://images.lolgast.nl/uploads/big/7a232e5648dccdd2a0ec5174acc7da56.png

Acties:
  • 0 Henk 'm!

  • Toppe
  • Registratie: Januari 2004
  • Laatst online: 15-06 22:25
lolgast schreef op vrijdag 1 juli 2022 @ 14:04:
@Toppe Dat kan toch gewoon met de switch-node?
[Afbeelding]
Soms zoek je te moeilijk :')

Donstil: Je moet kopen wat je wilt hebben. Niet wat je nodig hebt!


Acties:
  • +1 Henk 'm!
Ik herken het! Soms ben je al met JSONata regex of JS bezig en dan kan het gewoon via een simpele, achter een dropdown verstopte, bestaande functie.

Acties:
  • +2 Henk 'm!

  • DeadMetal
  • Registratie: Mei 2002
  • Laatst online: 10:17
Node-Red 3.0 is uitgebracht:
https://nodered.org/blog/2022/07/14/version-3-0-released

Hoop kleine handigheidjes erbij.

Acties:
  • 0 Henk 'm!

  • Notoriousss
  • Registratie: April 2012
  • Laatst online: 24-03 13:23
Zijn er hier meer mensen die Telegram gebruiken om actionable notifications te sturen via Home Assistant en Node Red?

Ik probeer de volgende flow te perfectioneren, maar ik krijg het niet voor elkaar. In de slaapkamer heb ik een waaier staan die aan gaat wanneer de temperatuur boven de 26 graden is. Nu wil ik manueel dit goedkeuren want soms is het wel nodig en some niet. Telegram stuurt nu een bericht met een custom keyboard die Ja of Nee stuurt zodat ik dit aan kan klikken en die actie wordt dan doorgestuurd naar Home Assistant om een waaier aan of uit te zetten. Nu is het zo dat als ik in de groupchat (Ik en nog wat bots en andere bewoners) Nee of Ja typ, Node Red ook de actie uitvoert. Ik heb nu een emoji erbij gezet om dit te voorkomen.

Het is echter mogelijk om een inline keyboard toe te voegen met daaraan een andere waarde (zie https://flows.nodered.org/node/node-red-contrib-telegrambot), maar mijn expertise is helaas niet goed genoeg om dit voor elkaar te krijgen. Ik ben al blij dat ik het tot dusver voor elkaar kreeg.

De vraag is dus of iemand het via een inline keyboard doet of een andere weg heeft om dit voor elkaar te krijgen?

Hieronder een screenshot en de code:

Afbeeldingslocatie: https://tweakers.net/i/VLCzOLdGaWqqI5bY5x-BSZDiqjs=/800x/filters:strip_exif()/f/image/3qNoPAJK9SJD92mEParsocF0.png?f=fotoalbum_large
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
[
    {
        "id": "554fd9ebcec6ff8e",
        "type": "tab",
        "label": "Flow 2",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "b6c9997485d027f7",
        "type": "group",
        "z": "554fd9ebcec6ff8e",
        "name": "",
        "style": {
            "stroke": "#ff0000",
            "label": true
        },
        "nodes": [
            "67446a118ddc2bdc",
            "bb011506f529c27b",
            "ca67e5b1a7af1816",
            "0823606ccc8223f0",
            "1e131fc40ef58fef",
            "fbc4b62628e5a6ce",
            "e3f678fe2c1eacac",
            "ecf30c6d2efcfaf9",
            "1c10348f6a86ce1f",
            "728fd2b0179c5af1",
            "5981ae695c6aafd8",
            "a51472d4ca46d1f0",
            "6dccf1d34f17e392",
            "636b18b6020f2677",
            "e902a58fbd19f738",
            "2d315f24231b4a6d",
            "cc9f64b7b0fe61e3",
            "f4b7ac5f0ab7e2e7"
        ],
        "x": 34,
        "y": 19,
        "w": 1072,
        "h": 382
    },
    {
        "id": "67446a118ddc2bdc",
        "type": "function",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Convert to json",
        "func": "msg.payload = {\n    chatId: '00000',\n    options: {\n        \"reply_markup\": \"{\\\"keyboard\\\":[[\\\"☃ Yes\\\"],[\\\"🔥 No\\\"]],\\\"resize_keyboard\\\":true,\\\"one_time_keyboard\\\":true}\"\n    },\n type: 'message',\n messageId: 1,\n sentMessageId: 1,\n    content: 'De temperatuur in de slaapkamer is ' + msg.payload.temp + ' graden en de luchtvochtigheid is ' + msg.payload.hum + '%. Wil je de waaier aanzetten?'\n}\n\nreturn msg;",
        "outputs": "1",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 980,
        "y": 120,
        "wires": [
            [
                "bb011506f529c27b"
            ]
        ]
    },
    {
        "id": "bb011506f529c27b",
        "type": "telegram sender",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Send message",
        "bot": "4fb294a16cbb2634",
        "haserroroutput": false,
        "outputs": 1,
        "x": 980,
        "y": 160,
        "wires": [
            []
        ]
    },
    {
        "id": "ca67e5b1a7af1816",
        "type": "telegram receiver",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "",
        "bot": "4fb294a16cbb2634",
        "saveDataDir": "",
        "filterCommands": false,
        "x": 150,
        "y": 220,
        "wires": [
            [
                "1e131fc40ef58fef"
            ],
            []
        ]
    },
    {
        "id": "0823606ccc8223f0",
        "type": "poll-state",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Check bedroom temperature",
        "server": "efdc12b5.8e0cb",
        "version": 1,
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "updateinterval": "5",
        "updateIntervalUnits": "minutes",
        "outputinitially": false,
        "outputonchanged": false,
        "entity_id": "sensor.bedroom_temperature_temperature",
        "state_type": "str",
        "halt_if": "26",
        "halt_if_type": "num",
        "halt_if_compare": "gte",
        "outputs": 2,
        "x": 180,
        "y": 60,
        "wires": [
            [
                "636b18b6020f2677"
            ],
            []
        ]
    },
    {
        "id": "1e131fc40ef58fef",
        "type": "switch",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Notification Check: Yes/No",
        "property": "originalMessage.text",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "☃ Yes",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "🔥 No",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 460,
        "y": 220,
        "wires": [
            [
                "5981ae695c6aafd8"
            ],
            [
                "728fd2b0179c5af1"
            ]
        ]
    },
    {
        "id": "fbc4b62628e5a6ce",
        "type": "function",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Reply",
        "func": "msg.error = false;\n// Dialogaufbau\nmsg.payload.content = 'De waaier is aangezet.';\n\nmsg.payload.chatId = 00000;\nmsg.payload.messageId = 2;\nmsg.payload.sentMessageId = 2;\nmsg.payload.type = \"message\";\n\nreturn [ msg ];\n",
        "outputs": "1",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 950,
        "y": 220,
        "wires": [
            [
                "e3f678fe2c1eacac"
            ]
        ]
    },
    {
        "id": "e3f678fe2c1eacac",
        "type": "telegram sender",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "",
        "bot": "4fb294a16cbb2634",
        "haserroroutput": false,
        "outputs": 1,
        "x": 990,
        "y": 260,
        "wires": [
            []
        ]
    },
    {
        "id": "ecf30c6d2efcfaf9",
        "type": "function",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Reply",
        "func": "msg.error = false;\n// Dialogaufbau\nmsg.payload.content = 'De waaier is uitgezet.';\n\nmsg.payload.chatId = 00000;\nmsg.payload.messageId = 3;\nmsg.payload.sentMessageId = 3;\nmsg.payload.type = \"message\";\n\nreturn [ msg ];\n",
        "outputs": "1",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 950,
        "y": 320,
        "wires": [
            [
                "1c10348f6a86ce1f"
            ]
        ]
    },
    {
        "id": "1c10348f6a86ce1f",
        "type": "telegram sender",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "",
        "bot": "4fb294a16cbb2634",
        "haserroroutput": false,
        "outputs": 1,
        "x": 990,
        "y": 360,
        "wires": [
            []
        ]
    },
    {
        "id": "728fd2b0179c5af1",
        "type": "api-call-service",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Turn fan off",
        "server": "efdc12b5.8e0cb",
        "version": 3,
        "debugenabled": false,
        "service_domain": "switch",
        "service": "turn_off",
        "entityId": "switch.bedroomplug",
        "data": "",
        "dataType": "jsonata",
        "mergecontext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "x": 690,
        "y": 320,
        "wires": [
            [
                "ecf30c6d2efcfaf9"
            ]
        ]
    },
    {
        "id": "5981ae695c6aafd8",
        "type": "api-call-service",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Turn fan on",
        "server": "efdc12b5.8e0cb",
        "version": 3,
        "debugenabled": false,
        "service_domain": "switch",
        "service": "turn_on",
        "entityId": "switch.bedroomplug",
        "data": "",
        "dataType": "jsonata",
        "mergecontext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "x": 690,
        "y": 220,
        "wires": [
            [
                "fbc4b62628e5a6ce"
            ]
        ]
    },
    {
        "id": "a51472d4ca46d1f0",
        "type": "time-range-switch",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Between 9AM and 8PM",
        "lat": "51.47642",
        "lon": "-0.63175",
        "startTime": "09:00",
        "endTime": "20:00",
        "startOffset": 0,
        "endOffset": 0,
        "x": 650,
        "y": 120,
        "wires": [
            [
                "cc9f64b7b0fe61e3"
            ],
            []
        ]
    },
    {
        "id": "6dccf1d34f17e392",
        "type": "poll-state",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Check bedroom humidity",
        "server": "efdc12b5.8e0cb",
        "version": 1,
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "updateinterval": "10",
        "updateIntervalUnits": "seconds",
        "outputinitially": false,
        "outputonchanged": false,
        "entity_id": "sensor.bedroom_temperature_humidity",
        "state_type": "str",
        "halt_if": "",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "outputs": 1,
        "x": 170,
        "y": 160,
        "wires": [
            [
                "e902a58fbd19f738"
            ]
        ]
    },
    {
        "id": "636b18b6020f2677",
        "type": "function",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Geef label mee",
        "func": "msg.topic = \"temp\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 420,
        "y": 60,
        "wires": [
            [
                "a51472d4ca46d1f0"
            ]
        ]
    },
    {
        "id": "e902a58fbd19f738",
        "type": "function",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Geef label mee",
        "func": "msg.topic = \"hum\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 420,
        "y": 160,
        "wires": [
            [
                "a51472d4ca46d1f0"
            ]
        ]
    },
    {
        "id": "2d315f24231b4a6d",
        "type": "join",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Voeg samen",
        "mode": "custom",
        "build": "object",
        "property": "payload",
        "propertyType": "msg",
        "key": "topic",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": false,
        "timeout": "",
        "count": "2",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 990,
        "y": 60,
        "wires": [
            [
                "67446a118ddc2bdc"
            ]
        ]
    },
    {
        "id": "cc9f64b7b0fe61e3",
        "type": "delay",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "1 Message per 4 hours",
        "pauseType": "rate",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "4",
        "rateUnits": "hour",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": true,
        "allowrate": false,
        "outputs": 1,
        "x": 780,
        "y": 60,
        "wires": [
            [
                "2d315f24231b4a6d"
            ]
        ]
    },
    {
        "id": "f4b7ac5f0ab7e2e7",
        "type": "inject",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "",
        "props": [
            {
                "p": "payload.content",
                "v": "",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 150,
        "y": 300,
        "wires": [
            []
        ]
    },
    {
        "id": "4fb294a16cbb2634",
        "type": "telegram bot",
        "botname": "BOTNAME",
        "usernames": "00000",
        "chatids": "00000",
        "baseapiurl": "",
        "updatemode": "polling",
        "pollinterval": "300",
        "usesocks": false,
        "sockshost": "",
        "socksport": "6667",
        "socksusername": "anonymous",
        "sockspassword": "",
        "bothost": "",
        "botpath": "",
        "localbotport": "8443",
        "publicbotport": "8443",
        "privatekey": "",
        "certificate": "",
        "useselfsignedcertificate": false,
        "sslterminated": false,
        "verboselogging": false
    },
    {
        "id": "efdc12b5.8e0cb",
        "type": "server",
        "name": "Home Assistant",
        "version": 1,
        "addon": false,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": true
    }
]

Acties:
  • 0 Henk 'm!

  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 15-06 17:59
Notoriousss schreef op maandag 18 juli 2022 @ 18:39:
Zijn er hier meer mensen die Telegram gebruiken om actionable notifications te sturen via Home Assistant en Node Red?

Ik probeer de volgende flow te perfectioneren, maar ik krijg het niet voor elkaar. In de slaapkamer heb ik een waaier staan die aan gaat wanneer de temperatuur boven de 26 graden is. Nu wil ik manueel dit goedkeuren want soms is het wel nodig en some niet. Telegram stuurt nu een bericht met een custom keyboard die Ja of Nee stuurt zodat ik dit aan kan klikken en die actie wordt dan doorgestuurd naar Home Assistant om een waaier aan of uit te zetten. Nu is het zo dat als ik in de groupchat (Ik en nog wat bots en andere bewoners) Nee of Ja typ, Node Red ook de actie uitvoert. Ik heb nu een emoji erbij gezet om dit te voorkomen.

Het is echter mogelijk om een inline keyboard toe te voegen met daaraan een andere waarde (zie https://flows.nodered.org/node/node-red-contrib-telegrambot), maar mijn expertise is helaas niet goed genoeg om dit voor elkaar te krijgen. Ik ben al blij dat ik het tot dusver voor elkaar kreeg.

De vraag is dus of iemand het via een inline keyboard doet of een andere weg heeft om dit voor elkaar te krijgen?

Hieronder een screenshot en de code:

[Afbeelding]

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
[
    {
        "id": "554fd9ebcec6ff8e",
        "type": "tab",
        "label": "Flow 2",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "b6c9997485d027f7",
        "type": "group",
        "z": "554fd9ebcec6ff8e",
        "name": "",
        "style": {
            "stroke": "#ff0000",
            "label": true
        },
        "nodes": [
            "67446a118ddc2bdc",
            "bb011506f529c27b",
            "ca67e5b1a7af1816",
            "0823606ccc8223f0",
            "1e131fc40ef58fef",
            "fbc4b62628e5a6ce",
            "e3f678fe2c1eacac",
            "ecf30c6d2efcfaf9",
            "1c10348f6a86ce1f",
            "728fd2b0179c5af1",
            "5981ae695c6aafd8",
            "a51472d4ca46d1f0",
            "6dccf1d34f17e392",
            "636b18b6020f2677",
            "e902a58fbd19f738",
            "2d315f24231b4a6d",
            "cc9f64b7b0fe61e3",
            "f4b7ac5f0ab7e2e7"
        ],
        "x": 34,
        "y": 19,
        "w": 1072,
        "h": 382
    },
    {
        "id": "67446a118ddc2bdc",
        "type": "function",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Convert to json",
        "func": "msg.payload = {\n    chatId: '00000',\n    options: {\n        \"reply_markup\": \"{\\\"keyboard\\\":[[\\\"☃ Yes\\\"],[\\\"🔥 No\\\"]],\\\"resize_keyboard\\\":true,\\\"one_time_keyboard\\\":true}\"\n    },\n type: 'message',\n messageId: 1,\n sentMessageId: 1,\n    content: 'De temperatuur in de slaapkamer is ' + msg.payload.temp + ' graden en de luchtvochtigheid is ' + msg.payload.hum + '%. Wil je de waaier aanzetten?'\n}\n\nreturn msg;",
        "outputs": "1",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 980,
        "y": 120,
        "wires": [
            [
                "bb011506f529c27b"
            ]
        ]
    },
    {
        "id": "bb011506f529c27b",
        "type": "telegram sender",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Send message",
        "bot": "4fb294a16cbb2634",
        "haserroroutput": false,
        "outputs": 1,
        "x": 980,
        "y": 160,
        "wires": [
            []
        ]
    },
    {
        "id": "ca67e5b1a7af1816",
        "type": "telegram receiver",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "",
        "bot": "4fb294a16cbb2634",
        "saveDataDir": "",
        "filterCommands": false,
        "x": 150,
        "y": 220,
        "wires": [
            [
                "1e131fc40ef58fef"
            ],
            []
        ]
    },
    {
        "id": "0823606ccc8223f0",
        "type": "poll-state",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Check bedroom temperature",
        "server": "efdc12b5.8e0cb",
        "version": 1,
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "updateinterval": "5",
        "updateIntervalUnits": "minutes",
        "outputinitially": false,
        "outputonchanged": false,
        "entity_id": "sensor.bedroom_temperature_temperature",
        "state_type": "str",
        "halt_if": "26",
        "halt_if_type": "num",
        "halt_if_compare": "gte",
        "outputs": 2,
        "x": 180,
        "y": 60,
        "wires": [
            [
                "636b18b6020f2677"
            ],
            []
        ]
    },
    {
        "id": "1e131fc40ef58fef",
        "type": "switch",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Notification Check: Yes/No",
        "property": "originalMessage.text",
        "propertyType": "msg",
        "rules": [
            {
                "t": "eq",
                "v": "☃ Yes",
                "vt": "str"
            },
            {
                "t": "eq",
                "v": "🔥 No",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 460,
        "y": 220,
        "wires": [
            [
                "5981ae695c6aafd8"
            ],
            [
                "728fd2b0179c5af1"
            ]
        ]
    },
    {
        "id": "fbc4b62628e5a6ce",
        "type": "function",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Reply",
        "func": "msg.error = false;\n// Dialogaufbau\nmsg.payload.content = 'De waaier is aangezet.';\n\nmsg.payload.chatId = 00000;\nmsg.payload.messageId = 2;\nmsg.payload.sentMessageId = 2;\nmsg.payload.type = \"message\";\n\nreturn [ msg ];\n",
        "outputs": "1",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 950,
        "y": 220,
        "wires": [
            [
                "e3f678fe2c1eacac"
            ]
        ]
    },
    {
        "id": "e3f678fe2c1eacac",
        "type": "telegram sender",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "",
        "bot": "4fb294a16cbb2634",
        "haserroroutput": false,
        "outputs": 1,
        "x": 990,
        "y": 260,
        "wires": [
            []
        ]
    },
    {
        "id": "ecf30c6d2efcfaf9",
        "type": "function",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Reply",
        "func": "msg.error = false;\n// Dialogaufbau\nmsg.payload.content = 'De waaier is uitgezet.';\n\nmsg.payload.chatId = 00000;\nmsg.payload.messageId = 3;\nmsg.payload.sentMessageId = 3;\nmsg.payload.type = \"message\";\n\nreturn [ msg ];\n",
        "outputs": "1",
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 950,
        "y": 320,
        "wires": [
            [
                "1c10348f6a86ce1f"
            ]
        ]
    },
    {
        "id": "1c10348f6a86ce1f",
        "type": "telegram sender",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "",
        "bot": "4fb294a16cbb2634",
        "haserroroutput": false,
        "outputs": 1,
        "x": 990,
        "y": 360,
        "wires": [
            []
        ]
    },
    {
        "id": "728fd2b0179c5af1",
        "type": "api-call-service",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Turn fan off",
        "server": "efdc12b5.8e0cb",
        "version": 3,
        "debugenabled": false,
        "service_domain": "switch",
        "service": "turn_off",
        "entityId": "switch.bedroomplug",
        "data": "",
        "dataType": "jsonata",
        "mergecontext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "x": 690,
        "y": 320,
        "wires": [
            [
                "ecf30c6d2efcfaf9"
            ]
        ]
    },
    {
        "id": "5981ae695c6aafd8",
        "type": "api-call-service",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Turn fan on",
        "server": "efdc12b5.8e0cb",
        "version": 3,
        "debugenabled": false,
        "service_domain": "switch",
        "service": "turn_on",
        "entityId": "switch.bedroomplug",
        "data": "",
        "dataType": "jsonata",
        "mergecontext": "",
        "mustacheAltTags": false,
        "outputProperties": [],
        "queue": "none",
        "x": 690,
        "y": 220,
        "wires": [
            [
                "fbc4b62628e5a6ce"
            ]
        ]
    },
    {
        "id": "a51472d4ca46d1f0",
        "type": "time-range-switch",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Between 9AM and 8PM",
        "lat": "51.47642",
        "lon": "-0.63175",
        "startTime": "09:00",
        "endTime": "20:00",
        "startOffset": 0,
        "endOffset": 0,
        "x": 650,
        "y": 120,
        "wires": [
            [
                "cc9f64b7b0fe61e3"
            ],
            []
        ]
    },
    {
        "id": "6dccf1d34f17e392",
        "type": "poll-state",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Check bedroom humidity",
        "server": "efdc12b5.8e0cb",
        "version": 1,
        "exposeToHomeAssistant": false,
        "haConfig": [
            {
                "property": "name",
                "value": ""
            },
            {
                "property": "icon",
                "value": ""
            }
        ],
        "updateinterval": "10",
        "updateIntervalUnits": "seconds",
        "outputinitially": false,
        "outputonchanged": false,
        "entity_id": "sensor.bedroom_temperature_humidity",
        "state_type": "str",
        "halt_if": "",
        "halt_if_type": "str",
        "halt_if_compare": "is",
        "outputs": 1,
        "x": 170,
        "y": 160,
        "wires": [
            [
                "e902a58fbd19f738"
            ]
        ]
    },
    {
        "id": "636b18b6020f2677",
        "type": "function",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Geef label mee",
        "func": "msg.topic = \"temp\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 420,
        "y": 60,
        "wires": [
            [
                "a51472d4ca46d1f0"
            ]
        ]
    },
    {
        "id": "e902a58fbd19f738",
        "type": "function",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Geef label mee",
        "func": "msg.topic = \"hum\"\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 420,
        "y": 160,
        "wires": [
            [
                "a51472d4ca46d1f0"
            ]
        ]
    },
    {
        "id": "2d315f24231b4a6d",
        "type": "join",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "Voeg samen",
        "mode": "custom",
        "build": "object",
        "property": "payload",
        "propertyType": "msg",
        "key": "topic",
        "joiner": "\\n",
        "joinerType": "str",
        "accumulate": false,
        "timeout": "",
        "count": "2",
        "reduceRight": false,
        "reduceExp": "",
        "reduceInit": "",
        "reduceInitType": "",
        "reduceFixup": "",
        "x": 990,
        "y": 60,
        "wires": [
            [
                "67446a118ddc2bdc"
            ]
        ]
    },
    {
        "id": "cc9f64b7b0fe61e3",
        "type": "delay",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "1 Message per 4 hours",
        "pauseType": "rate",
        "timeout": "5",
        "timeoutUnits": "seconds",
        "rate": "1",
        "nbRateUnits": "4",
        "rateUnits": "hour",
        "randomFirst": "1",
        "randomLast": "5",
        "randomUnits": "seconds",
        "drop": true,
        "allowrate": false,
        "outputs": 1,
        "x": 780,
        "y": 60,
        "wires": [
            [
                "2d315f24231b4a6d"
            ]
        ]
    },
    {
        "id": "f4b7ac5f0ab7e2e7",
        "type": "inject",
        "z": "554fd9ebcec6ff8e",
        "g": "b6c9997485d027f7",
        "name": "",
        "props": [
            {
                "p": "payload.content",
                "v": "",
                "vt": "str"
            }
        ],
        "repeat": "",
        "crontab": "",
        "once": false,
        "onceDelay": 0.1,
        "topic": "",
        "x": 150,
        "y": 300,
        "wires": [
            []
        ]
    },
    {
        "id": "4fb294a16cbb2634",
        "type": "telegram bot",
        "botname": "BOTNAME",
        "usernames": "00000",
        "chatids": "00000",
        "baseapiurl": "",
        "updatemode": "polling",
        "pollinterval": "300",
        "usesocks": false,
        "sockshost": "",
        "socksport": "6667",
        "socksusername": "anonymous",
        "sockspassword": "",
        "bothost": "",
        "botpath": "",
        "localbotport": "8443",
        "publicbotport": "8443",
        "privatekey": "",
        "certificate": "",
        "useselfsignedcertificate": false,
        "sslterminated": false,
        "verboselogging": false
    },
    {
        "id": "efdc12b5.8e0cb",
        "type": "server",
        "name": "Home Assistant",
        "version": 1,
        "addon": false,
        "rejectUnauthorizedCerts": true,
        "ha_boolean": "y|yes|true|on|home|open",
        "connectionDelay": true,
        "cacheJson": true
    }
]
Tip: quote-tags rond de code, dat scheelt een hele lap scrollwerk

Verder, is het misschien een optie om een flow variabele te gebruiken om te onthouden dat de vraag gesteld is, en alleen dan op het betreffende antwoord te reageren als die variabele nog actief is? Eventueel die variabele nog resetten na een time-out

  • Fietstasss
  • Registratie: Maart 2010
  • Laatst online: 04-06 11:17
Hi,

Ik ben een timer, gebaseerd op de stand van de zon aan 't opzetten voor wat tuinspots in m'n tuin.
Hiervoor gebruik 'k Schedex in Node-Red.

Wat heb 'k ingesteld:
2 Schedex nodes,
NodeA is enabled van Maandag t/m Donderdag en zet de lampen aan om 'sunset' en uit om 01:00u.
NodeB is enabled van Vrijdag t/m Zondag en zet de lampen aan om 'sunsetEnd' en uit om 01:00u.

Echter, ik vermoed (nog niet kunnen testen), dat m'n lampen op zondagavond/maandagochtend niet om 02:00 uit zullen gaan, maar om 01:00, gezien 't dan al maandagochtend is.
Dit is ook wat in de 'status/preview' van de nodes getoond wordt, zie afbeelding:

Is er een manier om hier omheen te werken, zonder een losse 'maandag-node' aan te hoeven maken en daarin opnieuw de tijden te moeten 'kopieren'?

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

Zie de complete NR code hier:

code:
1
[{"id":"185c15191ba7be90","type":"group","z":"cb2574f102568707","name":"Leilinde spots","style":{"fill":"#ffC000","fill-opacity":"0.18","label":true},"nodes":["a9fe04ac11b7e490","526a07c1bdb95448","64939c94e0bec69b","0d30e1785b948db6","13cb4744b76d94f8","03b7f1beb9afd04f","e22e0660028d75be","de8b3d3e5303758e","13e888ff2c0c3274","61722cca62171e57"],"x":74,"y":119,"w":952,"h":182},{"id":"a9fe04ac11b7e490","type":"schedex","z":"cb2574f102568707","g":"185c15191ba7be90","name":"","passthroughunhandled":false,"suspended":false,"lat":"","lon":"","ontime":"sunset","ontopic":"","onpayload":"on","onoffset":0,"onrandomoffset":0,"offtime":"02:00","offtopic":"","offpayload":"off","offoffset":0,"offrandomoffset":0,"mon":false,"tue":false,"wed":false,"thu":false,"fri":true,"sat":true,"sun":true,"x":420,"y":240,"wires":[["13e888ff2c0c3274"]]},{"id":"526a07c1bdb95448","type":"debug","z":"cb2574f102568707","g":"185c15191ba7be90","name":"Leilinde-Debug","active":true,"tosidebar":true,"console":true,"tostatus":true,"complete":"true","targetType":"full","statusVal":"payload","statusType":"auto","x":890,"y":260,"wires":[]},{"id":"64939c94e0bec69b","type":"api-call-service","z":"cb2574f102568707","g":"185c15191ba7be90","name":"Leilinde spots aan/uit","server":"13b00bd5.b49594","version":5,"debugenabled":false,"domain":"light","service":"turn_{{payload}}","areaId":["tuin"],"deviceId":[],"entityId":["light.spots_leilinde"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":900,"y":200,"wires":[[]]},{"id":"0d30e1785b948db6","type":"comment","z":"cb2574f102568707","g":"185c15191ba7be90","name":"Maandag t/m donderdag:","info":"","x":210,"y":160,"wires":[]},{"id":"13cb4744b76d94f8","type":"schedex","z":"cb2574f102568707","g":"185c15191ba7be90","name":"","passthroughunhandled":false,"suspended":false,"lat":"","lon":"","ontime":"sunset","ontopic":"","onpayload":"on","onoffset":0,"onrandomoffset":0,"offtime":"01:00","offtopic":"","offpayload":"off","offoffset":0,"offrandomoffset":0,"mon":true,"tue":true,"wed":true,"thu":true,"fri":false,"sat":false,"sun":false,"x":420,"y":160,"wires":[["de8b3d3e5303758e"]]},{"id":"03b7f1beb9afd04f","type":"comment","z":"cb2574f102568707","g":"185c15191ba7be90","name":"Vrijdag t/m Zondag","info":"","x":230,"y":240,"wires":[]},{"id":"e22e0660028d75be","type":"junction","z":"cb2574f102568707","g":"185c15191ba7be90","x":700,"y":200,"wires":[[]]},{"id":"de8b3d3e5303758e","type":"junction","z":"cb2574f102568707","g":"185c15191ba7be90","x":600,"y":160,"wires":[["61722cca62171e57"]]},{"id":"13e888ff2c0c3274","type":"junction","z":"cb2574f102568707","g":"185c15191ba7be90","x":600,"y":240,"wires":[["61722cca62171e57"]]},{"id":"61722cca62171e57","type":"junction","z":"cb2574f102568707","g":"185c15191ba7be90","x":680,"y":200,"wires":[["64939c94e0bec69b","526a07c1bdb95448"]]},{"id":"13b00bd5.b49594","type":"server","name":"HA ADSH","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"}]

Acties:
  • +1 Henk 'm!

  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 10:07
Helaas ook een beveiligingsfix m.b.t. insecure http waardoor de 'http request' node geen plaatje meer van mijn IP-cam kan ophalen ;( Ik krijg dan de melding
code:
1
"RequestError: Parse Error: Missing expected CR after header value"


Er is een GitHub issue voor, maar omdat het 'hogerop' in de NodeJS library is bijgewerkt, kan Node-RED het ook niet oplossen.

Mijn camera doet helaas geen HTTPS, dus ik moet het voorlopig even zonder foto in pushbericht doen als er wordt aangebeld.

Edit: Hier een tijdelijke fix die werkt bij mij. Volgens mij loopt er een pull request voor een meer definitieve oplossing.

[ Voor 20% gewijzigd door ThinkPad op 28-08-2022 14:05 ]


Acties:
  • 0 Henk 'm!

  • etienne001
  • Registratie: September 2005
  • Laatst online: 06-06 20:42
De laatste 2 dagen crasht Node-RED hier bij mij.
Ik kan uit de logs maar niet opmaken wat er gaande is.
Home Assistant al een herstart, VM al een keer in zijn geheel herstart, maar de problemen blijven.

Kan iemand wellicht wel iets uit de log halen?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
13 Aug 21:48:55 - [red] Uncaught Exception:
13 Aug 21:48:55 - [error] TypeError: node.error is not a function
    at errorHandler (/opt/node_modules/node-red-contrib-cast/cast-to-client.js:52:10)
    at getSpeechUrl (/opt/node_modules/node-red-contrib-cast/cast-to-client.js:192:9)
    at Timeout._onTimeout (/opt/node_modules/node-red-contrib-cast/cast-to-client.js:836:33)
    at listOnTimeout (node:internal/timers:561:11)
    at processTimers (node:internal/timers:502:7)
[21:48:55] WARNING: Node-RED crashed, halting add-on
[21:48:55] INFO: Node-RED stoped, restarting...
s6-rc: info: service legacy-services: stopping
[21:48:55] INFO: Node-RED stoped, restarting...
s6-svwait: fatal: supervisor died
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service legacy-cont-init: stopping
[21:48:55] INFO: nginx stoped, restarting...
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped

Acties:
  • 0 Henk 'm!

  • RedPas
  • Registratie: November 2017
  • Laatst online: 07:47
Hoi allemaal,

effe klein dom ding,
Heb magneetsensor in waterteller gemonteerd, pulsen komen mooi binnen in HA.
Lees de pulsen in met node red en counter functie, maar waarde is 4x te groot.
Ik heb dus 4 pulsen/Liter.
Simpel dacht ik, funtion en weg, maar lukt me niet...

Hikvision HCSA, Paxton, Siemens, Raspberry Pi


Acties:
  • 0 Henk 'm!

  • maartend
  • Registratie: Augustus 2002
  • Laatst online: 09:40
etienne001 schreef op zaterdag 13 augustus 2022 @ 21:54:
De laatste 2 dagen crasht Node-RED hier bij mij.
Bij mij ook plots. Stopt volledig, moet dan handmatig starten.
Ik krijg deze melding

[code]
13 Aug 22:36:36 - [info] [server:Home Assistant] Connecting to http://supervisor/core
13 Aug 22:36:36 - [info] [server:Home Assistant] Connected to http://supervisor/core
14 Aug 12:46:38 - [info] [server:Home Assistant] Connection closed to http://supervisor/core
14 Aug 12:46:43 - [info] [server:Home Assistant] Connecting to http://supervisor/core
14 Aug 12:46:44 - [info] [server:Home Assistant] Connected to http://supervisor/core
14 Aug 14:36:31 - [info] [server:Home Assistant] Connection closed to http://supervisor/core
14 Aug 14:36:31 - [red] Uncaught Exception:
14 Aug 14:36:31 - [error] UnhandledPromiseRejection: This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason "#<Object>".
[14:36:32] WARNING: Node-RED crashed, halting add-on
[14:36:32] INFO: Node-RED stoped, restarting...
s6-rc: info: service legacy-services: stopping
[14:36:32] INFO: Node-RED stoped, restarting...
s6-svwait: fatal: supervisor died
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
[14:36:33] INFO: nginx stoped, restarting...
s6-rc: info: service s6rc-oneshot-runner successfully stopped
[code]

Acties:
  • +1 Henk 'm!

  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 15-06 17:59
etienne001 schreef op zaterdag 13 augustus 2022 @ 21:54:
De laatste 2 dagen crasht Node-RED hier bij mij.
Ik kan uit de logs maar niet opmaken wat er gaande is.
Home Assistant al een herstart, VM al een keer in zijn geheel herstart, maar de problemen blijven.

Kan iemand wellicht wel iets uit de log halen?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
13 Aug 21:48:55 - [red] Uncaught Exception:
13 Aug 21:48:55 - [error] TypeError: node.error is not a function
    at errorHandler (/opt/node_modules/node-red-contrib-cast/cast-to-client.js:52:10)
    at getSpeechUrl (/opt/node_modules/node-red-contrib-cast/cast-to-client.js:192:9)
    at Timeout._onTimeout (/opt/node_modules/node-red-contrib-cast/cast-to-client.js:836:33)
    at listOnTimeout (node:internal/timers:561:11)
    at processTimers (node:internal/timers:502:7)
[21:48:55] WARNING: Node-RED crashed, halting add-on
[21:48:55] INFO: Node-RED stoped, restarting...
s6-rc: info: service legacy-services: stopping
[21:48:55] INFO: Node-RED stoped, restarting...
s6-svwait: fatal: supervisor died
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service legacy-cont-init: stopping
[21:48:55] INFO: nginx stoped, restarting...
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped
Als ik op de eerste melding zoek icm contrib-cast kom ik op deze bug uit wellicht is dit het?

Acties:
  • 0 Henk 'm!

  • etienne001
  • Registratie: September 2005
  • Laatst online: 06-06 20:42
Step5 schreef op zondag 14 augustus 2022 @ 19:38:
[...]

Als ik op de eerste melding zoek icm contrib-cast kom ik op deze bug uit wellicht is dit het?
Zou heel goed kunnen daar er kort voor de error een cast message is geweest.
Ik ga me eens verdiepen in Castv2.
Thnxs _/-\o_

Acties:
  • 0 Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
RedPas schreef op zondag 14 augustus 2022 @ 15:14:
Hoi allemaal,

effe klein dom ding,
Heb magneetsensor in waterteller gemonteerd, pulsen komen mooi binnen in HA.
Lees de pulsen in met node red en counter functie, maar waarde is 4x te groot.
Ik heb dus 4 pulsen/Liter.
Simpel dacht ik, funtion en weg, maar lukt me niet...
Ik denk dat als je reacties wilt, het misschien handig is om te delen wat je nu al hebt ;)

Feel free to Buy me a coffee


Acties:
  • +1 Henk 'm!
RedPas schreef op zondag 14 augustus 2022 @ 15:14:
Hoi allemaal,

effe klein dom ding,
Heb magneetsensor in waterteller gemonteerd, pulsen komen mooi binnen in HA.
Lees de pulsen in met node red en counter functie, maar waarde is 4x te groot.
Ik heb dus 4 pulsen/Liter.
Simpel dacht ik, funtion en weg, maar lukt me niet...
Waarschijnlijk moet je eerst een nummer/integer maken, dus zoiets?
code:
1
(parseFloat(msg.payload) / 4)

Acties:
  • 0 Henk 'm!

  • etienne001
  • Registratie: September 2005
  • Laatst online: 06-06 20:42
Oké, Ik ben er idd achter dat de problemen worden veroorzaakt door de cast functie in Node-RED.
Vreemd het heeft zo toch al wel een poos gewerkt..

Ik heb nu CastV2 geïnstalleerd maar ik krijg het maar niet werkend.
Ik lees op Github dat ik iets moet doen met een of andere Function?

Ik heb nu dit:
Afbeeldingslocatie: https://tweakers.net/i/RpiWj5tUWGx-eXoNAlF8pIJXe2I=/800x/filters:strip_icc():strip_exif()/f/image/F96N08mddbivPp8hvc3YZ8ZO.jpg?f=fotoalbum_large

code:
1
[{"id":"616cfeea92b00952","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"8371166d4bdc1958","type":"switch","z":"616cfeea92b00952","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"on","vt":"str"},{"t":"eq","v":"off","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":490,"y":400,"wires":[["80d6f3d88bb22efd"],["4de55b019d2da0a5","e769ced063945a6e","bee610b33b2ee589","0f2ac74c286ec290"]]},{"id":"80d6f3d88bb22efd","type":"api-call-service","z":"616cfeea92b00952","name":"","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"climate","service":"set_preset_mode","areaId":[],"deviceId":[],"entityId":["climate.living_room"],"data":"{\"preset_mode\":\"eco\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":970,"y":360,"wires":[[]]},{"id":"4de55b019d2da0a5","type":"api-call-service","z":"616cfeea92b00952","name":"","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"climate","service":"set_hvac_mode","areaId":[],"deviceId":[],"entityId":["climate.living_room"],"data":"{\"hvac_mode\":\"heat\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":970,"y":440,"wires":[[]]},{"id":"d059a5f7a67c0d69","type":"server-state-changed","z":"616cfeea92b00952","name":"Alarmsysteem","server":"1942d160.7834af","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.openclose_17","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":170,"y":340,"wires":[["8371166d4bdc1958"]]},{"id":"32c1bc376e6f3e00","type":"inject","z":"616cfeea92b00952","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"true","payload":"on","payloadType":"str","x":170,"y":400,"wires":[["8371166d4bdc1958"]]},{"id":"1a2d622442ea707a","type":"inject","z":"616cfeea92b00952","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"false","payload":"off","payloadType":"str","x":170,"y":440,"wires":[["8371166d4bdc1958"]]},{"id":"9f1e98fead2d65f5","type":"trigger","z":"616cfeea92b00952","name":"","op1":"true","op2":"","op1type":"flow","op2type":"pay","duration":"5","extend":false,"overrideDelay":true,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":720,"y":680,"wires":[["22108cd7fab2ab01"]]},{"id":"5856cb85b5f2040c","type":"cast-to-client","z":"616cfeea92b00952","name":"","url":"","contentType":"","message":"Morgen moet het volgende afval aan de weg","language":"nl","ip":"192.168.1.15","port":"","volume":"30","x":950,"y":680,"wires":[[]]},{"id":"e77818daae96936b","type":"api-current-state","z":"616cfeea92b00952","name":"","server":"1942d160.7834af","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.circulus_morgen","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":450,"y":680,"wires":[["9f1e98fead2d65f5"]]},{"id":"e769ced063945a6e","type":"delay","z":"616cfeea92b00952","name":"","pauseType":"delay","timeout":"15","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":160,"y":680,"wires":[["e77818daae96936b"]]},{"id":"2a5b098990912ddb","type":"trigger","z":"616cfeea92b00952","name":"","op1":"true","op2":"","op1type":"flow","op2type":"pay","duration":"5","extend":false,"overrideDelay":true,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":720,"y":740,"wires":[[]]},{"id":"a128c70c24c21a54","type":"cast-to-client","z":"616cfeea92b00952","name":"","url":"","contentType":"","message":"Vandaag moet het volgende afval aan de weg","language":"nl","ip":"192.168.1.15","port":"","volume":"30","x":950,"y":740,"wires":[[]]},{"id":"85d53d8e4d9dc012","type":"api-current-state","z":"616cfeea92b00952","name":"","server":"1942d160.7834af","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.circulus_vandaag","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":450,"y":740,"wires":[["2a5b098990912ddb"]]},{"id":"bee610b33b2ee589","type":"delay","z":"616cfeea92b00952","name":"","pauseType":"delay","timeout":"25","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":160,"y":740,"wires":[["85d53d8e4d9dc012"]]},{"id":"982a089e880ca2bb","type":"cast-to-client","z":"616cfeea92b00952","name":"","url":"https://stream.qmusic.nl/qmusic/mp3","contentType":"audio","message":"","language":"nl","ip":"192.168.1.15","port":"","volume":"25","x":950,"y":800,"wires":[[]]},{"id":"0f2ac74c286ec290","type":"delay","z":"616cfeea92b00952","name":"","pauseType":"delay","timeout":"40","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":160,"y":800,"wires":[[]]},{"id":"22108cd7fab2ab01","type":"castv2-sender","z":"616cfeea92b00952","name":"","connection":"9fa0d92f7b62b42a","x":960,"y":600,"wires":[[]]},{"id":"1942d160.7834af","type":"server","name":"Home Assistant","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"},{"id":"9fa0d92f7b62b42a","type":"castv2-connection","name":"","target":"Living Room 3","host":"192.168.1.15","port":""}]


Waar zou ik die function dan moeten maken?

Acties:
  • 0 Henk 'm!

  • RedPas
  • Registratie: November 2017
  • Laatst online: 07:47
lolgast schreef op maandag 15 augustus 2022 @ 08:51:
[...]

Waarschijnlijk moet je eerst een nummer/integer maken, dus zoiets?
code:
1
(parseFloat(msg.payload) / 4)
Inderdaad, dat was het. Zat het veel te ver te zoeken in Node Red.
Dit is het nu geworden, de basis is er, nu verder uitwerken naar Dag/Week/Maand/Jaar teller.
code:
1
2
3
4
5
6
7
8
9
      teller_formatted:
        friendly_name: "Waterteller"
        value_template: "{{ ( states('sensor.teller') | int / 4 ) | round(1) }}"
        icon_template: mdi:water
        
      dagtellerstw_formatted:
        friendly_name: "Water Dagteller"
        value_template: "{{ ( states('sensor.DagTellerSTW') | int / 4 ) | round(2) }}"
        icon_template: mdi:water


Afbeeldingslocatie: https://tweakers.net/i/JdpATKkJqsxt46Ss6Vkdjg3A-_8=/800x/filters:strip_exif()/f/image/apNd0HYQDHglOrkOL6YsLxTM.png?f=fotoalbum_large

Hikvision HCSA, Paxton, Siemens, Raspberry Pi


Acties:
  • +3 Henk 'm!
Lang geleden dat ik echt iets nieuws heb moeten automatiseren, maar recent overgestapt van een muziekoplossing gebaseerd op Volumio naar Sonos. Aangezien ik toch graag íets van fysieke bediening heb, had ik een 'draadloze dimmer' van Ikea in gebruik. Die moest nu alleen omgebouwd worden naar Sonos. Ik dacht, dat bouw ik eventjes om, maar ik ben uiteindelijk best lang (te lang?) bezig geweest.

Omdat het misschien anderen inspiratie geeft, bij deze mijn code. Omdat mijn dochtertje van 3 ook weet hoe dit werkt en graag de muziek harder zet, zit er een maximaal increase waarde aan mijn flow, dus als het echt hard moet, moet dat via de app :)
Afbeeldingslocatie: https://images.lolgast.nl/uploads/big/13c9d54116c2970a518a29a6764b219d.png
JSON:
1
[{"id":"d944ab4431842842","type":"switch","z":"6be21c2.9649be4","name":"Empty?","property":"payload.data.is_volume_muted","propertyType":"msg","rules":[{"t":"false"}],"checkall":"true","repair":false,"outputs":1,"x":680,"y":2860,"wires":[["67c012d9d6ed9925"]]},{"id":"c6050dfb0961a6b4","type":"function","z":"6be21c2.9649be4","name":"Toggle on/off","func":"let sonos_state = getState()\n\nfunction getState() {\n    const hassio = global.get('homeassistant')\n\n    return hassio.hassIO.states['media_player.woonkamer']\n}\n\nmsg.payload = {\"data\":{\"volume_level\":\"\"}}\n\nif (sonos_state.attributes.is_volume_muted == false){\n    if (sonos_state.attributes.volume_level == 0) {\n        if ((sonos_state.attributes.media_title).includes('Efteling')) {\n            msg.payload.data.volume_level = parseFloat(\"0.08\")\n        } else if (sonos_state.attributes.media_channel.includes('SLAM!40')) {\n            msg.payload.data.volume_level = parseFloat(\"0.06\")\n        } else {\n            msg.payload.data.volume_level = parseFloat(\"0.08\")\n        }\n    } else {\n        msg.payload.data.volume_level = parseFloat(\"0\")\n    }\n}\nelse {\n    msg.payload = {\"data\":{\"volume_level\":\"\",\"is_volume_muted\":false}}\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":2860,"wires":[["d944ab4431842842","667cfd68fec71b88"]]},{"id":"67c012d9d6ed9925","type":"change","z":"6be21c2.9649be4","name":"Delete data","rules":[{"t":"delete","p":"payload.data","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":850,"y":2860,"wires":[["a0d1a985a75f0d44"]]},{"id":"5829f0da79fb8dea","type":"switch","z":"6be21c2.9649be4","name":"","property":"payload.action","propertyType":"msg","rules":[{"t":"eq","v":"on","vt":"str"},{"t":"eq","v":"off","vt":"str"},{"t":"null"}],"checkall":"true","repair":false,"outputs":3,"x":310,"y":2880,"wires":[["c6050dfb0961a6b4"],["c6050dfb0961a6b4"],["fa3848da1cc77e09"]]},{"id":"667cfd68fec71b88","type":"switch","z":"6be21c2.9649be4","name":"Integer?","property":"payload.data.volume_level","propertyType":"msg","rules":[{"t":"istype","v":"number","vt":"number"}],"checkall":"true","repair":false,"outputs":1,"x":650,"y":2910,"wires":[["b0756cda49117f48"]]},{"id":"a0d1a985a75f0d44","type":"api-call-service","z":"6be21c2.9649be4","name":"Unmute Woonkamer","server":"5c0abd7f.7b22a4","version":5,"debugenabled":false,"domain":"media_player","service":"volume_mute","areaId":[],"deviceId":[],"entityId":["media_player.woonkamer"],"data":"{\"is_volume_muted\": \"false\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":true,"outputProperties":[],"queue":"last","x":1070,"y":2860,"wires":[[]]},{"id":"583e3a71c3347c56","type":"mqtt in","z":"6be21c2.9649be4","name":"Volume Control","topic":"zigbee2mqtt/volumio_control","qos":"2","datatype":"json","broker":"84ab78a.2580c88","nl":false,"rap":false,"inputs":0,"x":120,"y":2880,"wires":[["5829f0da79fb8dea"]]},{"id":"fa3848da1cc77e09","type":"function","z":"6be21c2.9649be4","name":"In-/Decrease","func":"let old_vol = parseFloat(flow.get(\"woonkamer_volume\"))\nlet btn_old = parseInt(flow.get(\"woonkamer_btn_value\"))\nlet btn_value = parseInt(msg.payload.brightness)\n\nmsg.payload = { \"data\": { \"volume_level\": \"\" } }\n\nif (old_vol === 0.16 && btn_value > 254 || old_vol === 0){\n    return msg;\n}\n\nif ((btn_old - btn_value) > 0 || btn_value === 0){\n    msg.payload.data.volume_level = parseFloat(parseFloat(old_vol - 0.01).toFixed(2))\n} else {\n    msg.payload.data.volume_level = parseFloat(parseFloat(old_vol + 0.01).toFixed(2))\n}\n\nflow.set(\"woonkamer_btn_value\",btn_value);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":490,"y":2910,"wires":[["667cfd68fec71b88"]]},{"id":"b0756cda49117f48","type":"api-call-service","z":"6be21c2.9649be4","name":"Set Volume Woonkamer","server":"5c0abd7f.7b22a4","version":5,"debugenabled":false,"domain":"media_player","service":"volume_set","areaId":[],"deviceId":[],"entityId":["media_player.woonkamer"],"data":"{\"volume_level\": data}","dataType":"jsonata","mergeContext":"","mustacheAltTags":true,"outputProperties":[],"queue":"last","x":880,"y":2910,"wires":[["fd0e20d3a4d857d4"]]},{"id":"fd0e20d3a4d857d4","type":"change","z":"6be21c2.9649be4","name":"","rules":[{"t":"set","p":"woonkamer_volume","pt":"flow","to":"$.payload.data.volume_level","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":1170,"y":2910,"wires":[[]]},{"id":"5c0abd7f.7b22a4","type":"server","name":"HassIO","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"},{"id":"84ab78a.2580c88","type":"mqtt-broker","name":"MQTT","broker":"localhost","port":"1883","clientid":"nodered-98femk32dsxa","usetls":false,"compatmode":false,"keepalive":"30","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]

Acties:
  • +3 Henk 'm!
Inmiddels ook de beschikking over een Symfonisk volume knop, dus opnieuw aan de hobby-bob geweest
Afbeeldingslocatie: https://images.lolgast.nl/uploads/big/4246d43ba7114dcaf6fe82cc08730ee2.png
JSON:
1
[{"id":"15413ee95f958a0a","type":"function","z":"6be21c2.9649be4","name":"Up/down","func":"let value = msg.payload\n\nmsg.payload = {\n    \"target\": { \n        \"entity_id\": \"media_player.woonkamer\"\n    },\n    \"service\" : \"\"\n}\n\nif (value.includes(\"up\")) {\n    msg.payload.service = \"media_next_track\"\n} else {\n    msg.payload.service = \"media_previous_track\"\n}\n\nnode.send(msg);","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":2950,"wires":[["40f2de5c069711ac"]]},{"id":"06c478f3f39fb394","type":"switch","z":"6be21c2.9649be4","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"toggle","vt":"str"},{"t":"eq","v":"brightness_stop","vt":"str"},{"t":"cont","v":"brightness_move_","vt":"str"},{"t":"cont","v":"brightness_step_","vt":"str"}],"checkall":"true","repair":false,"outputs":4,"x":260,"y":2900,"wires":[["29b1b35b050b0211"],["d7c636927a7d5791"],["d7c636927a7d5791"],["15413ee95f958a0a"]]},{"id":"40f2de5c069711ac","type":"api-call-service","z":"6be21c2.9649be4","name":"Next/Previous","server":"5c0abd7f.7b22a4","version":5,"debugenabled":false,"domain":"media_player","service":"","areaId":[],"deviceId":[],"entityId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1090,"y":2950,"wires":[[]]},{"id":"6c5b45293e897111","type":"mqtt in","z":"6be21c2.9649be4","name":"Sonos Control","topic":"zigbee2mqtt/sonos_volume/action","qos":"2","datatype":"auto-detect","broker":"84ab78a.2580c88","nl":false,"rap":false,"inputs":0,"x":100,"y":2900,"wires":[["06c478f3f39fb394"]]},{"id":"29b1b35b050b0211","type":"function","z":"6be21c2.9649be4","name":"Toggle on/off","func":"let compare = [];\nlet muted = ''\nlet volumes = ''\nlet sonos_state = getState('media_player.woonkamer')\nconst members = sonos_state.attributes.group_members;\n\nmsg.payload = {\n    \"data\": {\n        \"volume_level\": \"\"\n    },\n    \"target\": {\n        \"entity_id\": \"\"\n    }\n}\n\nfunction getState(s) {\n    const hassio = global.get('homeassistant')\n\n    return hassio.hassIO.states[s]\n}\n\nmembers.forEach((m) => {\n    m = getState(m)\n    compare.push(m);\n});\n\n\nfor (let i = 0; i < compare.length; i++) {\n    if (i > 0) {\n        muted += ','\n        volumes += ','\n    }\n    muted += compare[i].attributes.is_volume_muted\n    volumes += compare[i].attributes.volume_level\n}\n\nmembers.forEach((m) => {\n    m = getState(m)\n    if (muted.search(\"/true/\")) {\n        msg.payload.data.is_volume_muted = false\n    }\n    if (volumes.match(/(^|\\W)0.0($|\\W)/)) {\n        if ((m.attributes.media_title).includes('Efteling')) {\n            msg.payload.data.volume_level = parseFloat(\"0.08\")\n            //} else if (m.attributes.media_channel.includes('SLAM!40')) {\n            //msg.payload.data.volume_level = parseFloat(\"0.06\")\n        } else {\n            msg.payload.data.volume_level = parseFloat(\"0.08\")\n        }\n    } else {\n        msg.payload.data.volume_level = parseFloat(\"0\")\n    }\n    msg.payload.target.entity_id = m.entity_id\n    msg.target = sonos_state\n    node.send(msg)\n});","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":2850,"wires":[["28a4ec32ec61ee39","069dfced9fe20d57"]]},{"id":"d7c636927a7d5791","type":"trigger","z":"6be21c2.9649be4","name":"200ms","op1":"","op2":"0","op1type":"pay","op2type":"str","duration":"-200","extend":false,"overrideDelay":false,"units":"ms","reset":"brightness_stop","bytopic":"all","topic":"topic","outputs":1,"x":410,"y":2900,"wires":[["88c8a6916732ce69"]],"icon":"font-awesome/fa-repeat"},{"id":"28a4ec32ec61ee39","type":"switch","z":"6be21c2.9649be4","name":"Empty?","property":"payload.data.is_volume_muted","propertyType":"msg","rules":[{"t":"false"}],"checkall":"true","repair":false,"outputs":1,"x":640,"y":2850,"wires":[["b3c234d8e95ee0d0"]]},{"id":"069dfced9fe20d57","type":"change","z":"6be21c2.9649be4","name":"Delete data","rules":[{"t":"delete","p":"payload.data.is_volume_muted","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":760,"y":2900,"wires":[["a80e9808ade13032"]]},{"id":"88c8a6916732ce69","type":"function","z":"6be21c2.9649be4","name":"In-/Decrease","func":"const sonos_members = getState('media_player.woonkamer').attributes.group_members\nlet value = msg.payload\n\nfunction getState(s) {\n    const hassio = global.get('homeassistant')\n\n    return hassio.hassIO.states[s]\n}\n\nmsg.payload = {\n    \"data\": {\n        \"volume_level\": \"\"\n    },\n    \"target\": {\n        \"entity_id\": \"\"\n    }\n}\n\nsonos_members.forEach((m) => {\n    m = getState(m)\n    msg.payload.target.entity_id = m.entity_id\n    let old_vol = parseFloat(m.attributes.volume_level)\n\n    if (old_vol >= 0.2 && value.includes('up') || old_vol === 0 && value.includes('down')) {\n        return null;\n    }\n\n    if (value.includes(\"up\")) {\n        msg.payload.data.volume_level = parseFloat(parseFloat(old_vol + 0.01).toFixed(2))\n    } else {\n        msg.payload.data.volume_level = parseFloat(parseFloat(old_vol - 0.01).toFixed(2))\n    }\n    node.send(msg)\n});","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":580,"y":2900,"wires":[["069dfced9fe20d57"]]},{"id":"b3c234d8e95ee0d0","type":"change","z":"6be21c2.9649be4","name":"Delete data","rules":[{"t":"delete","p":"payload.data","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":890,"y":2850,"wires":[["6554490f626a02e5"]]},{"id":"a80e9808ade13032","type":"switch","z":"6be21c2.9649be4","name":"Integer?","property":"payload.data.volume_level","propertyType":"msg","rules":[{"t":"istype","v":"number","vt":"number"}],"checkall":"true","repair":false,"outputs":1,"x":930,"y":2900,"wires":[["d3fc9454b1adb16c"]]},{"id":"6554490f626a02e5","type":"api-call-service","z":"6be21c2.9649be4","name":"Unmute Woonkamer","server":"5c0abd7f.7b22a4","version":5,"debugenabled":false,"domain":"media_player","service":"volume_mute","areaId":[],"deviceId":[],"entityId":[],"data":"{\"is_volume_muted\": \"false\"}","dataType":"jsonata","mergeContext":"","mustacheAltTags":true,"outputProperties":[],"queue":"last","x":1110,"y":2850,"wires":[[]]},{"id":"d3fc9454b1adb16c","type":"api-call-service","z":"6be21c2.9649be4","name":"Set Volume Woonkamer","server":"5c0abd7f.7b22a4","version":5,"debugenabled":false,"domain":"media_player","service":"volume_set","areaId":[],"deviceId":[],"entityId":[],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":true,"outputProperties":[],"queue":"last","x":1120,"y":2900,"wires":[[]]},{"id":"5c0abd7f.7b22a4","type":"server","name":"HassIO","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"},{"id":"84ab78a.2580c88","type":"mqtt-broker","name":"MQTT","broker":"localhost","port":"1883","clientid":"nodered-98femk32dsxa","usetls":false,"compatmode":false,"keepalive":"30","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]


Ik heb nu meteen geregeld dat een aantal zaken 'slimmer' zijn. Ik weet natuurlijk dat ik de woonkamer wil aansturen, want daar ligt deze knop. Maar bij Sonos heb je soms meerdere devices in een groep hangen. Die worden nu automatisch opgehaald. Als het volume in 1 van de groepen harder/zachter staat dan in de andere wordt daar ook rekening mee gehouden. Ik ben absoluut niet tevreden met de code zoals hij nu is, maar hij werkt en ik moet ook gewoon werken :+

Acties:
  • 0 Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Nu online

MikeyMan

Vidi, Vici, Veni

Goed, nu hier ook maar eens de eerste stapjes aan het zetten met Node Red. Installeren was een beetje een uitdaging. Maar dat is inmiddels gelukt. Alleen loop ik bij de eerste deploy al stuk.

Krijg deze melding:
Afbeeldingslocatie: https://tweakers.net/i/CeAMLw4evf5k3kbZQLN6B2_SN-c=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/5eUKivc2F29C25htptvVvbse.png?f=user_large

Met een beetje zoeken kwam ik tot deze:
Afbeeldingslocatie: https://tweakers.net/i/tzYiSYOyM5lYQitVHBk2kqsPqzU=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/g2rhUbGLHcI7c5QhQgkjl4Ut.png?f=user_large

Dat lijkt te wijzen op incorrect aantal haakjes. Heb ze op meerdere manieren nagelopen, maar dat lijkt gewoon te kloppen. IEmand enig idee?

code:
1
[{"id":"6f1bd5f9.4cdd9c","type":"tab","label":"HeishaMon","disabled":false,"info":""},{"id":"1279ec70.ed6354","type":"mqtt in","z":"6f1bd5f9.4cdd9c","name":"MQTT HeishaSensor","topic":"panasonic_heat_pump/main/#","qos":"2","datatype":"auto","broker":"2298f8af.6176e8","inputs":0,"x":200,"y":300,"wires":[["14572908.cd7c9f"]]},{"id":"14572908.cd7c9f","type":"function","z":"6f1bd5f9.4cdd9c","name":"Map sensor to ID","func":"// if there's an entry in the global defined variable then \n// the value needs to be saved (send) to next function \nvar sensorsplit = msg.topic.split(\"/\");\nvar sensor = sensorsplit[sensorsplit.length-1];\n \nvar sensorvalue = msg.payload;\nfor (i = 0; i < context.global.heishamon.SensorMapping.length; i++) {\n    // when sensor is in the global settings \n    msg.sensor = sensor;\n    if(sensor == context.global.heishamon.SensorMapping[i][0]){\n//        node.warn(context.global.heishamon.SensorMapping[i]);\n        // add the home automation ID/name \n        msg.HAid = context.global.heishamon.SensorMapping[i][1];\n\n        // add type (if it exists):\n        if(context.global.heishamon.SensorMapping[i][2]){\n            msg.type = context.global.heishamon.SensorMapping[i][2];\n        }    \n        return msg;\n    }\n}\nreturn;","outputs":1,"noerr":0,"x":470,"y":300,"wires":[["c33d4c1c.9461f8"]]},{"id":"5a304122.7f39e8","type":"function","z":"6f1bd5f9.4cdd9c","name":"global setup","func":"if (!context.global.heishamon) {\n  context.global.heishamon = {};\n}\n\n// write down the Home Automation applications used\n// Possible values: Domoticz, InfluxDB, openHAB, HomeAssistant\n// comma seperated and case sensitive\ncontext.global.heishamon.HAapplication = \"Domoticz, InfluxDB\";\n\n\n//This is the overview of sensors which has to be sent to the Home Automation system\ncontext.global.heishamon.SensorMapping = [\n        // [\"name of topic\", \"IDx in Domoticz/Name in Home Assistant/ ?? openHAB ??\"]\n            [\"Heatpump_State\", 382, \"Switch\"],\n            [\"Pump_Flow\", null],\n            [\"Force_DHW_State\", null, \"Selector Switch\"], //DHW status (20=off, 10=on 0=unknown)\n            [\"Quiet_Mode_Schedule\", null, \"Switch\"],\n            [\"Operating_Mode_State\", null, \"Selector Switch\"], //7 levels - (0=Heat only, 10=Cool only, 20=Auto, 30=DHW only, 40=Heat+DHW, 50=Cool+DHW, 60=Auto+DHW)\n            [\"Main_Inlet_Temp\", null],\n            [\"Main_Outlet_Temp\", null], \n            [\"Main_Target_Temp\", null],\n            [\"Compressor_Freq\", null],\n            [\"DHW_Target_Temp\", null],\n            [\"DHW_Temp\", null],\n            [\"Operations_Hours\", null],\n            [\"Operations_Counter\", null],\n            [\"Main_Schedule_State\", null, \"Switch\"],\n            [\"Outside_Temp\", null],\n            [\"Heat_Energy_Production\", null],\n            [\"Heat_Energy_Consumption\", null],\n            [\"Powerful_Mode_Time\", null, \"Selector Switch\"], //  4 levels -- 0= off - 10= 30 Minute - 20= 60 Minute - 30= 90 Minute //0= off, 30 = level 3\n            [\"Quiet_Mode_Level\", null, \"Selector Switch\"], // 4 levels -- 0= off - 10= Silent 1 - 20= Silent 2 - 30= Silent 3\n            [\"Holiday_Mode_State\", null, \"Switch\"],\n            [\"ThreeWay_Valve_State\", null, \"Selector Switch\"], // 2 levels -- 0=Room, 10=DHW\n            [\"Outside_Pipe_Temp\", null],\n            [\"DHW_Heat_Delta\", null],\n            [\"Heat_Delta\", null],\n            [\"Cool_Delta\", null],\n            [\"DHW_Holiday_Shift_Temp\", null],\n            [\"Defrosting_State\", null, \"Switch\"],\n            [\"Z1_Heat_Request_Temp\", null, \"Thermostat\"],\n            [\"Z1_Cool_Request_Temp\", null],\n            [\"Z1_Heat_Curve_Target_High_Temp\", null],\n            [\"Z1_Heat_Curve_Target_Low_Temp\", null],\n            [\"Z1_Heat_Curve_Outside_High_Temp\", null],\n            [\"Z1_Heat_Curve_Outside_Low_Temp\", null],\n            [\"Room_Thermostat_Temp\", null],\n            [\"Z2_Heat_Request_Temp\", null],\n            [\"Z2_Cool_Request_Temp\", null],\n            [\"Z1_Water_Temp\", null],\n            [\"Z2_Water_Temp\", null],\n            [\"Cool_Energy_Production\", null],\n            [\"Cool_Energy_Consumption\", null],\n            [\"DHW_Energy_Production\", null],\n            [\"DHW_Energy_Consumption\", null],\n            [\"Z1_Water_Target_Temp\", null],\n            [\"Z2_Water_Target_Temp\", null],\n            [\"Error\", null],\n            [\"Room_Holiday_Shift_Temp\", null],\n            [\"Buffer_Temp\", null],\n            [\"Solar_Temp\", null],\n            [\"Pool_Temp\", null],\n            [\"Main_Hex_Outlet_Temp\", null],\n            [\"Discharge_Temp\", null],\n            [\"Inside_Pipe_Temp\", null],\n            [\"Defrost_Temp\", null],\n            [\"Eva_Outlet_Temp\", null],\n            [\"Bypass_Outlet_Temp\", null],\n            [\"Ipm_Temp\", null],\n            [\"Z1_Temp\", 1702],\n            [\"Z2_Temp\", null],\n            [\"DHW_Heater_State\", null],\n            [\"Room_Heater_State\", null],\n            [\"Internal_Heater_State\", null],\n            [\"External_Heater_State\", null],\n            [\"Fan1_Motor_Speed\", null],\n            [\"Fan2_Motor_Speed\", null],\n            [\"High_Pressure\", null],\n            [\"Pump_Speed\", null],\n            [\"Low_Pressure\", null],\n            [\"Compressor_Current\", null],\n            [\"Force_Heater_State\", null, \"Switch\"],\n            [\"Sterilization_State\", null, \"Switch\"],\n            [\"Sterilization_Temp\", null],\n            [\"Sterilization_Max_Time\", null],\n            [\"Z1_Cool_Curve_Target_High_Temp\", null],\n            [\"Z1_Cool_Curve_Target_Low_Temp\", null],\n            [\"Z1_Cool_Curve_Outside_High_Temp\", null],\n            [\"Z1_Cool_Curve_Outside_Low_Temp\", null],\n            [\"Heating_Mode\", null],\n            [\"Heating_Off_Outdoor_Temp\", null],\n            [\"Heater_On_Outdoor_Temp\", null],\n            [\"Heat_To_Cool_Temp\", null],\n            [\"Cool_To_Heat_Temp\", null],\n            [\"Cooling_Mode\", null],\n            [\"Heat_To_Cool_Temp\", null],\n            [\"Z2_Heat_Curve_Target_High_Temp\", null],\n            [\"Z2_Heat_Curve_Target_Low_Temp\", null],\n            [\"Z2_Heat_Curve_Outside_High_Temp\", null],\n            [\"Z2_Heat_Curve_Outside_Low_Temp\", null],\n            [\"Z2_Cool_Curve_Target_High_Temp\", null],\n            [\"Z2_Cool_Curve_Target_Low_Temp\", null],\n            [\"Z2_Cool_Curve_Outside_High_Temp\", null],\n            [\"Z2_Cool_Curve_Outside_Low_Temp\", null],\n            [\"Room_Heater_Operations_Hours\", null],\n            [\"DHW_Heater_Operations_Hours\", null]\n    ];\n    \ncontext.global.heishamon.ActionMapping = [\n    // actioncommand, type, \"IDx in Domoticz/Name in Home Assistant/ ?? openHAB ??\" \n    [\"SetHeatpump\", \"Switch\", null],\n    [\"SetHoliday\", \"Switch\", null],\n    [\"SetQuietMode\", \"Selector Switch\", null],\n    [\"SetPowerfull\", \"Selector Switch\", null],\n    [\"SetZ1HeatRequestTemperature\", \"Thermostat\", 1702],\n    [\"SetZ1CoolRequestTemperature\", \"Thermostat\", null],\n    [\"SetZ2HeatRequestTemperature\", \"Thermostat\", null],\n    [\"SetZ2CoolRequestTemperature\", \"Thermostat\", null],\n    [\"SetOperationMode\", \"Selector Switch\", null],\n    [\"SetForceDHW\", \"Switch\", null],\n    [\"SetDHWTemp\", \"Thermostat\", null],\n    [\"SetCoolTemp\", \"Thermostat\", null],\n    [\"SetForceDefrost\", \"Switch\", null],\n    [\"SetForceSterilization\", \"Switch\", null]\n];\nreturn msg;","outputs":1,"noerr":1,"initialize":"","finalize":"","libs":[],"x":460,"y":120,"wires":[[]]},{"id":"b9850ca2.e3d7a8","type":"inject","z":"6f1bd5f9.4cdd9c","name":"","props":[{"p":"payload","v":"","vt":"date"},{"p":"topic","v":"Startup","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"Startup","payload":"","payloadType":"date","x":210,"y":120,"wires":[["5a304122.7f39e8"]]},{"id":"c33d4c1c.9461f8","type":"switch","z":"6f1bd5f9.4cdd9c","name":"Which HA app ","property":"heishamon.HAapplication","propertyType":"global","rules":[{"t":"cont","v":"Domoticz","vt":"str"},{"t":"cont","v":"HomeAssistant","vt":"str"},{"t":"cont","v":"openHAB","vt":"str"},{"t":"cont","v":"InfluxDB","vt":"str"}],"checkall":"true","repair":true,"outputs":4,"x":770,"y":300,"wires":[["5cc1b5a7.565794"],["b3adbd5e.d2c188"],["ca68e5fb.797e48"],["24450c97.1a66cc"]]},{"id":"5cc1b5a7.565794","type":"function","z":"6f1bd5f9.4cdd9c","name":"Prepare Domoticz output","func":"if(msg.HAid !== null){\n    msg1 = {};\n    msg1.payload = {};\n    msg1.payload.idx = msg.HAid; \n    msg1.topic = \"domoticz/in\";\n\n    if(msg.type == \"Selector Switch\"){\n        msg1.payload.command = \"switchlight\";\n        msg1.payload.switchcmd = \"Set Level\";\n        msg1.payload.level = msg.payload * 10;\n    }else if(msg.type == \"Switch\"){\n        msg1.payload.command = \"switchlight\"\n        if(msg.payload == 1){ cmd = \"On\"; }else{ cmd=\"Off\"}\n        msg1.payload.switchcmd = cmd;\n    }else{\n        msg1.payload.svalue = msg.payload;\n    }\n    return msg1;\n}\n\nreturn;","outputs":1,"noerr":0,"x":1050,"y":260,"wires":[["864dcbb4.29bdb","d93fa1dd.ba9b4"]]},{"id":"864dcbb4.29bdb","type":"mqtt out","z":"6f1bd5f9.4cdd9c","name":"MQTT publish","topic":"","qos":"","retain":"","broker":"2298f8af.6176e8","x":1360,"y":320,"wires":[]},{"id":"57ddcffb.7f6d28","type":"influxdb out","z":"6f1bd5f9.4cdd9c","influxdb":"9cf5a8bb.798e08","name":"","measurement":"heishamon","precision":"","retentionPolicy":"","x":1340,"y":540,"wires":[]},{"id":"24450c97.1a66cc","type":"function","z":"6f1bd5f9.4cdd9c","name":"Prepare InfluxDB output","func":"if(isNaN(parseFloat(msg.payload))){\n    return;\n}else{\n    \n    msg.payload = [{\n        numValue: parseFloat(msg.payload),\n        strValue: msg.sensor\n    },\n    {\n        tag1:msg.sensor\n    }];\n    return msg;\n}","outputs":1,"noerr":0,"x":1040,"y":540,"wires":[["57ddcffb.7f6d28"]]},{"id":"ca68e5fb.797e48","type":"function","z":"6f1bd5f9.4cdd9c","name":"Prepare openHAB output","func":"if(msg.payload.HAid != null){\n    //do something\n}\n\nreturn;","outputs":1,"noerr":0,"x":1050,"y":420,"wires":[["864dcbb4.29bdb"]]},{"id":"b3adbd5e.d2c188","type":"function","z":"6f1bd5f9.4cdd9c","name":"Prepare HomeAssistant output","func":"msg1 = {};\nmsg1.payload = msg.payload;\nmsg1.topic = \"home/\" + msg.HAid; // Example: home/Compressor_Freq (or how it is mentioned in global setup)\nreturn msg1;\n","outputs":1,"noerr":0,"x":1070,"y":340,"wires":[["864dcbb4.29bdb","d93fa1dd.ba9b4"]]},{"id":"e30e04b9.eabb68","type":"mqtt in","z":"6f1bd5f9.4cdd9c","name":"Domoticz Publish","topic":"domoticz/out/#","qos":"2","datatype":"auto","broker":"2298f8af.6176e8","inputs":0,"x":180,"y":660,"wires":[["13d65aa6.c4e4ed"]]},{"id":"998636d3.ac6fc","type":"debug","z":"6f1bd5f9.4cdd9c","name":"","active":false,"console":"false","complete":"false","x":1030,"y":620,"wires":[]},{"id":"13d65aa6.c4e4ed","type":"json","z":"6f1bd5f9.4cdd9c","name":"","property":"payload","action":"","pretty":false,"x":390,"y":660,"wires":[["e4bd0e33.41649"]]},{"id":"e4bd0e33.41649","type":"function","z":"6f1bd5f9.4cdd9c","name":"Translate HomeAutomation to Heishamon","func":"//node.warn(msg.payload.idx)\nvar type;\n\nfor (i = 0; i < context.global.heishamon.ActionMapping.length; i++) {\n    if(msg.payload.idx == context.global.heishamon.ActionMapping[i][2]){\n        if(context.global.heishamon.ActionMapping[i][1]){\n            msg.topic = \"panasonic_heat_pump/commands/\" + context.global.heishamon.ActionMapping[i][0];\n            type = context.global.heishamon.ActionMapping[i][1];\n            //node.warn(msg.payload);\n            switch(type){\n                case \"Selector Switch\":\n                    msg.payload = (msg.payload.svalue1 / 10);\n                    return msg;\n                case \"Thermostat\":\n                    msg.payload = parseInt(msg.payload.svalue1);\n                    return msg;\n                case \"Switch\":\n                    msg.payload = msg.payload.nvalue;\n                    return msg;\n            }\n\n        }\n    }\n}\n\nreturn;","outputs":1,"noerr":0,"x":660,"y":660,"wires":[["998636d3.ac6fc","c31e2c02.54f13"]]},{"id":"c31e2c02.54f13","type":"mqtt out","z":"6f1bd5f9.4cdd9c","name":"MQTT Publish Set-command","topic":"","qos":"","retain":"","broker":"2298f8af.6176e8","x":1320,"y":720,"wires":[]},{"id":"d93fa1dd.ba9b4","type":"debug","z":"6f1bd5f9.4cdd9c","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":1340,"y":420,"wires":[]},{"id":"16393f9b.83d35","type":"comment","z":"6f1bd5f9.4cdd9c","name":"Version 02","info":"Only the 'global setup' node needs to be changed (and if you're not running on localhost you need to change those mqtt connection nodes also). ","x":160,"y":60,"wires":[]},{"id":"2298f8af.6176e8","type":"mqtt-broker","name":"","broker":"10.0.0.30","port":"1883","clientid":"","autoConnect":true,"usetls":false,"verifyservercert":true,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"9cf5a8bb.798e08","type":"influxdb","hostname":"127.0.0.1","port":"8086","protocol":"http","database":"Panasonic","name":"Panasonic","usetls":false,"tls":"","influxdbVersion":"1.x","url":"","rejectUnauthorized":false}]

Acties:
  • 0 Henk 'm!

  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 15-06 17:59
MikeyMan schreef op vrijdag 26 augustus 2022 @ 09:07:
Goed, nu hier ook maar eens de eerste stapjes aan het zetten met Node Red. Installeren was een beetje een uitdaging. Maar dat is inmiddels gelukt. Alleen loop ik bij de eerste deploy al stuk.

Krijg deze melding:
[Afbeelding]

Met een beetje zoeken kwam ik tot deze:
[Afbeelding]

Dat lijkt te wijzen op incorrect aantal haakjes. Heb ze op meerdere manieren nagelopen, maar dat lijkt gewoon te kloppen. IEmand enig idee?

...
Zoeken op de melding levert deze uitleg op:
https://bobbyhadz.com/blo...wing-properties-from-type

Je kunt dus in dit geval geen leeg object ({};) toewijzen maar de juiste properties moeten er in staan (HAapplication etc)

[ Voor 5% gewijzigd door Step5 op 26-08-2022 09:47 ]


Acties:
  • 0 Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Nu online

MikeyMan

Vidi, Vici, Veni

Kwam die ook net tegen toen ik wat breder zocht. Alleen is type {} dan wel een beetje gek toch? Dat zou een lege typering betekenen ergens...? Tenminste, ergens, in alledrie de genoemde situaties. Zou dan zowel voor "HApplication" als "Sensormapping" als "ActionMapping" gelden?

Valt me wel op dat er twee properties genoemd worden, terwijl er soms drie ingevoerd zijn:
Afbeeldingslocatie: https://tweakers.net/i/Rc3bhM-VfOPnN_RYrOHMK6_t668=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/Qf1LPtjF0Weq6Pl2eWroMpgW.png?f=user_large

[ Voor 28% gewijzigd door MikeyMan op 26-08-2022 09:49 ]


Acties:
  • 0 Henk 'm!

  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 15-06 17:59
MikeyMan schreef op vrijdag 26 augustus 2022 @ 09:47:
[...]


Kwam die ook net tegen toen ik wat breder zocht. Alleen is type {} dan wel een beetje gek toch? Dat zou een lege typering betekenen ergens...? Tenminste, ergens, in alledrie de genoemde situaties. Zou dan zowel voor "HApplication" als "Sensormapping" als "ActionMapping" gelden?

Valt me wel op dat er twee properties genoemd worden, terwijl er soms drie ingevoerd zijn:
[Afbeelding]
Ik snap het probleem ook niet helemaal. Ik krijg die foutmeldingen ook helemaal niet als ik jouw flow importeer?
Zover ik weet moet je toch gewoon een leeg object kunnen toewijzen

Acties:
  • 0 Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Nu online

MikeyMan

Vidi, Vici, Veni

Step5 schreef op vrijdag 26 augustus 2022 @ 10:24:
[...]

Ik snap het probleem ook niet helemaal. Ik krijg die foutmeldingen ook helemaal niet als ik jouw flow importeer?
Zover ik weet moet je toch gewoon een leeg object kunnen toewijzen
Ja ik dacht ook eventjes een werkende flow als startpunt te gebruiken. En deze zou inderdaad gewoon moeten werken. Maar dit schiet niet op.

Het is ook niet dat ik geen basic API flows kan maken, want die doen het gewoon.

Wat ook gek is... Ik krijg die foutmelding pas als ik een node heb open gehad.
Heb net de node 'map sensor to id' alleen maar geopend en op done gedrukt, en nu krijg ik deze melding:
Afbeeldingslocatie: https://tweakers.net/i/oDDI3KQ5TnKMdJj2dYyuhQyMJOQ=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/MjNNdm7q77shOXGRih8ujw3C.png?f=user_large

Kopieer ik diezelfde node weer opnieuw erin, is die foutmelding weg 8)7

[ Voor 30% gewijzigd door MikeyMan op 26-08-2022 10:35 ]


Acties:
  • +1 Henk 'm!

  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 15-06 17:59
MikeyMan schreef op vrijdag 26 augustus 2022 @ 10:26:
[...]


Ja ik dacht ook eventjes een werkende flow als startpunt te gebruiken. En deze zou inderdaad gewoon moeten werken. Maar dit schiet niet op.

Het is ook niet dat ik geen basic API flows kan maken, want die doen het gewoon.

Wat ook gek is... Ik krijg die foutmelding pas als ik een node heb open gehad.
Heb net de node 'map sensor to id' alleen maar geopend en op done gedrukt, en nu krijg ik deze melding:
[Afbeelding]

Kopieer ik diezelfde node weer opnieuw erin, is die foutmelding weg 8)7
Ik zat hier nog even mee te pielen want ik kreeg die "heishamon" global context helemaal niet te zien.
Lijkt dat je die niet rechtsreeks zo kan toewijzen in een Function.

Dit werkte wel:
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
/*
if (context.global.get("heishamon") === "undefined") {
    context.global.set("heishamon", {});
}
*/

// write down the Home Automation applications used
// Possible values: Domoticz, InfluxDB, openHAB, HomeAssistant
// comma seperated and case sensitive
context.global.set("heishamon.HAapplication", "Domoticz, InfluxDB");


//This is the overview of sensors which has to be sent to the Home Automation system
context.global.set("heishamon.SensorMapping", [
        // ["name of topic", "IDx in Domoticz/Name in Home Assistant/ ?? openHAB ??"]
            ["Heatpump_State", 382, "Switch"],
            ["Pump_Flow", null],
            ["Force_DHW_State", null, "Selector Switch"], //DHW status (20=off, 10=on 0=unknown)
            ["Quiet_Mode_Schedule", null, "Switch"],
            ["Operating_Mode_State", null, "Selector Switch"], //7 levels - (0=Heat only, 10=Cool only, 20=Auto, 30=DHW only, 40=Heat+DHW, 50=Cool+DHW, 60=Auto+DHW)
            ["Main_Inlet_Temp", null],
            ["Main_Outlet_Temp", null], 
            ["Main_Target_Temp", null],
            ["Compressor_Freq", null],
            ["DHW_Target_Temp", null],
            ["DHW_Temp", null],
            ["Operations_Hours", null],
            ["Operations_Counter", null],
            ["Main_Schedule_State", null, "Switch"],
            ["Outside_Temp", null],
            ["Heat_Energy_Production", null],
            ["Heat_Energy_Consumption", null],
            ["Powerful_Mode_Time", null, "Selector Switch"], //  4 levels -- 0= off - 10= 30 Minute - 20= 60 Minute - 30= 90 Minute //0= off, 30 = level 3
            ["Quiet_Mode_Level", null, "Selector Switch"], // 4 levels -- 0= off - 10= Silent 1 - 20= Silent 2 - 30= Silent 3
            ["Holiday_Mode_State", null, "Switch"],
            ["ThreeWay_Valve_State", null, "Selector Switch"], // 2 levels -- 0=Room, 10=DHW
            ["Outside_Pipe_Temp", null],
            ["DHW_Heat_Delta", null],
            ["Heat_Delta", null],
            ["Cool_Delta", null],
            ["DHW_Holiday_Shift_Temp", null],
            ["Defrosting_State", null, "Switch"],
            ["Z1_Heat_Request_Temp", null, "Thermostat"],
            ["Z1_Cool_Request_Temp", null],
            ["Z1_Heat_Curve_Target_High_Temp", null],
            ["Z1_Heat_Curve_Target_Low_Temp", null],
            ["Z1_Heat_Curve_Outside_High_Temp", null],
            ["Z1_Heat_Curve_Outside_Low_Temp", null],
            ["Room_Thermostat_Temp", null],
            ["Z2_Heat_Request_Temp", null],
            ["Z2_Cool_Request_Temp", null],
            ["Z1_Water_Temp", null],
            ["Z2_Water_Temp", null],
            ["Cool_Energy_Production", null],
            ["Cool_Energy_Consumption", null],
            ["DHW_Energy_Production", null],
            ["DHW_Energy_Consumption", null],
            ["Z1_Water_Target_Temp", null],
            ["Z2_Water_Target_Temp", null],
            ["Error", null],
            ["Room_Holiday_Shift_Temp", null],
            ["Buffer_Temp", null],
            ["Solar_Temp", null],
            ["Pool_Temp", null],
            ["Main_Hex_Outlet_Temp", null],
            ["Discharge_Temp", null],
            ["Inside_Pipe_Temp", null],
            ["Defrost_Temp", null],
            ["Eva_Outlet_Temp", null],
            ["Bypass_Outlet_Temp", null],
            ["Ipm_Temp", null],
            ["Z1_Temp", 1702],
            ["Z2_Temp", null],
            ["DHW_Heater_State", null],
            ["Room_Heater_State", null],
            ["Internal_Heater_State", null],
            ["External_Heater_State", null],
            ["Fan1_Motor_Speed", null],
            ["Fan2_Motor_Speed", null],
            ["High_Pressure", null],
            ["Pump_Speed", null],
            ["Low_Pressure", null],
            ["Compressor_Current", null],
            ["Force_Heater_State", null, "Switch"],
            ["Sterilization_State", null, "Switch"],
            ["Sterilization_Temp", null],
            ["Sterilization_Max_Time", null],
            ["Z1_Cool_Curve_Target_High_Temp", null],
            ["Z1_Cool_Curve_Target_Low_Temp", null],
            ["Z1_Cool_Curve_Outside_High_Temp", null],
            ["Z1_Cool_Curve_Outside_Low_Temp", null],
            ["Heating_Mode", null],
            ["Heating_Off_Outdoor_Temp", null],
            ["Heater_On_Outdoor_Temp", null],
            ["Heat_To_Cool_Temp", null],
            ["Cool_To_Heat_Temp", null],
            ["Cooling_Mode", null],
            ["Heat_To_Cool_Temp", null],
            ["Z2_Heat_Curve_Target_High_Temp", null],
            ["Z2_Heat_Curve_Target_Low_Temp", null],
            ["Z2_Heat_Curve_Outside_High_Temp", null],
            ["Z2_Heat_Curve_Outside_Low_Temp", null],
            ["Z2_Cool_Curve_Target_High_Temp", null],
            ["Z2_Cool_Curve_Target_Low_Temp", null],
            ["Z2_Cool_Curve_Outside_High_Temp", null],
            ["Z2_Cool_Curve_Outside_Low_Temp", null],
            ["Room_Heater_Operations_Hours", null],
            ["DHW_Heater_Operations_Hours", null]
    ]);
    
context.global.set("heishamon.ActionMapping", [
    // actioncommand, type, "IDx in Domoticz/Name in Home Assistant/ ?? openHAB ??" 
    ["SetHeatpump", "Switch", null],
    ["SetHoliday", "Switch", null],
    ["SetQuietMode", "Selector Switch", null],
    ["SetPowerfull", "Selector Switch", null],
    ["SetZ1HeatRequestTemperature", "Thermostat", 1702],
    ["SetZ1CoolRequestTemperature", "Thermostat", null],
    ["SetZ2HeatRequestTemperature", "Thermostat", null],
    ["SetZ2CoolRequestTemperature", "Thermostat", null],
    ["SetOperationMode", "Selector Switch", null],
    ["SetForceDHW", "Switch", null],
    ["SetDHWTemp", "Thermostat", null],
    ["SetCoolTemp", "Thermostat", null],
    ["SetForceDefrost", "Switch", null],
    ["SetForceSterilization", "Switch", null]
]);
return msg;

Hoefde ook niet te controleren of het object "heishamon" al bestond, dat wordt mee aangemaakt

Acties:
  • 0 Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Nu online

MikeyMan

Vidi, Vici, Veni

@Step5 Top, die geeft inderdaad geen foutmelding. Is deze flow dan zo brak dat alles wat je aanraakt errors geeft? :?

In node "Map sensor to ID" valt ie over:
code:
1
for (i = 0; i < context.global.heishamon.SensorMapping.length; i++) {

met melding 'cannot find name 'i'. Lijkt me toch een acceptabel java formulering.


in "prepare Domoticz output" valt ie over:
code:
1
    msg1 = {};

Ook met melding cannot find name.


in "prepare Homassistant output" is de type {} missing weer terug.

En "Translate HomeAutomation to HeisHamon" valt ook over de 'cannit find name i'...

:|


Andere vraag. Wat is de netste manier om een API url vorm te geven met variabelen?
Heb gepoogd het via een drietal variabelen te doen:
code:
1
2
3
4
5
flow.set("pin", "1111-1111-1111") || 0;
flow.set("port", "8443") || 0;
flow.set("baseurl", "https://gateway-{{pin}}.local:{{port}}/enduser-mobile-web/1/enduserAPI")

return msg;


krijg de afzonderlijke waardes wel, maar de nette 'gevulde' url lukt niet. Any thoughts?
Makkelijkste is om misschien de url hardcoded op te nemen, gezien ik at al voor elkaar heb. Maar met variabelen lijkt me eerlijk gezegd mooier, mocht er een keer iets wijzigen.

[ Voor 106% gewijzigd door MikeyMan op 26-08-2022 14:01 ]


Acties:
  • +1 Henk 'm!

  • BazemanKM
  • Registratie: Januari 2008
  • Laatst online: 23:55
@MikeyMan en @Step5: In de Heishamon Flow zit iets, waardoor het niet met de nieuwste versie van Node-Red werkt: HeishaMon - Panasonic Aquarea monitoring

https://www.fam-oldenburger.nl/category/domotica/


Acties:
  • 0 Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Nu online

MikeyMan

Vidi, Vici, Veni

BazemanKM schreef op zaterdag 27 augustus 2022 @ 15:15:
@MikeyMan en @Step5: In de Heishamon Flow zit iets, waardoor het niet met de nieuwste versie van Node-Red werkt: HeishaMon - Panasonic Aquarea monitoring
Ai... Ja ik draai volgens mij versie 3.x.

Niemand hier die even een blik kan werpen? Ik begin deze week net pas met node red. Debuggen is nog wat lastig ;)

Acties:
  • +1 Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Nu online

MikeyMan

Vidi, Vici, Veni

Inmiddels overgestapt op de Heishamon node red van de onvolprezen @edterbak. Beetje reclame maken mag wel toch? ;)

Inmiddels zelf weer aan de slag om de Somfy API aan de praat te krijgen met Node Red.
Api heb ik met wat geknutsel aan de praat, krijg er ook netjes een Json uit, en zelfs naar MQTT gepushed.
Echter; waar ik nog niet helemaal uit kom, is hoe dit netjes te maken in MQTT.

Als ik in MQTT explorer kijk, zijn de berichten van andere bronnen netjes opgedeeld:
Afbeeldingslocatie: https://tweakers.net/i/wWsEy4q0nHa97t3IqX0id9lNprk=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/wM5ghlMxq7z4Alq4yy5b7kAD.png?f=user_large

Ik dacht dat dit op topic gebeurde. Dus met de volgende flow gepoogd om het label naar msg.topic te moven. Lijkt deels gelukt:

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

Ik zou deze graag onder een hoofdcategorie hebben. Maar als ik een Topic meegeef in de MQTT write, overschrijft deze alle anderen. Iemand enig idee?

code:
1
[{"id":"390f410fdeae6dec","type":"change","z":"743a62898f598be4","name":"","rules":[{"t":"set","p":"payload.label","pt":"msg","to":"\"tahoma/in/\" & msg.payload.label","tot":"jsonata"},{"t":"move","p":"payload.label","pt":"msg","to":"topic","tot":"msg"},{"t":"delete","p":"payload.creationTime","pt":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":420,"wires":[["0d414e1eda85b389","27bcb8ebe2e66553"]]}]

[ Voor 14% gewijzigd door MikeyMan op 01-09-2022 17:00 ]


Acties:
  • 0 Henk 'm!

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 10:06
Ik zit hier met een kleine dilemma wat ik graag wat beter georganiseerd wil hebben.
LET OP: Onderstaand gaat over een combinatie van Conbee II stick (deconz), i.c.m. Hue dimmers.

Wij maken hier veel gebruik van scenes. Je kunt bijvoorbeeld in de woonkamer meerder keren op de Hue dimmer "aan knop" drukken om door scenes te schakelen. 1x drukken zet bijvoorbeeld alleen de keukenlamp aan, en 2x drukken zet ook de tafellamp aan, maar dan beide iets gedimd, 3x drukken zet een avond scene aan etc. Nu is het zo dat ik dit meer geautomatiseerd wil hebben (dus aan de hand van tijd en wellicht wat andere voorwaarden), zodat wij van de multiple presses af kunnen.

Ik maak nu de scenes en de multiple presses opties altijd in de Hue Essentials app op mijn telefoon. Dit omdat het enorm makkelijk werkt. Het nadeel is alleen dat je van een andere app afhankelijk bent, en dat je niet echt complexere voorwaarden toe kunt passen.

Het enige waar ik tegenaan loop binnen NodeRED, is dat je niet echt een makkelijke optie hebt voor Hue dimmers en dat je kunt zeggen "als ik de aan knop indruk, dan...." Je moet namelijk (zover ik weet) binnen Nodered eerst alles uitlezen qua knoppen, omdat deze met codes werken zoals 4000 en 4001.
Binnen Home Assistant zelf wordt een dimmer wel gewoon goed gezien en herkend hij direct de aan en uit knoppen etc. (zie onderstaande afbeelding). Ik wil alleen alle automations via NodeRED laten lopen en niet via Home Assistant.

Afbeeldingslocatie: https://tweakers.net/i/KZgpMjJpG9DfVLz2VplrBHPuAFk=/234x176/filters:strip_exif()/f/image/RmWx8xmZBhd45rMn1gFSUIq5.png?f=fotoalbum_medium


zijn dit soort dingen ook beschikbaar binnen NodeRED, zodat je niet iedere knop hoeft te "mappen"? Of hoe doen jullie dit soort dingen überhaupt.

Ik ben heel benieuwd naar jullie ervaringen en oplossingen.

[ Voor 8% gewijzigd door Wachten... op 07-09-2022 11:07 ]

Als je dit kunt lezen, dan werkt mij Signature!


Acties:
  • 0 Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
@Wachten... Ik gebruik Zigbee2MQTT, dus kan bij mij anders zijn, maar je kunt toch gewoon een events:state node gebruiken neem ik aan? En daarin dan de entity van de hue dimmer (action) opgeven. Als je dan verder geen waarden voor de state etc opgeeft, dan kun je er gewoon een debug node achter hangen en uitlezen wat je binnen krijgt als je op de knoppen drukt.

Ik krijg gewoon dingen binnen als "on-press", "on-hold", "on-hold-release", etc. Maar dat zal ook door Z2M komen denk ik.

Feel free to Buy me a coffee


Acties:
  • 0 Henk 'm!

  • Helox-in-a-box
  • Registratie: Augustus 2000
  • Laatst online: 11:02
Wachten... schreef op woensdag 7 september 2022 @ 11:07:
Ik zit hier met een kleine dilemma wat ik graag wat beter georganiseerd wil hebben.
LET OP: Onderstaand gaat over een combinatie van Conbee II stick (deconz), i.c.m. Hue dimmers.

Wij maken hier veel gebruik van scenes. Je kunt bijvoorbeeld in de woonkamer meerder keren op de Hue dimmer "aan knop" drukken om door scenes te schakelen. 1x drukken zet bijvoorbeeld alleen de keukenlamp aan, en 2x drukken zet ook de tafellamp aan, maar dan beide iets gedimd, 3x drukken zet een avond scene aan etc. Nu is het zo dat ik dit meer geautomatiseerd wil hebben (dus aan de hand van tijd en wellicht wat andere voorwaarden), zodat wij van de multiple presses af kunnen.

Ik maak nu de scenes en de multiple presses opties altijd in de Hue Essentials app op mijn telefoon. Dit omdat het enorm makkelijk werkt. Het nadeel is alleen dat je van een andere app afhankelijk bent, en dat je niet echt complexere voorwaarden toe kunt passen.

Het enige waar ik tegenaan loop binnen NodeRED, is dat je niet echt een makkelijke optie hebt voor Hue dimmers en dat je kunt zeggen "als ik de aan knop indruk, dan...." Je moet namelijk (zover ik weet) binnen Nodered eerst alles uitlezen qua knoppen, omdat deze met codes werken zoals 4000 en 4001.
Binnen Home Assistant zelf wordt een dimmer wel gewoon goed gezien en herkend hij direct de aan en uit knoppen etc. (zie onderstaande afbeelding). Ik wil alleen alle automations via NodeRED laten lopen en niet via Home Assistant.

[Afbeelding]


zijn dit soort dingen ook beschikbaar binnen NodeRED, zodat je niet iedere knop hoeft te "mappen"? Of hoe doen jullie dit soort dingen überhaupt.

Ik ben heel benieuwd naar jullie ervaringen en oplossingen.
Ik probeer alles in deconz te houden met bv Hue Essentials en dan de cross-platform dingen in node-red te doen zoals zigbee-deurbel -> google home of zigbee-sensor -> android tv

Acties:
  • 0 Henk 'm!

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 10:06
@musicpixel Ja zoiets heb je dus niet voor de Conbee stick. Er bestaat wel een Deconz pallete Alleen is daar heel weinig over te vinden en werkt het (naar mijn inziens) vrij complex.

Ik hoopte dus dat er iets was, waarmee je de buttons makkelijker kon inregelen zoals in HA.

@Helox-in-a-box Ja het grote voordeel is wel met Hue essentials dat alles direct in Deconz terecht komt.

Maar mag ik vragen hoe je dat dan doet met automations?
Dus stel je hebt een Hue dimmer en als de TV aanstaat en het is na zonsondergang en ik druk dan 1x op de knop, dan wil ik dat hij gelijk naar de "film scene" gaat.

Want NodeRED kent nog steeds de knoppen niet Die zie enkel een entity, maar die snapt niet wat je er mee kan o.i.d.

Als je dit kunt lezen, dan werkt mij Signature!


Acties:
  • 0 Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
@Wachten... Kun je je Hue Dimmer switch dan niet in HA zien onder Settings->Devices?
En dat plaatje/schermafdruk wat je in je post had gezet, dat is toch HA?
En volgens mij kun je dan dat device/entity in NodeRed gebruiken...

Of wil je direct communiceren tussen NodeRed en Deconz en dus helemaal buiten HA om?

Feel free to Buy me a coffee


Acties:
  • 0 Henk 'm!

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 10:06
musicpixel schreef op woensdag 7 september 2022 @ 14:36:
@Wachten... Kun je je Hue Dimmer switch dan niet in HA zien onder Settings->Devices?
En dat plaatje/schermafdruk wat je in je post had gezet, dat is toch HA?
En volgens mij kun je dan dat device/entity in NodeRed gebruiken...

Of wil je direct communiceren tussen NodeRed en Deconz en dus helemaal buiten HA om?
Ja dat is in HA. Maar ik kan de entity wel zien in NodeRed, dat is het probleem niet.
Maar je hebt niet dan simpele keuzes uit on/off o.i.d. Ik heb oude en nieuwe Hue dimmers, en Hue buttons etc. En die zou ik dan eerste allemaal moet uitlezen/mappen, wat ik dus juist niet wil.

Ik snap ook niet dat HA wel gewoon weet/kan en dat dit binnen NodeRed niet zo simpel is. Verder vind ik NodeRed echt een verademing om in te werken, maar dit soort dingen snap ik dus niet.

Ook Hue essentials weet direct over wat voor device het gaat en kan met 1 druk op de knoppen alle vier de knoppen juist instellen (aan, uit, dim up, dim down).

[ Voor 8% gewijzigd door Wachten... op 07-09-2022 14:49 ]

Als je dit kunt lezen, dan werkt mij Signature!


Acties:
  • 0 Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
@Wachten... Ik snap nog niet helemaal wat je bedoelt denk ik ;-)

Nu heb ik alleen maar oude Hue dimmer switches, dus ik kan niet vergelijken met andere, maar als ik die in NodeRed plaats (met een event:state) kan ik vervolgens gewoon een actie aan bijvoorbeeld de "on-press" koppelen.

Wat bedoel jij dan met uitlezen/mappen?

Feel free to Buy me a coffee


Acties:
  • 0 Henk 'm!

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 10:06
musicpixel schreef op woensdag 7 september 2022 @ 15:56:
@Wachten... Ik snap nog niet helemaal wat je bedoelt denk ik ;-)

Nu heb ik alleen maar oude Hue dimmer switches, dus ik kan niet vergelijken met andere, maar als ik die in NodeRed plaats (met een event:state) kan ik vervolgens gewoon een actie aan bijvoorbeeld de "on-press" koppelen.

Wat bedoel jij dan met uitlezen/mappen?
Kun jij eens een screenshot sturen?

Als je dit kunt lezen, dan werkt mij Signature!


Acties:
  • 0 Henk 'm!

  • labmuisfrl
  • Registratie: December 2007
  • Laatst online: 20-05 23:06
etienne001 schreef op dinsdag 16 augustus 2022 @ 22:58:

Waar zou ik die function dan moeten maken?
ik gebruik hem op deze manier:

[{"id":"685c03c1.9c34dc","type":"change","z":"ac57faf4.990888","name":"","rules":[{"t":"set","p":"url","pt":"msg","to":"https://sdfgdsfg/local/tts/alarmuitgeschakeld.mp3","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":910,"y":375,"wires":[["f0584cca.08858"]]},{"id":"f0584cca.08858","type":"change","z":"ac57faf4.990888","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1100,"y":375,"wires":[["481737ec.914be8"]]},{"id":"481737ec.914be8","type":"cast-to-client","z":"ac57faf4.990888","name":"","url":"","contentType":"","message":"","language":"en","ip":"192.168.111.184","port":"","volume":"100","x":1380,"y":460,"wires":[[]]}]

ik speel dan mp3tjes af met het bericht omdat deze sneller is als de google tts

Acties:
  • 0 Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
Wachten... schreef op woensdag 7 september 2022 @ 16:09:
[...]
Kun jij eens een screenshot sturen?
Even snel testje gemaakt:

Afbeeldingslocatie: https://tweakers.net/i/s-q4ckbSVL8980Gx1qgHRKHcZOs=/800x/filters:strip_icc():strip_exif()/f/image/DinB2jV0K8PJ0z35LM8PKTgP.jpg?f=fotoalbum_large

Feel free to Buy me a coffee


Acties:
  • 0 Henk 'm!

  • Helox-in-a-box
  • Registratie: Augustus 2000
  • Laatst online: 11:02
Wachten... schreef op woensdag 7 september 2022 @ 14:27:

@Helox-in-a-box Ja het grote voordeel is wel met Hue essentials dat alles direct in Deconz terecht komt.

Maar mag ik vragen hoe je dat dan doet met automations?
Dus stel je hebt een Hue dimmer en als de TV aanstaat en het is na zonsondergang en ik druk dan 1x op de knop, dan wil ik dat hij gelijk naar de "film scene" gaat.
Je kan in Hue Essentials best complexe Automations toevoegen, bv op Device state (button) en dan een Optional condition een Time toevoegen met een bereik van 18:00-06:00 en dan een Action (Toggle Group off)

Acties:
  • 0 Henk 'm!

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 10:06
Maar kun je hem ook delen (met export) zodat ik de settings kan zien?

Als je dit kunt lezen, dan werkt mij Signature!


Acties:
  • +1 Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
Wachten... schreef op woensdag 7 september 2022 @ 16:29:
[...]


Maar kun je hem ook delen (met export) zodat ik de settings kan zien?
Dacht dat je er wel genoeg aan had ;-)
Maar hier de export:

code:
1
[{"id":"9363383b48cb9582","type":"server-state-changed","z":"e21ad082d513446c","name":"Test Remote Hue","server":"2065350e.86a40a","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.test_remote_hue_action","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":100,"y":1800,"wires":[["7bedc8a08d65f677","16612362c5ca52d0"]]},{"id":"7bedc8a08d65f677","type":"debug","z":"e21ad082d513446c","name":"Hue Remote","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":290,"y":1920,"wires":[]},{"id":"f60c41e32dd91d34","type":"api-call-service","z":"e21ad082d513446c","name":"Lamp AAN","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.test_light_ikea_color"],"data":"{\"brightness_pct\":\"50\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":690,"y":1760,"wires":[[]]},{"id":"8da2cbf5d8d639c5","type":"api-call-service","z":"e21ad082d513446c","name":"Lamp UIT","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.test_light_ikea_color"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":680,"y":1840,"wires":[[]]},{"id":"16612362c5ca52d0","type":"switch","z":"e21ad082d513446c","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"on-press","vt":"str"},{"t":"eq","v":"off-press","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":330,"y":1800,"wires":[["f60c41e32dd91d34"],["8da2cbf5d8d639c5"]]},{"id":"d6fffd03180d66bb","type":"comment","z":"e21ad082d513446c","name":"on-press","info":"","x":480,"y":1740,"wires":[]},{"id":"a2f59eb284d53b79","type":"comment","z":"e21ad082d513446c","name":"off-press","info":"","x":480,"y":1860,"wires":[]},{"id":"2065350e.86a40a","type":"server","name":"Home Assistant","version":1,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]


Zie trouwens dat het domain bij Lamp uit verkeerd staat maar het werkt wel gewoon ;-)

Feel free to Buy me a coffee


Acties:
  • 0 Henk 'm!

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 10:06
Helox-in-a-box schreef op woensdag 7 september 2022 @ 16:28:
[...]

Je kan in Hue Essentials best complexe Automations toevoegen, bv op Device state (button) en dan een Optional condition een Time toevoegen met een bereik van 18:00-06:00 en dan een Action (Toggle Group off)
Maar voor complexe dingen vind ik het dan weer niet handig werken, want als ik allerlei states en diverse variaties wil doen qua automations, dan vind ik NodeRed weer onwijs handig.

Het blijft dus wel een lastige kwestie. Het zou mooi zijn als er gewoon direct herkend wordt ik NodeRed wat voor device het is.

Als je dit kunt lezen, dan werkt mij Signature!


Acties:
  • 0 Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
Wachten... schreef op woensdag 7 september 2022 @ 16:34:
[...]


Maar voor complexe dingen vind ik het dan weer niet handig werken, want als ik allerlei states en diverse variaties wil doen qua automations, dan vind ik NodeRed weer onwijs handig.
Snap deze zin niet helemaal
Het blijft dus wel een lastige kwestie. Het zou mooi zijn als er gewoon direct herkend wordt ik NodeRed wat voor device het is.
Hoe zou dit simpeler kunnen dan? Dat je een lamp aan een dimmer switch koppelt en ie dan meteen weet hoe die lamp aan, uit, gedimd etc moet worden?

[ Voor 4% gewijzigd door musicpixel op 07-09-2022 16:47 ]

Feel free to Buy me a coffee


Acties:
  • 0 Henk 'm!

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 10:06
musicpixel schreef op woensdag 7 september 2022 @ 16:38:
[...]


Hoe zou dit simpeler kunnen dan? Dat je een lamp aan een dimmer switch koppelt en ie dan meteen weet hoe die lamp aan, uit, gedimd etc moet worden?
Jouw code werkt wel voor aan/uit, maar ik probeer nu wat voor elkaar te krijgen als ik de aanknop ingedrukt hou, maar daar krijg ik geen response op uit NodeRed.

Hoe het simpeler zou kunnen?
In Hue essentials zie je gewoon de Hue dimmer en kun je alle knoppen in 1 keer configureren voor een specifieke group. Dus letterlijk binnen 5 seconden heb je de knop ingesteld. Het enige nadeel is dat ik geen voorwaarden in kan stellen van specifieke entities uit HA.

Want stel je hebt een lamp, en die wil je aan kunnen zetten en uit kunnen zetten (zoals je hebt gedaan), maar ook kunnen dimmen en feller kunnen zetten? Hoe doe je dat dan? Ik krijg namelijk geen enkele input uit de brightness knopjes.

Als je dit kunt lezen, dan werkt mij Signature!


Acties:
  • 0 Henk 'm!

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 10:06
@musicpixel

Dit is dus een beetje wat ik bedoel. Dus voor verschillende tijden, verschillende scenes activeren. Alleen kun je hier nog niet dimmen met deze flow, en wordt het (als je meer voorwaarden wilt toepassen) als snel een aardig zooitje. Laat staan als je dit voor alle dimmers (15 stuks hier) wilt doen.

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

code:
1
[{"id":"0fa9d0526e6116cd","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"23f67c59b4f9f0a5","type":"server-state-changed","z":"0fa9d0526e6116cd","name":"Test Remote Hue","server":"2065350e.86a40a","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_boolean.dimmer_overloop","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":240,"y":240,"wires":[["74f30666395a458e"]]},{"id":"988edd7214513d48","type":"api-call-service","z":"0fa9d0526e6116cd","name":"Scene overdag","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"scene","service":"turn_on","areaId":[],"deviceId":[],"entityId":["scene.woonkamer_group_dag"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1020,"y":200,"wires":[[]]},{"id":"f188637f8950293b","type":"api-call-service","z":"0fa9d0526e6116cd","name":"Lamp UIT","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.woonkamer_group"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":720,"y":380,"wires":[[]]},{"id":"74f30666395a458e","type":"switch","z":"0fa9d0526e6116cd","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"on","vt":"str"},{"t":"eq","v":"off","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":470,"y":240,"wires":[["e140a9a579c4fc2a","c1b221d3e7a67d52","74dcc1897a2ea311"],["f188637f8950293b"]]},{"id":"e140a9a579c4fc2a","type":"time-range-switch","z":"0fa9d0526e6116cd","name":"tussen Sunrise & Sunset","lat":"52.12","lon":"4.65","startTime":"sunrise","endTime":"sunset","startOffset":0,"endOffset":0,"x":770,"y":200,"wires":[["988edd7214513d48"],[]]},{"id":"c1b221d3e7a67d52","type":"time-range-switch","z":"0fa9d0526e6116cd","name":"tussen Sunset & 00:00","lat":"52.12","lon":"4.65","startTime":"sunset","endTime":"00:00","startOffset":0,"endOffset":0,"x":760,"y":260,"wires":[["af4670d56d981058"],[]]},{"id":"74dcc1897a2ea311","type":"time-range-switch","z":"0fa9d0526e6116cd","name":"tussen 00:01 & Sunrise","lat":"52.12","lon":"4.65","startTime":"00:01","endTime":"sunrise","startOffset":0,"endOffset":0,"x":770,"y":320,"wires":[["c99baa1a290778bc"],[]]},{"id":"af4670d56d981058","type":"api-call-service","z":"0fa9d0526e6116cd","name":"Scene avond","server":"9b8bc642.fed038","version":5,"debugenabled":false,"domain":"scene","service":"turn_on","areaId":[],"deviceId":[],"entityId":["scene.woonkamer_group_avond"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1010,"y":260,"wires":[[]]},{"id":"c99baa1a290778bc","type":"api-call-service","z":"0fa9d0526e6116cd","name":"Scene avond","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"scene","service":"turn_on","areaId":[],"deviceId":[],"entityId":["scene.woonkamer_group_film"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1010,"y":320,"wires":[[]]},{"id":"2065350e.86a40a","type":"server","name":"Home Assistant","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"},{"id":"9b8bc642.fed038","type":"server","name":"Home Assistant","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"}]

[ Voor 3% gewijzigd door Wachten... op 07-09-2022 17:12 ]

Als je dit kunt lezen, dan werkt mij Signature!


Acties:
  • 0 Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
Wachten... schreef op woensdag 7 september 2022 @ 16:54:
[...]


Jouw code werkt wel voor aan/uit, maar ik probeer nu wat voor elkaar te krijgen als ik de aanknop ingedrukt hou, maar daar krijg ik geen response op uit NodeRed.
Ik krijg bij indrukken van de aan-knop on-press, bij vasthouden on-hold (welke steeds herhaald wordt zolang ik de knop vasthoud) en bij loslaten on-hold-release. Dit zie ik in de debug meldingen. Krijg jij dat niet?
Zelfde voor de brightness-knopjes: maar ipv "on" krijg ik dan "up" of "down"
Hoe het simpeler zou kunnen?
In Hue essentials zie je gewoon de Hue dimmer en kun je alle knoppen in 1 keer configureren voor een specifieke group. Dus letterlijk binnen 5 seconden heb je de knop ingesteld. Het enige nadeel is dat ik geen voorwaarden in kan stellen van specifieke entities uit HA.

Want stel je hebt een lamp, en die wil je aan kunnen zetten en uit kunnen zetten (zoals je hebt gedaan), maar ook kunnen dimmen en feller kunnen zetten? Hoe doe je dat dan? Ik krijg namelijk geen enkele input uit de brightness knopjes.
Dimmen van 1 lamp (of groep lampen met dezelfde lichtsterkte) gaat nog wel. Als je down-press/down-hold binnen krijgt verlaag je de helderheid van elke lamp met x %.
Denk dat je eerst moet kijken waarom je geen input van de brightness knopjes binnen krijgt.

Feel free to Buy me a coffee


Acties:
  • 0 Henk 'm!

  • Koepert
  • Registratie: Augustus 2013
  • Laatst online: 13-06 14:08
Wachten... schreef op woensdag 7 september 2022 @ 14:27:
@musicpixel Ja zoiets heb je dus niet voor de Conbee stick. Er bestaat wel een Deconz pallete Alleen is daar heel weinig over te vinden en werkt het (naar mijn inziens) vrij complex.

Ik hoopte dus dat er iets was, waarmee je de buttons makkelijker kon inregelen zoals in HA.

@Helox-in-a-box Ja het grote voordeel is wel met Hue essentials dat alles direct in Deconz terecht komt.

Maar mag ik vragen hoe je dat dan doet met automations?
Dus stel je hebt een Hue dimmer en als de TV aanstaat en het is na zonsondergang en ik druk dan 1x op de knop, dan wil ik dat hij gelijk naar de "film scene" gaat.

Want NodeRED kent nog steeds de knoppen niet Die zie enkel een entity, maar die snapt niet wat je er mee kan o.i.d.
Geen Hue, wel een aantal switches.

Ik gebruik een Events node (all events)

Die filtert op event_type: deconz_event

JSON:
1
[{"id":"3dbbd8ed.d84a5","type":"server-events","z":"6dc72dfa.49a6dc","name":"Deconz_event","server":"1d8e9a4c.b062a6","version":1,"event_type":"deconz_event","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"},{"property":"event_type","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"}],"x":90,"y":1480,"wires":[["47e33d24.6e7da4","5e389800.d0d8c8"]]},{"id":"1d8e9a4c.b062a6","type":"server","name":"Home Assistant","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"}]


Daar heb ik een Switch Node achter die payload.event.id filtert op mijn 3 switches

Achter elk van die 3 uitkomsten heb ik een filter node die filtert op payload.event.event

Daar weer achter een call_service node die de gewenste actie uitvoert.

De event.id en event.event heb ik achterhaalt door de debug node achter de events-node.

Niet zo heel complex, maar ja, wel meer werkt dan 'standaard' entities. En ik heb geen ervaring met HUE dus weet niet of die er op dezelfde wijze uit te halen zijn.

Acties:
  • 0 Henk 'm!

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 10:06
TLDR:
Kan iemand hier bevestigen dat NodeRed nu enkel gebruik maakt "Friendly names", en dat je entity namen nu eindelijk links kan laten liggen?

Ik zal even uitleggen waarom ik deze vraag heb:
Als je een bewegingssensor hebt, dan zitten daar vaak meer entities aan verbonden, zoals een lux meter, temperatuur meter etc.

In theorie zou het het helemaal niet uit moeten maken wat de entity naam is, ook al is dit sensor.dah4j3n2. Je veranderd namelijk de "Friendly name" en die is relevant. (vergelijk het met een DNS server). Dus sensor.dah4j3n2 wordt vertaald naar bijvoorbeeld bewegingssensor gang

Voorheen was het echter zo dat je in NodeRed moest zoeken op entity name. Dit was enorm frustrerend, want je moest dus alle entity namen aanpassen en het liefst wilde je ook de "Friendly name" aanpassen, omdat Home Assistant hier wel mee werkt.

Nu lijkt het erop dat ze eindelijk werken aan de hand van "Friendly names", en dat entity namen totaal niet meer belangrijk zijn. Dit zou een enorm goede stap zijn, Want het gebeurd(e) regelmatig dat Home Assistant doodleuk entity namen veranderde naar het origineel (dus bijvoorbeeld sensor.lux_11). Geen idee hoe dat iedere keer gebeurt overigens, maar dit gebeurde soms met entities van Deconz (de Conbee II stick). Als iemand hier trouwens een verklaring of oplossing voor heeft, dan hoor ik dit graag. Ik heb ze wel eens hardcoded veranderd met de RestAPI plugin, maar dat is mij teveel werk.

Ik ben benieuwd naar de reacties, en/of hoe jullie hier eventueel mee om gaan/gingen.

Als je dit kunt lezen, dan werkt mij Signature!


Acties:
  • 0 Henk 'm!

  • Kaspers
  • Registratie: Juni 2004
  • Laatst online: 09:55
Je kunt wel zoeken op Friendly Names, maar uiteindelijk is het altijd een Entity.id die je vastlegd per component. Friendly Names hoeven namenlijk niet uniek te zijn, Entity.id's wel.

Acties:
  • 0 Henk 'm!

  • Koepert
  • Registratie: Augustus 2013
  • Laatst online: 13-06 14:08
Idd, NodeRed TOONT de Friendly name bij een node, maar gebruikt gewoon nog de Entity_ID. Zoeken (bij aanmaken/vullen node) werkt nu wel op Friendly name. Je gebruikt echter nog steeds entity_id.

Mbt wijzigende namen:
  • Staan ze in Deconz nog als 'oud'? Deconz pusht wijzigingen namelijk naar HA. Dus als je entity_id HA wijzigt en Deconz NIET gaat dat volgens mij tot een reboot maar goed. Daarna heb je doodleuk weer je oude ids te pakken
  • Bij wijzigingen in Deconz push hij dit soms naar HA en is er dan net 'teveel' gewijzigd waardoor HA denkt He nieuwe entity
Maar, soms heb ik met Deconz ook wel wat van dergelijke vaagheden.. Mede daarom sinds gisteren naar Z2m overgestapt. Viel me reuze mee.

Acties:
  • 0 Henk 'm!

  • Koepert
  • Registratie: Augustus 2013
  • Laatst online: 13-06 14:08
Koepert schreef op woensdag 7 september 2022 @ 17:54:
[...]


Geen Hue, wel een aantal switches.

Ik gebruik een Events node (all events)

Die filtert op event_type: deconz_event

JSON:
1
[{"id":"3dbbd8ed.d84a5","type":"server-events","z":"6dc72dfa.49a6dc","name":"Deconz_event","server":"1d8e9a4c.b062a6","version":1,"event_type":"deconz_event","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"waitForRunning":true,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"},{"property":"event_type","propertyType":"msg","value":"$outputData(\"eventData\").event_type","valueType":"jsonata"}],"x":90,"y":1480,"wires":[["47e33d24.6e7da4","5e389800.d0d8c8"]]},{"id":"1d8e9a4c.b062a6","type":"server","name":"Home Assistant","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"}]


Daar heb ik een Switch Node achter die payload.event.id filtert op mijn 3 switches

Achter elk van die 3 uitkomsten heb ik een filter node die filtert op payload.event.event

Daar weer achter een call_service node die de gewenste actie uitvoert.

De event.id en event.event heb ik achterhaalt door de debug node achter de events-node.

Niet zo heel complex, maar ja, wel meer werkt dan 'standaard' entities. En ik heb geen ervaring met HUE dus weet niet of die er op dezelfde wijze uit te halen zijn.
Dit is overigens met de overstap naar Z2m ook gewijzigd.

Nu heeft elke switch/knop een ACTION entity. Dus ik heb nu drie event STATE nodes, met achter elk een switch node: Single, Double, Hold, en welke acties er ook zijn en daar achter de call service die ik wil doen.

Dat kun je natuurlijk uitbreiden met voorwaarden als tijd/dag/etc

Acties:
  • 0 Henk 'm!

  • Woodski
  • Registratie: Maart 2006
  • Laatst online: 14-06 17:30
Wat doe ik hier fout en nog beter hoe fix ik het ?
Het heeft altijd gewerkt maar ik krijg nu een waarschuwing op de 2de regel
Hij kijkt of wasmachine loopt en zo ja dan gaat hij verder

This condition will always return 'false' since the types '"washer_state"' and '"on"' have no overlap.(236)

code:
1
2
3
4
5
6
7
8
9
10
var washer_state = global.get('washer_current');
if ('washer_state' === "on" )

{
var washer_on = "off"
global.set('washer_current', washer_on);

return msg;
}
return msg;

Acties:
  • +1 Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
Woodski schreef op dinsdag 13 september 2022 @ 18:29:
Wat doe ik hier fout en nog beter hoe fix ik het ?
Het heeft altijd gewerkt maar ik krijg nu een waarschuwing op de 2de regel
Hij kijkt of wasmachine loopt en zo ja dan gaat hij verder

This condition will always return 'false' since the types '"washer_state"' and '"on"' have no overlap.(236)

code:
1
2
3
4
5
6
7
8
9
10
var washer_state = global.get('washer_current');
if ('washer_state' === "on" )

{
var washer_on = "off"
global.set('washer_current', washer_on);

return msg;
}
return msg;
Heb niet kunnen testen, maar ik zou er dit van maken:
code:
1
2
3
4
5
6
7
8
var washer_state = global.get('washer_current');

if (washer_state === "on" )
{
   global.set('washer_current', "off");
}

return msg;

Feel free to Buy me a coffee


Acties:
  • 0 Henk 'm!

  • Woodski
  • Registratie: Maart 2006
  • Laatst online: 14-06 17:30
@musicpixel thx, ik had inderdaad meerdere flows met die ' '
En dat was dus onjuist. Geen foutmelding meer en het werkt nog steeds

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 10:06
Ik ben dus nu bezig om mijn flow was te vereenvoudigen, maar ik kom er niet helemaal uit m.b.t. de change node en het laden van de payload.

@musicpixel Jij hebt mij volgens mij eerder geholpen hiermee. Heb jij een idee?
Wat ik dus wil is het volgende. Ik heb een input boolean "slapen" en "schoonmaakster"

Ik wil dat de lampen anders reageren als één van de input booleans aan staat (de snelheid waarmee de lamp uit gaat, en de brightness/kleurtemperatuur)

Nu zou dit allemaal in 1 change node kunnen per lamp lijkt mij, maar op de één of andere manier laadt hij de payload niet.

Change node
Afbeeldingslocatie: https://tweakers.net/i/cGnzjeTYK2TpOVo_zgRUe9HcIbs=/234x176/filters:strip_exif()/f/image/NxArcYS9WLgYBSCWarWesd6I.png?f=fotoalbum_medium

Call service node
Afbeeldingslocatie: https://tweakers.net/i/78zWnzr1Z2_k_bUCzi1uvUOab0U=/234x176/filters:strip_exif()/f/image/Jy1jfp3rFl19XZvuH1hX0mDr.png?f=fotoalbum_medium

Dit is de flow die ik nu heb, en in theorie werkt, maar die ik erg lang en onoverzichtelijk vindt.
Afbeeldingslocatie: https://tweakers.net/i/eFcGwqlS4TnlFwNh5edwO35ZejI=/234x176/filters:strip_exif()/f/image/CdcVkE0jCFmpGtijJ5JFYhQd.png?f=fotoalbum_medium

code:
1
[{"id":"091a01d49b9ebc08","type":"subflow","name":"Dagdeel Hue color","info":"","category":"","in":[{"x":180,"y":240,"wires":[{"id":"726054b9b1e993db"},{"id":"7d0ba4583572e90a"},{"id":"3464c0acfaf29bce"}]}],"out":[{"x":1040,"y":260,"wires":[{"id":"844f2c70672f6a35","port":0},{"id":"36659127b650ec35","port":0},{"id":"47c607a0338a4f69","port":0},{"id":"e1e249b79860c1fb","port":0}]}],"env":[],"meta":{},"color":"#DDAA99","outputLabels":["Overdag"]},{"id":"726054b9b1e993db","type":"time-range-switch","z":"091a01d49b9ebc08","name":"tussen Sunrise & Sunset","lat":"52.12","lon":"4.65","startTime":"sunrise","endTime":"sunset","startOffset":0,"endOffset":0,"x":390,"y":180,"wires":[["844f2c70672f6a35"],[]]},{"id":"7d0ba4583572e90a","type":"time-range-switch","z":"091a01d49b9ebc08","name":"tussen Sunset & 00:00","lat":"52.12","lon":"4.65","startTime":"sunset","endTime":"00:00","startOffset":0,"endOffset":0,"x":380,"y":240,"wires":[["36659127b650ec35"],[]]},{"id":"3464c0acfaf29bce","type":"time-range-switch","z":"091a01d49b9ebc08","name":"tussen 00:01 & Sunrise","lat":"52.12","lon":"4.65","startTime":"00:01","endTime":"sunrise","startOffset":0,"endOffset":0,"x":390,"y":300,"wires":[["73ede304ebd459d4"],[]]},{"id":"844f2c70672f6a35","type":"change","z":"091a01d49b9ebc08","name":"overdag","rules":[{"t":"set","p":"payload","pt":"msg","to":"overdag","tot":"str"},{"t":"set","p":"hue_color_brightness_pct","pt":"global","to":"100","tot":"num"},{"t":"set","p":"hue_color_transition","pt":"global","to":"0.5","tot":"num"},{"t":"set","p":"hue_color_kelvin","pt":"global","to":"3000","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":680,"y":180,"wires":[[]]},{"id":"36659127b650ec35","type":"change","z":"091a01d49b9ebc08","name":"avond","rules":[{"t":"set","p":"payload","pt":"msg","to":"avond","tot":"str"},{"t":"set","p":"hue_color_brightness_pct","pt":"global","to":"60","tot":"num"},{"t":"set","p":"hue_color_transition","pt":"global","to":"0.5","tot":"num"},{"t":"set","p":"hue_color_kelvin","pt":"global","to":"2400","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":690,"y":240,"wires":[[]]},{"id":"47c607a0338a4f69","type":"change","z":"091a01d49b9ebc08","name":"nacht","rules":[{"t":"set","p":"payload","pt":"msg","to":"nacht","tot":"str"},{"t":"set","p":"hue_color_brightness_pct","pt":"global","to":"50","tot":"num"},{"t":"set","p":"hue_color_transition","pt":"global","to":"0.5","tot":"num"},{"t":"set","p":"hue_color_kelvin","pt":"global","to":"2100","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":850,"y":300,"wires":[[]]},{"id":"73ede304ebd459d4","type":"api-current-state","z":"091a01d49b9ebc08","name":"Slaap scene uit?","server":"9b8bc642.fed038","version":3,"outputs":2,"halt_if":"off","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.slapen_scene","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":630,"y":300,"wires":[["47c607a0338a4f69"],["e1e249b79860c1fb"]]},{"id":"e1e249b79860c1fb","type":"change","z":"091a01d49b9ebc08","name":"slapen","rules":[{"t":"set","p":"payload","pt":"msg","to":"nacht","tot":"str"},{"t":"set","p":"hue_color_brightness_pct","pt":"global","to":"10","tot":"num"},{"t":"set","p":"hue_color_transition","pt":"global","to":"0.5","tot":"num"},{"t":"set","p":"hue_color_kelvin","pt":"global","to":"2100","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":850,"y":360,"wires":[[]]},{"id":"9b8bc642.fed038","type":"server","name":"Home Assistant","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"},{"id":"a53378b39c596270","type":"tab","label":"Flow 2","disabled":false,"info":"","env":[]},{"id":"60514b92030e0996","type":"server-state-changed","z":"a53378b39c596270","name":"bewegingssensor","server":"2065350e.86a40a","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"binary_sensor.bewegingssensor_gang","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"on","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":120,"y":220,"wires":[["c3ca64202feed7c6","7b1e38b44f66a0aa"],["999e37631fbaa374"]]},{"id":"cad7343ce4fd8b80","type":"comment","z":"a53378b39c596270","name":"Gang","info":"{\"brightness_pct\":{{global.hue_color_brightness_pct}}, \"transition\":{{global.hue_color_transition}}}","x":90,"y":180,"wires":[]},{"id":"1126986163506f81","type":"api-call-service","z":"a53378b39c596270","name":"Lamp aan","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.lamp_gang"],"data":"{\"brightness_pct\":{{global.hue_color_brightness_pct}}, \"transition\":{{global.hue_color_transition}}}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1140,"y":240,"wires":[[]]},{"id":"f40d65d7a7fb71f5","type":"api-call-service","z":"a53378b39c596270","name":"Lamp uit","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.gang_group"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":760,"y":340,"wires":[[]]},{"id":"baa6994a7db4fda2","type":"trigger","z":"a53378b39c596270","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"1","extend":true,"overrideDelay":true,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":600,"y":340,"wires":[["f40d65d7a7fb71f5"]]},{"id":"7d665594c8e5c7e2","type":"api-current-state","z":"a53378b39c596270","name":"IB Schoonmaakster","server":"2065350e.86a40a","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.schoonmaakster","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":490,"y":180,"wires":[["31fbc4e7a5719dba"],["639a6f13bfef10d7"]]},{"id":"178094460ba22948","type":"api-call-service","z":"a53378b39c596270","name":"Lamp aan 50%","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.gang_group"],"data":"{\"brightness_pct\":{{payload}}}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1160,"y":120,"wires":[[]]},{"id":"31fbc4e7a5719dba","type":"change","z":"a53378b39c596270","name":"Vertraging 3 minuten","rules":[{"t":"set","p":"vertraging","pt":"flow","to":"180000","tot":"num"},{"t":"set","p":"payload","pt":"msg","to":"50","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":900,"y":120,"wires":[["178094460ba22948"]]},{"id":"999e37631fbaa374","type":"change","z":"a53378b39c596270","name":"Stel delay in","rules":[{"t":"set","p":"delay","pt":"msg","to":"vertraging","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":410,"y":340,"wires":[["baa6994a7db4fda2"]]},{"id":"c3ca64202feed7c6","type":"change","z":"a53378b39c596270","name":"Reset","rules":[{"t":"set","p":"reset","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":390,"y":280,"wires":[["baa6994a7db4fda2"]]},{"id":"639a6f13bfef10d7","type":"api-current-state","z":"a53378b39c596270","name":"IB dimmer","server":"2065350e.86a40a","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.dimmer_gang","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":690,"y":180,"wires":[["31fbc4e7a5719dba"],["e3930fa46ce32d79"]]},{"id":"e3930fa46ce32d79","type":"change","z":"a53378b39c596270","name":"Vertraging 30 seconden","rules":[{"t":"set","p":"vertraging","pt":"flow","to":"30000","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":910,"y":180,"wires":[["e1ee0a5871e2e765","1126986163506f81"]]},{"id":"e1ee0a5871e2e765","type":"subflow:091a01d49b9ebc08","z":"a53378b39c596270","name":"","env":[],"x":930,"y":240,"wires":[["1126986163506f81"]]},{"id":"7b1e38b44f66a0aa","type":"api-current-state","z":"a53378b39c596270","name":"lux onder 20","server":"9b8bc642.fed038","version":3,"outputs":2,"halt_if":"10","halt_if_type":"num","halt_if_compare":"lt","entity_id":"sensor.bewegingssensor_gang_lux","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":290,"y":180,"wires":[["7d665594c8e5c7e2"],[]]},{"id":"2065350e.86a40a","type":"server","name":"Home Assistant","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"}]

[ Voor 106% gewijzigd door Wachten... op 14-09-2022 10:23 ]

Als je dit kunt lezen, dan werkt mij Signature!


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 15-06 18:30
@Wachten... Ik zie in je post eigenlijk 2 vragen:

1. De lamp pakt de payload van de change node niet op
2. De flow is te lang en onoverzichtelijk, hoe kan dit beter?

Ik denk dat het handig is om eerst naar punt 2 te kijken.

Volgens mij wil je het volgende:
a. een automatische scene instelling gebaseerd op dagdeel (dag, avond, nacht)
b. een handmatige scene-override voor de schoonmaakster
c. een handmatige scene-override voor "slapen"
d. lampen moeten langer aan blijven als de schoonmaakster er is
e. lampen moeten langer aan blijven als de dimmer is gebruikt (?)

Ik zie nu 5 scenenamen (dag, avond, nacht, schoonmaken, slapen) en 1 timeout/vertraging-instelling (ik ga er even vanuit dat je de vertraging voor elke ruimte hetzelfde wilt)
Ik zeg expres sceneNAAM omdat het alleen maar het naampje is waar ik op doel, dus zonder de instellingen zoals helderheid, kleur, etc.

Wat me in jouw geval het handigste lijkt is om onderscheid te maken tussen:
- De scene(naam)
- De lampinstellingen (kleur, helderheid, etc) die horen bij een bepaalde scene(naam) en ruimte (gang, woonkamer, etc), of is het voor elke ruimte gelijk?
- De vertraging

In je flow krijg je dan (versimpeld):
Trigger (bijv motion) -> Bepaal scenenaam -> Haal lampinstellingen op voor (scenenaam,ruimte) en zet deze klaar -> Zet lamp aan obv klaargezette lampinstellingen

Klopt dit een beetje en kun je dit nog volgen ;) ?

Kun je me soms nog wat over de andere ruimtes in je huis vertellen? Is dat allemaal Hue Color? Moeten ze allemaal reageren op dagdeel/schoonmaakster/slapen? Specifieke dingen?

[ Voor 5% gewijzigd door musicpixel op 14-09-2022 16:39 ]

Feel free to Buy me a coffee


  • Koepert
  • Registratie: Augustus 2013
  • Laatst online: 13-06 14:08
Hoe kan ik een json tijd converten naar localTime?

Output:

code:
1
time: "13:00:00Z"


dat wil ik omzetten naar local time.

Ik heb:

JSON:
1
2
3
var formatTime = new Date(msg.payload.MRData.RaceTable.Races[0].Qualifying.time);
var getStartTime = formatTime.toLocaleDateString('nl-NL', { hour: '2-digit', minute: '2-digit' });
var formatStartTime = getStartTime;


Maar dan krijg ik Invalid Date..
Pagina: 1 ... 26 ... 32 Laatste