• musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
Koepert schreef op woensdag 14 september 2022 @ 16:48:
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..
Op welke regel krijg je de foutmelding?
En wat zit er in msg.payload.MRData.RaceTable.Races[0].Qualifying.time?

Feel free to Buy me a coffee

In Qualifying.time zit:

(als object)

date: "2022-10-01"
time: "13:00:00Z"

Meer niet.

De hele flow is:


JSON:
1
[{"id":"d05c9641c7fb9427","type":"inject","z":"8339f3e4.d68d5","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":80,"y":3200,"wires":[["a0e2c08c5765a37f"]]},{"id":"a0e2c08c5765a37f","type":"http request","z":"8339f3e4.d68d5","name":"Formula1 info","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://ergast.com/api/f1/current/next.json","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":260,"y":3200,"wires":[["a2fe0fc8.095e1"]]},{"id":"a2fe0fc8.095e1","type":"json","z":"8339f3e4.d68d5","name":"Parse","property":"payload","action":"","pretty":false,"x":470,"y":3200,"wires":[["8f22f97ae917aeb5","16a5bde3a84c8056"]]},{"id":"8f22f97ae917aeb5","type":"function","z":"8339f3e4.d68d5","name":"Rework Parsed","func":"var formatRace = msg.payload.MRData.RaceTable.Races[0].raceName;\nvar formatCircuit = msg.payload.MRData.RaceTable.Races[0].Circuit.circuitName;\nvar formatDate = new Date(msg.payload.MRData.RaceTable.Races[0].Qualifying.date);\nvar getStartDate = formatDate.toLocaleDateString('nl-NL');\nvar formatStartDate = getStartDate;\nvar formatTime = new Date(msg.payload.MRData.RaceTable.Races[0].Qualifying.time);\nvar getStartTime = formatTime.toLocaleDateString('nl-NL', { hour: '2-digit', minute: '2-digit' });\nvar formatStartTime = getStartTime;\n\nmsg.payload = {\n    Race: formatRace,\n    Circuit: formatCircuit,\n    Date: formatStartDate,\n    Qualifying: formatStartTime\n}\nreturn msg.payload;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":680,"y":3200,"wires":[["ccd308a7cba89995"]]},{"id":"9a4ce2b8.47698","type":"debug","z":"8339f3e4.d68d5","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1070,"y":3200,"wires":[]},{"id":"ccd308a7cba89995","type":"template","z":"8339f3e4.d68d5","name":"Bericht F1","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":" De {{Race}} op het {{Circuit}} begint {{Date}} om {{Qualifying}}\n","output":"str","x":850,"y":3200,"wires":[["9a4ce2b8.47698"]]}]



De foutmelding zit in de output:

msg.payload:

code:
1
De Singapore Grand Prix op het Marina Bay Street Circuit begint 1-10-2022 om Invalid Date

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
@Koepert Heb vanavond niet meer dan 5 minuten, maar is het een idee om die date en time achter elkaar te plakken, met een T er tussen (weet niet zeker of die T nodig is)?
Dus dan krijg je "2022-09-30T13:00:00Z"
En die dan in de Date constructor te gooien?

[Voor 7% gewijzigd door musicpixel op 14-09-2022 19:29]

Feel free to Buy me a coffee

Klinkt goed..Maar dat is dan het aan elkaar plakken van de 2 results neem ik aan?

Heb er geen haast mee overigens ;)

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 20:32
musicpixel schreef op woensdag 14 september 2022 @ 16:31:
@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?
Bedankt voor je uitgebreide reactie.

Ik werd even getriggerd door onderstaand filmpje die recentelijk is gepost door The Hookup. er zijn namelijk veel dingen veranderd in Home Assistant, en hierdoor kun je flows best wat versimpelen. (iets wat ik al heel lang wil doen)



Om even terug te komen op jouw reactie:
Ik maak gebruik van een mix van lampen (Hue white, Hue white ambiance, Hue color en wat ikea lampen)
Nu zijn al die kleuropties leuk, maar ik doe hoofdzakelijk wat met de helderheid.

Wat ik wil?
Wat ik wil is dat lampen een bepaalde helderheid hebben tussen dag/avond/nacht. Dit moet voor alle lampen hetzelfde zijn in huis. Daarnaast wil ik ook met verschillende tijden werken (dus de tijd dat een lamp aan blijft staan.) Dit wordt bepaald door de input booleans "schoonmaakster" of "slapen".

Voor de helderheid zijn wat verschillende mogelijkheden en opties. Zo heb ik ook al even gekeken naar input_number, om verschillende waardes te genereren gedurende de dag (welke fungeert als brightness_pct). Echter voor de combinatie tijdsduur en helderheid loop ik een beetje vast.

brightness aan de hand van Input_number


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

Ik heb overigens diverse lampen van Hue (Color, White, White ambiance, Filament)

Alle lampen gebruiken natuurlijk andere waardes, zo heeft de ene een RGB functie, bij de Filament en Hue white kun je geen kelvin instellen, en bij de White ambiance weer wel.

Nu wil ik eigenlijk 1 code gebruiken die voor alle lampen van toepassing is? Is dit op een manier mogelijk en dat hij (waar hij de kelvin niet aan kan passen) gewoon alleen de helderheid aanpast?

[Voor 12% gewijzigd door Wachten... op 14-09-2022 20:16]

Als je dit kunt lezen, dan werkt mij Signature!


  • Wirehead
  • Registratie: December 2000
  • Laatst online: 20-03 17:40
Wachten... schreef op woensdag 14 september 2022 @ 19:45:
[...]


Bedankt voor je uitgebreide reactie.

Ik werd even getriggerd door onderstaand filmpje die recentelijk is gepost door The Hookup. er zijn namelijk veel dingen veranderd in Home Assistant, en hierdoor kun je flows best wat versimpelen. (iets wat ik al heel lang wil doen)

[YouTube: Node Red + Home Assistant 2022: Beginner, Advanced and EXPERT Motion Detection and Notifications]

Om even terug te komen op jouw reactie:
Ik maak gebruik van een mix van lampen (Hue white, Hue white ambiance, Hue color en wat ikea lampen)
Nu zijn al die kleuropties leuk, maar ik doe hoofdzakelijk wat met de helderheid.

Wat ik wil?
Wat ik wil is dat lampen een bepaalde helderheid hebben tussen dag/avond/nacht. Dit moet voor alle lampen hetzelfde zijn in huis. Daarnaast wil ik ook met verschillende tijden werken (dus de tijd dat een lamp aan blijft staan.) Dit wordt bepaald door de input booleans "schoonmaakster" of "slapen".

Voor de helderheid zijn wat verschillende mogelijkheden en opties. Zo heb ik ook al even gekeken naar input_number, om verschillende waardes te genereren gedurende de dag (welke fungeert als brightness_pct). Echter voor de combinatie tijdsduur en helderheid loop ik een beetje vast.

brightness aan de hand van Input_number
[Afbeelding]

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

Ik heb overigens diverse lampen van Hue (Color, White, White ambiance, Filament)

Alle lampen gebruiken natuurlijk andere waardes, zo heeft de ene een RGB functie, bij de Filament en Hue white kun je geen kelvin instellen, en bij de White ambiance weer wel.

Nu wil ik eigenlijk 1 code gebruiken die voor alle lampen van toepassing is? Is dit op een manier mogelijk en dat hij (waar hij de kelvin niet aan kan passen) gewoon alleen de helderheid aanpast?
Niet node-red, maar misschien is https://github.com/basnijholt/adaptive-lighting wel het ideale voor je?

Yamaha AX-397, Quadral Amun Mk.III, Technics SL-7, DIY PhonoPre, AT-152LP / 4.225kW Heckert Solar / SMA 3.0-1AV-41 / Kia e-Niro 64kWh First Edition

Wachten... schreef op woensdag 14 september 2022 @ 19:45:
[...]


Bedankt voor je uitgebreide reactie.

Ik werd even getriggerd door onderstaand filmpje die recentelijk is gepost door The Hookup. er zijn namelijk veel dingen veranderd in Home Assistant, en hierdoor kun je flows best wat versimpelen. (iets wat ik al heel lang wil doen)

[YouTube: Node Red + Home Assistant 2022: Beginner, Advanced and EXPERT Motion Detection and Notifications]

Om even terug te komen op jouw reactie:
Ik maak gebruik van een mix van lampen (Hue white, Hue white ambiance, Hue color en wat ikea lampen)
Nu zijn al die kleuropties leuk, maar ik doe hoofdzakelijk wat met de helderheid.

Wat ik wil?
Wat ik wil is dat lampen een bepaalde helderheid hebben tussen dag/avond/nacht. Dit moet voor alle lampen hetzelfde zijn in huis. Daarnaast wil ik ook met verschillende tijden werken (dus de tijd dat een lamp aan blijft staan.) Dit wordt bepaald door de input booleans "schoonmaakster" of "slapen".

Voor de helderheid zijn wat verschillende mogelijkheden en opties. Zo heb ik ook al even gekeken naar input_number, om verschillende waardes te genereren gedurende de dag (welke fungeert als brightness_pct). Echter voor de combinatie tijdsduur en helderheid loop ik een beetje vast.

brightness aan de hand van Input_number
[Afbeelding]

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

Ik heb overigens diverse lampen van Hue (Color, White, White ambiance, Filament)

Alle lampen gebruiken natuurlijk andere waardes, zo heeft de ene een RGB functie, bij de Filament en Hue white kun je geen kelvin instellen, en bij de White ambiance weer wel.

Nu wil ik eigenlijk 1 code gebruiken die voor alle lampen van toepassing is? Is dit op een manier mogelijk en dat hij (waar hij de kelvin niet aan kan passen) gewoon alleen de helderheid aanpast?
Maar wil je dan dat ALLE schakelaars ALLE lampen bedienen? of ook nog schakelaar 1 lampen A & B en schakelaar 2 lampen C & D? Maar dan allemaal met dezelfde output (Brightness X en duur Y)

Volgens mij kun je alle logica *ik niet, maar moet vast kunnen, in een function node kwijt of een template node en heb je alleen VOOR die node(s) diverse inputs en checks (de schakelaar-acties)

Of je moet een Events: All node kunnen gebruiken voor de gemene deler (Hue schakelaar events zeg maar)

Zo heb ik mijn deconz events wel afgevangen, maar die zijn simpel AAN + UIT met brightness meegegeven.

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 20:32
Dank je, maar jij hier zelf toevallig ook gebruik van?
Ik weet wel dat nagenoeg alles wat je in HA plaatst ook ook in NodeRed te zien krijgt, dus wellicht komt dit dus ook op een manier binnen bij NodeRed.
Koepert schreef op donderdag 15 september 2022 @ 09:37:
[...]


Maar wil je dan dat ALLE schakelaars ALLE lampen bedienen? of ook nog schakelaar 1 lampen A & B en schakelaar 2 lampen C & D? Maar dan allemaal met dezelfde output (Brightness X en duur Y)

Volgens mij kun je alle logica *ik niet, maar moet vast kunnen, in een function node kwijt of een template node en heb je alleen VOOR die node(s) diverse inputs en checks (de schakelaar-acties)

Of je moet een Events: All node kunnen gebruiken voor de gemene deler (Hue schakelaar events zeg maar)

Zo heb ik mijn deconz events wel afgevangen, maar die zijn simpel AAN + UIT met brightness meegegeven.
Nee iedere ruimte heeft zijn eigen schakelaar.

Waarom ik het hoofdzakelijk wil hebben, is als ik weer eens dingen verander of als er lampen bij komen, dat ik dan 1 soort node kan pakken/gebruiken die direct de juiste settings heeft. Het maakt het in dat opzicht een stuk overzichtelijker en makkelijker werken.

Ik werk nu al met change nodes voor de dagdelen. Ik heb het nu ook wel werkend voor de tijdsduur van lampen, maar zoals je kunt zien hieronder, is het een enorme wirwar aan nodes, voor iets relatiefs simpels.

Dus onderstaande nodes werken, maar het is alles behalve overzichtelijk.

code:
1
[{"id":"3b3d0d940c49d631","type":"tab","label":"Flow 2","disabled":false,"info":"","env":[]},{"id":"b353f6451076f6a5","type":"api-current-state","z":"3b3d0d940c49d631","name":"Schoonmaakster aanwezig?","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":200,"y":220,"wires":[["55812d4ecff2829c"],["46ec4ff5271bfa93"]]},{"id":"46ec4ff5271bfa93","type":"api-current-state","z":"3b3d0d940c49d631","name":"Dimmer handmatig ingedrukt?","server":"2065350e.86a40a","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.dimmer_overloop","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":210,"y":280,"wires":[["55812d4ecff2829c"],["6c90a9e12494f073"]]},{"id":"6c90a9e12494f073","type":"api-current-state","z":"3b3d0d940c49d631","name":"Slaapt iedereen?","server":"9b8bc642.fed038","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.slapen","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":330,"y":340,"wires":[["1b95b42dbdb9f13e"],["adc4bb37ef42cb13"]],"outputLabels":["aan","uit"]},{"id":"adc4bb37ef42cb13","type":"change","z":"3b3d0d940c49d631","name":"Vertraging 10 seconden","rules":[{"t":"set","p":"payload","pt":"msg","to":"standaard","tot":"str"},{"t":"set","p":"vertraging","pt":"flow","to":"5000","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":750,"y":340,"wires":[["b0fb2aa1ecd77847","c1edfaf5db86812e","15468dd8786d59a3"]]},{"id":"1b95b42dbdb9f13e","type":"change","z":"3b3d0d940c49d631","name":"Vertraging 30 seconden","rules":[{"t":"set","p":"payload","pt":"msg","to":"Iedereen slaapt","tot":"str"},{"t":"set","p":"vertraging","pt":"flow","to":"10000","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":750,"y":280,"wires":[["15468dd8786d59a3","c1edfaf5db86812e","b0fb2aa1ecd77847"]]},{"id":"55812d4ecff2829c","type":"change","z":"3b3d0d940c49d631","name":"Vertraging 3 minuten","rules":[{"t":"set","p":"payload","pt":"msg","to":"Schoonmaakster","tot":"str"},{"t":"set","p":"vertraging","pt":"flow","to":"15000","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":740,"y":220,"wires":[["15468dd8786d59a3","c1edfaf5db86812e","b0fb2aa1ecd77847"]]},{"id":"15468dd8786d59a3","type":"time-range-switch","z":"3b3d0d940c49d631","name":"tussen Sunrise & Sunset","lat":"52.12","lon":"4.65","startTime":"sunrise","endTime":"sunset","startOffset":0,"endOffset":0,"x":1070,"y":220,"wires":[["3f57502f9c04c0bb"],[]]},{"id":"c1edfaf5db86812e","type":"time-range-switch","z":"3b3d0d940c49d631","name":"tussen Sunset & 00:00","lat":"52.12","lon":"4.65","startTime":"sunset","endTime":"00:00","startOffset":0,"endOffset":0,"x":1060,"y":280,"wires":[["1bada4bef1551c6d"],[]]},{"id":"b0fb2aa1ecd77847","type":"time-range-switch","z":"3b3d0d940c49d631","name":"tussen 00:01 & Sunrise","lat":"52.12","lon":"4.65","startTime":"00:01","endTime":"sunrise","startOffset":0,"endOffset":0,"x":1070,"y":340,"wires":[["eb8cf9b8e3305dbc"],[]]},{"id":"3f57502f9c04c0bb","type":"change","z":"3b3d0d940c49d631","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"},{"t":"set","p":"rgb_color","pt":"global","to":"255,148,45","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1360,"y":220,"wires":[[]]},{"id":"1bada4bef1551c6d","type":"change","z":"3b3d0d940c49d631","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"},{"t":"set","p":"rgb_color","pt":"msg","to":"255,148,45","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1370,"y":280,"wires":[[]]},{"id":"955b9426fc5c86f9","type":"change","z":"3b3d0d940c49d631","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":1530,"y":340,"wires":[[]]},{"id":"eb8cf9b8e3305dbc","type":"api-current-state","z":"3b3d0d940c49d631","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":1310,"y":340,"wires":[["955b9426fc5c86f9"],["2bdfa1619758cb90"]]},{"id":"2bdfa1619758cb90","type":"change","z":"3b3d0d940c49d631","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":1530,"y":400,"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"}]


En ik weet dat er heel veel mogelijk is met de function node, maar ik heb totaal geen kaas gegeten van Javascript. Dus liever doe ik het zonder een function node.

Als je dit kunt lezen, dan werkt mij Signature!


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
Koepert schreef op woensdag 14 september 2022 @ 19:30:
Klinkt goed..Maar dat is dan het aan elkaar plakken van de 2 results neem ik aan?

Heb er geen haast mee overigens ;)
Ik denk dat de fout zit bij het maken van een Date object met een tijd zonder datum (want welke datum moet ie dan kiezen). Zodra je er dan de locale formatting op los laat gaat het mis.

In onderstaande code plak ik de ruwe datum en tijd achter elkaar met een T ertussen. de Date() constructor snapt dat formaat.

Vervolgens formatteer ik de datum en tijd los van elkaar gebaseerd op de gecombineerde datum/tijd in het Date object.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var formatRace = msg.payload.MRData.RaceTable.Races[0].raceName;
var formatCircuit = msg.payload.MRData.RaceTable.Races[0].Circuit.circuitName;

// get the raw date and time string values
var strDate = msg.payload.MRData.RaceTable.Races[0].Qualifying.date;
var strTime = msg.payload.MRData.RaceTable.Races[0].Qualifying.time;

// new Date() wants something like '2022-09-22T13:00:00Z'
// so combine the raw date and time with a T in between
var dtStartDateTime = new Date(strDate + 'T' + strTime);

// format date and time separately based on locale
var formatStartDate = dtStartDateTime.toLocaleDateString('nl-NL');
var formatStartTime = dtStartDateTime.toLocaleTimeString('nl-NL');

msg.payload = {
    Race: formatRace,
    Circuit: formatCircuit,
    Date: formatStartDate,
    Qualifying: formatStartTime
}
return msg.payload;

Feel free to Buy me a coffee

musicpixel schreef op donderdag 15 september 2022 @ 12:07:
[...]


Ik denk dat de fout zit bij het maken van een Date object met een tijd zonder datum (want welke datum moet ie dan kiezen). Zodra je er dan de locale formatting op los laat gaat het mis.

In onderstaande code plak ik de ruwe datum en tijd achter elkaar met een T ertussen. de Date() constructor snapt dat formaat.

Vervolgens formatteer ik de datum en tijd los van elkaar gebaseerd op de gecombineerde datum/tijd in het Date object.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var formatRace = msg.payload.MRData.RaceTable.Races[0].raceName;
var formatCircuit = msg.payload.MRData.RaceTable.Races[0].Circuit.circuitName;

// get the raw date and time string values
var strDate = msg.payload.MRData.RaceTable.Races[0].Qualifying.date;
var strTime = msg.payload.MRData.RaceTable.Races[0].Qualifying.time;

// new Date() wants something like '2022-09-22T13:00:00Z'
// so combine the raw date and time with a T in between
var dtStartDateTime = new Date(strDate + 'T' + strTime);

// format date and time separately based on locale
var formatStartDate = dtStartDateTime.toLocaleDateString('nl-NL');
var formatStartTime = dtStartDateTime.toLocaleTimeString('nl-NL');

msg.payload = {
    Race: formatRace,
    Circuit: formatCircuit,
    Date: formatStartDate,
    Qualifying: formatStartTime
}
return msg.payload;
Held! Dat werkt.. ik had t al bijna opgegeven.. Nu nog zorgen dat ik de output kan 'versturen' ..

Krijg bij ene call_service node nu de error:
Call-service error. extra keys not allowed @ data['0']

Terwijl er een template node tussen zit die plain text uitblaast en ook in de debuglog aantoonbaar dit uitwerpt:

De Singapore Grand Prix op het Marina Bay Street Circuit begint 1-10-2022 om 15:00:00

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
Koepert schreef op donderdag 15 september 2022 @ 12:27:
[...]


Held! Dat werkt.. ik had t al bijna opgegeven.. Nu nog zorgen dat ik de output kan 'versturen' ..

Krijg bij ene call_service node nu de error:
Call-service error. extra keys not allowed @ data['0']

Terwijl er een template node tussen zit die plain text uitblaast en ook in de debuglog aantoonbaar dit uitwerpt:

De Singapore Grand Prix op het Marina Bay Street Circuit begint 1-10-2022 om 15:00:00
Plaats even een debug node (volledige msg object) vlak voor de call service node om te zien wat de call service node in gaat. Kan me herinneren dat ik die melding ook wel eens heb gehad, maar weet niet meer precies wat de reden was.

Feel free to Buy me a coffee

musicpixel schreef op donderdag 15 september 2022 @ 12:31:
[...]


Plaats even een debug node (volledige msg object) vlak voor de call service node om te zien wat de call service node in gaat. Kan me herinneren dat ik die melding ook wel eens heb gehad, maar weet niet meer precies wat de reden was.
Dit gaat de call-service in (of komt uit de template)

code:
1
2
3
4
5
6
7
8
9
msg : Object
object
Race: "Singapore Grand Prix"
Circuit: "Marina Bay Street Circuit"
Date: "1-10-2022"
Time: "15:00:00"
_msgid: "af1b1f9ee8a6fb9e"
payload: string
 De Singapore Grand Prix op het Marina Bay Street Circuit begint 1-10-2022 om 15:00:00


Call Service:

code:
1
{"title":"F1","message":"{{payload}}"}

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
@Koepert En welke service roep je aan?
Kun je evt je flow delen?

Feel free to Buy me a coffee

@musicpixel

JSON:
1
[{"id":"d05c9641c7fb9427","type":"inject","z":"f8844ca4598abd5e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":100,"y":80,"wires":[["a0e2c08c5765a37f"]]},{"id":"a0e2c08c5765a37f","type":"http request","z":"f8844ca4598abd5e","name":"Formula1 Ergast","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://ergast.com/api/f1/current/next.json","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":260,"y":80,"wires":[["a2fe0fc8.095e1"]]},{"id":"a2fe0fc8.095e1","type":"json","z":"f8844ca4598abd5e","name":"Parse","property":"payload","action":"","pretty":false,"x":470,"y":80,"wires":[["16a5bde3a84c8056","b9cb9eb04a0cfe69","2e9da19d88cd46ee","b192ec3ef04de3d4","75be57b11ae31871","dd8247ffc47fa224","ab29dfe7897a9824"]]},{"id":"ab29dfe7897a9824","type":"function","z":"f8844ca4598abd5e","name":"Pixelhelp","func":"var formatRace = msg.payload.MRData.RaceTable.Races[0].raceName;\nvar formatCircuit = msg.payload.MRData.RaceTable.Races[0].Circuit.circuitName;\n\n// get the raw date and time string values\nvar strDate = msg.payload.MRData.RaceTable.Races[0].Qualifying.date;\nvar strTime = msg.payload.MRData.RaceTable.Races[0].Qualifying.time;\n\n// new Date() wants something like '2022-09-22T13:00:00Z'\n// so combine the raw date and time with a T in between\nvar dtStartDateTime = new Date(strDate + 'T' + strTime);\n\n// format date and time separately based on locale\nvar formatStartDate = dtStartDateTime.toLocaleDateString('nl-NL');\nvar formatStartTime = dtStartDateTime.toLocaleTimeString('nl-NL');\n\nmsg.payload = {\n    Race: formatRace,\n    Circuit: formatCircuit,\n    Date: formatStartDate,\n    Time: formatStartTime\n}\nreturn msg.payload;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":680,"y":40,"wires":[["ccd308a7cba89995","e93c8f9bdba6ead6","9a4ce2b8.47698"]]},{"id":"ccd308a7cba89995","type":"template","z":"f8844ca4598abd5e","name":"Bericht F1","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":" De {{Race}} op het {{Circuit}} begint {{Date}} om {{Time}}\n","output":"str","x":930,"y":40,"wires":[["c047ddf22d227baa"]]},{"id":"c047ddf22d227baa","type":"api-call-service","z":"f8844ca4598abd5e","name":"Formula1","server":"1d8e9a4c.b062a6","version":5,"debugenabled":false,"domain":"notify","service":"mobile_app_iphone_se_qper","areaId":[],"deviceId":[],"entityId":[],"data":"{\"title\":\"F1\",\"message\":\"{{payload}}\"}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1240,"y":40,"wires":[[]]},{"id":"9a4ce2b8.47698","type":"debug","z":"f8844ca4598abd5e","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1130,"y":80,"wires":[]},{"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"}]

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 20:32
Kijk dit is nou echt iets wat echt extreem makkelijk werkt. Ik was druk aan het zoeken of er zoiets was binnen NodeRed, maar dit werkt ook prima. Het voordeel is ook wel dat je het direct vanuit HA kunt instellen en dat je niet steeds in NodeRed hoeft te zijn als je iets aan wilt passen.

Nu moet ik dan alleen nog aan de slag met de verschillende tijden voor diverse input booleans. Even kijken of ik dit mooi vereenvoudigd krijg, zodat ik niet een wirwar aan onnodige nodes heb.

Alhoewel ik NodeRed nog steeds heel erg fijn vind, merk ik wel dat Home Asssistant echt steeds fijner werkt en NodeRed iets minder noodzakelijk wordt.

Als je dit kunt lezen, dan werkt mij Signature!


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
@Koepert



code:
1
[{"id":"dfcfd8d172c47dbd","type":"inject","z":"5f85acb0a81cb47f","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":100,"y":260,"wires":[["5f1382b37c68af6a"]]},{"id":"5f1382b37c68af6a","type":"http request","z":"5f85acb0a81cb47f","name":"Formula1 Ergast","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://ergast.com/api/f1/current/next.json","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":260,"y":260,"wires":[["8df898feb13be6db"]]},{"id":"8df898feb13be6db","type":"json","z":"5f85acb0a81cb47f","name":"Parse","property":"payload","action":"","pretty":false,"x":470,"y":260,"wires":[["ab29dfe7897a9824"]]},{"id":"ab29dfe7897a9824","type":"function","z":"5f85acb0a81cb47f","name":"Pixelhelp","func":"var formatRace = msg.payload.MRData.RaceTable.Races[0].raceName;\nvar formatCircuit = msg.payload.MRData.RaceTable.Races[0].Circuit.circuitName;\n\n// get the raw date and time string values\nvar strDate = msg.payload.MRData.RaceTable.Races[0].Qualifying.date;\nvar strTime = msg.payload.MRData.RaceTable.Races[0].Qualifying.time;\n\n// new Date() wants something like '2022-09-22T13:00:00Z'\n// so combine the raw date and time with a T in between\nvar dtStartDateTime = new Date(strDate + 'T' + strTime);\n\n// format date and time separately based on locale\nvar formatStartDate = dtStartDateTime.toLocaleDateString('nl-NL');\nvar formatStartTime = dtStartDateTime.toLocaleTimeString('nl-NL');\n\nmsg.payload = {\n    Race: formatRace,\n    Circuit: formatCircuit,\n    Date: formatStartDate,\n    Time: formatStartTime\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":420,"wires":[["4c0cb1198b15c198","cb3badbaf8a4130d"]]},{"id":"cb3badbaf8a4130d","type":"template","z":"5f85acb0a81cb47f","name":"Bericht F1","field":"message","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"De {{payload.Race}} op het {{payload.Circuit}} begint {{payload.Date}} om {{payload.Time}}\n","output":"str","x":610,"y":420,"wires":[["7696b556291c9660","83b1a316a8bc1a93"]]},{"id":"c047ddf22d227baa","type":"api-call-service","z":"5f85acb0a81cb47f","d":true,"name":"Formula1","server":"1d8e9a4c.b062a6","version":5,"debugenabled":false,"domain":"notify","service":"mobile_app_iphone_se_qper","areaId":[],"deviceId":[],"entityId":[],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1100,"y":420,"wires":[[]]},{"id":"7696b556291c9660","type":"debug","z":"5f85acb0a81cb47f","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":790,"y":520,"wires":[]},{"id":"4c0cb1198b15c198","type":"debug","z":"5f85acb0a81cb47f","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":470,"y":520,"wires":[]},{"id":"83b1a316a8bc1a93","type":"change","z":"5f85acb0a81cb47f","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{}","tot":"json"},{"t":"set","p":"payload.data.title","pt":"msg","to":"F1","tot":"str"},{"t":"set","p":"payload.data.message","pt":"msg","to":"message","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":860,"y":420,"wires":[["c047ddf22d227baa","431612b4658d6332"]]},{"id":"431612b4658d6332","type":"debug","z":"5f85acb0a81cb47f","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1050,"y":520,"wires":[]},{"id":"1d8e9a4c.b062a6","type":"server","name":"Home Assistant","version":1,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]


Moest even zoeken wat er aan de hand was ;-)

Allereerst: ik had er overheen gekeken, maar in je Pixelhelp node moet de laatste regel
return msg;
zijn en niet
return msg.payload;

Vervolgens heb ik in je BerichtF1 node de property veranderd naar msg.message (ipv msg.payload). De reden zie je in de volgende node:

Ik heb een change node toegevoegd. Daarin stel ik de payload eerst in op een leeg object (het was een string/tekst). Omdat ik payload dus leeg maak, moest ik msg.message gebruiken in de node hiervoor.
Vervolgens stel ik payload.data.title en payload.data.message in die de call service node nu kan gebruiken.
Payload kan dus een string bevatten, maar ook een object. Maar niet beide. En als ie dus een string/tekst bevat dan krijg je die foutmelding.



In de call service node heb ik nu het data veld leeg gemaakt, want ik lever dit al aan (mbv de change node) in msg.payload.data.title en .message.

Heb getest met mijn eigen telefoon en het werkt (je moet zelf nog even de call service node enablen)

Feel free to Buy me a coffee

musicpixel schreef op donderdag 15 september 2022 @ 13:33:
@Koepert

[Afbeelding]

code:
1
[{"id":"dfcfd8d172c47dbd","type":"inject","z":"5f85acb0a81cb47f","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":100,"y":260,"wires":[["5f1382b37c68af6a"]]},{"id":"5f1382b37c68af6a","type":"http request","z":"5f85acb0a81cb47f","name":"Formula1 Ergast","method":"GET","ret":"txt","paytoqs":"ignore","url":"http://ergast.com/api/f1/current/next.json","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":260,"y":260,"wires":[["8df898feb13be6db"]]},{"id":"8df898feb13be6db","type":"json","z":"5f85acb0a81cb47f","name":"Parse","property":"payload","action":"","pretty":false,"x":470,"y":260,"wires":[["ab29dfe7897a9824"]]},{"id":"ab29dfe7897a9824","type":"function","z":"5f85acb0a81cb47f","name":"Pixelhelp","func":"var formatRace = msg.payload.MRData.RaceTable.Races[0].raceName;\nvar formatCircuit = msg.payload.MRData.RaceTable.Races[0].Circuit.circuitName;\n\n// get the raw date and time string values\nvar strDate = msg.payload.MRData.RaceTable.Races[0].Qualifying.date;\nvar strTime = msg.payload.MRData.RaceTable.Races[0].Qualifying.time;\n\n// new Date() wants something like '2022-09-22T13:00:00Z'\n// so combine the raw date and time with a T in between\nvar dtStartDateTime = new Date(strDate + 'T' + strTime);\n\n// format date and time separately based on locale\nvar formatStartDate = dtStartDateTime.toLocaleDateString('nl-NL');\nvar formatStartTime = dtStartDateTime.toLocaleTimeString('nl-NL');\n\nmsg.payload = {\n    Race: formatRace,\n    Circuit: formatCircuit,\n    Date: formatStartDate,\n    Time: formatStartTime\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":420,"wires":[["4c0cb1198b15c198","cb3badbaf8a4130d"]]},{"id":"cb3badbaf8a4130d","type":"template","z":"5f85acb0a81cb47f","name":"Bericht F1","field":"message","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"De {{payload.Race}} op het {{payload.Circuit}} begint {{payload.Date}} om {{payload.Time}}\n","output":"str","x":610,"y":420,"wires":[["7696b556291c9660","83b1a316a8bc1a93"]]},{"id":"c047ddf22d227baa","type":"api-call-service","z":"5f85acb0a81cb47f","d":true,"name":"Formula1","server":"1d8e9a4c.b062a6","version":5,"debugenabled":false,"domain":"notify","service":"mobile_app_iphone_se_qper","areaId":[],"deviceId":[],"entityId":[],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1100,"y":420,"wires":[[]]},{"id":"7696b556291c9660","type":"debug","z":"5f85acb0a81cb47f","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":790,"y":520,"wires":[]},{"id":"4c0cb1198b15c198","type":"debug","z":"5f85acb0a81cb47f","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":470,"y":520,"wires":[]},{"id":"83b1a316a8bc1a93","type":"change","z":"5f85acb0a81cb47f","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{}","tot":"json"},{"t":"set","p":"payload.data.title","pt":"msg","to":"F1","tot":"str"},{"t":"set","p":"payload.data.message","pt":"msg","to":"message","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":860,"y":420,"wires":[["c047ddf22d227baa","431612b4658d6332"]]},{"id":"431612b4658d6332","type":"debug","z":"5f85acb0a81cb47f","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1050,"y":520,"wires":[]},{"id":"1d8e9a4c.b062a6","type":"server","name":"Home Assistant","version":1,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]


Moest even zoeken wat er aan de hand was ;-)

Allereerst: ik had er overheen gekeken, maar in je Pixelhelp node moet de laatste regel
return msg;
zijn en niet
return msg.payload;

Vervolgens heb ik in je BerichtF1 node de property veranderd naar msg.message (ipv msg.payload). De reden zie je in de volgende node:

Ik heb een change node toegevoegd. Daarin stel ik de payload eerst in op een leeg object (het was een string/tekst). Omdat ik payload dus leeg maak, moest ik msg.message gebruiken in de node hiervoor.
Vervolgens stel ik payload.data.title en payload.data.message in die de call service node nu kan gebruiken.
Payload kan dus een string bevatten, maar ook een object. Maar niet beide. En als ie dus een string/tekst bevat dan krijg je die foutmelding.

[Afbeelding]

In de call service node heb ik nu het data veld leeg gemaakt, want ik lever dit al aan (mbv de change node) in msg.payload.data.title en .message.

Heb getest met mijn eigen telefoon en het werkt (je moet zelf nog even de call service node enablen)
Werkt top! Nu had ik dit ook gebruikt om losse sensoren aan te maken (Q, FP1, FP2 etc, dus ik moet nog wat herschrijven, maar hier kan ik wat mee :) (Hoef niet overal melding van nl, maar wil wel een dash waar alles in staat)

  • Wirehead
  • Registratie: December 2000
  • Laatst online: 20-03 17:40
Wachten... schreef op donderdag 15 september 2022 @ 13:17:
[...]


Kijk dit is nou echt iets wat echt extreem makkelijk werkt. Ik was druk aan het zoeken of er zoiets was binnen NodeRed, maar dit werkt ook prima. Het voordeel is ook wel dat je het direct vanuit HA kunt instellen en dat je niet steeds in NodeRed hoeft te zijn als je iets aan wilt passen.

Nu moet ik dan alleen nog aan de slag met de verschillende tijden voor diverse input booleans. Even kijken of ik dit mooi vereenvoudigd krijg, zodat ik niet een wirwar aan onnodige nodes heb.

Alhoewel ik NodeRed nog steeds heel erg fijn vind, merk ik wel dat Home Asssistant echt steeds fijner werkt en NodeRed iets minder noodzakelijk wordt.
Ik gebruik het zelf ook ja. Dit sluit gewoon naadloos aan in Home Assistant, en behoeft weinig onderhoud. Dat heeft ook z'n voordelen. Ik probeer Home Assistant niet "te" bloated te krijgen met allerhande integrations, dus ik neem een eerder minimalistische aanpak.

Node-Red gebruik ik vooral als "glue" tussen verschillende technologien.

Yamaha AX-397, Quadral Amun Mk.III, Technics SL-7, DIY PhonoPre, AT-152LP / 4.225kW Heckert Solar / SMA 3.0-1AV-41 / Kia e-Niro 64kWh First Edition


  • denuz
  • Registratie: Augustus 2006
  • Laatst online: 20:27
@musicpixel Nice work! Ik gebruik niet vaak een function node, maar kan je niet al direct in de function node de tekst maken en enkel de Message tekst meegeven? Dan hoef je daarna ook geen overbodige info te verwijderen?

@Koepert Ondanks dat het leuk is om zelf te knutselen kan je ook gebruik maken van de een Calendar. Ik gebruik zelf google calendar integratie in HA. Vervolgens in lovelace het volgende:


Officiele kalender is beschikbaar op de F1 site;
https://calendar.google.c...a_1_Official_Calendar.ics
denuz schreef op donderdag 15 september 2022 @ 14:42:
@musicpixel Nice work! Ik gebruik niet vaak een function node, maar kan je niet al direct in de function node de tekst maken en enkel de Message tekst meegeven? Dan hoef je daarna ook geen overbodige info te verwijderen?

@Koepert Ondanks dat het leuk is om zelf te knutselen kan je ook gebruik maken van de een Calendar. Ik gebruik zelf google calendar integratie in HA. Vervolgens in lovelace het volgende:
[Afbeelding]

Officiele kalender is beschikbaar op de F1 site;
https://calendar.google.c...a_1_Official_Calendar.ics
Ja makkelijker..

Dit is leuker :)



Moet nu alleen nog een manier vinden de afbeelding dynamisch te maken.
De URL om de httprequest te doen heb ik, nu nog converten naar iets waar HA iets mee kan..
Iemand enig idee hoe dit te doen?


Ik inmiddels wel

- Output API call --> die levert een Country op (en meer)
- Function node --> Plak die country midden in de URL van F1 --> https://www.formla1.com/c....transform/7col/image.png --> Singapore vervang je dus elke keer
- Die gaat in een change node die het format als 1 URL naar een Http Request node --> Die vraagt de totale URL op.
- Die gooit het in een base64 node die er weer een conversie/encode op los laat.
- DIE gaat dan naar een image die er een buffer uit gooit, die als een file naar een locatie in HA gestuurd is
- In HA maak ik van die file een camera (local_file) die ik weer toon op mn dash..


Dit voelt alsof t makkelijker kan :P Maar @musicpixel nog bedankt voor de hulp!

[Voor 91% gewijzigd door Koepert op 15-09-2022 16:46]


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
@Wachten... Dat adaptive lighting dat @Wirehead noemde ziet er goed uit. Ik denk dat zoiets ook wel in Node Red te maken is, maar dat is wat geavanceerder en zal zeer waarschijnlijk een function node bevatten ;-) Mijn eerste gedachte als ik dit zou toepassen is om een scene te maken die "adaptive" heet, en dat dan de verlichting automatisch de kleur/helderheid/etc bepaalt adhv het moment op de dag. Maar laten we aan het begin beginnen.

Ik heb ook de laatste flow die je deelde even bekeken en dat wordt erg complex zo... laten we eens kijken of we stap voor stap dingen kunnen vereenvoudigen.

Ik ben er altijd een voorstander van om flows en subflows maar verantwoordelijk te maken voor 1 ding, ipv meerdere dingen door elkaar.

Laten we beginnen met een subflow voor de scenes in de gang. Ik wil bij het aanroepen van deze subflow kunnen opgeven welke scene moet worden ingesteld en de subflow voert dat dan uit. Hier zit dus niets in van vertraging of testen of de schoonmaakster er is.

Onderstaande flow (en subflow) is de eerste stap, hierna gaan we dit aanpassen en uitbreiden.



Met bovenstaande flow testen we de scenes. Er wordt steeds dezelfde subflow aangeroepen, maar ik heb daarbij wel steeds een andere waarde voor de scene_naam property opgegeven (en de naam van de node aangepast).



Dit is de subflow die wordt aangeroepen. Hierin zit een switch node die op basis van de meegegeven waarde voor de scene_naam property (aangegeven met een $) de lamp in de gang juist instelt.
Nu geef ik de waarden voor brightness, kelvin, etc nog hardcoded op, maar dit kan later worden aangepast naar een globale instelling indien gewenst.
In de toekomst zou je hier ook een "adaptive" scene kunnen toevoegen die de verlichting dynamisch aanpast op basis van de stand van de zon.

code:
1
[{"id":"b9bc2c06cf260df9","type":"subflow","name":"scene Gang","info":"","category":"","in":[{"x":140,"y":200,"wires":[{"id":"6fac888ce42e5117"}]}],"out":[{"x":1100,"y":200,"wires":[{"id":"9cc0e47c58bce228","port":0},{"id":"047423069a870dac","port":0},{"id":"8b4b136ef7d7afb4","port":0},{"id":"bab9387dc5234e86","port":0},{"id":"639310b55dd874ce","port":0},{"id":"943a2c44b2c9fa6a","port":0}]}],"env":[{"name":"scene_naam","type":"str","value":""}],"meta":{},"color":"#DDAA99"},{"id":"6fac888ce42e5117","type":"switch","z":"b9bc2c06cf260df9","name":"scene","property":"scene_naam","propertyType":"env","rules":[{"t":"eq","v":"uit","vt":"str"},{"t":"eq","v":"dag","vt":"str"},{"t":"eq","v":"avond","vt":"str"},{"t":"eq","v":"nacht","vt":"str"},{"t":"eq","v":"slapen","vt":"str"},{"t":"eq","v":"schoonmaken","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":7,"x":290,"y":200,"wires":[["943a2c44b2c9fa6a"],["9cc0e47c58bce228"],["047423069a870dac"],["8b4b136ef7d7afb4"],["bab9387dc5234e86"],["639310b55dd874ce"],["114e1bee7b708694"]]},{"id":"9cc0e47c58bce228","type":"api-call-service","z":"b9bc2c06cf260df9","name":"Lamp Gang op DAG","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.office_light_color_2"],"data":"{\"brightness_pct\":100,\"kelvin\":3000, \"transition\":0.5}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":640,"y":160,"wires":[[]]},{"id":"047423069a870dac","type":"api-call-service","z":"b9bc2c06cf260df9","name":"Lamp Gang op AVOND","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.office_light_color_2"],"data":"{\"brightness_pct\":60,\"kelvin\":2400, \"transition\":0.5}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":650,"y":200,"wires":[[]]},{"id":"8b4b136ef7d7afb4","type":"api-call-service","z":"b9bc2c06cf260df9","name":"Lamp Gang op NACHT","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.office_light_color_2"],"data":"{\"brightness_pct\":50,\"kelvin\":2100, \"transition\":0.5}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":650,"y":240,"wires":[[]]},{"id":"bab9387dc5234e86","type":"api-call-service","z":"b9bc2c06cf260df9","name":"Lamp Gang op SLAPEN","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.office_light_color_2"],"data":"{\"brightness_pct\":10,\"kelvin\":2100, \"transition\":0.5}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":650,"y":280,"wires":[[]]},{"id":"639310b55dd874ce","type":"api-call-service","z":"b9bc2c06cf260df9","name":"Lamp Gang op SCHOONMAKEN","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.office_light_color_2"],"data":"{\"brightness_pct\":10,\"kelvin\":2100, \"transition\":0.5}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":680,"y":320,"wires":[[]]},{"id":"943a2c44b2c9fa6a","type":"api-call-service","z":"b9bc2c06cf260df9","name":"Lamp Gang UIT","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.office_light_color_2"],"data":"{\"transition\":0.5}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":620,"y":120,"wires":[[]]},{"id":"114e1bee7b708694","type":"debug","z":"b9bc2c06cf260df9","name":"WARNING: Ongeldige scene","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":660,"y":400,"wires":[]},{"id":"4ed578a124fcd049","type":"comment","z":"b9bc2c06cf260df9","name":"Kijk ook eens onder de \"Edit properties\" knop.","info":"","x":190,"y":20,"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},{"id":"dac6dc5e4e3ea374","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"scene Gang UIT","env":[{"name":"scene_naam","value":"uit","type":"str"}],"x":740,"y":80,"wires":[[]]},{"id":"cc0faf56d11db385","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":80,"wires":[["dac6dc5e4e3ea374"]]},{"id":"ef1db64e0d189050","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"scene Gang DAG","env":[{"name":"scene_naam","value":"dag","type":"str"}],"x":740,"y":120,"wires":[[]]},{"id":"48062265930602a1","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":120,"wires":[["ef1db64e0d189050"]]},{"id":"caf71b2da3427cb9","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"scene Gang AVOND","env":[{"name":"scene_naam","value":"avond","type":"str"}],"x":750,"y":160,"wires":[[]]},{"id":"d16724a069632ffa","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":160,"wires":[["caf71b2da3427cb9"]]},{"id":"b92373a5f6dedcd0","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"scene Gang NACHT","env":[{"name":"scene_naam","value":"nacht","type":"str"}],"x":750,"y":200,"wires":[[]]},{"id":"a29d2cb4f8736368","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":200,"wires":[["b92373a5f6dedcd0"]]},{"id":"29c51d1d1b69d784","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"scene Gang SLAPEN","env":[{"name":"scene_naam","value":"slapen","type":"str"}],"x":760,"y":240,"wires":[[]]},{"id":"bef4651a45d5ac2f","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":240,"wires":[["29c51d1d1b69d784"]]},{"id":"8a883f42d7ad8bb8","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"scene Gang SCHOONMAKEN","env":[{"name":"scene_naam","value":"schoonmaken","type":"str"}],"x":790,"y":280,"wires":[[]]},{"id":"59f51bbf54c1c5c8","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":280,"wires":[["8a883f42d7ad8bb8"]]},{"id":"08387f7b3bc5f4c0","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"","x":730,"y":320,"wires":[[]]},{"id":"a8bf6d86deace138","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":320,"wires":[["08387f7b3bc5f4c0"]]},{"id":"41a3eacb5e317721","type":"comment","z":"72a8be9553974435","name":"Ongeldige scene","info":"","x":920,"y":320,"wires":[]}]


PS Ga het nog niet meteen helemaal integreren in je huidige flows, want ik ga in de volgende stap best wat wijzigingen maken...

Feel free to Buy me a coffee


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
denuz schreef op donderdag 15 september 2022 @ 14:42:
@musicpixel Nice work! Ik gebruik niet vaak een function node, maar kan je niet al direct in de function node de tekst maken en enkel de Message tekst meegeven? Dan hoef je daarna ook geen overbodige info te verwijderen?
Je zou inderdaad alles in de function node kunnen stoppen.

Alleen vind ik het fijn als die function node maar 1 ding doet: in dit geval van de ruwe data nette data maken.
De node daarna maakt dan van de nette data een samengestelde zin; weer 1 ding.
En vervolgens wordt de data klaargezet in het formaat dat de call service node wil hebben; ook weer 1 ding.

Ik heb overigens niet meer geprobeerd om direct die msg.message in de call service node te gebruiken, dus daar zou je nog mee kunnen experimenteren.

Feel free to Buy me a coffee


  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 20:32
musicpixel schreef op donderdag 15 september 2022 @ 16:33:
@Wachten... Dat adaptive lighting dat @Wirehead noemde ziet er goed uit. Ik denk dat zoiets ook wel in Node Red te maken is, maar dat is wat geavanceerder en zal zeer waarschijnlijk een function node bevatten ;-) Mijn eerste gedachte als ik dit zou toepassen is om een scene te maken die "adaptive" heet, en dat dan de verlichting automatisch de kleur/helderheid/etc bepaalt adhv het moment op de dag. Maar laten we aan het begin beginnen.

Ik heb ook de laatste flow die je deelde even bekeken en dat wordt erg complex zo... laten we eens kijken of we stap voor stap dingen kunnen vereenvoudigen.

Ik ben er altijd een voorstander van om flows en subflows maar verantwoordelijk te maken voor 1 ding, ipv meerdere dingen door elkaar.

Laten we beginnen met een subflow voor de scenes in de gang. Ik wil bij het aanroepen van deze subflow kunnen opgeven welke scene moet worden ingesteld en de subflow voert dat dan uit. Hier zit dus niets in van vertraging of testen of de schoonmaakster er is.

Onderstaande flow (en subflow) is de eerste stap, hierna gaan we dit aanpassen en uitbreiden.

[Afbeelding]

Met bovenstaande flow testen we de scenes. Er wordt steeds dezelfde subflow aangeroepen, maar ik heb daarbij wel steeds een andere waarde voor de scene_naam property opgegeven (en de naam van de node aangepast).

[Afbeelding]

Dit is de subflow die wordt aangeroepen. Hierin zit een switch node die op basis van de meegegeven waarde voor de scene_naam property (aangegeven met een $) de lamp in de gang juist instelt.
Nu geef ik de waarden voor brightness, kelvin, etc nog hardcoded op, maar dit kan later worden aangepast naar een globale instelling indien gewenst.
In de toekomst zou je hier ook een "adaptive" scene kunnen toevoegen die de verlichting dynamisch aanpast op basis van de stand van de zon.

code:
1
[{"id":"b9bc2c06cf260df9","type":"subflow","name":"scene Gang","info":"","category":"","in":[{"x":140,"y":200,"wires":[{"id":"6fac888ce42e5117"}]}],"out":[{"x":1100,"y":200,"wires":[{"id":"9cc0e47c58bce228","port":0},{"id":"047423069a870dac","port":0},{"id":"8b4b136ef7d7afb4","port":0},{"id":"bab9387dc5234e86","port":0},{"id":"639310b55dd874ce","port":0},{"id":"943a2c44b2c9fa6a","port":0}]}],"env":[{"name":"scene_naam","type":"str","value":""}],"meta":{},"color":"#DDAA99"},{"id":"6fac888ce42e5117","type":"switch","z":"b9bc2c06cf260df9","name":"scene","property":"scene_naam","propertyType":"env","rules":[{"t":"eq","v":"uit","vt":"str"},{"t":"eq","v":"dag","vt":"str"},{"t":"eq","v":"avond","vt":"str"},{"t":"eq","v":"nacht","vt":"str"},{"t":"eq","v":"slapen","vt":"str"},{"t":"eq","v":"schoonmaken","vt":"str"},{"t":"else"}],"checkall":"true","repair":false,"outputs":7,"x":290,"y":200,"wires":[["943a2c44b2c9fa6a"],["9cc0e47c58bce228"],["047423069a870dac"],["8b4b136ef7d7afb4"],["bab9387dc5234e86"],["639310b55dd874ce"],["114e1bee7b708694"]]},{"id":"9cc0e47c58bce228","type":"api-call-service","z":"b9bc2c06cf260df9","name":"Lamp Gang op DAG","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.office_light_color_2"],"data":"{\"brightness_pct\":100,\"kelvin\":3000, \"transition\":0.5}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":640,"y":160,"wires":[[]]},{"id":"047423069a870dac","type":"api-call-service","z":"b9bc2c06cf260df9","name":"Lamp Gang op AVOND","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.office_light_color_2"],"data":"{\"brightness_pct\":60,\"kelvin\":2400, \"transition\":0.5}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":650,"y":200,"wires":[[]]},{"id":"8b4b136ef7d7afb4","type":"api-call-service","z":"b9bc2c06cf260df9","name":"Lamp Gang op NACHT","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.office_light_color_2"],"data":"{\"brightness_pct\":50,\"kelvin\":2100, \"transition\":0.5}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":650,"y":240,"wires":[[]]},{"id":"bab9387dc5234e86","type":"api-call-service","z":"b9bc2c06cf260df9","name":"Lamp Gang op SLAPEN","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.office_light_color_2"],"data":"{\"brightness_pct\":10,\"kelvin\":2100, \"transition\":0.5}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":650,"y":280,"wires":[[]]},{"id":"639310b55dd874ce","type":"api-call-service","z":"b9bc2c06cf260df9","name":"Lamp Gang op SCHOONMAKEN","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.office_light_color_2"],"data":"{\"brightness_pct\":10,\"kelvin\":2100, \"transition\":0.5}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":680,"y":320,"wires":[[]]},{"id":"943a2c44b2c9fa6a","type":"api-call-service","z":"b9bc2c06cf260df9","name":"Lamp Gang UIT","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.office_light_color_2"],"data":"{\"transition\":0.5}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":620,"y":120,"wires":[[]]},{"id":"114e1bee7b708694","type":"debug","z":"b9bc2c06cf260df9","name":"WARNING: Ongeldige scene","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":660,"y":400,"wires":[]},{"id":"4ed578a124fcd049","type":"comment","z":"b9bc2c06cf260df9","name":"Kijk ook eens onder de \"Edit properties\" knop.","info":"","x":190,"y":20,"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},{"id":"dac6dc5e4e3ea374","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"scene Gang UIT","env":[{"name":"scene_naam","value":"uit","type":"str"}],"x":740,"y":80,"wires":[[]]},{"id":"cc0faf56d11db385","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":80,"wires":[["dac6dc5e4e3ea374"]]},{"id":"ef1db64e0d189050","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"scene Gang DAG","env":[{"name":"scene_naam","value":"dag","type":"str"}],"x":740,"y":120,"wires":[[]]},{"id":"48062265930602a1","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":120,"wires":[["ef1db64e0d189050"]]},{"id":"caf71b2da3427cb9","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"scene Gang AVOND","env":[{"name":"scene_naam","value":"avond","type":"str"}],"x":750,"y":160,"wires":[[]]},{"id":"d16724a069632ffa","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":160,"wires":[["caf71b2da3427cb9"]]},{"id":"b92373a5f6dedcd0","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"scene Gang NACHT","env":[{"name":"scene_naam","value":"nacht","type":"str"}],"x":750,"y":200,"wires":[[]]},{"id":"a29d2cb4f8736368","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":200,"wires":[["b92373a5f6dedcd0"]]},{"id":"29c51d1d1b69d784","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"scene Gang SLAPEN","env":[{"name":"scene_naam","value":"slapen","type":"str"}],"x":760,"y":240,"wires":[[]]},{"id":"bef4651a45d5ac2f","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":240,"wires":[["29c51d1d1b69d784"]]},{"id":"8a883f42d7ad8bb8","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"scene Gang SCHOONMAKEN","env":[{"name":"scene_naam","value":"schoonmaken","type":"str"}],"x":790,"y":280,"wires":[[]]},{"id":"59f51bbf54c1c5c8","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":280,"wires":[["8a883f42d7ad8bb8"]]},{"id":"08387f7b3bc5f4c0","type":"subflow:b9bc2c06cf260df9","z":"72a8be9553974435","name":"","x":730,"y":320,"wires":[[]]},{"id":"a8bf6d86deace138","type":"inject","z":"72a8be9553974435","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":380,"y":320,"wires":[["08387f7b3bc5f4c0"]]},{"id":"41a3eacb5e317721","type":"comment","z":"72a8be9553974435","name":"Ongeldige scene","info":"","x":920,"y":320,"wires":[]}]


PS Ga het nog niet meteen helemaal integreren in je huidige flows, want ik ga in de volgende stap best wat wijzigingen maken...
Bedankt voor het kijken naar de scenes. Ik moet alleen zeggen dat ik niet weet of ik het allemaal overzichtelijker vindt op deze manier. Misschien ben je wat anders van plan hoor, en zie ik het nu nog niet.

Op zich denk ik ook wel dat de adaptive lightning al redelijk doet wat ik wil. Deze regelt nu uit zichzelf de helderheid en warmte van alle lampen, en er zit ook een optie in om om niks met adaptive lightning te doen zodra je het handmatig overschrijft, dus dat is top. Ik moet nog wel even een paar kleine dingen fine-tunen qua helderheid en kelvin, maar het wordt nu later in de avond, en de lampen branden hier steeds minder fel en krijgen een warmere kleur. Dat is eigenlijk wat ik wil.

Het kan nog zijn dat ik op een gegeven moment iets meer hardcoded scenes zou willen voor bepaalde tijden maar voor nu voelt dit best wel goed.

Het enige wat ik nu dan nog wil is de verschillende tijden inladen. Nu heb ik een eerder flow die jij ooit gegeven hebt gebruikt en dit werkt in theorie. Het enige gekke is dat zodra ik hier een subflow van maak, hij de vertraging niet meer goed doorgeeft. Weet jij hoe dit komt?

Als ik namelijk de subflow eruit haal, dan worden de vertragingen wel goed ingeladen.






code:
1
[{"id":"5be02888a98955ad","type":"subflow","name":"Vertragingen","info":"","category":"","in":[{"x":100,"y":200,"wires":[{"id":"c72d14dce691e613"}]}],"out":[{"x":980,"y":260,"wires":[{"id":"48e26fb6907cf9f6","port":0},{"id":"0051ba2590c0d8d0","port":0},{"id":"21efabfdb1d9c874","port":0}]}],"env":[],"meta":{},"color":"#DDAA99"},{"id":"c72d14dce691e613","type":"api-current-state","z":"5be02888a98955ad","name":"Schoonmaakster aanwezig?","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":320,"y":200,"wires":[["48e26fb6907cf9f6"],["f262d7175e9b2770"]]},{"id":"f262d7175e9b2770","type":"api-current-state","z":"5be02888a98955ad","name":"Dimmer handmatig ingedrukt?","server":"2065350e.86a40a","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.dimmer_overloop","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":330,"y":260,"wires":[["48e26fb6907cf9f6"],["502818bc083c77d9"]]},{"id":"502818bc083c77d9","type":"api-current-state","z":"5be02888a98955ad","name":"Slaapt iedereen?","server":"9b8bc642.fed038","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.slapen","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":320,"wires":[["0051ba2590c0d8d0"],["21efabfdb1d9c874"]],"outputLabels":["aan","uit"]},{"id":"21efabfdb1d9c874","type":"change","z":"5be02888a98955ad","name":"Vertraging 10 seconden","rules":[{"t":"set","p":"payload","pt":"msg","to":"standaard","tot":"str"},{"t":"set","p":"vertraging","pt":"flow","to":"5000","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":750,"y":320,"wires":[[]]},{"id":"0051ba2590c0d8d0","type":"change","z":"5be02888a98955ad","name":"Vertraging 30 seconden","rules":[{"t":"set","p":"payload","pt":"msg","to":"Iedereen slaapt","tot":"str"},{"t":"set","p":"vertraging","pt":"flow","to":"10000","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":750,"y":260,"wires":[[]]},{"id":"48e26fb6907cf9f6","type":"change","z":"5be02888a98955ad","name":"Vertraging 3 minuten","rules":[{"t":"set","p":"payload","pt":"msg","to":"Schoonmaakster","tot":"str"},{"t":"set","p":"vertraging","pt":"flow","to":"15000","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":740,"y":200,"wires":[[]]},{"id":"6d253c879a6ef059","type":"comment","z":"5be02888a98955ad","name":"Informatie over tijd","info":"De vertraging die wordt ingesteld in de\nchangenode is in miliseconden\n\nDus 5 seconden wordt 5000","x":290,"y":140,"wires":[]},{"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"},{"t":"set","p":"rgb_color","pt":"global","to":"255,148,45","tot":"str"}],"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"},{"t":"set","p":"rgb_color","pt":"msg","to":"255,148,45","tot":"str"}],"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":"0fa9d0526e6116cd","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"80d4e2b5e90a7269","type":"server-state-changed","z":"0fa9d0526e6116cd","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":180,"y":260,"wires":[["24f6d5636dc8ec27","b9e475c086e84416"],["52b5af65b06ac2bb"]]},{"id":"0db0e22cdbd25e88","type":"comment","z":"0fa9d0526e6116cd","name":"Gang","info":"{\"brightness_pct\":{{global.hue_color_brightness_pct}}, \"transition\":{{global.hue_color_transition}}}","x":150,"y":220,"wires":[]},{"id":"dd748ce25dd5489f","type":"api-call-service","z":"0fa9d0526e6116cd","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":900,"y":220,"wires":[[]]},{"id":"4137ee9b24ee294b","type":"api-call-service","z":"0fa9d0526e6116cd","name":"Lamp uit","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.gang_group"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":840,"y":380,"wires":[[]]},{"id":"a71df7c3a5d66784","type":"trigger","z":"0fa9d0526e6116cd","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"1","extend":true,"overrideDelay":true,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":680,"y":380,"wires":[["4137ee9b24ee294b"]]},{"id":"52b5af65b06ac2bb","type":"change","z":"0fa9d0526e6116cd","name":"Stel vertraging in","rules":[{"t":"set","p":"delay","pt":"msg","to":"vertraging","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":380,"wires":[["a71df7c3a5d66784"]]},{"id":"24f6d5636dc8ec27","type":"change","z":"0fa9d0526e6116cd","name":"Reset trigger","rules":[{"t":"set","p":"reset","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":320,"wires":[["a71df7c3a5d66784"]]},{"id":"7aea3dd6b8ee8da8","type":"subflow:091a01d49b9ebc08","z":"0fa9d0526e6116cd","name":"Lampwaardes dagdeel","env":[],"x":700,"y":220,"wires":[["dd748ce25dd5489f","25eeabc756f0339c"]]},{"id":"65a8c3017d183d82","type":"subflow:5be02888a98955ad","z":"0fa9d0526e6116cd","name":"","x":490,"y":220,"wires":[["7aea3dd6b8ee8da8","2de1177a5b9a814f"]]},{"id":"25eeabc756f0339c","type":"debug","z":"0fa9d0526e6116cd","name":"Welke dagdeel is het","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":940,"y":140,"wires":[]},{"id":"2de1177a5b9a814f","type":"debug","z":"0fa9d0526e6116cd","name":"Welke vertraging wordt ingesteld","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":650,"y":140,"wires":[]},{"id":"b9e475c086e84416","type":"api-current-state","z":"0fa9d0526e6116cd","name":"lux onder 25","server":"9b8bc642.fed038","version":3,"outputs":2,"halt_if":"25","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":350,"y":140,"wires":[["65a8c3017d183d82"],[]]},{"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"}]

Als je dit kunt lezen, dan werkt mij Signature!


  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 26-03 18:32
Wachten... schreef op donderdag 15 september 2022 @ 21:04:
[...]


Bedankt voor het kijken naar de scenes. Ik moet alleen zeggen dat ik niet weet of ik het allemaal overzichtelijker vindt op deze manier. Misschien ben je wat anders van plan hoor, en zie ik het nu nog niet.

Op zich denk ik ook wel dat de adaptive lightning al redelijk doet wat ik wil. Deze regelt nu uit zichzelf de helderheid en warmte van alle lampen, en er zit ook een optie in om om niks met adaptive lightning te doen zodra je het handmatig overschrijft, dus dat is top. Ik moet nog wel even een paar kleine dingen fine-tunen qua helderheid en kelvin, maar het wordt nu later in de avond, en de lampen branden hier steeds minder fel en krijgen een warmere kleur. Dat is eigenlijk wat ik wil.

Het kan nog zijn dat ik op een gegeven moment iets meer hardcoded scenes zou willen voor bepaalde tijden maar voor nu voelt dit best wel goed.

Het enige wat ik nu dan nog wil is de verschillende tijden inladen. Nu heb ik een eerder flow die jij ooit gegeven hebt gebruikt en dit werkt in theorie. Het enige gekke is dat zodra ik hier een subflow van maak, hij de vertraging niet meer goed doorgeeft. Weet jij hoe dit komt?

Als ik namelijk de subflow eruit haal, dan worden de vertragingen wel goed ingeladen.

[Afbeelding]


[Afbeelding]

code:
1
[{"id":"5be02888a98955ad","type":"subflow","name":"Vertragingen","info":"","category":"","in":[{"x":100,"y":200,"wires":[{"id":"c72d14dce691e613"}]}],"out":[{"x":980,"y":260,"wires":[{"id":"48e26fb6907cf9f6","port":0},{"id":"0051ba2590c0d8d0","port":0},{"id":"21efabfdb1d9c874","port":0}]}],"env":[],"meta":{},"color":"#DDAA99"},{"id":"c72d14dce691e613","type":"api-current-state","z":"5be02888a98955ad","name":"Schoonmaakster aanwezig?","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":320,"y":200,"wires":[["48e26fb6907cf9f6"],["f262d7175e9b2770"]]},{"id":"f262d7175e9b2770","type":"api-current-state","z":"5be02888a98955ad","name":"Dimmer handmatig ingedrukt?","server":"2065350e.86a40a","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.dimmer_overloop","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":330,"y":260,"wires":[["48e26fb6907cf9f6"],["502818bc083c77d9"]]},{"id":"502818bc083c77d9","type":"api-current-state","z":"5be02888a98955ad","name":"Slaapt iedereen?","server":"9b8bc642.fed038","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.slapen","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":320,"wires":[["0051ba2590c0d8d0"],["21efabfdb1d9c874"]],"outputLabels":["aan","uit"]},{"id":"21efabfdb1d9c874","type":"change","z":"5be02888a98955ad","name":"Vertraging 10 seconden","rules":[{"t":"set","p":"payload","pt":"msg","to":"standaard","tot":"str"},{"t":"set","p":"vertraging","pt":"flow","to":"5000","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":750,"y":320,"wires":[[]]},{"id":"0051ba2590c0d8d0","type":"change","z":"5be02888a98955ad","name":"Vertraging 30 seconden","rules":[{"t":"set","p":"payload","pt":"msg","to":"Iedereen slaapt","tot":"str"},{"t":"set","p":"vertraging","pt":"flow","to":"10000","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":750,"y":260,"wires":[[]]},{"id":"48e26fb6907cf9f6","type":"change","z":"5be02888a98955ad","name":"Vertraging 3 minuten","rules":[{"t":"set","p":"payload","pt":"msg","to":"Schoonmaakster","tot":"str"},{"t":"set","p":"vertraging","pt":"flow","to":"15000","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":740,"y":200,"wires":[[]]},{"id":"6d253c879a6ef059","type":"comment","z":"5be02888a98955ad","name":"Informatie over tijd","info":"De vertraging die wordt ingesteld in de\nchangenode is in miliseconden\n\nDus 5 seconden wordt 5000","x":290,"y":140,"wires":[]},{"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"},{"t":"set","p":"rgb_color","pt":"global","to":"255,148,45","tot":"str"}],"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"},{"t":"set","p":"rgb_color","pt":"msg","to":"255,148,45","tot":"str"}],"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":"0fa9d0526e6116cd","type":"tab","label":"Flow 1","disabled":false,"info":"","env":[]},{"id":"80d4e2b5e90a7269","type":"server-state-changed","z":"0fa9d0526e6116cd","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":180,"y":260,"wires":[["24f6d5636dc8ec27","b9e475c086e84416"],["52b5af65b06ac2bb"]]},{"id":"0db0e22cdbd25e88","type":"comment","z":"0fa9d0526e6116cd","name":"Gang","info":"{\"brightness_pct\":{{global.hue_color_brightness_pct}}, \"transition\":{{global.hue_color_transition}}}","x":150,"y":220,"wires":[]},{"id":"dd748ce25dd5489f","type":"api-call-service","z":"0fa9d0526e6116cd","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":900,"y":220,"wires":[[]]},{"id":"4137ee9b24ee294b","type":"api-call-service","z":"0fa9d0526e6116cd","name":"Lamp uit","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.gang_group"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":840,"y":380,"wires":[[]]},{"id":"a71df7c3a5d66784","type":"trigger","z":"0fa9d0526e6116cd","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"1","extend":true,"overrideDelay":true,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":680,"y":380,"wires":[["4137ee9b24ee294b"]]},{"id":"52b5af65b06ac2bb","type":"change","z":"0fa9d0526e6116cd","name":"Stel vertraging in","rules":[{"t":"set","p":"delay","pt":"msg","to":"vertraging","tot":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":380,"wires":[["a71df7c3a5d66784"]]},{"id":"24f6d5636dc8ec27","type":"change","z":"0fa9d0526e6116cd","name":"Reset trigger","rules":[{"t":"set","p":"reset","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":320,"wires":[["a71df7c3a5d66784"]]},{"id":"7aea3dd6b8ee8da8","type":"subflow:091a01d49b9ebc08","z":"0fa9d0526e6116cd","name":"Lampwaardes dagdeel","env":[],"x":700,"y":220,"wires":[["dd748ce25dd5489f","25eeabc756f0339c"]]},{"id":"65a8c3017d183d82","type":"subflow:5be02888a98955ad","z":"0fa9d0526e6116cd","name":"","x":490,"y":220,"wires":[["7aea3dd6b8ee8da8","2de1177a5b9a814f"]]},{"id":"25eeabc756f0339c","type":"debug","z":"0fa9d0526e6116cd","name":"Welke dagdeel is het","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":940,"y":140,"wires":[]},{"id":"2de1177a5b9a814f","type":"debug","z":"0fa9d0526e6116cd","name":"Welke vertraging wordt ingesteld","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":650,"y":140,"wires":[]},{"id":"b9e475c086e84416","type":"api-current-state","z":"0fa9d0526e6116cd","name":"lux onder 25","server":"9b8bc642.fed038","version":3,"outputs":2,"halt_if":"25","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":350,"y":140,"wires":[["65a8c3017d183d82"],[]]},{"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"}]
Ik krijg het even niet voor elkaar om je flow te testen (krijg die time-range niet geinstalleerd, zit ineens met een te lage Node versie en ben dus even ff de installatie aan het updaten...)
desalniettemin... in plaats van een subflow op een hele aparte flow-tab te plaatsen kun je dit ook doen met de "link call" en link-in en link-out nodes: https://discourse.nodered...ur-with-link-call/53133/2

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
Wachten... schreef op donderdag 15 september 2022 @ 21:04:
[...]

Het enige wat ik nu dan nog wil is de verschillende tijden inladen. Nu heb ik een eerder flow die jij ooit gegeven hebt gebruikt en dit werkt in theorie. Het enige gekke is dat zodra ik hier een subflow van maak, hij de vertraging niet meer goed doorgeeft. Weet jij hoe dit komt?

Als ik namelijk de subflow eruit haal, dan worden de vertragingen wel goed ingeladen.
Daar ben ik ook eens tegenaan gelopen. Je zet nu de vertraging in een flow variabele. Een flow variabele is alleen beschikbaar binnen een flow. En een subflow wordt gezien als een aparte flow. Dus die flow variabele voor vertraging is buiten de subflow niet beschikbaar.

Gebruik je de vertragingen subflow alleen in de gang? Of ook op anderre plekken?

Feel free to Buy me a coffee


  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 20:32
musicpixel schreef op donderdag 15 september 2022 @ 21:36:
[...]


Daar ben ik ook eens tegenaan gelopen. Je zet nu de vertraging in een flow variabele. Een flow variabele is alleen beschikbaar binnen een flow. En een subflow wordt gezien als een aparte flow. Dus die flow variabele voor vertraging is buiten de subflow niet beschikbaar.

Gebruik je de vertragingen subflow alleen in de gang? Of ook op anderre plekken?
Die vertragingen zijn overal hetzelfde.

Als je dit kunt lezen, dan werkt mij Signature!


  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 26-03 18:32
Wachten... schreef op donderdag 15 september 2022 @ 21:47:
[...]


Die vertragingen zijn overal hetzelfde.
Een snelle fix is dan om ipv flow.variabele, hier overal een global.variabele van te maken

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
@Wachten... Het was goed om er even een nachtje over te slapen...

Ik bedacht me namelijk opeens dat je de Vertragingen subflow volgens mij beter in het "off" gedeelte van de bewegingssensor kunt zetten. Dat is tenslotte waar je m nodig hebt en dan hoef je helemaal niet meer met een flow of global variabele te werken.

Je subflow kun je in de huidige vorm echter niet hergebruiken voor andere kamers, want de dimmer_overloop staat er nu hardcoded in. En ik denk niet dat dat de dimmer is die je voor elke kamer wilt gebruiken.

Ik heb dus een paar aanpassingen gedaan.

1. Je zegt dat de vertragingen overal hetzelfde zijn. Ik ben daarom begonnen met het definieren van de vertragingen op een centrale plek, met een viertal config nodes. Deze worden automatisch uitgevoerd bij het opstarten. Ik zou ze op een centrale plek zetten, zoals een aparte flow-tab, zodat je ze makkelijk kunt terugvinden. Eventueel zou je hier ook input_numbers voor kunnen gebruiken zodat je ze in HA makkelijk kunt aanpassen (maar hoe vaak doe je dat).



code:
1
[{"id":"58ecefb8a5b9f6b0","type":"config","z":"0fa9d0526e6116cd","name":"Vertraging schoonmaakster","properties":[{"p":"VERTRAGING_SCHOONMAAKSTER","pt":"global","to":"15000","tot":"num"}],"active":true,"x":220,"y":60,"wires":[]},{"id":"db7278e8f8e3c073","type":"config","z":"0fa9d0526e6116cd","name":"Vertraging dimmer","properties":[{"p":"VERTRAGING_DIMMER","pt":"global","to":"15000","tot":"num"}],"active":true,"x":190,"y":100,"wires":[]},{"id":"60012743fbbe7f38","type":"config","z":"0fa9d0526e6116cd","name":"Vertraging slapen","properties":[{"p":"VERTRAGING_SLAPEN","pt":"global","to":"10000","tot":"num"}],"active":true,"x":190,"y":140,"wires":[]},{"id":"b8ed2ce5890d279a","type":"config","z":"0fa9d0526e6116cd","name":"Vertraging standaard","properties":[{"p":"VERTRAGING_STANDAARD","pt":"global","to":"5000","tot":"num"}],"active":true,"x":200,"y":180,"wires":[]}]


2. Dan de subflow.
Ik heb een property gedefinieerd waarin je de entity_id van de dimmer-input_boolean kunt zetten, en deze wordt dan dynamisch gecontroleerd.
Ook heb ik de hardcoded vertragingen vervangen door de globals in de config nodes.
Verder heb ik nog een extra vertraging-instelling toegevoegd voor de dimmer; deze was eerst gelijk aan die van de schoonmaakster.
Tenslotte zet de subflow niet meer de flow variabele, maar nu komt de vertraging waarde terecht in msg.vertraging



(Code subflow zit al bij code volgende flow)

3. De uiteindelijke flow
De subflow Vertragingen verplaatst naar de uit-kant van de sensor.
Omdat uit de Vertragingen subflow nu msg.vertraging komt ipv flow variable, ook de "Stel Vertraging in" aangepast.



En als je dus dubbelklikt op de node voor de subflow "Vertragingen" kun je daar de entity_id voor de dimmer instellen.




code:
1
[{"id":"5be02888a98955ad","type":"subflow","name":"Vertragingen","info":"","category":"","in":[{"x":100,"y":120,"wires":[{"id":"c72d14dce691e613"}]}],"out":[{"x":980,"y":280,"wires":[{"id":"48e26fb6907cf9f6","port":0},{"id":"0051ba2590c0d8d0","port":0},{"id":"21efabfdb1d9c874","port":0},{"id":"2e9534cb019498b5","port":0}]}],"env":[{"name":"dimmer","type":"str","value":""}],"meta":{},"color":"#DDAA99"},{"id":"c72d14dce691e613","type":"api-current-state","z":"5be02888a98955ad","name":"Schoonmaakster aanwezig?","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":320,"y":120,"wires":[["48e26fb6907cf9f6"],["76d27f85235de54e"]]},{"id":"f262d7175e9b2770","type":"api-current-state","z":"5be02888a98955ad","name":"Dimmer handmatig ingedrukt?","server":"2065350e.86a40a","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"{{dimmer}}","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":330,"y":320,"wires":[["2e9534cb019498b5"],["502818bc083c77d9"]]},{"id":"502818bc083c77d9","type":"api-current-state","z":"5be02888a98955ad","name":"Slaapt iedereen?","server":"9b8bc642.fed038","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.slapen","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":440,"wires":[["0051ba2590c0d8d0"],["21efabfdb1d9c874"]],"outputLabels":["aan","uit"]},{"id":"21efabfdb1d9c874","type":"change","z":"5be02888a98955ad","name":"Vertraging standaard","rules":[{"t":"set","p":"payload","pt":"msg","to":"standaard","tot":"str"},{"t":"set","p":"vertraging","pt":"msg","to":"VERTRAGING_STANDAARD","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":740,"y":520,"wires":[[]]},{"id":"0051ba2590c0d8d0","type":"change","z":"5be02888a98955ad","name":"Vertraging slapen","rules":[{"t":"set","p":"payload","pt":"msg","to":"Iedereen slaapt","tot":"str"},{"t":"set","p":"vertraging","pt":"msg","to":"VERTRAGING_SLAPEN","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":440,"wires":[[]]},{"id":"48e26fb6907cf9f6","type":"change","z":"5be02888a98955ad","name":"Vertraging schoonmaakster","rules":[{"t":"set","p":"payload","pt":"msg","to":"Schoonmaakster","tot":"str"},{"t":"set","p":"vertraging","pt":"msg","to":"VERTRAGING_SCHOONMAAKSTER","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":760,"y":120,"wires":[[]]},{"id":"6d253c879a6ef059","type":"comment","z":"5be02888a98955ad","name":"Informatie over tijd","info":"De vertraging die wordt ingesteld in de\nchangenode is in miliseconden\n\nDus 5 seconden wordt 5000","x":290,"y":60,"wires":[]},{"id":"2e9534cb019498b5","type":"change","z":"5be02888a98955ad","name":"Vertraging dimmer","rules":[{"t":"set","p":"payload","pt":"msg","to":"Dimmer","tot":"str"},{"t":"set","p":"vertraging","pt":"msg","to":"VERTRAGING_DIMMER","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":320,"wires":[[]]},{"id":"76d27f85235de54e","type":"change","z":"5be02888a98955ad","name":"Zet dimmer property in msg.dimmer","rules":[{"t":"set","p":"dimmer","pt":"msg","to":"dimmer","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":260,"wires":[["f262d7175e9b2770"]]},{"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"},{"t":"set","p":"rgb_color","pt":"global","to":"255,148,45","tot":"str"}],"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"},{"t":"set","p":"rgb_color","pt":"msg","to":"255,148,45","tot":"str"}],"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":1,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false,"cacheJson":true},{"id":"80d4e2b5e90a7269","type":"server-state-changed","z":"0fa9d0526e6116cd","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":160,"y":360,"wires":[["24f6d5636dc8ec27","b9e475c086e84416"],["45ba9eee12af59ed"]]},{"id":"0db0e22cdbd25e88","type":"comment","z":"0fa9d0526e6116cd","name":"Gang","info":"{\"brightness_pct\":{{global.hue_color_brightness_pct}}, \"transition\":{{global.hue_color_transition}}}","x":130,"y":320,"wires":[]},{"id":"dd748ce25dd5489f","type":"api-call-service","z":"0fa9d0526e6116cd","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":880,"y":320,"wires":[[]]},{"id":"4137ee9b24ee294b","type":"api-call-service","z":"0fa9d0526e6116cd","name":"Lamp uit","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.gang_group"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1000,"y":480,"wires":[[]]},{"id":"a71df7c3a5d66784","type":"trigger","z":"0fa9d0526e6116cd","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"1","extend":true,"overrideDelay":true,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":840,"y":480,"wires":[["4137ee9b24ee294b"]]},{"id":"52b5af65b06ac2bb","type":"change","z":"0fa9d0526e6116cd","name":"Stel vertraging in","rules":[{"t":"set","p":"delay","pt":"msg","to":"vertraging","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":480,"wires":[["a71df7c3a5d66784"]]},{"id":"24f6d5636dc8ec27","type":"change","z":"0fa9d0526e6116cd","name":"Reset trigger","rules":[{"t":"set","p":"reset","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":420,"wires":[["a71df7c3a5d66784"]]},{"id":"7aea3dd6b8ee8da8","type":"subflow:091a01d49b9ebc08","z":"0fa9d0526e6116cd","name":"Lampwaardes dagdeel","env":[],"x":680,"y":320,"wires":[["dd748ce25dd5489f","25eeabc756f0339c"]]},{"id":"25eeabc756f0339c","type":"debug","z":"0fa9d0526e6116cd","name":"Welke dagdeel is het","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":920,"y":240,"wires":[]},{"id":"b9e475c086e84416","type":"api-current-state","z":"0fa9d0526e6116cd","name":"lux onder 25","server":"9b8bc642.fed038","version":3,"outputs":2,"halt_if":"25","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":410,"y":320,"wires":[["7aea3dd6b8ee8da8"],[]]},{"id":"45ba9eee12af59ed","type":"subflow:5be02888a98955ad","z":"0fa9d0526e6116cd","name":"","env":[{"name":"dimmer","value":"input_boolean.dimmer_overloop","type":"str"}],"x":370,"y":480,"wires":[["52b5af65b06ac2bb","4f7e6dfafbbfb7b4"]]},{"id":"4f7e6dfafbbfb7b4","type":"debug","z":"0fa9d0526e6116cd","name":"Welke vertraging wordt ingesteld","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":630,"y":560,"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}]

(In bovenstaande code zit wel de subflow, maar niet de config nodes van hierboven, die moet je dus ook importeren)

PS Ik heb niet de hele flow kunnen testen want heb niet jouw bewegingssensor en lampen. Heb wel de subflow en nodes daarachter getest.

Hoop dat je hier iets aan hebt.

Feel free to Buy me a coffee


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
Step5 schreef op donderdag 15 september 2022 @ 22:55:
[...]

Een snelle fix is dan om ipv flow.variabele, hier overal een global.variabele van te maken
Ik probeer globals altijd zoveel mogelijk te vermijden. Het kan namelijk zomaar gebeuren dat je ergens in een flow een global instelt.
Vervolgens besluit je een nieuwe flow te maken en daarbij een stukje uit die oude flow te kopieren (met die global erin) en dan heb je dus opeens 2 flows die dezelfde global instellen.
Of je besluit in je nieuwe flow een global te gebruiken en de naam die je er voor bedenkt blijk je al in een andere flow ook te gebruiken, maar dat weet je niet meer.
Dan kun je dus hele rare dingen krijgen en het is dan bijna onmogelijk om uit te vinden waar het aan ligt.

Feel free to Buy me a coffee


  • Step5
  • Registratie: Oktober 2011
  • Laatst online: 26-03 18:32
musicpixel schreef op vrijdag 16 september 2022 @ 09:39:
[...]


Ik probeer globals altijd zoveel mogelijk te vermijden. Het kan namelijk zomaar gebeuren dat je ergens in een flow een global instelt.
Vervolgens besluit je een nieuwe flow te maken en daarbij een stukje uit die oude flow te kopieren (met die global erin) en dan heb je dus opeens 2 flows die dezelfde global instellen.
Of je besluit in je nieuwe flow een global te gebruiken en de naam die je er voor bedenkt blijk je al in een andere flow ook te gebruiken, maar dat weet je niet meer.
Dan kun je dus hele rare dingen krijgen en het is dan bijna onmogelijk om uit te vinden waar het aan ligt.
Helemaal mee eens hoor, ik zou ook zoals je in je voorbeeld geeft, in een subflow zoveel mogelijk met variabelen in de message werken.
Mooi uitgewerkt voorbeeld btw (y)

  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 20:32
musicpixel schreef op vrijdag 16 september 2022 @ 09:29:
@Wachten... Het was goed om er even een nachtje over te slapen...

Ik bedacht me namelijk opeens dat je de Vertragingen subflow volgens mij beter in het "off" gedeelte van de bewegingssensor kunt zetten. Dat is tenslotte waar je m nodig hebt en dan hoef je helemaal niet meer met een flow of global variabele te werken.

Je subflow kun je in de huidige vorm echter niet hergebruiken voor andere kamers, want de dimmer_overloop staat er nu hardcoded in. En ik denk niet dat dat de dimmer is die je voor elke kamer wilt gebruiken.

Ik heb dus een paar aanpassingen gedaan.

1. Je zegt dat de vertragingen overal hetzelfde zijn. Ik ben daarom begonnen met het definieren van de vertragingen op een centrale plek, met een viertal config nodes. Deze worden automatisch uitgevoerd bij het opstarten. Ik zou ze op een centrale plek zetten, zoals een aparte flow-tab, zodat je ze makkelijk kunt terugvinden. Eventueel zou je hier ook input_numbers voor kunnen gebruiken zodat je ze in HA makkelijk kunt aanpassen (maar hoe vaak doe je dat).

[Afbeelding]

code:
1
[{"id":"58ecefb8a5b9f6b0","type":"config","z":"0fa9d0526e6116cd","name":"Vertraging schoonmaakster","properties":[{"p":"VERTRAGING_SCHOONMAAKSTER","pt":"global","to":"15000","tot":"num"}],"active":true,"x":220,"y":60,"wires":[]},{"id":"db7278e8f8e3c073","type":"config","z":"0fa9d0526e6116cd","name":"Vertraging dimmer","properties":[{"p":"VERTRAGING_DIMMER","pt":"global","to":"15000","tot":"num"}],"active":true,"x":190,"y":100,"wires":[]},{"id":"60012743fbbe7f38","type":"config","z":"0fa9d0526e6116cd","name":"Vertraging slapen","properties":[{"p":"VERTRAGING_SLAPEN","pt":"global","to":"10000","tot":"num"}],"active":true,"x":190,"y":140,"wires":[]},{"id":"b8ed2ce5890d279a","type":"config","z":"0fa9d0526e6116cd","name":"Vertraging standaard","properties":[{"p":"VERTRAGING_STANDAARD","pt":"global","to":"5000","tot":"num"}],"active":true,"x":200,"y":180,"wires":[]}]


2. Dan de subflow.
Ik heb een property gedefinieerd waarin je de entity_id van de dimmer-input_boolean kunt zetten, en deze wordt dan dynamisch gecontroleerd.
Ook heb ik de hardcoded vertragingen vervangen door de globals in de config nodes.
Verder heb ik nog een extra vertraging-instelling toegevoegd voor de dimmer; deze was eerst gelijk aan die van de schoonmaakster.
Tenslotte zet de subflow niet meer de flow variabele, maar nu komt de vertraging waarde terecht in msg.vertraging

[Afbeelding]

(Code subflow zit al bij code volgende flow)

3. De uiteindelijke flow
De subflow Vertragingen verplaatst naar de uit-kant van de sensor.
Omdat uit de Vertragingen subflow nu msg.vertraging komt ipv flow variable, ook de "Stel Vertraging in" aangepast.

[Afbeelding]

En als je dus dubbelklikt op de node voor de subflow "Vertragingen" kun je daar de entity_id voor de dimmer instellen.

[Afbeelding]


code:
1
[{"id":"5be02888a98955ad","type":"subflow","name":"Vertragingen","info":"","category":"","in":[{"x":100,"y":120,"wires":[{"id":"c72d14dce691e613"}]}],"out":[{"x":980,"y":280,"wires":[{"id":"48e26fb6907cf9f6","port":0},{"id":"0051ba2590c0d8d0","port":0},{"id":"21efabfdb1d9c874","port":0},{"id":"2e9534cb019498b5","port":0}]}],"env":[{"name":"dimmer","type":"str","value":""}],"meta":{},"color":"#DDAA99"},{"id":"c72d14dce691e613","type":"api-current-state","z":"5be02888a98955ad","name":"Schoonmaakster aanwezig?","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":320,"y":120,"wires":[["48e26fb6907cf9f6"],["76d27f85235de54e"]]},{"id":"f262d7175e9b2770","type":"api-current-state","z":"5be02888a98955ad","name":"Dimmer handmatig ingedrukt?","server":"2065350e.86a40a","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"{{dimmer}}","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":330,"y":320,"wires":[["2e9534cb019498b5"],["502818bc083c77d9"]]},{"id":"502818bc083c77d9","type":"api-current-state","z":"5be02888a98955ad","name":"Slaapt iedereen?","server":"9b8bc642.fed038","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.slapen","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":440,"wires":[["0051ba2590c0d8d0"],["21efabfdb1d9c874"]],"outputLabels":["aan","uit"]},{"id":"21efabfdb1d9c874","type":"change","z":"5be02888a98955ad","name":"Vertraging standaard","rules":[{"t":"set","p":"payload","pt":"msg","to":"standaard","tot":"str"},{"t":"set","p":"vertraging","pt":"msg","to":"VERTRAGING_STANDAARD","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":740,"y":520,"wires":[[]]},{"id":"0051ba2590c0d8d0","type":"change","z":"5be02888a98955ad","name":"Vertraging slapen","rules":[{"t":"set","p":"payload","pt":"msg","to":"Iedereen slaapt","tot":"str"},{"t":"set","p":"vertraging","pt":"msg","to":"VERTRAGING_SLAPEN","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":440,"wires":[[]]},{"id":"48e26fb6907cf9f6","type":"change","z":"5be02888a98955ad","name":"Vertraging schoonmaakster","rules":[{"t":"set","p":"payload","pt":"msg","to":"Schoonmaakster","tot":"str"},{"t":"set","p":"vertraging","pt":"msg","to":"VERTRAGING_SCHOONMAAKSTER","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":760,"y":120,"wires":[[]]},{"id":"6d253c879a6ef059","type":"comment","z":"5be02888a98955ad","name":"Informatie over tijd","info":"De vertraging die wordt ingesteld in de\nchangenode is in miliseconden\n\nDus 5 seconden wordt 5000","x":290,"y":60,"wires":[]},{"id":"2e9534cb019498b5","type":"change","z":"5be02888a98955ad","name":"Vertraging dimmer","rules":[{"t":"set","p":"payload","pt":"msg","to":"Dimmer","tot":"str"},{"t":"set","p":"vertraging","pt":"msg","to":"VERTRAGING_DIMMER","tot":"global"}],"action":"","property":"","from":"","to":"","reg":false,"x":730,"y":320,"wires":[[]]},{"id":"76d27f85235de54e","type":"change","z":"5be02888a98955ad","name":"Zet dimmer property in msg.dimmer","rules":[{"t":"set","p":"dimmer","pt":"msg","to":"dimmer","tot":"env"}],"action":"","property":"","from":"","to":"","reg":false,"x":340,"y":260,"wires":[["f262d7175e9b2770"]]},{"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"},{"t":"set","p":"rgb_color","pt":"global","to":"255,148,45","tot":"str"}],"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"},{"t":"set","p":"rgb_color","pt":"msg","to":"255,148,45","tot":"str"}],"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":1,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":false,"cacheJson":true},{"id":"80d4e2b5e90a7269","type":"server-state-changed","z":"0fa9d0526e6116cd","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":160,"y":360,"wires":[["24f6d5636dc8ec27","b9e475c086e84416"],["45ba9eee12af59ed"]]},{"id":"0db0e22cdbd25e88","type":"comment","z":"0fa9d0526e6116cd","name":"Gang","info":"{\"brightness_pct\":{{global.hue_color_brightness_pct}}, \"transition\":{{global.hue_color_transition}}}","x":130,"y":320,"wires":[]},{"id":"dd748ce25dd5489f","type":"api-call-service","z":"0fa9d0526e6116cd","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":880,"y":320,"wires":[[]]},{"id":"4137ee9b24ee294b","type":"api-call-service","z":"0fa9d0526e6116cd","name":"Lamp uit","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.gang_group"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1000,"y":480,"wires":[[]]},{"id":"a71df7c3a5d66784","type":"trigger","z":"0fa9d0526e6116cd","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"1","extend":true,"overrideDelay":true,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":840,"y":480,"wires":[["4137ee9b24ee294b"]]},{"id":"52b5af65b06ac2bb","type":"change","z":"0fa9d0526e6116cd","name":"Stel vertraging in","rules":[{"t":"set","p":"delay","pt":"msg","to":"vertraging","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":610,"y":480,"wires":[["a71df7c3a5d66784"]]},{"id":"24f6d5636dc8ec27","type":"change","z":"0fa9d0526e6116cd","name":"Reset trigger","rules":[{"t":"set","p":"reset","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":490,"y":420,"wires":[["a71df7c3a5d66784"]]},{"id":"7aea3dd6b8ee8da8","type":"subflow:091a01d49b9ebc08","z":"0fa9d0526e6116cd","name":"Lampwaardes dagdeel","env":[],"x":680,"y":320,"wires":[["dd748ce25dd5489f","25eeabc756f0339c"]]},{"id":"25eeabc756f0339c","type":"debug","z":"0fa9d0526e6116cd","name":"Welke dagdeel is het","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":920,"y":240,"wires":[]},{"id":"b9e475c086e84416","type":"api-current-state","z":"0fa9d0526e6116cd","name":"lux onder 25","server":"9b8bc642.fed038","version":3,"outputs":2,"halt_if":"25","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":410,"y":320,"wires":[["7aea3dd6b8ee8da8"],[]]},{"id":"45ba9eee12af59ed","type":"subflow:5be02888a98955ad","z":"0fa9d0526e6116cd","name":"","env":[{"name":"dimmer","value":"input_boolean.dimmer_overloop","type":"str"}],"x":370,"y":480,"wires":[["52b5af65b06ac2bb","4f7e6dfafbbfb7b4"]]},{"id":"4f7e6dfafbbfb7b4","type":"debug","z":"0fa9d0526e6116cd","name":"Welke vertraging wordt ingesteld","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":630,"y":560,"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}]

(In bovenstaande code zit wel de subflow, maar niet de config nodes van hierboven, die moet je dus ook importeren)

PS Ik heb niet de hele flow kunnen testen want heb niet jouw bewegingssensor en lampen. Heb wel de subflow en nodes daarachter getest.

Hoop dat je hier iets aan hebt.
Dank voor je uitgebreide testen en reactie. Wat zijn er toch altijd weer een hoop opties en mogelijkheden zeg.

Ik principe werkt het wat je hebt gestuurd. Dus dank daarvoor. Er worden alleen een paar dingen gedaan die een beetje nieuw voor mij zijn, en die ik niet volledig snap.

Maar je hebt me overigens wel op een ander idee nog gebracht.
Zou ik ook in een change node gewoon verschillende vertraingen als Global in kunnen stellen en deze in kunnen laden zoals onderstaand.

Dan maakt het niet meer uit wat ik precies doe, maar kan ik gewoon bepalen welke tijd ik in wil laden in de vertraging. Echter als ik dit probeer, dan werkt dit niet. Wat doe ik hier fout?

Soms denk ik dat ik de change node begrijp, maar andere keren snap ik er weer helemaal niks van (als het niet werkt).

Want als ik het goed begrijp, dan is de msg.delay gewoon het stukje tekst "delay" wat wordt ingeladen in de debug node toch? En de global.vertraging_1min wordt ingeladen zodra deze actief wordt (ergens).


Als je dit kunt lezen, dan werkt mij Signature!


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
@Wachten... Als ik je post zo lees lijkt het alsof je het concept van variabelen en objecten niet helemaal begrijpt.

Vroeger met wiskunde had je bijvoorbeeld
code:
1
x = 4

x is hier de variabele en 4 de waarde die daar in zit.

Je zou het kunnen zien als een vakje met een naam (x) waar je een waarde (4) in kunt stoppen.

In programmeertalen en ook Node Red heb je ook objecten. Die zou je (simpel gesteld) kunnen zien als een verzameling variabelen (met evt waarden) die onderling ook een structuur hebben ten opzichte van elkaar (vakjes in vakjes in vakjes...).

Je heb dus onder andere een msg object, met daarin bijvoorbeeld een payload variabele, waar dan weer een waarde zit:
code:
1
msg.payload = "on"


Als je een debug node plaatst en je geeft daarbij op dat het hele msg object getoond moet worden, kun je zien hoe dat er uit ziet. De structuur daarvan kun je openklappen:



In bovenstaand voorbeeld heb je dus bijvoorbeeld
code:
1
msg.data.state

dat de waarde "on" heeft.
Dat is de waarde "on" (van het type string/tekst) in variabele state, in het object data, in het object msg.

Het msg object is het object dat steeds van node naar node wordt doorgegeven en alleen maar op dat moment kan worden opgevraagd of aangepast.

Het global object is een object dat binnen *elke* flow in Node Red beschikbaar is en kan worden aangepast door elke node in elke flow.

Het flow object lijkt op het global object, maar is alleen binnen de huidige flow beschikbaar, ipv overal/globaal.


In jouw voorbeeld van de change node stel je dus 3x achter elkaar de delay variabele binnen het msg object in. Aangezien de volgorde in de change node belangrijk is, zal alleen de laatste effect hebben. msg.delay wordt dus 2x overschreven door de volgende regel.

De reden dat het msg.delay heet is omdat de trigger node die er na komt verwacht dat er een delay variabele in het message object zit (msg.delay dus) waar die trigger node vervolgens gebruik van maakt om de delay in te stellen. Die trigger node kan maar één msg.delay tegelijk verwerken (nog sterker: je kunt er zelfs niet meer maken).

Een change node doet niet meer dan (op elke regel) de waarde van de ene variabele in een andere variabele stoppen, of een vaste waarde in een variabele stoppen.

Wat me ook opvalt in je change node is de naamgeving van je variabelen: global.vertraging_1min, etc
Die namen komen op mij vreemd over, want het lijkt of je de waarde die in de variabele zit, ook in de naam opneemt. Maar zodra je dan de inhoud van de variabele verandert, dan klopt de naam niet meer.
Dus eerst kan global.vertraging_1min de waarde 1 bevatten, maar als je dat wijzigt naar 3, dan slaat "vertraging_1min" nergens meer op ;-)
Logischer zou zijn om het dan global.vertraging te noemen. Of zoals in mijn voorbeeld global.VERTRAGING_SLAPEN (ik gebruik meestal hoofdletters om aan te geven dat het een instelling is (een constante, vaste waarde) en niet tussendoor in een of andere flow gewijzigd mag worden)


Stel dat je nu een flow hebt waar je een vertraging in hebt ingebouwd. Die vertraging heb je in eerste instantie vast op 1 minuut gezet. Vervolgens maak je een andere flow en daar heb je ook die vertraging van 1 minuut "hardcoded" in gezet.
Als je nu de vertraging van elke flow toch graag op 2 minuten wilt hebben, dan moet je dus elke flow opzoeken en handmatig overal de 1 in een 2 veranderen (en dan maar hopen dat je er niet eentje vergeet).
In zo'n geval is het dus handig om hier een variabele voor te gebruiken. Je stelt dan die variabele eerst in op 1:
code:
1
global.vertraging = 1

En in je flows maak je dan gebruik van global.vertraging i.p.v. het cijfer 1.
Maak je er later
code:
1
global.vertraging = 2

van, dan gebruiken al je flows waar je global.vertraging hebt ingevuld nu 2 minuten ipv 1.

Maakt dit het al wat duidelijker?

Feel free to Buy me a coffee


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
@Wachten... In plaats van die 4 losse config nodes, kun je ze ook samenvoegen tot 1 config node:

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



code:
1
[{"id":"c9e2e7c39e886d2a","type":"config","z":"0fa9d0526e6116cd","name":"Vertraging instellingen","properties":[{"p":"VERTRAGING_SCHOONMAAKSTER","pt":"global","to":"15000","tot":"num"},{"p":"VERTRAGING_DIMMER","pt":"global","to":"15000","tot":"num"},{"p":"VERTRAGING_SLAPEN","pt":"global","to":"10000","tot":"num"},{"p":"VERTRAGING_STANDAARD","pt":"global","to":"5000","tot":"num"}],"active":true,"x":180,"y":680,"wires":[]}]



Wat weer hetzelfde werkt als een eenmalige inject node (inject once after 0.1s) met een change node:

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



code:
1
[{"id":"c4a7c349c7a6a1a4","type":"change","z":"0fa9d0526e6116cd","name":"Vertraging instellingen","rules":[{"t":"set","p":"VERTRAGING_SCHOONMAAKSTER","pt":"global","to":"15000","tot":"num"},{"t":"set","p":"VERTRAGING_DIMMER","pt":"global","to":"15000","tot":"num"},{"t":"set","p":"VERTRAGING_SLAPEN","pt":"global","to":"10000","tot":"num"},{"t":"set","p":"VERTRAGING_STANDAARD","pt":"global","to":"5000","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":760,"wires":[[]]},{"id":"2d3e5a7ee7d95cd8","type":"inject","z":"0fa9d0526e6116cd","name":"","props":[],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","x":130,"y":760,"wires":[["c4a7c349c7a6a1a4"]]}]



Als je het op één van deze manieren doet, dan kun je eenvoudig de vertraging voor als de schoonmaakster er is op 1 plek wijzigen en al je flows die gebruik maken van global.VERTRAGING_SCHOONMAAKSTER maken dan gebruik van deze nieuwe waarde.

Een alternatief zou nog kunnen zijn om een input_number te gebruiken. Bijvoorbeeld input_number.VERTRAGING_SCHOONMAAKSTER. Dan kun je de vertraging instellen in HA zelf.
Al denk ik dat als de vertraging eenmaal goed staat ingesteld je er niet meer aan zult hoeven zitten.

Feel free to Buy me a coffee


  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 20:32
Ik had nog even een vraagje over adaptive lighting.

Sinds ik de Adaptive lightning hebt geactiveerd, lijken lampen een beetje een eigen leven te leiden.
Heb jij enig idee waar dit vandaan kan komen?

Wat geregeld gebeurd, is dat lampen circa 10 a 20 seconden aanstaan, en dat de lampen dan veranderen van kleur en brightness. Het gebeurd alleen zo vaak, dat het volgens mij niet komt omdat ik net in een overgangsfase zit (dus dat de stand van de zon anders is.)

Ik kom er maar niet achter waarom dit gebeurt.

[Voor 3% gewijzigd door Wachten... op 24-09-2022 16:51]

Als je dit kunt lezen, dan werkt mij Signature!


  • Wachten...
  • Registratie: Januari 2008
  • Laatst online: 20:32
musicpixel schreef op donderdag 15 september 2022 @ 21:36:
[...]


Daar ben ik ook eens tegenaan gelopen. Je zet nu de vertraging in een flow variabele. Een flow variabele is alleen beschikbaar binnen een flow. En een subflow wordt gezien als een aparte flow. Dus die flow variabele voor vertraging is buiten de subflow niet beschikbaar.

Gebruik je de vertragingen subflow alleen in de gang? Of ook op anderre plekken?
Hey,

Ik ben een beetje druk geweest vanwege een verbouwing, maar ben het nu weer een beetje aan het oppakken.

Ik had iets gelezen op de volgende pagina, om toch flow variabelen te kunnen laden.

https://nodered.org/docs/user-guide/context



Dus het lijkt erop dat je het toch wel in kunt laden. Ik snap alleen niet zo goed waar ik die parent nou moet plaatsen. Moet deze nou in de callservice node geplaatst worden?

Als je dit kunt lezen, dan werkt mij Signature!


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
@Wachten...
Je hebt een parent flow die een subflow aanroept. De flow variabelen die je in de aanroepende parent flow hebt kun je ook benaderen/gebruiken in de subflow. Niet andersom!

Jouw manier van flow variabelen instellen binnen de Vertragingen subflow kan dus alleen maar als je er eerst voor hebt gezorgd dat je deze flow variabelen (flow.vertraging) al hebt "gemaakt" in de parent flow.

Maar waarom zou je, want je kunt het gewoon zonder flow variabelen oplossen, wat te prefereren is.
Voor flow variabelen geldt namelijk hetzelfde (maar in iets mindere mate) als globals (zie mijn antwoord op Step5 een paar berichten terug). Het is moeilijker om flow-variabelen te debuggen dan een variabele/property in een msg object. En als je straks een andere parent flow er bij maakt waarin je je Vertragingen subflow wilt hergebruiken, dan moet je er ook aan denken om diezelfde flow variabele weer te maken in die parent flow, want anders werkt het niet.

Kortgezegd: gebruik global en flow variabelen alleen als je echt niet anders kunt.

Feel free to Buy me a coffee


  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 21:12

MikeyMan

Vidi, Vici, Veni

Ben weer verder aan het vechten met NodeRed... Inmiddels de inkomende API's redelijk voor elkaar. En het wegschrijven naar Domoticz is ook gelukt.

Nu nog de andere kant op...

Wil de Somfy API gebruiken om de zonneschermen te besturen.
Dit is de flow:
code:
1
[{"id":"2992b9632f5c059a","type":"function","z":"743a62898f598be4","name":"function 3","func":"//if(msg.payload.deviceURL === \"io://2017-8871-5701/3196925\")\n//{\n//    return msg;\n//}\n\nif (msg.payload.deviceURL === \"io://2017-8871-5701/3196925\") \n    {\n  msg.payload = { \"payload.states[6].value\" : 1 }\n \n  //  msg.topic = { \"domoticz/in\" }\n    return msg;\n    }\n\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":860,"y":880,"wires":[["a362b5889fdc4f10","cce7387cc943d907"]]},{"id":"a362b5889fdc4f10","type":"debug","z":"743a62898f598be4","name":"debug 14","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":900,"y":960,"wires":[]},{"id":"29a139536ed6b1ef","type":"debug","z":"743a62898f598be4","name":"debug 15","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1160,"y":960,"wires":[]},{"id":"5aeb9972cd6a305b","type":"http request","z":"743a62898f598be4","name":"Get Devices","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://10.0.0.161:8443/enduser-mobile-web/1/enduserAPI/setup/devices","tls":"d141c56ce52dcd5d","persist":true,"proxy":"","insecureHTTPParser":false,"authType":"bearer","senderr":false,"headers":[],"x":370,"y":880,"wires":[["8e165d0bf013c512","f016b663ddb6020d"]]},{"id":"bf6d70d01993fc95","type":"inject","z":"743a62898f598be4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":160,"y":880,"wires":[["5aeb9972cd6a305b"]]},{"id":"3974b47e95777b3b","type":"debug","z":"743a62898f598be4","name":"debug 16","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":660,"y":960,"wires":[]},{"id":"8e165d0bf013c512","type":"debug","z":"743a62898f598be4","name":"debug 17","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":400,"y":960,"wires":[]},{"id":"f016b663ddb6020d","type":"split","z":"743a62898f598be4","name":"","splt":"\\n","spltType":"str","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":630,"y":880,"wires":[["3974b47e95777b3b","2992b9632f5c059a"]]},{"id":"cce7387cc943d907","type":"http request","z":"743a62898f598be4","name":"Post test","method":"POST","ret":"obj","paytoqs":"ignore","url":"https://10.0.0.161:8443/enduser-mobile-web/1/enduserAPI/exec/apply","tls":"d141c56ce52dcd5d","persist":true,"proxy":"","insecureHTTPParser":false,"authType":"bearer","senderr":false,"headers":[],"x":1120,"y":880,"wires":[["29a139536ed6b1ef"]]},{"id":"d141c56ce52dcd5d","type":"tls-config","name":"TLS","cert":"","key":"","ca":"","certname":"","keyname":"","caname":"","servername":"","verifyservercert":false,"alpnprotocol":""}]


Dat resulteert in de volgende foutmelding, waar ik weinig wijs uit word.



Het zit denk ik meer in de logica van 'hoe stuur ik een API POST call' waar ik op stuk loop.

  • Wirehead
  • Registratie: December 2000
  • Laatst online: 20-03 17:40
Wachten... schreef op zaterdag 24 september 2022 @ 16:50:
[...]


Ik had nog even een vraagje over adaptive lighting.

Sinds ik de Adaptive lightning hebt geactiveerd, lijken lampen een beetje een eigen leven te leiden.
Heb jij enig idee waar dit vandaan kan komen?

Wat geregeld gebeurd, is dat lampen circa 10 a 20 seconden aanstaan, en dat de lampen dan veranderen van kleur en brightness. Het gebeurd alleen zo vaak, dat het volgens mij niet komt omdat ik net in een overgangsfase zit (dus dat de stand van de zon anders is.)

Ik kom er maar niet achter waarom dit gebeurt.
Ik liep eigenlijk tegen hetzelfde probleem aan - kwam er ook maar niet achter hoe dit kwam.

Ondertussen heb ik iets anders in elkaar gestoken met een mix van node-red en H-A:
https://community.home-as...e-lighting-nodered/269741

Daar schrijf ik 2 variabelen weg naar H-A: gain en (in mijn geval) mireds (1000000/Kelvin).

Daar heb ik dan 2 automations bij in HA:
-eentje met een template die bij service light turn-on de instellingen doorduwt naar de lamp
-eentje die bij aanpassing van gain *of* mireds, de aanpassingen doorduwt naar de lampen die aanstaan.

Dat lijkt mij veel minder false positives te geven, en lijkt zelfs responsiever dan de add-on.

Yamaha AX-397, Quadral Amun Mk.III, Technics SL-7, DIY PhonoPre, AT-152LP / 4.225kW Heckert Solar / SMA 3.0-1AV-41 / Kia e-Niro 64kWh First Edition


  • Tieled
  • Registratie: September 2021
  • Laatst online: 19:59
Was beetje nieuwsgierig hoe andere tweakers gelijkaardige problemen aanpakken..

Zijn er alternatieven in node-red waar ik (nog) geen zicht op heb? ik begin meer en meer volgende te zien in mijn flows

Dit is bijvoorbeeld een typisch zicht op mijn triggers, waar ik voorlopig eigenlijk geen fan van ben.

Iemand weet van een betere manier om business rules te modelleren in node-red? (DMN of andere)

[Voor 4% gewijzigd door Tieled op 07-10-2022 20:52]


  • Henri2500
  • Registratie: Mei 2022
  • Laatst online: 26-03 09:02
Een simpele vraag maar met misschien een moeilijk antwoord; ik probeer in NODE-RED via een http-request de JSON data te halen van de Youless. Nu is de Youless die ik wil benaderen beveiligd met een wachtwoord (geen username!).

Iemand die weet hoe ik dit wachtwoord met de request mee stuur?

  • D4NG3R
  • Registratie: Juli 2009
  • Laatst online: 20:42
Kan iemand mij hier vertellen hoe ik bepaalde triggers vanuit entiteiten alleen laat uitvoeren wanneer een andere entiteit onder/boven een bepaalde waarde zit? Ik los dit nu zelf op door simpelweg wat JS functies te schrijven, maar wil het eigenlijk zoveel mogelijk doen via het grafische gedeelte zodat ik familieleden er ook wegwijs in kan maken en mee kan laten spelen. :)

Heb een tweetal Ikea bewegingssensoren in gebruik om een lichtsnoer aan/uit te zetten, eentje daarvan hangt op de overloop waar het vrijwel altijd duister (genoeg) is. Die moet genegeerd worden zolang een lichtsensor elders in de woning niet onder een bepaalde waarde zit.

Beetje zonde om overdag het lichtsnoer in de gang aan te laten gaan terwijl er nog bakken licht binnen komt. :+

Komt d'r in, dan kö-j d’r oet kieken


  • iCrOn
  • Registratie: April 2002
  • Nu online
@D4NG3R Zou je kunnen doen met simple gate. Hiermee kan je een flow blokkeren. Laatst zelf gebruikt om een flow te blokkeren tussen bepaalde tijden.

  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 19:27

ThinkPad

Moderator Wonen & Mobiliteit
Henri2500 schreef op zaterdag 8 oktober 2022 @ 09:34:
Een simpele vraag maar met misschien een moeilijk antwoord; ik probeer in NODE-RED via een http-request de JSON data te halen van de Youless. Nu is de Youless die ik wil benaderen beveiligd met een wachtwoord (geen username!).

Iemand die weet hoe ik dit wachtwoord met de request mee stuur?
Hoe wordt dat wachtwoord naar de Youless gestuurd als je hem via de browser benadert? Wellicht kun je via F12 developer options in je browser naar de headers kijken en in het POST-/GET-request kijken welke optie je in Node-RED moet meegeven.

Gas besparen door CV-tuning | Elektriciteit besparen
Geen vragen via privébericht die ook via het forum kunnen a.u.b.


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
D4NG3R schreef op maandag 10 oktober 2022 @ 08:39:
Kan iemand mij hier vertellen hoe ik bepaalde triggers vanuit entiteiten alleen laat uitvoeren wanneer een andere entiteit onder/boven een bepaalde waarde zit? Ik los dit nu zelf op door simpelweg wat JS functies te schrijven, maar wil het eigenlijk zoveel mogelijk doen via het grafische gedeelte zodat ik familieleden er ook wegwijs in kan maken en mee kan laten spelen. :)

Heb een tweetal Ikea bewegingssensoren in gebruik om een lichtsnoer aan/uit te zetten, eentje daarvan hangt op de overloop waar het vrijwel altijd duister (genoeg) is. Die moet genegeerd worden zolang een lichtsensor elders in de woning niet onder een bepaalde waarde zit.

Beetje zonde om overdag het lichtsnoer in de gang aan te laten gaan terwijl er nog bakken licht binnen komt. :+
Ik neem aan dat je Node Red in combinatie met HA gebruikt?

Dan zou ik het aanzetten ruwweg zo doen (type node tussen haakjes):

motion trigger (events:state) -> get state andere lichtsensor (current state) -> lichtwaarde >= x? (switch) -> lichtsnoer aan (call service)

Feel free to Buy me a coffee


  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 21:12

MikeyMan

Vidi, Vici, Veni

Ik ben een poging aan het doen om de payload te veranderen met een change node.
Ik wil de originele payload gebruiken, met een aanvulling.



Dit werkt niet. Nu kan ik met een function node aan de gang. Maar zou het met een change node ook moeten werken?

  • Wolfram55
  • Registratie: December 2016
  • Laatst online: 20:17
Gebruik inmiddels een aantal jaren NodeRed.

Waar ik me erg aan stoor en waarschijnlijk een eenvoudige instelling is, althans dat hoop ik, is het snel verdwijnen van de debug meldingen. Verdwijnen nu (te) rap.

Hoe laat ik die langer staan?
Debug meldingen blijven staan zolang je sessie openblijft staan? Bij mij gaan ze echt niet weg, tenzij ik de pagina vernieuw of op de prullenbak druk :+

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
MikeyMan schreef op maandag 10 oktober 2022 @ 15:23:
Ik ben een poging aan het doen om de payload te veranderen met een change node.
Ik wil de originele payload gebruiken, met een aanvulling.

[Afbeelding]

Dit werkt niet. Nu kan ik met een function node aan de gang. Maar zou het met een change node ook moeten werken?
Ik kwam dit tegen:
https://discourse.nodered...ppend-to-change-node/2375

Denk dat dat doet wat jij wilt.

Feel free to Buy me a coffee


  • D4NG3R
  • Registratie: Juli 2009
  • Laatst online: 20:42
iCrOn schreef op maandag 10 oktober 2022 @ 13:48:
@D4NG3R Zou je kunnen doen met simple gate. Hiermee kan je een flow blokkeren. Laatst zelf gebruikt om een flow te blokkeren tussen bepaalde tijden.
musicpixel schreef op maandag 10 oktober 2022 @ 15:20:
[...]


Ik neem aan dat je Node Red in combinatie met HA gebruikt?

Dan zou ik het aanzetten ruwweg zo doen (type node tussen haakjes):

motion trigger (events:state) -> get state andere lichtsensor (current state) -> lichtwaarde >= x? (switch) -> lichtsnoer aan (call service)
Correct, en bedankt voor de reacties. Vanavond even een kijkje nemen. :)

Komt d'r in, dan kö-j d’r oet kieken


  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 21:12

MikeyMan

Vidi, Vici, Veni

Ah, J in plaats van tekst... Check, werkt!

Zo makkelijk als NodeRed zou moeten zijn, zo moeilijk is het toch vaak om de juiste weg te vinden :X

Meer algemene vraag; hoe formatteren jullie de output voor domoticz? Elke keer hardcoded?
Command, IDX en svalue/nvalue als string toevoegen in function node?
Das met grote hoeveelheden data wel een hoop hardcoded spul...

[Voor 22% gewijzigd door MikeyMan op 10-10-2022 16:09]


  • Wolfram55
  • Registratie: December 2016
  • Laatst online: 20:17
lolgast schreef op maandag 10 oktober 2022 @ 15:32:
Debug meldingen blijven staan zolang je sessie openblijft staan? Bij mij gaan ze echt niet weg, tenzij ik de pagina vernieuw of op de prullenbak druk :+
Ja dat was bij mij ook lang het geval tot ..... weet niet precies maar wel al lang ... 'n jaar ofzo ...

Recent een compleet nieuwe install gedaan van OS en alles geupgrade maar resultaat idem.
Lijkt me niet dat deze, als het een instelling is, meegenomen is met de export & import van de flow's.

Nodejs18
NodeRed 3

Zeer irritant !

  • Henri2500
  • Registratie: Mei 2022
  • Laatst online: 26-03 09:02
ThinkPad schreef op maandag 10 oktober 2022 @ 14:22:
[...]

Hoe wordt dat wachtwoord naar de Youless gestuurd als je hem via de browser benadert? Wellicht kun je via F12 developer options in je browser naar de headers kijken en in het POST-/GET-request kijken welke optie je in Node-RED moet meegeven.
Dat kan ik zeker; maar ik ben nog niet zo bekend met dit stukje communicatie dat ik weet waar ik in het F12 scherm nu moet zoeken?

  • iCrOn
  • Registratie: April 2002
  • Nu online
Inloggen op de Youless kan met
code:
1
ipyouless/L?w=wachtwoordhier


Je kan ook de Youless node voor node-red gebruiken. Alleen is hieraan de laatste update waardes per fase nog niet toegevoegd.

  • Henri2500
  • Registratie: Mei 2022
  • Laatst online: 26-03 09:02
iCrOn schreef op maandag 10 oktober 2022 @ 20:31:
Inloggen op de Youless kan met
code:
1
ipyouless/L?w=wachtwoordhier


Je kan ook de Youless node voor node-red gebruiken. Alleen is hieraan de laatste update waardes per fase nog niet toegevoegd.
Kijk! Een geprogrammeerde NODE! Fantastisch. Nu nog uitvogelen hoe ik de data daar weer uit trek. Mijn eigen Youless gaan gewoon via een http-request dus de output format lijkt me wat anders in dit geval. _/-\o_

  • iCrOn
  • Registratie: April 2002
  • Nu online
Henri2500 schreef op maandag 10 oktober 2022 @ 21:53:
[...]


Kijk! Een geprogrammeerde NODE! Fantastisch. Nu nog uitvogelen hoe ik de data daar weer uit trek. Mijn eigen Youless gaan gewoon via een http-request dus de output format lijkt me wat anders in dit geval. _/-\o_
Dat valt toch wel mee een inject node ervoor en een debug er achter en kijk wat er uit komt en dit weer sturen naar waar je het wilt hebben.


De voor geprogrammeerde node is helaas wel erg verouderd. Met de home assistant integratie krijg ik een stuk meer waarden er uit dan met deze node. Deze node vraagt de info van de youless dmv ipyouless/a?f=j/

  • Henri2500
  • Registratie: Mei 2022
  • Laatst online: 26-03 09:02
Zover kwam ik idd zojuist ook; totdat de Youless? besloot om Node-red geen toegang meer te geven in ik een foutmelding kreeg. Ik kreeg wel kort even data binnen :?

EDIT: Ow nu doet hij het wel weer. Dat is gek. Misschien gaat ie in tilt bij teveel requests?

Ik heb een alternatief op de integratie nodig omdat ik data aan het opvragen ben van 4 verschillende Youlessen. Twee daarvan draaien zonder wachtwoord op eigen netwerk en kan ik met een simpele http-request naar de ip/e en ip/f (JSON) leegtrekken.

Het lijkt er idd op dat deze Youless node niet zo uitgebreid is als een http-request. Toch maar die weg proberen :)

EDIT2:

Hoe kom ik nu van de hoofdpagina (met de URL hieronder) op de juiste JSON url?
ipyouless/L?w=wachtwoordhier

[Voor 8% gewijzigd door Henri2500 op 10-10-2022 22:29]


  • iCrOn
  • Registratie: April 2002
  • Nu online
Ik heb wel een voorbeeldje van de /f pagina. Heb er even alle ander switchen uitgehaald, maar dan krijg je een idee. Heb zelf alleen geen wachtwoord er op staan.
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
[
    {
        "id": "46349c070ce45d81",
        "type": "tab",
        "label": "Flow 5",
        "disabled": false,
        "info": "",
        "env": []
    },
    {
        "id": "3b85d94004be8701",
        "type": "http request",
        "z": "46349c070ce45d81",
        "name": "",
        "method": "GET",
        "ret": "obj",
        "paytoqs": "ignore",
        "url": "http://192.168.1.124/f?f=j",
        "tls": "",
        "persist": false,
        "proxy": "",
        "insecureHTTPParser": false,
        "authType": "",
        "senderr": false,
        "headers": [],
        "x": 390,
        "y": 200,
        "wires": [
            [
                "9ff0fb4cab39ba60"
            ]
        ]
    },
    {
        "id": "7cdb6ee41e66ee84",
        "type": "inject",
        "z": "46349c070ce45d81",
        "name": "post id",
        "props": [
            {
                "p": "payload"
            },
            {
                "p": "topic",
                "vt": "str"
            }
        ],
        "repeat": "10",
        "crontab": "",
        "once": false,
        "onceDelay": "",
        "topic": "",
        "payload": "",
        "payloadType": "str",
        "x": 100,
        "y": 60,
        "wires": [
            [
                "c41536ec9ba31d68"
            ]
        ]
    },
    {
        "id": "c41536ec9ba31d68",
        "type": "change",
        "z": "46349c070ce45d81",
        "name": "",
        "rules": [
            {
                "t": "set",
                "p": "post",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 230,
        "y": 140,
        "wires": [
            [
                "3b85d94004be8701"
            ]
        ]
    },
    {
        "id": "9ff0fb4cab39ba60",
        "type": "json",
        "z": "46349c070ce45d81",
        "name": "",
        "property": "payload",
        "action": "obj",
        "pretty": false,
        "x": 210,
        "y": 300,
        "wires": [
            [
                "a9ac40abd07c6f82"
            ]
        ]
    },
    {
        "id": "a9ac40abd07c6f82",
        "type": "change",
        "z": "46349c070ce45d81",
        "name": "",
        "rules": [
            {
                "t": "move",
                "p": "payload.v1",
                "pt": "msg",
                "to": "payload",
                "tot": "msg"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 320,
        "y": 380,
        "wires": [
            [
                "9e75ec34df6b0624"
            ]
        ]
    },
    {
        "id": "9e75ec34df6b0624",
        "type": "debug",
        "z": "46349c070ce45d81",
        "name": "debug 12",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "false",
        "statusVal": "",
        "statusType": "auto",
        "x": 420,
        "y": 460,
        "wires": []
    }
]

  • Henri2500
  • Registratie: Mei 2022
  • Laatst online: 26-03 09:02
Mm; ik kom op zich wel in de Youless met een wachtwoord meegeven, maar als ik bijvoorbeeld
IP/e?w=wachtwoord meegeef, dan kom ik niet op de JSON pagina, maar op hoofdpagina, en daar kan Node Red niks mee.

Not sure hoe ik dat kan oplossen

EDIT: vervolg: Node-Red/Youless/http-request: hoe bereik ik de JSONS?

[Voor 16% gewijzigd door Henri2500 op 11-10-2022 09:09]


  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 19:27

ThinkPad

Moderator Wonen & Mobiliteit
Ik denk dat het handiger is om even een eigen topic te openen over jouw situatie. Het gaat nu een beetje off-topic in dit centrale topic ;)

Gas besparen door CV-tuning | Elektriciteit besparen
Geen vragen via privébericht die ook via het forum kunnen a.u.b.


  • Wolfram55
  • Registratie: December 2016
  • Laatst online: 20:17
lolgast schreef op maandag 10 oktober 2022 @ 15:32:
Debug meldingen blijven staan zolang je sessie openblijft staan? Bij mij gaan ze echt niet weg, tenzij ik de pagina vernieuw of op de prullenbak druk :+
Gisteren wat aan het snuffelen geweest nog en dit staat er op https://nodered.org/docs/user-guide/editor/sidebar/debug
Note: the Debug sidebar can only show the 100 most recent messages. If the sidebar is currently showing a filtered list of messages, the hidden messages still count towards the 100 limit. If a flow has noisy Debug nodes, rather than filter them from the sidebar it can be better to disable them by clicking their button in the workspace.
Het kwartje viel niet gelijk maar er moesten vannacht nog wat (NodeRed) verbindingen aangemaakt worden ..... 8) .

Ik heb en aantal Xiaomi Themperatuur/humidity BLE nodes die normaal hun werk doen maar 'opeens' kwamen ook deze meldingen:

code:
1
"TypeError: Cannot read properties of undefined (reading 'Temperature')"


Deze vullen de debugbar vlot vol.
De function-node heeft de volgende code die dus wel werkt maar ook een TypeError geeft.
Wat is daar het probleem?

code:
1
var msg1 = { payload : msg.payload.ATC6087f0.Temperature };


code:
1
payload.ATC6087f0.Temperature
is het path uit de debugmessage.


Wat doe ik hier niet helemaal correct?
@Wolfram55 Daarvoor hebben we de hele functienode nodig denk ik. En eigenlijk ook de inputwaarde (dus dat wat die Xiaomi dingen uitspugen).

Het zou kunnen dat je een variabele probeert te beschrijven die al bestaat met een string waarde, waar je nu een integer in probeert te plaatsen.
Het zou kunnen dat *.Temperature niet meegezonden is met het bericht
Het zou kunnen dat je een berekening doet over een string
Enzovoort ;-)

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
@Wolfram55 Ik denk dat ATC6087f0 geen object is (undefined geeft ie aan). Heb je die goed gespeld? Hoofd/kleine letters ook?

Check anders van te voren even de inhoud van msg.payload om te zien wat daar in zit.

Feel free to Buy me a coffee


  • Wolfram55
  • Registratie: December 2016
  • Laatst online: 20:17
Had gehoopt dat het voldoende was 8)


Dit is uit de console van esp32/Tasmota :

code:
1
11:54:04.846 MQT: tele/tasmota-esp32/SENSOR = {"Time":"2022-10-11T11:54:04","ATC88e497":{"mac":"a4c13888e497","Temperature":19.1,"Humidity":63.3,"DewPoint":11.9,"Battery":73,"RSSI":-67},"ATCbf9155":{"mac":"a4c138bf9155","Temperature":19.2,"Humidity":63.0,"DewPoint":12.0,"Battery":79,"RSSI":-80}}


Zo ziet de flow er uit:




mqtt-node:




Function-node:

code:
1
2
3
4
5
var msg1 = { payload: msg.payload.ATC88e497.Temperature }
var msg2 = { payload: msg.payload.ATC88e497.Battery }
var msg3 = { payload: msg.payload.ATC88e497.Humidity }

return [msg1, msg2, msg3];
Daar zit in ieder geval geen sensor in met de naam 'ATC6087f0'. Bestaat die sensor nog?

  • Wolfram55
  • Registratie: December 2016
  • Laatst online: 20:17
Uhhh ....die mis ik (in mijn post) ... waar zie jij die 8) ?
Die verwerk ik met een andere esp32 om het overzichtelijker te houden en vanwege bereik bluetooth.

In de output van tasmota die ik hier deel heb ik er 2 nl : a4c13888e497 en de a4c138bf9155.

Ik heb in de post de a4c13888e497 uitgelicht maar er zijn er meerdere waaronder ook de ATC6087f0 ja.


Edit:

ah ... ik zie het.
Mijn vorige post.

(y)

[Voor 7% gewijzigd door Wolfram55 op 11-10-2022 13:29]


  • Wolfram55
  • Registratie: December 2016
  • Laatst online: 20:17
Console van tasmota staat ook vol met :

code:
1
11:53:47.186 M32 A4C13888E497: Payload length mismatch

  • Wolfram55
  • Registratie: December 2016
  • Laatst online: 20:17
En in de console ook :

code:
1
readOneSensor - already active reading 11


code:
1
readOneSensor - already active reading 3
@Wolfram55 Dan denk ik dat er bij Tasmota al iets niet goed gaat en die meldingen doorschieten naar de MQTT node (uiteraard)

  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 21:12

MikeyMan

Vidi, Vici, Veni

Goed, ben weer wat verder aan het prutsen. Zonder enige programmeer ervaring is dit toch een hele klus hoor...

Heb nu de volgende functie staan:
code:
1
2
3
4
5
6
7
8
9
10
if ( msg.payload.svalue1 > (msg.payload.svalue2-1) )
{
    msg.payload = { "command": "switchlight", "idx": 458, "switchcmd": "On" };
}

else if 
{
    msg.payload = { "command": "switchlight", "idx": 458, "switchcmd": "Off" };
}
return msg;


Echter, dit levert een error op, mbt de '-1' die ik heb toegevoegd...
Heb al tussen haakjes, kringelhaakjes, aanhalingstekens etc geprobeerd. Waarschijnlijk basic stupiditeit van mezelf. Maar vind hier maar eens een oplossing voor op google.

Een Javascript checker gaf alleen maar extra foutmeldingen.

[Voor 4% gewijzigd door MikeyMan op 17-10-2022 09:32]


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
MikeyMan schreef op maandag 17 oktober 2022 @ 09:20:
Goed, ben weer wat verder aan het prutsen. Zonder enige programmeer ervaring is dit toch een hele klus hoor...

Heb nu de volgende functie staan:
code:
1
2
3
4
5
6
7
8
9
10
if ( msg.payload.svalue1 > (msg.payload.svalue2-1) )
{
    msg.payload = { "command": "switchlight", "idx": 458, "switchcmd": "On" };
}

else if 
{
    msg.payload = { "command": "switchlight", "idx": 458, "switchcmd": "Off" };
}
return msg;


Echter, dit levert een error op, mbt de '-1' die ik heb toegevoegd...
Heb al tussen haakjes, kringelhaakjes, aanhalingstekens etc geprobeerd. Waarschijnlijk basic stupiditeit van mezelf. Maar vind hier maar eens een oplossing voor op google.

Een Javascript checker gaf alleen maar extra foutmeldingen.
Ik gebruik geen domoticz, maar in je vorige post had je het over nvalue en svalue. Ik vermoed dat nvalue een numerieke waarde is, en svalue een string (=tekst). Van een string variabele kun je niet zomaar 1 aftrekken. Je moet dan svalue eerst omzetten naar een getal.

Met een debug node kun je zien wat er precies deze functie(-node) in gaat. Als er quotes om de svalue staan is het een string (tekst).

Verder rijst bij mij de vraag of deze function wel nodig is, en of je het niet misschien grotendeels met standaard nodes (switch/change/etc) kunt oplossen.

En voor wat context: wat probeer je te automatiseren? Wat zijn die svalue1 en svalue2? Het lijkt verder alsof je een lamp aan/uit wilt schakelen?

Feel free to Buy me a coffee


  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 21:12

MikeyMan

Vidi, Vici, Veni

musicpixel schreef op maandag 17 oktober 2022 @ 15:50:
[...]


Ik gebruik geen domoticz, maar in je vorige post had je het over nvalue en svalue. Ik vermoed dat nvalue een numerieke waarde is, en svalue een string (=tekst). Van een string variabele kun je niet zomaar 1 aftrekken. Je moet dan svalue eerst omzetten naar een getal.

Met een debug node kun je zien wat er precies deze functie(-node) in gaat. Als er quotes om de svalue staan is het een string (tekst).

Verder rijst bij mij de vraag of deze function wel nodig is, en of je het niet misschien grotendeels met standaard nodes (switch/change/etc) kunt oplossen.

En voor wat context: wat probeer je te automatiseren? Wat zijn die svalue1 en svalue2? Het lijkt verder alsof je een lamp aan/uit wilt schakelen?
Ik probeer m'n warmtepomp te schakelen op basis van de gemeten binnentemperatuur. Maar eerste stap is een dummy schakelaar om te testen.
aar
Weet niet precies wat ik heb gedaan, maar inmiddels doet ie het:

code:
1
2
3
4
5
6
7
8
9
10
11
if (msg.payload.svalue1 <= (msg.payload.svalue2 -0.1 ) )
{
    msg.payload = { "command": "switchlight", "idx": 458, "switchcmd": "On" };
}

else if (msg.payload.svalue1 > (msg.payload.svalue2 +0.1 ))
{
    msg.payload = { "command": "switchlight", "idx": 458, "switchcmd": "Off" };
}

return msg;


else vs else if denk ik uiteindelijk.

Nu nog uitvinden hoe ik svalue1 uit de payload kan knutselen, er een rolling average van kan maken om vervolgens weer terug bij deze function node te krijgen :P

[Voor 6% gewijzigd door MikeyMan op 17-10-2022 15:54]


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
@MikeyMan Let wel op met je vergelijkingen. Als het strings/tekst zijn dan kan het lijken dat het werkt, maar gaat het in sommige gevallen toch mis.

Zie https://www.w3schools.com/js/js_comparisons.asp

En dan vooral onder het kopje "Comparing different types"

2 < 12 is true
"2" < "12" is false

De eerste is numeriek, de tweede zijn strings.
Het is dus belangrijk dat je de juiste datatypes gebruikt in je vergelijkingen.

Verder zou ik ook dit even lezen:
https://stackoverflow.com...-between-strings-and-numb

Een plusje kan dus twee verschillende dingen doen afhankelijk van het datatype dat gebruikt wordt.

De reden dat het nu werkt is waarschijnlijk niet de else vs else if, maar eerder een van de bovenstaande dingen.

Ik zou je function beginnen met iets van
code:
1
2
var value1 = parseInt(msg.payload.svalue1);
var value2 = parseInt(msg.payload.svalue2);


En dan verder in je function die value1 en value2 gebruiken ipv msg.payload.svaluex.

Gebruik parseFloat ipv parseInt als het geen gehele getallen zijn, maar met een decimale punt.

[Voor 17% gewijzigd door musicpixel op 17-10-2022 16:56]

Feel free to Buy me a coffee


  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 21:12

MikeyMan

Vidi, Vici, Veni

@musicpixel gaan we mee stoeien. Mag ik vragen waarom een variabele de voorkeur heeft boven de payload?

Probeer nu met de smooth functie de waardes wat af te vlakken. Zitten ook wat eigenaardigheden aan :)

[Voor 33% gewijzigd door MikeyMan op 17-10-2022 17:04]


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
MikeyMan schreef op maandag 17 oktober 2022 @ 17:02:
@musicpixel gaan we mee stoeien. Mag ik vragen waarom een variabele de voorkeur heeft boven de payload?
De reden van die variabele is dat je (door die parseInt) zeker weet dat je in de rest van je function met een getal te maken hebt en niet per ongeluk toch met een string, want dan gaan je vergelijkingen (mogelijk) mis (zonder dat je dat weet!)

En ik weet niet wat svalue1 en svalue2 voorstellen maar je kunt voor value1 en value2 eventueel ook wat betere namen kiezen.

[Voor 12% gewijzigd door musicpixel op 17-10-2022 17:22]

Feel free to Buy me a coffee


  • ThinkPad
  • Registratie: Juni 2005
  • Laatst online: 19:27

ThinkPad

Moderator Wonen & Mobiliteit
musicpixel schreef op maandag 17 oktober 2022 @ 15:50:
[...]
Met een debug node kun je zien wat er precies deze functie(-node) in gaat. Als er quotes om de svalue staan is het een string (tekst).
@MikeyMan
Handig truukje is om het volgende even in je function node te zetten
JavaScript:
1
node.warn(typeof jouwvariabele)
In de debug console zie je dan netjes 'string', 'number' etc.

De code in de function nodes is JavaScript, dus stel dat het wel een string is die je naar een number wil hebben (zodat je er mee kan rekenen) dan kun je daar weer op voortborduren ("javascript how to convert string to number"). Hint: zorg dat het aan het begin waar de waarde je flow binnenkomt goed wordt weggezet als number :)
Verder rijst bij mij de vraag of deze function wel nodig is, en of je het niet misschien grotendeels met standaard nodes (switch/change/etc) kunt oplossen.
Eens. Als je als beginner het programmeren niet machtig bent dan is dit een goede workaround. De flow wordt wat groter qua nodes, maar het is voor jezelf wel makkelijker debuggen (doordat je tussendoor debug nodes eraan kunt prikken) dan een hele lap code.

P.S. Als je stukken code plakt, gebruik hier op Tweakers dan code=javascript zodat je syntax-highlighting krijgt. Dat leest wat makkelijker.

[Voor 17% gewijzigd door ThinkPad op 17-10-2022 19:55]

Gas besparen door CV-tuning | Elektriciteit besparen
Geen vragen via privébericht die ook via het forum kunnen a.u.b.


  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 21:12

MikeyMan

Vidi, Vici, Veni

@ThinkPad dank voor de tips.

Data kwam goed binnen, maar met de smooth functie werd er uiteindelijk weer een nummer van een string gemaakt. Inmiddels werkt het volgens mij ongeveer zoals ik wil. Nu even een tijdje proefdraaien met de dummy switch alvorens ik de warmtepomp ermee aan ga sturen :)

Ik begreep idd ook al dat het JavaScript is. Maar gek genoeg komen er als je een code checker gebruikt dingen naar voren waar NodeRed dan weer over struikelt.

Langzamerhand komen we wel ergens ;)

  • Skit3000
  • Registratie: Mei 2005
  • Laatst online: 22-03 21:45
MikeyMan schreef op maandag 17 oktober 2022 @ 20:04:
@ThinkPad dank voor de tips.

Ik begreep idd ook al dat het JavaScript is. Maar gek genoeg komen er als je een code checker gebruikt dingen naar voren waar NodeRed dan weer over struikelt.
Node-RED gebruikt de Monaco Editor die ook door VS Code wordt gebruikt. Als je over een foutmelding heen gaat krijg je niet alleen een aanwijzing waarom de editor denkt dat dit fout is, maar door op het gloeilamp-icoontje te klikken krijg je ook de optie om dat type foutmeldingen te negeren:


  • BazemanKM
  • Registratie: Januari 2008
  • Laatst online: 20:28
Hallo,

Wie kan mij helpen om de IKEA STARKVIND luchtververser helemaal te laten werken met Domoticz?

Via Zigbee2MQTT verbinding en wordt herkend in Domoticz door de auto discovery.

Alleen aan/uit en de standen komen niet automatisch in Domoticz.

Ik zat dus te denken aan een Node-RED flow, die de uitgaande Domoticz MQTT commando over zet in het het juiste Zigbee2MQTT commando.
To change the mode publish a message to topic zigbee2mqtt/FRIENDLY_NAME/set with payload {"fan_mode": VALUE} where VALUE can be: off, auto, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Domoticz stuurt dus een msg.payload.svalue1 uit en die zijn: 0 t/m 100, dus 0 = off, 10 = auto, 20 =1 enz t/m 9 = 100 en dat moet dus omgezet en dan naar Zigbee2MQTT gestuurd.

Wie kan me aan een flow helpen?

  • etienne001
  • Registratie: September 2005
  • Laatst online: 12:50
Ik zit me hier te stoeien met de verlichting op basis van sturing alarmsysteem, luxmeter en of er iemand thuis is.
Oké de sturing met het alarmsysteem had ik al i.c.m. de luxmeter, dat verliep vlekkenloos.
Nu wil ik graag de aan/afwezig koppelen zodat wanneer het alarmsysteem aan staat en er niemand thuis is de verlichting aan gaat.
Dit gaat met de tot nu toe gebouwde schakeling goed.
Wat er fout gaat is het uitzetten van de verlichting op het moment dat ik naar bed ga en het alarmsysteem inschakel.
Logisch omdat ik niet weet hoe ik die koppeling kan maken 8)7

Iemand een schopje in de goede richting toevallig?


Edit, een stapje verder, ik heb tussen de koppeling alarmsysteem en iemand thuis even een delay gezet.

Wat er nu gebeurd is dat de verlichting uit gaat als het alarm wordt ingeschakeld, maar na de delay gaat de verlichting weer aan 8)7
En dat terwijl we thuis zijn, kan het zo zijn dat de switch current state: sensor.someone_home reageerd op iets anders?

code:
1
[{"id":"3b355f48.82cf1","type":"tab","label":"alarmsysteem aan/uit","disabled":false,"info":""},{"id":"eaf96f32.7ffb4","type":"api-current-state","z":"3b355f48.82cf1","name":"Alarmsysteem aan/uit","server":"1942d160.7834af","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"binary_sensor.openclose_17","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","x":480,"y":180,"wires":[["4abbd76ac99e0cf3","1c8cd4f08f791afa","5cbbbbc60f3a2602","8724c7d3f3647bb4","0a05a9e4a7f35ce0","6e34869de9651e42","47df24d553c90943","fc344614.057c88","ce5a6cc30f230868"],["b9c120aa.38b24"]]},{"id":"b9c120aa.38b24","type":"api-current-state","z":"3b355f48.82cf1","name":"Lux lager dan 50","server":"1942d160.7834af","version":3,"outputs":2,"halt_if":"50","halt_if_type":"num","halt_if_compare":"lt","entity_id":"sensor.lightlevel_16","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","x":530,"y":480,"wires":[["60bc0e7f.bbb44","af36051119e6d6c3","d9a22015ad34cfb8","7a687cc21645eb1b","38557710dd701dfb","d3938466b06419c3","b45be8bef2562295"],["fc344614.057c88","47df24d553c90943","6e34869de9651e42","0a05a9e4a7f35ce0","8724c7d3f3647bb4","5cbbbbc60f3a2602","1c8cd4f08f791afa"]]},{"id":"7dc00187.1f396","type":"server-state-changed","z":"3b355f48.82cf1","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":110,"y":120,"wires":[["eaf96f32.7ffb4"]]},{"id":"568caea7.56cb7","type":"server-state-changed","z":"3b355f48.82cf1","name":"Lux meter","server":"1942d160.7834af","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.lightlevel_16","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":120,"y":280,"wires":[["eaf96f32.7ffb4","847bec87470eed6f"]]},{"id":"60bc0e7f.bbb44","type":"api-call-service","z":"3b355f48.82cf1","name":"Eettafel aan 40%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.dimmable_light_11"],"data":"{\"brightness_pct\":40}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1010,"y":720,"wires":[[]]},{"id":"fc344614.057c88","type":"api-call-service","z":"3b355f48.82cf1","name":"Eettafel uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.dimmable_light_11"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":990,"y":300,"wires":[[]]},{"id":"af36051119e6d6c3","type":"api-call-service","z":"3b355f48.82cf1","name":"Lamp bank aan 50%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp"],"data":"{\"brightness_pct\":50}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1020,"y":780,"wires":[[]]},{"id":"d9a22015ad34cfb8","type":"api-call-service","z":"3b355f48.82cf1","name":"hanglamp aan 30%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.hanglamp"],"data":"{\"brightness_pct\":35}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1010,"y":840,"wires":[[]]},{"id":"7a687cc21645eb1b","type":"api-call-service","z":"3b355f48.82cf1","name":"staand onder aan 10%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_onder"],"data":"{\"brightness_pct\":10, \"color_temp\":450}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1020,"y":900,"wires":[[]]},{"id":"38557710dd701dfb","type":"api-call-service","z":"3b355f48.82cf1","name":"Staand midden aan 10%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_midden"],"data":"{\"brightness_pct\":10, \"color_temp\":450}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1030,"y":960,"wires":[[]]},{"id":"d3938466b06419c3","type":"api-call-service","z":"3b355f48.82cf1","name":"Staand boven aan 10%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_boven"],"data":"{\"brightness_pct\":10, \"color_temp\":450}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1030,"y":1020,"wires":[[]]},{"id":"47df24d553c90943","type":"api-call-service","z":"3b355f48.82cf1","name":"Lamp bank uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.staande_lamp"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1000,"y":360,"wires":[[]]},{"id":"6e34869de9651e42","type":"api-call-service","z":"3b355f48.82cf1","name":"hanglamp uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.hanglamp"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":990,"y":420,"wires":[[]]},{"id":"0a05a9e4a7f35ce0","type":"api-call-service","z":"3b355f48.82cf1","name":"staand onder uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_onder"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1000,"y":480,"wires":[[]]},{"id":"8724c7d3f3647bb4","type":"api-call-service","z":"3b355f48.82cf1","name":"Staand midden uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_midden"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1010,"y":540,"wires":[[]]},{"id":"5cbbbbc60f3a2602","type":"api-call-service","z":"3b355f48.82cf1","name":"Staand boven uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_boven"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1010,"y":600,"wires":[[]]},{"id":"847bec87470eed6f","type":"api-current-state","z":"3b355f48.82cf1","name":"Lux lager dan 5","server":"1942d160.7834af","version":3,"outputs":2,"halt_if":"5","halt_if_type":"num","halt_if_compare":"lt","entity_id":"sensor.lightlevel_16","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","x":140,"y":380,"wires":[["72844706e258b696"],["25265c8fe99b90b5"]]},{"id":"72844706e258b696","type":"api-call-service","z":"3b355f48.82cf1","name":"Buitenlamp 50%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.eettafel"],"data":"{\"brightness_pct\":50}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":360,"y":320,"wires":[[]]},{"id":"25265c8fe99b90b5","type":"api-call-service","z":"3b355f48.82cf1","name":"Buitenlamp uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.eettafel"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":360,"y":400,"wires":[[]]},{"id":"b45be8bef2562295","type":"api-call-service","z":"3b355f48.82cf1","name":"TVkast aan 1%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.dimmable_light_14"],"data":"{\"brightness_pct\":1}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1000,"y":1080,"wires":[[]]},{"id":"1c8cd4f08f791afa","type":"api-call-service","z":"3b355f48.82cf1","name":"TVkast uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.dimmable_light_14"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":980,"y":660,"wires":[[]]},{"id":"43425446fd2054c9","type":"server-state-changed","z":"3b355f48.82cf1","name":"","server":"1942d160.7834af","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.someone_home","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":40,"wires":[["f222e0da13773cea"]]},{"id":"c5d7deef920203be","type":"time-range-switch","z":"3b355f48.82cf1","name":"","lat":"52.04516","lon":"5.87182","startTime":"sunset","endTime":"23:59","startOffset":"-00:20:00","endOffset":0,"x":1440,"y":440,"wires":[["848e76fc67f61d20"],["179ca8a38ed13695"]]},{"id":"848e76fc67f61d20","type":"api-call-service","z":"3b355f48.82cf1","name":"Staande lamp onder","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_onder"],"data":"{\"brightness_pct\":25}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1700,"y":440,"wires":[[]]},{"id":"179ca8a38ed13695","type":"api-call-service","z":"3b355f48.82cf1","name":"turn off","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_onder"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"queue":"none","x":1650,"y":480,"wires":[[]]},{"id":"9b0ad1e18790c6d2","type":"api-call-service","z":"3b355f48.82cf1","name":"turn on eettafel","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.dimmable_light_11"],"data":"{\"brightness_pct\":30}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1680,"y":540,"wires":[[]]},{"id":"2cfdc9aaf374465d","type":"api-call-service","z":"3b355f48.82cf1","name":"turn off","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.dimmable_light_11"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"queue":"none","x":1650,"y":580,"wires":[[]]},{"id":"58218317d684faba","type":"time-range-switch","z":"3b355f48.82cf1","name":"","lat":"52.04516","lon":"5.87182","startTime":"sunset","endTime":"23:59","startOffset":"-00:30:00","endOffset":0,"x":1440,"y":540,"wires":[["9b0ad1e18790c6d2"],["2cfdc9aaf374465d"]]},{"id":"2f2a348af9b8db15","type":"time-range-switch","z":"3b355f48.82cf1","name":"","lat":"52.04516","lon":"5.87182","startTime":"sunset","endTime":"23:59","startOffset":"-00:11:00","endOffset":0,"x":1440,"y":340,"wires":[["a2d3d702597ade65"],["4de0d532e8cdbe69"]]},{"id":"a2d3d702597ade65","type":"api-call-service","z":"3b355f48.82cf1","name":"Staande lamp midden","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_midden"],"data":"{\"brightness_pct\":25}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1700,"y":340,"wires":[[]]},{"id":"4de0d532e8cdbe69","type":"api-call-service","z":"3b355f48.82cf1","name":"turn off","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_midden"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"queue":"none","x":1650,"y":380,"wires":[[]]},{"id":"5de6a200fddbfa89","type":"time-range-switch","z":"3b355f48.82cf1","name":"","lat":"52.04516","lon":"5.87182","startTime":"sunset","endTime":"23:59","startOffset":"-00:15:00","endOffset":0,"x":1440,"y":240,"wires":[["eb8010509ea30ac3"],["e1d60c9229a6ded1"]]},{"id":"eb8010509ea30ac3","type":"api-call-service","z":"3b355f48.82cf1","name":"Staande lamp boven","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_boven"],"data":"{\"brightness_pct\":25}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1700,"y":240,"wires":[[]]},{"id":"e1d60c9229a6ded1","type":"api-call-service","z":"3b355f48.82cf1","name":"turn off","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_boven"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"queue":"none","x":1650,"y":280,"wires":[[]]},{"id":"9923cef9bc13abe8","type":"time-range-switch","z":"3b355f48.82cf1","name":"","lat":"52.04516","lon":"5.87182","startTime":"sunset","endTime":"23:59","startOffset":"-00:04:00","endOffset":0,"x":1440,"y":140,"wires":[["4741ca60ecf5f907"],["b50e5ec3117b6013"]]},{"id":"4741ca60ecf5f907","type":"api-call-service","z":"3b355f48.82cf1","name":"Hanglamp","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.hanglamp"],"data":"{\"brightness_pct\":25}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1670,"y":140,"wires":[[]]},{"id":"b50e5ec3117b6013","type":"api-call-service","z":"3b355f48.82cf1","name":"turn off","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.hanglamp"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"queue":"none","x":1650,"y":180,"wires":[[]]},{"id":"8d0df95273a59c89","type":"time-range-switch","z":"3b355f48.82cf1","name":"","lat":"52.04516","lon":"5.87182","startTime":"sunset","endTime":"23:59","startOffset":"-00:08:00","endOffset":0,"x":1440,"y":40,"wires":[["0a07627abcf7fe2d"],["675f92b928aefb12"]]},{"id":"0a07627abcf7fe2d","type":"api-call-service","z":"3b355f48.82cf1","name":"Bij bank","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp"],"data":"{\"brightness_pct\":25}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1660,"y":40,"wires":[[]]},{"id":"675f92b928aefb12","type":"api-call-service","z":"3b355f48.82cf1","name":"turn off","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.bij_bank"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"data"}],"queue":"none","x":1650,"y":80,"wires":[[]]},{"id":"ce5a6cc30f230868","type":"api-call-service","z":"3b355f48.82cf1","name":"Keukenkastjes uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.dimmable_light_13"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1010,"y":240,"wires":[[]]},{"id":"f222e0da13773cea","type":"api-current-state","z":"3b355f48.82cf1","name":"","server":"1942d160.7834af","version":3,"outputs":2,"halt_if":"true","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.someone_home","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":570,"y":40,"wires":[["ce5a6cc30f230868","fc344614.057c88","47df24d553c90943","6e34869de9651e42","0a05a9e4a7f35ce0","8724c7d3f3647bb4","5cbbbbc60f3a2602","1c8cd4f08f791afa"],["8d0df95273a59c89","9923cef9bc13abe8","5de6a200fddbfa89","2f2a348af9b8db15","c5d7deef920203be","58218317d684faba"]]},{"id":"4abbd76ac99e0cf3","type":"delay","z":"3b355f48.82cf1","name":"","pauseType":"delay","timeout":"10","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":520,"y":100,"wires":[["f222e0da13773cea"]]},{"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"}]

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
@etienne001
Ik denk dat het een stuk makkelijker wordt als je de verschillende triggers als start van een losse "flow" gaat zien. Dus:

- De eerste persoon komt thuis
- De laatste persoon gaat weg uit huis
- Alarmsysteem wordt (handmatig?) aangezet
- Alarmsysteem wordt uitgezet
- Lux wordt lager dan 5
- De zon gaat onder (sunset)
- Het is 23:59
- en misschien nog andere?

Kun je eens vertellen wat er na elk van deze triggers moet gebeuren?
Dus bijv:
Alarm wordt aangezet -> Er is wel iemand thuis -> Lampen uit
Sunset -> Er is niemand thuis -> Alarm staat aan -> Lampen aan

Probeer ze even helemaal los te zien, dus zonder onderlinge verbindingen.

Let trouwens op dat als je lux meter in de zelfde ruimte hangt als de lampen, dat je ook een verandering van lux krijgt als je de lampen aan/uit zet.

Verder nog de tip om even te kijken naar subflows of de link in/out/call nodes om je lampen wat beheersbaarder te maken. Het is nu wat onoverzichtelijk.

Feel free to Buy me a coffee


  • etienne001
  • Registratie: September 2005
  • Laatst online: 12:50
@musicpixel
Als ik je dus goed begrijp dan adviseer je elke automatisering op een losse flow te maken met daartussen dus verwijzingen van flow naar flow?

Dat het nu veel in één flow is snap ik inderdaad, maar van flow naar flow werken is wel iets nieuws voor me (maar goed winterdag komt er aan dus meer tijd ;) )
Kun je eens vertellen wat er na elk van deze triggers moet gebeuren?
Dus bijv:
Alarm wordt aangezet -> Er is wel iemand thuis -> Lampen uit
Sunset -> Er is niemand thuis -> Alarm staat aan -> Lampen aan
Klopt aardig inderdaad!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
etienne001 schreef op donderdag 20 oktober 2022 @ 22:17:
@musicpixel
Als ik je dus goed begrijp dan adviseer je elke automatisering op een losse flow te maken met daartussen dus verwijzingen van flow naar flow?

Dat het nu veel in één flow is snap ik inderdaad, maar van flow naar flow werken is wel iets nieuws voor me (maar goed winterdag komt er aan dus meer tijd ;) )


[...]

Klopt aardig inderdaad!
Niet helemaal.

In Node Red is een flow eigenlijk een tabblad, maar dat is niet hoe ik een "flow" bedoel.

Wat ik bedoel is dat elke trigger een automatisering (om het even geen flow te noemen) start.
Elk van die automatiseringen kun je eigenlijk los van elkaar maken zonder lijntjes tussen de automatiseringen (tenzij ze invloed op elkaar hebben).

Door elk van deze automatiseringen zo veel mogelijk los van elkaar te houden kun je makkelijker het overzicht houden en hebben aanpassingen niet zo snel invloed op een andere automatisering.

Je zou dus een flow (=tabblad) kunnen maken voor het alarm, een andere flow voor de huiskamer, etc. wat je handig vindt...
Binnen zo'n flow kun je dan meerdere automatiseringen hebben, elk startend met een bepaalde trigger.

Je krijgt dan meerdere trigger->(condities)->actie(s)

Maar begin dus te denken in triggers, welke condities dan van toepassing zijn, en welke acties daar op moeten volgen.

In de voorbeelden die ik gaf (t=trigger, c=conditie, a=actie):

Alarm wordt aangezet (t)-> Er is wel iemand thuis (c) -> Lampen uit (a)
Sunset (t) -> Er is niemand thuis (c) -> Alarm staat aan (c) -> Lampen aan (a)

Natuurlijk kun je met de condities aftakkingen krijgen.

Als je wilt dat ik een voorbeeld geef moet je het maar even zeggen...

Feel free to Buy me a coffee


  • etienne001
  • Registratie: September 2005
  • Laatst online: 12:50
@musicpixel Mijn dank voor je zeer uitgebreide antwoord!
Ik snap je wel en niet :*)

Ik zal je mijn denkwijze proberen uit te leggen..
Ik begin bij het alarmsysteem dat lijkt mij de eerste start.
Dan komt de luxmeter met verlichting dus die "schakeling" teken ik daar achter aan.
Dan komt tussendoor nog het feit of er iemand thuis is dus die teken ik tussen de flow.
Ohja met die persoon komt dus nog de sunset dus die moet er ook nog ergens tussen ;)

Neem bijvoorbeeld events state van de lux meter, deze laat ik zeg maar door de current state van het alarmsysteem lopen, dit is in mijn ogen toch logisch? Want als het alarmsysteem aan staat moet de lux meter geen invloed hebben current state "switch" van lux lager dan 50.

Als ik jou begrijp is het beter deze onder elkaar te maken met waar nodig een lijntje van schakeling naar schakeling?

[Voor 19% gewijzigd door etienne001 op 21-10-2022 20:42]


  • d-vine
  • Registratie: Augustus 2006
  • Nu online
Weet iemand hoe ik de Configure grid consumption energy cost kan gebruiken in een payload van node-red?

Ik gebruik nu voor bv. mijn wasmachine flow om automatisch de wallplug uit te zetten als deze klaar is en dan een berichtje sturen met de kosten van de wasbeurt dit in een payload.

code:
1
2
3
msg.payload.time = Math.round(msg.payload.time / 60);
msg.payload.cost = (msg.payload.energy * 0.352931).toFixed(2);
return msg;


Alleen handmatig dit steeds aanpassen als de prijzen veranderen op 2 plekken is wat onhandig.

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
etienne001 schreef op vrijdag 21 oktober 2022 @ 20:38:
@musicpixel Mijn dank voor je zeer uitgebreide antwoord!
Ik snap je wel en niet :*)

Ik zal je mijn denkwijze proberen uit te leggen..
Ik begin bij het alarmsysteem dat lijkt mij de eerste start.
Dan komt de luxmeter met verlichting dus die "schakeling" teken ik daar achter aan.
Dan komt tussendoor nog het feit of er iemand thuis is dus die teken ik tussen de flow.
Ohja met die persoon komt dus nog de sunset dus die moet er ook nog ergens tussen ;)

Neem bijvoorbeeld events state van de lux meter, deze laat ik zeg maar door de current state van het alarmsysteem lopen, dit is in mijn ogen toch logisch? Want als het alarmsysteem aan staat moet de lux meter geen invloed hebben current state "switch" van lux lager dan 50.

Als ik jou begrijp is het beter deze onder elkaar te maken met waar nodig een lijntje van schakeling naar schakeling?
Ik denk dat je precies verkeerd om denkt ;)

Zoals ik je automatisering nu lees staat er o.a..:

* Als het alarm wordt aangezet EN er is niemand thuis EN het is tussen zonsondergang en middernacht, doe dan de lampen aan.
Echter:
1. Ik denk dat op het moment dat je het alarm aan zet, je nog thuis bent, dus dat gaat al mis (tenzij je in die delay van 10 seconden heel hard ver weg kunt rennen ;-))
2. Als het alarm overdag wordt aangezet en je blijft weg tot na zonsondergang dan gaan de lampen niet aan, want de zonsondergang-test vindt alleen plaats op het moment dat je het alarm aan zet en daarna niet meer.

Wat ik denk dat je wilt bereiken is dat je lampen automatisch aan of uit gaan, afhankelijk van
- of er iemand thuis is
- het alarm aan/uit staat
- lux waarde
- tijdstip/zonsondergang

Kun je eens in normale zinnen vertellen wat je wilt dat er moet gebeuren?
Dus bijvoorbeeld:
als iedereen weg is moet de verlichting automatisch om zonsondergang aan gaan (op stand A) en weer uit om middernacht
Of: als ik ga slapen (en het alarm aan zet?) dan moeten alle lampen uit
Of: als er iemand thuis is dan moet het licht automatisch aan gaan (op stand B ) als het te donker wordt (lux)
Of: als het "te donker" wordt moet de buitenverlichting aan, totdat het weer "licht genoeg" is

Klopt dit? Of zijn ze anders? Of misschien zijn er nog andere?

Als we dit soort scenario's duidelijk hebben kunnen we verder kijken naar hoe ze om te zetten in Node Red.
Anders is het voor mij gissen naar wat je precies wilt ;)

Feel free to Buy me a coffee


  • Fleshi
  • Registratie: Juni 2001
  • Laatst online: 17:41
Heeft iemand toevallig een werkende flow in Node Red voor het volgende: Ik wil eigenlijk op het moment ik mijn thuis zone verlaat automatisch de high accuracy aanzetten in de Home Assistant app op mijn telefoon. Op het moment ik thuis ben is het niet nodig dit aan te hebben staan, mede vanwege het hoge batterij gebruik.

Nu heb ik zelf onderstaande beschrijving van Home Assistant gevonden echter zou ik deze graag werkend willen hebben in Node Red. Heeft iemand toevallig een voorbeeld?

code:
1
2
3
4
5
6
7
8
9
10
automation:
  - alias: Turn off high accuracy mode
    trigger:
      ...
    action:
      - service: notify.mobile_app_<your_device_id_here>
        data:
          message: "command_high_accuracy_mode"
          data:
            command: "turn_off"

  • etienne001
  • Registratie: September 2005
  • Laatst online: 12:50
musicpixel schreef op zaterdag 22 oktober 2022 @ 16:31:
[...]


Ik denk dat je precies verkeerd om denkt ;)

Zoals ik je automatisering nu lees staat er o.a..:

* Als het alarm wordt aangezet EN er is niemand thuis EN het is tussen zonsondergang en middernacht, doe dan de lampen aan.
Echter:
1. Ik denk dat op het moment dat je het alarm aan zet, je nog thuis bent, dus dat gaat al mis (tenzij je in die delay van 10 seconden heel hard ver weg kunt rennen ;-))
2. Als het alarm overdag wordt aangezet en je blijft weg tot na zonsondergang dan gaan de lampen niet aan, want de zonsondergang-test vindt alleen plaats op het moment dat je het alarm aan zet en daarna niet meer.

Wat ik denk dat je wilt bereiken is dat je lampen automatisch aan of uit gaan, afhankelijk van
- of er iemand thuis is
- het alarm aan/uit staat
- lux waarde
- tijdstip/zonsondergang

Kun je eens in normale zinnen vertellen wat je wilt dat er moet gebeuren?
Dus bijvoorbeeld:
als iedereen weg is moet de verlichting automatisch om zonsondergang aan gaan (op stand A) en weer uit om middernacht
Of: als ik ga slapen (en het alarm aan zet?) dan moeten alle lampen uit
Of: als er iemand thuis is dan moet het licht automatisch aan gaan (op stand B ) als het te donker wordt (lux)
Of: als het "te donker" wordt moet de buitenverlichting aan, totdat het weer "licht genoeg" is

Klopt dit? Of zijn ze anders? Of misschien zijn er nog andere?

Als we dit soort scenario's duidelijk hebben kunnen we verder kijken naar hoe ze om te zetten in Node Red.
Anders is het voor mij gissen naar wat je precies wilt ;)
Haha ik ben nog steeds zoekende naar de logica van node red...

Wat ik graag zou willen bereiken met deze flow is:

Wanneer er iemand thuis is moet de verlichting via de lux meter werken.
Als er iemand thuis is en het alarm gaat aan, dan de verlichting uit.
komt er 's morgens iemand beneden en het is nog donker als het alarm wordt uitgeschakeld dan alle verlichting aan.
Deze moet weer uitgaan via de lux meter.
Die basis had ik al werken, wellicht niet in een overzichtelijke flow :*)

Dan wil ik inderdaad graag erbij:
Mochten we in de tussentijd weggaan (zoals je zegt met het wegrennen ;) ) dan verlichting via onderstaand:
Als er niemand thuis is en het alarm is ingeschakeld dan een deel v/d de verlichting via de luxmeter of via sunset (mij om het even als ze maar om bijvoorbeeld 00:00 uur uit gaan).
Komt er daarna iemand thuis; na uitschakeling alarm moet de verlichting weer als eerste werken, dus deel verlichting mag aanblijven (als dit nog voor 00:00 uur is) maar rest v/d verlichting moet ook aangaan.
Dan de flow weer opnieuw oppakken zeg maar.

De buitenverlichting moet alleen via de lux meter, die heeft niets met alarm of personen thuis te maken.
Dus beneden xx lux lamp aan boven xx lux lamp uit.

  • denuz
  • Registratie: Augustus 2006
  • Laatst online: 20:27
Fleshi schreef op zaterdag 22 oktober 2022 @ 19:55:
Heeft iemand toevallig een werkende flow in Node Red voor het volgende: Ik wil eigenlijk op het moment ik mijn thuis zone verlaat automatisch de high accuracy aanzetten in de Home Assistant app op mijn telefoon. Op het moment ik thuis ben is het niet nodig dit aan te hebben staan, mede vanwege het hoge batterij gebruik.

Nu heb ik zelf onderstaande beschrijving van Home Assistant gevonden echter zou ik deze graag werkend willen hebben in Node Red. Heeft iemand toevallig een voorbeeld?

code:
1
2
3
4
5
6
7
8
9
10
automation:
  - alias: Turn off high accuracy mode
    trigger:
      ...
    action:
      - service: notify.mobile_app_<your_device_id_here>
        data:
          message: "command_high_accuracy_mode"
          data:
            command: "turn_off"
Omzetten van YAML (home asisstant) naar JSON (node-red) kan via een online converter :).
In het voorbeeld komt dat neer op :
JSON:
1
2
3
4
5
6
{
  "message": "command_high_accuracy_mode",
  "data": {
    "command": "turn_off"
  }
}

Dit zet je in het dataveld van de call service.
domain = notify
service is je app.

Voor de call service zet je een event change met de person.

https://tweakers.net/i/CRgzmoQ7tHQs1h2-qrKGtzQ_dIc=/full-fit-in/4000x4000/filters:no_upscale():fill(white):strip_exif()/f/image/ffD3yKBaAoygIqtWADHizJjx.png?f=user_large
Kom je er zo uit?

  • denuz
  • Registratie: Augustus 2006
  • Laatst online: 20:27
d-vine schreef op zaterdag 22 oktober 2022 @ 10:04:
Weet iemand hoe ik de Configure grid consumption energy cost kan gebruiken in een payload van node-red?

Ik gebruik nu voor bv. mijn wasmachine flow om automatisch de wallplug uit te zetten als deze klaar is en dan een berichtje sturen met de kosten van de wasbeurt dit in een payload.

code:
1
2
3
msg.payload.time = Math.round(msg.payload.time / 60);
msg.payload.cost = (msg.payload.energy * 0.352931).toFixed(2);
return msg;


Alleen handmatig dit steeds aanpassen als de prijzen veranderen op 2 plekken is wat onhandig.
Volgens mij is de "fixed price" waarde in het energy dashboard niet op te halen. Ik kan het in ieder geval niet vinden als uit te lezen sensor. Als deze er wel is, dan is dat natuurlijk te gebruiken in node-red. Dat ophalen kan bijvoorbeeld via de current state node. De berekening zelf kan ook in een change node, dat heeft mijn persoonlijke voorkeur boven de function.

Alternatief is om voor het dashboard een input helper te gebruiken. De input helper kun je gebruiken in het dashboard en in node red.

  • d-vine
  • Registratie: Augustus 2006
  • Nu online
denuz schreef op zondag 23 oktober 2022 @ 12:51:
[...]

Volgens mij is de "fixed price" waarde in het energy dashboard niet op te halen. Ik kan het in ieder geval niet vinden als uit te lezen sensor. Als deze er wel is, dan is dat natuurlijk te gebruiken in node-red. Dat ophalen kan bijvoorbeeld via de current state node. De berekening zelf kan ook in een change node, dat heeft mijn persoonlijke voorkeur boven de function.

Alternatief is om voor het dashboard een input helper te gebruiken. De input helper kun je gebruiken in het dashboard en in node red.
[Afbeelding]
Toevallig net mee bezig geweest en inderdaad met een helper opgelost.

Dit dan zo gebruikt ( met hulp van HA forum)

code:
1
2
3
msg.payload.time = Math.round(msg.payload.time / 60);
msg.payload.cost = (msg.payload.energy * global.get('homeassistant.homeAssistant.states')['input_number.energy_static_price'].state).toFixed(2);
return msg;

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
etienne001 schreef op zaterdag 22 oktober 2022 @ 20:47:
[...]

De buitenverlichting moet alleen via de lux meter, die heeft niets met alarm of personen thuis te maken.
Dus beneden xx lux lamp aan boven xx lux lamp uit.
Okee, laten we even beginnen met deze. Dit is de simpelste.
Ik heb natuurlijk niet jouw devices, dus ik heb m niet kunnen testen.

Wat me echter opviel, was de naamgeving van je devices. Je hebt in de buitenlampen flow een "sensor.lightlevel_16" en een "light.eettafel". Ik wil je sterk aanraden om deze namen te verduidelijken. Nu weet je misschien nog dat light.eettafel de buitenlamp is, maar als je systeem straks zonder er naar om te kijken een half jaar draait dan ga je niet blij worden als je geen duidelijke namen hebt. Ik zou minimaal iets verwachten van "sensor.lichtmeter_woonkamer" (of waar ie ook mag hangen) en "light.buitenlamp".

Dan nu de flow:



Dit is in principe de flow. Maar voor het voorbeeld heb ik wat extra's toegevoegd:



code:
1
[{"id":"1b504b1a4ebbbe12","type":"server-state-changed","z":"bc20754c1c4f24d8","name":"Lux meter","server":"1942d160.7834af","version":4,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.lightlevel_16","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":140,"y":160,"wires":[["507bfbc1eab0fc02","1fc0f7c177ea4ef2"]]},{"id":"7c8aebec2aeb9af5","type":"api-call-service","z":"bc20754c1c4f24d8","name":"Buitenlamp 50%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.eettafel"],"data":"{\"brightness_pct\":50}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":580,"y":140,"wires":[[]]},{"id":"a1ae285c23f90b43","type":"api-call-service","z":"bc20754c1c4f24d8","name":"Buitenlamp uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.eettafel"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":580,"y":180,"wires":[[]]},{"id":"507bfbc1eab0fc02","type":"switch","z":"bc20754c1c4f24d8","name":"Lux < 5","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"5","vt":"num"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":340,"y":160,"wires":[["7c8aebec2aeb9af5"],["a1ae285c23f90b43"]]},{"id":"99b1d76774a846b1","type":"comment","z":"bc20754c1c4f24d8","name":"Buitenverlichting","info":"","x":160,"y":80,"wires":[]},{"id":"1fc0f7c177ea4ef2","type":"debug","z":"bc20754c1c4f24d8","name":"debug lux meter","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":360,"y":100,"wires":[]},{"id":"c9d8e9319a6c98cf","type":"inject","z":"bc20754c1c4f24d8","name":"lux = 6","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"6","payloadType":"num","x":130,"y":240,"wires":[["507bfbc1eab0fc02"]]},{"id":"c734f01aa56c7c2b","type":"inject","z":"bc20754c1c4f24d8","name":"lux = 4","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"4","payloadType":"num","x":130,"y":280,"wires":[["507bfbc1eab0fc02"]]},{"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}]


Wat ik heb toegevoegd is een debug node (groen) en 2 inject nodes (grijs). Deze zijn bedoeld om je flow te kunnen testen zonder te hoeven wachten op een signaal van je lux-meter.

De "Lux meter" node is in deze flow de trigger, en ik verwacht dat de lux waarde (o.a.) in de msg.payload zit die deze node uitspuugt. Dit kun je controleren met de debug node (je weet hoe je de debug informatie moet bekijken toch?)
Node Red werkt met messages (msg) met informatie die van node naar node worden doorgegeven.

De msg.payload met de lux waarde komt vervolgens in een switch node die de vergelijking doet en de lampen aan of uit schakelt.

(De flow zou nog korter kunnen door de switch node weg te halen en de vergelijking meteen in de "Lux meter" node te doen; daar heb je ook de mogelijkheid om "< 5" op te geven. Dit vind ik zelf echter beter leesbaar)

Dan de inject nodes: elk van deze nodes stelt de msg.payload in op een waarde, de ene op 4 en de andere op 6. Hiermee simuleer je de msg.payload die de Lux meter node uitspuugt, en zo kun je simpel testen of je flow werkt met waardes kleiner en groter dan 5 (door op de "knop" aan de linkerkant van de inject node te klikken).

Als je flow eenmaal werkt kun je die debug node en inject nodes weghalen (of disablen) als je dat wilt. Je houdt dan de bovenste flow over.

Deze flow voor de buitenlamp kun je een eigen flow-tabblad geven (bijvoorbeeld "Buiten" of "Tuin"). Heb je later andere automatiseringen voor buiten dan kun je deze eenvoudig op dat tabblad toevoegen.
Die Lux meter node kun je overigens rustig op meerdere flow-tabbladen opnemen. Ze zullen allemaal werken. Je hoeft dus niet al je automatiseringen achter deze ene Lux Meter node te hangen.

Let op: Als je lux meter vlak bij de buitenlamp hangt werkt deze flow niet. Zodra je buitenlamp aan gaat ziet de lux meter dat en die zet m dan meteen weer uit omdat de lux > 5 wordt!

Edit: Ik zag dat ik een foutje had gemaakt in de switch node. Afbeeldingen en code vervangen.

[Voor 4% gewijzigd door musicpixel op 23-10-2022 14:18]

Feel free to Buy me a coffee


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
@etienne001

Volgende stap is het aan en uit schakelen van je verlichting wat overzichtelijker maken, zodat je niet honderd lijntjes kris kras door elkaar hebt lopen.

Je schrijft dat je je verlichting als volgt wilt kunnen schakelen:
- alles uit
- alles aan
- een deel aan

Het leek me mooi om dat in een subflow onder te brengen. In plaats van al die verschillende nodes om je lampen aan of uit te zetten, plaats je dan gewoon een subflow-node waarbij je tegen die sublow node zegt of alles uit moet, alles aan, of een deel aan. In die subflow node heb je dan al de nodes om de lampen aan/uit te zetten.

Die subflow ziet er dan zo uit:



En om makkelijk de subflow te kunnen testen een paar inject nodes met de subflow node erachter:



code:
1
[{"id":"accffdd21f013a63","type":"subflow","name":"Verlichting","info":"","category":"","in":[{"x":60,"y":420,"wires":[{"id":"b7c40334d5f2eca6"}]}],"out":[{"x":180,"y":320,"wires":[{"id":"accffdd21f013a63","port":0}]}],"env":[{"name":"commando","type":"str","value":""}],"meta":{},"color":"#DDAA99"},{"id":"a788ddc03455f3f9","type":"api-call-service","z":"accffdd21f013a63","name":"Eettafel aan 40%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.dimmable_light_11"],"data":"{\"brightness_pct\":40}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":900,"wires":[[]]},{"id":"2ee38e58915bf547","type":"api-call-service","z":"accffdd21f013a63","name":"Eettafel uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.dimmable_light_11"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":610,"y":120,"wires":[[]]},{"id":"5fa0a168b18d9a3e","type":"api-call-service","z":"accffdd21f013a63","name":"Lamp bank aan 50%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp"],"data":"{\"brightness_pct\":50}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":640,"y":940,"wires":[[]]},{"id":"45f9d9e83d26cd60","type":"api-call-service","z":"accffdd21f013a63","name":"hanglamp aan 30%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.hanglamp"],"data":"{\"brightness_pct\":35}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":980,"wires":[[]]},{"id":"ca82e204bbe4d8bc","type":"api-call-service","z":"accffdd21f013a63","name":"staand onder aan 10%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_onder"],"data":"{\"brightness_pct\":10, \"color_temp\":450}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":640,"y":1020,"wires":[[]]},{"id":"f98657b675b6d81c","type":"api-call-service","z":"accffdd21f013a63","name":"Staand midden aan 10%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_midden"],"data":"{\"brightness_pct\":10, \"color_temp\":450}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":650,"y":1060,"wires":[[]]},{"id":"3c94056296507418","type":"api-call-service","z":"accffdd21f013a63","name":"Staand boven aan 10%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_boven"],"data":"{\"brightness_pct\":10, \"color_temp\":450}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":650,"y":1100,"wires":[[]]},{"id":"293f3b7ea28c30df","type":"api-call-service","z":"accffdd21f013a63","name":"Lamp bank uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.staande_lamp"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":620,"y":160,"wires":[[]]},{"id":"2172790bface3403","type":"api-call-service","z":"accffdd21f013a63","name":"hanglamp uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.hanglamp"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":610,"y":200,"wires":[[]]},{"id":"9dafde403ca16fac","type":"api-call-service","z":"accffdd21f013a63","name":"staand onder uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_onder"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":620,"y":240,"wires":[[]]},{"id":"c2c32d5e0265b547","type":"api-call-service","z":"accffdd21f013a63","name":"Staand midden uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_midden"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":280,"wires":[[]]},{"id":"0ab4f926b7b35f71","type":"api-call-service","z":"accffdd21f013a63","name":"Staand boven uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_boven"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":320,"wires":[[]]},{"id":"6dd03296ee69fdfc","type":"api-call-service","z":"accffdd21f013a63","name":"TVkast aan 1%","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.dimmable_light_14"],"data":"{\"brightness_pct\":1}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":620,"y":1140,"wires":[[]]},{"id":"1a3e6846c3aa0ec8","type":"api-call-service","z":"accffdd21f013a63","name":"TVkast uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.dimmable_light_14"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":600,"y":360,"wires":[[]]},{"id":"9aed318b25a1e7a8","type":"api-call-service","z":"accffdd21f013a63","name":"Keukenkastjes uit","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.dimmable_light_13"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":80,"wires":[[]]},{"id":"c51064055325ebb1","type":"api-call-service","z":"accffdd21f013a63","name":"Staande lamp onder","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_onder"],"data":"{\"brightness_pct\":25}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":640,"y":700,"wires":[[]]},{"id":"f62d5edd1c6c7296","type":"api-call-service","z":"accffdd21f013a63","name":"turn on eettafel","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.dimmable_light_11"],"data":"{\"brightness_pct\":30}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":620,"y":740,"wires":[[]]},{"id":"50c1de1a27b16f69","type":"api-call-service","z":"accffdd21f013a63","name":"Staande lamp midden","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_midden"],"data":"{\"brightness_pct\":25}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":640,"y":660,"wires":[[]]},{"id":"0fe1e88e7054ee5b","type":"api-call-service","z":"accffdd21f013a63","name":"Staande lamp boven","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp_boven"],"data":"{\"brightness_pct\":25}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":640,"y":620,"wires":[[]]},{"id":"b194220949a2a262","type":"api-call-service","z":"accffdd21f013a63","name":"Hanglamp","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.hanglamp"],"data":"{\"brightness_pct\":25}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":610,"y":580,"wires":[[]]},{"id":"098c98bc786ad7ee","type":"api-call-service","z":"accffdd21f013a63","name":"Bij bank","server":"1942d160.7834af","version":5,"debugenabled":false,"domain":"homeassistant","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.staande_lamp"],"data":"{\"brightness_pct\":25}","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":600,"y":540,"wires":[[]]},{"id":"ef0272e2d7054f1c","type":"comment","z":"accffdd21f013a63","name":"ALLES = alles aan","info":"","x":630,"y":860,"wires":[]},{"id":"67038fe1f9f29adf","type":"comment","z":"accffdd21f013a63","name":"UIT = alles uit","info":"","x":610,"y":40,"wires":[]},{"id":"9bd8bf833b898b65","type":"comment","z":"accffdd21f013a63","name":"DEEL = gedeelte aan","info":"","x":640,"y":500,"wires":[]},{"id":"b7c40334d5f2eca6","type":"switch","z":"accffdd21f013a63","name":"commando","property":"commando","propertyType":"env","rules":[{"t":"eq","v":"UIT","vt":"str"},{"t":"eq","v":"DEEL","vt":"str"},{"t":"eq","v":"ALLES","vt":"str"}],"checkall":"true","repair":false,"outputs":3,"x":210,"y":420,"wires":[["7df9d08a6952e35b"],["8248fca648b08cdc"],["7814efea2628fa35"]]},{"id":"7df9d08a6952e35b","type":"junction","z":"accffdd21f013a63","x":380,"y":180,"wires":[["9aed318b25a1e7a8","2ee38e58915bf547","293f3b7ea28c30df","2172790bface3403","9dafde403ca16fac","c2c32d5e0265b547","0ab4f926b7b35f71","1a3e6846c3aa0ec8"]]},{"id":"8248fca648b08cdc","type":"junction","z":"accffdd21f013a63","x":380,"y":600,"wires":[["098c98bc786ad7ee","b194220949a2a262","0fe1e88e7054ee5b","50c1de1a27b16f69","c51064055325ebb1","f62d5edd1c6c7296"]]},{"id":"7814efea2628fa35","type":"junction","z":"accffdd21f013a63","x":360,"y":980,"wires":[["a788ddc03455f3f9","5fa0a168b18d9a3e","45f9d9e83d26cd60","ca82e204bbe4d8bc","f98657b675b6d81c","3c94056296507418","6dd03296ee69fdfc"]]},{"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},{"id":"5b4140bfef40bd74","type":"subflow:accffdd21f013a63","z":"bc20754c1c4f24d8","name":"Verlichting UIT","env":[{"name":"commando","value":"UIT","type":"str"}],"x":400,"y":480,"wires":[[]]},{"id":"131fe03b970ad026","type":"inject","z":"bc20754c1c4f24d8","name":"","props":[],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":130,"y":480,"wires":[["5b4140bfef40bd74"]]},{"id":"af1fbd112fdbfd30","type":"subflow:accffdd21f013a63","z":"bc20754c1c4f24d8","name":"Verlichting DEEL","env":[{"name":"commando","value":"DEEL","type":"str"}],"x":400,"y":520,"wires":[[]]},{"id":"2fe75cd704a55176","type":"inject","z":"bc20754c1c4f24d8","name":"","props":[],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":130,"y":520,"wires":[["af1fbd112fdbfd30"]]},{"id":"571d4a9bec9a9a1d","type":"subflow:accffdd21f013a63","z":"bc20754c1c4f24d8","name":"Verlichting ALLES","env":[{"name":"commando","value":"ALLES","type":"str"}],"x":410,"y":560,"wires":[[]]},{"id":"6daf0a150a787620","type":"inject","z":"bc20754c1c4f24d8","name":"","props":[],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":130,"y":560,"wires":[["571d4a9bec9a9a1d"]]},{"id":"6dd7a173e8971604","type":"comment","z":"bc20754c1c4f24d8","name":"Verlichting test","info":"","x":140,"y":440,"wires":[]}]

(bovenstaande code bevat alle nodes van de twee afbeeldingen hierboven)

Als je één van de subflow nodes uit de tweede afbeelding openklikt zie je dat daar een commando in staat. Dit kan zijn UIT, DEEL, of ALLES. Dit commando komt in de subflow terecht en op basis hiervan worden de juiste nodes van de lampen aangeroepen.

In de subflow zelf kun je linksboven op "edit properties" klikken en daar zie je dat ik "commando" heb opgegeven (in tekst formaat a..z). Ipv commando kun je hier ook een andere naam bedenken.

In de subflow staat een switch node die obv het commando ($commando, de $ staat voor een environment variabele, of property) bepaalt wat er moet gebeuren.

De junction (dat kleine rondje dat geen node is, maar waar je wel je lijntjes aan kunt koppelen) kun je maken door rechter-muisknop op het grid en dan insert->junction. Dit is vrij nieuw en in een van de laatste versies van Node Red toegevoegd.

Met de inject nodes in de onderste afbeelding kun je eenvoudig de subflow testen met de verschillende commando's. Je kunt je ook vooorstellen dat je nu eenvoudig een knop op de muur kunt maken of een afstandsbediening die de verlichting op deze manier schakelt, zonder meteen weer 100 lijntjes erbij te krijgen.

Alle extra voorwaarden ((n)iemand thuis, etc) en triggers (lux, alarm, etc) komen in de volgende stap.

Ik ben benieuwd of je het kunt volgen tot zo ver.

Feel free to Buy me a coffee


  • etienne001
  • Registratie: September 2005
  • Laatst online: 12:50
Wow @musicpixel wat een enorm uitgebreide informatie geeft je mij hier zeg _/-\o_

Ik ga hier morgenmiddag eens heel rustig voor zitten en ermee aan de slag!!
Zoals je dit gebracht hebt is dit wel even hele andere koek zoals ik op Node-Red kijk/keek.
Ik ben hier echt heel erg blij mee, heb je een buy me a coffee ofsow??

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
etienne001 schreef op zondag 23 oktober 2022 @ 18:59:
Wow @musicpixel wat een enorm uitgebreide informatie geeft je mij hier zeg _/-\o_

Ik ga hier morgenmiddag eens heel rustig voor zitten en ermee aan de slag!!
Zoals je dit gebracht hebt is dit wel even hele andere koek zoals ik op Node-Red kijk/keek.
Ik ben hier echt heel erg blij mee, heb je een buy me a coffee ofsow??
Graag gedaan... soms moet je het gewoon een keer gezien hebben om een idee te krijgen wat en hoe je met Node Red dingen kunt maken. Ik zou zeggen: kijk er naar, en speel er mee, verander wat dingen, en kijk wat het effect is. Laat even weten als ik het volgende deel kan maken.

Soms vraag ik me trouwens wel eens af of ik niet leraar had moeten worden ;)

Buy-me-a-coffee heb ik niet, maar misschien geen gek idee ;)

Vroeg me laatst nog af of ik misschien een blog zou moeten beginnen over Node Red icm Home Assistant, al is het maar om mijn eigen uitprobeersels en leermomenten vast te leggen.
Ben eigenlijk wel benieuwd in hoeverre daar interesse voor is hier in dit forum (doe even duimpje als je dat interessant zou vinden).

Feel free to Buy me a coffee

Vraagje.

Ik gebruik een aantal http-requests voor een formule 1 pagina op mn Home Assistant instance.

2 verschillende APIs gebruik ik hiervoor. 1 krijg ik een resultaat voor de race, ronde in kampioenschap etc.

Maar de ene API heeft de geschrapte Russische GP nog in de resultaten, de andere niet. Dus, huidige ronde is ronde 19 bij de ene en ronde 20 bij de andere.. Kan ik in een function-node dit + 1 doen?

var getCircuit = msg.payload.MRData.RaceTable.round;
(round is dus 19, dat moet 20 zijn bij de volgende request)

De hele node:

JSON:
1
2
3
4
5
6
7
8
9
var getCircuit = msg.payload.MRData.RaceTable.round;
var formatCircuit = ('https://v1.formula-1.api-sports.io/circuits?id='+ getCircuit)
var url = formatCircuit


msg.payload = {
    url
}
return msg;

  • Megalomania
  • Registratie: April 2011
  • Laatst online: 21:11
@musicpixel hele waardevolle post! Echt fijn om op deze manier wat best practices te zien van een ervaren gebruiker. Een blog zou zeker leuk zijn, tips en tricks ik zou zeker abonneren.

Misschien een linkje naar deze post toevoegen aan de TS?

  • BazemanKM
  • Registratie: Januari 2008
  • Laatst online: 20:28
BazemanKM schreef op woensdag 19 oktober 2022 @ 22:37:
Hallo,

Wie kan mij helpen om de IKEA STARKVIND luchtververser helemaal te laten werken met Domoticz?

Via Zigbee2MQTT verbinding en wordt herkend in Domoticz door de auto discovery.

Alleen aan/uit en de standen komen niet automatisch in Domoticz.

Ik zat dus te denken aan een Node-RED flow, die de uitgaande Domoticz MQTT commando over zet in het het juiste Zigbee2MQTT commando.


[...]


Domoticz stuurt dus een msg.payload.svalue1 uit en die zijn: 0 t/m 100, dus 0 = off, 10 = auto, 20 =1 enz t/m 9 = 100 en dat moet dus omgezet en dan naar Zigbee2MQTT gestuurd.

Wie kan me aan een flow helpen?
Ik ben zelf verder gegaan, maar het werkt nog niet.

Uit Domoticz:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
    "Battery" : 255,
    "LastUpdate" : "2022-10-24 10:39:30",
    "LevelActions" : "||||||||||",
    "LevelNames" : "Uit|Auto|1|2|3|4|5|6|7|8|9",
    "LevelOffHidden" : "false",
    "RSSI" : 12,
    "SelectorStyle" : "1",
    "description" : "",
    "dtype" : "Light/Switch",
    "hwid" : "16",
    "id" : "0001426D",
    "idx" : 541,
    "name" : "Luchtververser",
    "nvalue" : 2,
    "stype" : "Switch",
    "svalue1" : "100",
    "switchType" : "Selector",
    "unit" : 1
}

svalue1 = 100, dus dat zou dan fan stand 9 moeten worden.

Mijn flow:
code:
1
[{"id":"1bec2846.4029b8","type":"tab","label":"Luchtververser","disabled":false,"info":""},{"id":"92af5d9e.d6b11","type":"mqtt in","z":"1bec2846.4029b8","name":"Domoticz Luchtververser","topic":"domoticz/out/541/","qos":"2","datatype":"auto","broker":"4d2ff189.666908","nl":false,"rap":false,"x":150,"y":200,"wires":[["a6e7acbe.f6401"]]},{"id":"a6e7acbe.f6401","type":"json","z":"1bec2846.4029b8","name":"","property":"payload","action":"","pretty":false,"x":370,"y":200,"wires":[["b6d70fc0.f6db5"]]},{"id":"cb50b45d.9a4e28","type":"mqtt out","z":"1bec2846.4029b8","name":"MQTT Lucht ververser","topic":"zigbee2mqtt/Luchtververser/set/","qos":"2","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"4d2ff189.666908","x":1060,"y":220,"wires":[]},{"id":"b6d70fc0.f6db5","type":"switch","z":"1bec2846.4029b8","name":"","property":"payload.svalue1","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"str"},{"t":"eq","v":"10","vt":"str"},{"t":"eq","v":"20","vt":"str"},{"t":"eq","v":"30","vt":"str"},{"t":"eq","v":"40","vt":"str"},{"t":"eq","v":"50","vt":"str"},{"t":"eq","v":"60","vt":"str"},{"t":"eq","v":"70","vt":"str"},{"t":"eq","v":"80","vt":"str"},{"t":"eq","v":"90","vt":"str"},{"t":"eq","v":"100","vt":"str"}],"checkall":"true","repair":false,"outputs":11,"x":530,"y":200,"wires":[["84ae7545.8ffa28"],["881d8691.c06168"],["19ce1141.d3d9ef"],["62faf9e6.ef52b8"],["5ff40353.feecbc"],["27c0f93.50b5306"],["76c5ca57.250ad4"],["dbddd75e.ec73d8"],["15badd72.2f72a3"],["b3344efa.f3137"],["a0d9040d.0eb0c8"]]},{"id":"881d8691.c06168","type":"function","z":"1bec2846.4029b8","name":"auto","func":"msg.payload = {\"fan_mode\": auto}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":60,"wires":[["cb50b45d.9a4e28"]]},{"id":"19ce1141.d3d9ef","type":"function","z":"1bec2846.4029b8","name":"1","func":"msg.payload = {\"fan_mode\": 1}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":100,"wires":[["cb50b45d.9a4e28"]]},{"id":"62faf9e6.ef52b8","type":"function","z":"1bec2846.4029b8","name":"2","func":"msg.payload = {\"fan_mode\": 2}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":140,"wires":[["cb50b45d.9a4e28"]]},{"id":"5ff40353.feecbc","type":"function","z":"1bec2846.4029b8","name":"3","func":"msg.payload = {\"fan_mode\": 3}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":180,"wires":[["cb50b45d.9a4e28"]]},{"id":"27c0f93.50b5306","type":"function","z":"1bec2846.4029b8","name":"4","func":"msg.payload = {\"fan_mode\": 4}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":220,"wires":[["cb50b45d.9a4e28"]]},{"id":"76c5ca57.250ad4","type":"function","z":"1bec2846.4029b8","name":"5","func":"msg.payload = {\"fan_mode\": 5}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":260,"wires":[["cb50b45d.9a4e28"]]},{"id":"dbddd75e.ec73d8","type":"function","z":"1bec2846.4029b8","name":"6","func":"msg.payload = {\"fan_mode\": 6}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":300,"wires":[["cb50b45d.9a4e28"]]},{"id":"15badd72.2f72a3","type":"function","z":"1bec2846.4029b8","name":"7","func":"msg.payload = {\"fan_mode\": 7}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":340,"wires":[["cb50b45d.9a4e28"]]},{"id":"b3344efa.f3137","type":"function","z":"1bec2846.4029b8","name":"8","func":"msg.payload = {\"fan_mode\": 8}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":380,"wires":[["cb50b45d.9a4e28"]]},{"id":"a0d9040d.0eb0c8","type":"function","z":"1bec2846.4029b8","name":"9","func":"msg.payload = {\"fan_mode\": 9}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":420,"wires":[["cb50b45d.9a4e28"]]},{"id":"8381b23d.4aaae","type":"comment","z":"1bec2846.4029b8","name":"","info":"","x":150,"y":60,"wires":[]},{"id":"84ae7545.8ffa28","type":"function","z":"1bec2846.4029b8","name":"off","func":"msg.payload = {\"fan_mode\": off}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":20,"wires":[[]]},{"id":"4d2ff189.666908","type":"mqtt-broker","name":"192.168.2.4","broker":"192.168.2.4","port":"1883","clientid":"","usetls":false,"verifyservercert":true,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""}]


Wie kan mij helpen om de juiste stand vanuit Domoticz naar Zigbee2MQTT te krijgen?

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 20:30
Koepert schreef op zondag 23 oktober 2022 @ 22:14:
Vraagje.

Ik gebruik een aantal http-requests voor een formule 1 pagina op mn Home Assistant instance.

2 verschillende APIs gebruik ik hiervoor. 1 krijg ik een resultaat voor de race, ronde in kampioenschap etc.

Maar de ene API heeft de geschrapte Russische GP nog in de resultaten, de andere niet. Dus, huidige ronde is ronde 19 bij de ene en ronde 20 bij de andere.. Kan ik in een function-node dit + 1 doen?

var getCircuit = msg.payload.MRData.RaceTable.round;
(round is dus 19, dat moet 20 zijn bij de volgende request)

De hele node:

JSON:
1
2
3
4
5
6
7
8
9
var getCircuit = msg.payload.MRData.RaceTable.round;
var formatCircuit = ('https://v1.formula-1.api-sports.io/circuits?id='+ getCircuit)
var url = formatCircuit


msg.payload = {
    url
}
return msg;
Die API waar de geschrapte Russische GP nog in staat... zou het kunnen dat daar ook een status ("geschrapt") bij staat? Zo ja, dan kun je daar beter iets mee doen (voor iedere geschrapte een +1 oid).

Feel free to Buy me a coffee

musicpixel schreef op maandag 24 oktober 2022 @ 13:10:
[...]


Die API waar de geschrapte Russische GP nog in staat... zou het kunnen dat daar ook een status ("geschrapt") bij staat? Zo ja, dan kun je daar beter iets mee doen (voor iedere geschrapte een +1 oid).
Ja soort van.. Dat is weer deel van een ander api-call. Daar krijgt de race de status Scheduled/Cancelled en nog n paar opties mee.

Maar wel n goed punt, ik denk dat ik daar (uit die andere call dus) ook evt het circuit kan trekken..

Kan wel, maar ik twijfel nu ff of ik die "Cancelled" als "stop"kan gebruiken.. Als Cancelled --> Niet aanvragen.

Tegelijk, hoe erg is dat ..

[Voor 11% gewijzigd door Koepert op 24-10-2022 13:28]

Pagina: 1 ... 27 28 29 Laatste


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee