Heeft iemand tips/ervaring voor een node die tekst kan omzetten naar een afbeelding? Ik zal dan een soort 'mapping' moeten maken denk ik, dat ik bijv. linksboven op coordinaten x,y de variabele $stroomverbruik wil tonen.
[Voor 8% gewijzigd door ThinkPad op 20-01-2023 21:52]
★ Gas besparen door CV-tuning | Elektriciteit besparen ★
Geen vragen via privébericht die ook via het forum kunnen a.u.b.
Kheb hier een brandmeldcentrale thuis, en deze wil ik graag zn status en meldingen weergeven in HA.
Via putty krijg ik volgende data binnen
In node red zie ik dit dan
Kan er iemand mij op weg helpen om de strings samen te voegen tot bruikbare meldingen?
Brandcentrale heeft een seriele poort, daarop heb ik een moxa aangesloten die dan de com poort beschikbaar maakt via netwerk.
Dus in node red doe ik dan via Tcp in en zo bekom ik de data, maar deze word in stukken gekapt.
Wil dus graag een kaart in lovelave hebben met deze info en dan verder automatisering op loslaten.
Je doet alles in NR dus schopje NR topic
[Voor 2% gewijzigd door septillion op 22-01-2023 16:41]
Interessant projectThinkPad schreef op vrijdag 20 januari 2023 @ 21:51:
Ik ben bezig met een leuk projectje (Electronic Shelf Labels, reverse engineering en hergebruik). Maar het script wat gebruikt wordt wil een afbeelding hebben (.png) Mijn idee was om data vanuit Node-RED te tonen op het digitale prijskaartje. Ik moet dus een afbeelding creëren met die data.
Heeft iemand tips/ervaring voor een node die tekst kan omzetten naar een afbeelding? Ik zal dan een soort 'mapping' moeten maken denk ik, dat ik bijv. linksboven op coordinaten x,y de variabele $stroomverbruik wil tonen.

Nooit opgevallen

Misschien is dit wat je zoekt? https://flows.nodered.org/node/node-red-contrib-image-tools
Heb het zelf niet gebruikt maar lees dat je tekst kunt 'printen'
Dat kan met join, alleen moet je wel weten wat het begin en einde van de berichten zijn.RedPas schreef op zondag 22 januari 2023 @ 08:02:
Goeiemorgen met zn allen,
Kheb hier een brandmeldcentrale thuis, en deze wil ik graag zn status en meldingen weergeven in HA.
Via putty krijg ik volgende data binnen
[Afbeelding]
In node red zie ik dit dan
[Afbeelding]
Kan er iemand mij op weg helpen om de strings samen te voegen tot bruikbare meldingen?
Brandcentrale heeft een seriele poort, daarop heb ik een moxa aangesloten die dan de com poort beschikbaar maakt via netwerk.
Dus in node red doe ik dan via Tcp in en zo bekom ik de data, maar deze word in stukken gekapt.
Wil dus graag een kaart in lovelave hebben met deze info en dan verder automatisering op loslaten.
[mbr]Je doet alles in NR dus schopje NR topic[/mbr]
Kun je in de connector naar HA niet instellen dat de data per regel verzonden wordt ?
dus wachten op enter / newline commando aangezien in putty het er een stuk beter uitziet.
"brand melding"
"kelder"
het lijkt erop
http://www.pvoutput.org/list.jsp?id=46229&sid=42168
Die COM2 screenshot van Putty, is dat ook via de Moxa? Of is dat met een laptop en een USB-Serial verbonden? In je Node-RED breekt hij de zinnen halverwege af. Mogelijk is dat een instelling op de Moxa en anders in Node-RED.RedPas schreef op zondag 22 januari 2023 @ 08:02:
Goeiemorgen met zn allen,
Kheb hier een brandmeldcentrale thuis, en deze wil ik graag zn status en meldingen weergeven in HA.
Via putty krijg ik volgende data binnen
[Afbeelding]
In node red zie ik dit dan
[Afbeelding]
Kan er iemand mij op weg helpen om de strings samen te voegen tot bruikbare meldingen?
Brandcentrale heeft een seriele poort, daarop heb ik een moxa aangesloten die dan de com poort beschikbaar maakt via netwerk.
[...]
Wat heb je zelf al gevonden? Als je zoekt op 'nodered serial port message split' etc. dan vind je wel voorbeelden zoals hier.
Stap 1 is zorgen dat de berichten niet worden afgebroken. Daarna kun je ze wel verder gaan verwerken.
Hey thanks, die ziet er wel goed uit. Heb het prijskaartjes verhaal nog niet werkend (wacht nog op de juiste hardware), zal eens met die node experimenteren zodra ik de hardware in huis heb om plaatjes op de pricetags te krijgen!Step5 schreef op dinsdag 24 januari 2023 @ 22:54:
[...]
Interessant project![]()
Nooit opgevallendie dingen in het echt...
Misschien is dit wat je zoekt? https://flows.nodered.org/node/node-red-contrib-image-tools
Heb het zelf niet gebruikt maar lees dat je tekst kunt 'printen'
★ Gas besparen door CV-tuning | Elektriciteit besparen ★
Geen vragen via privébericht die ook via het forum kunnen a.u.b.
Ik gebruik al een mooie tijd Nodered in combinatie met HomeAssisant voor een aantal automatiseringen naar alle tevredenheid.
Nu kwam ik er een paar dagen geleden achter dat de pomp van mijn vloerverwarming niet aangestuurd werd terwijl de ketel brand op stand CV, dit werkte voorheen perfekt......
Dus zoeken waar dat nu in zit en uiteindelijk kom ik bij nodered uit welke in de log een foutmelding tegen betreffende connectie met de server: Home Assistant.
Dit heeft als resultaat dat de nodes telkens connecten en disconnecten, ik heb geen idee waar ik dit moet zoeken. Niks veranderd aan de situatie behalve dan wat updates.
Heb al geprobeerd een aantal backups terug te installeren (HA) maar dat lost het probleem niet op.
Ook zie ik bij de nodes gewoon nog steeds de server HomeAssistant staan.
Edit, update van node-red-contrib-home-assistant-websocket naar 0.48.0 heeft niks geholpen iig. Nog steeds hetzelfde probleem....
Edit 2, nu wel ander probleem, kan niet meer in Nodered komen en andere foutmeldingen in logboek HA
Hij zegt nu iets met server config node not found?????
[Voor 56% gewijzigd door Peet3kabo op 25-01-2023 14:09]
Lastigheid voor mij is vooral het combineren van meerdere payloads. Heb nu zoiets bedacht:
1
| [{"id":"420f1c99e861ca1a","type":"mqtt in","z":"c8a6321ead03bb3c","name":"TOP15 - panasonic_heat_pump/main/Heat_Energy_Production","topic":"panasonic_heat_pump/main/Heat_Energy_Production","qos":"0","datatype":"auto-detect","broker":"92e5b2c.00a8b5","nl":false,"rap":true,"rh":0,"inputs":0,"x":330,"y":300,"wires":[["a4c8d9f67534c7c5","b4aff4f765959ef1","3ee02210dfe6c1f7"]]},{"id":"adb8e1c3f6da9609","type":"mqtt in","z":"c8a6321ead03bb3c","name":"TOP16 - panasonic_heat_pump/main/Heat_Energy_Consumption","topic":"panasonic_heat_pump/main/Heat_Energy_Consumption","qos":"0","datatype":"auto-detect","broker":"92e5b2c.00a8b5","nl":false,"rap":true,"rh":0,"inputs":0,"x":330,"y":360,"wires":[["66341f3f1e9e487b","08ad673ed29fca04","9b711245a18cdc0e"]]},{"id":"a4c8d9f67534c7c5","type":"debug","z":"c8a6321ead03bb3c","name":"debug 105","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":710,"y":260,"wires":[]},{"id":"66341f3f1e9e487b","type":"debug","z":"c8a6321ead03bb3c","name":"debug 106","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":710,"y":400,"wires":[]},{"id":"5b1630bf6dd16e1a","type":"debug","z":"c8a6321ead03bb3c","name":"debug 107","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":710,"y":520,"wires":[]},{"id":"8dd5b50f97c6341d","type":"mqtt out","z":"c8a6321ead03bb3c","name":"","topic":"domoticz/in","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"92e5b2c.00a8b5","x":1690,"y":340,"wires":[]},{"id":"b6d54692fda4dee5","type":"function","z":"c8a6321ead03bb3c","d":true,"name":"function 13","func":"let msg1={}, msg2={};\n\nif (msg.payload.heatprod != 'undefined' && msg.payload.heatprod != NaN)\n{\n msg1.payload = { \"idx\": 608, \"svalue\": String(Number(msg.payload.heatprod)) };\n}\n\nelse \n{\n msg1.payload = { \"idx\": 608, \"svalue\": String(Number(0)) };\n}\n\nif (msg.payload.heatcons != 'undefined' && msg.payload.heatcons != NaN)\n{\n msg2.payload = { \"idx\": 609, \"svalue\": String(Number(msg.payload.heatcons)) };\n}\n\nelse {\n msg2.payload = { \"idx\": 609, \"svalue\": String(Number(0)) };\n}\n\nreturn [msg1,msg2];","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":970,"y":340,"wires":[["2a94c56afad49146","8dd5b50f97c6341d"],["7cde290ee1af5a7a","8dd5b50f97c6341d"]]},{"id":"2a94c56afad49146","type":"debug","z":"c8a6321ead03bb3c","name":"debug 111","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1250,"y":260,"wires":[]},{"id":"7cde290ee1af5a7a","type":"debug","z":"c8a6321ead03bb3c","name":"debug 112","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1250,"y":400,"wires":[]},{"id":"b4aff4f765959ef1","type":"change","z":"c8a6321ead03bb3c","name":"","rules":[{"t":"move","p":"payload","pt":"msg","to":"payload.heatprod","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":300,"wires":[["b6d54692fda4dee5","f5942b1a26f634f5"]]},{"id":"f5942b1a26f634f5","type":"debug","z":"c8a6321ead03bb3c","name":"debug 115","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":970,"y":260,"wires":[]},{"id":"08ad673ed29fca04","type":"change","z":"c8a6321ead03bb3c","name":"","rules":[{"t":"move","p":"payload","pt":"msg","to":"payload.heatcons","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":710,"y":360,"wires":[["b6d54692fda4dee5","ef0dcb3c9a97880b"]]},{"id":"ef0dcb3c9a97880b","type":"debug","z":"c8a6321ead03bb3c","name":"debug 116","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":970,"y":400,"wires":[]},{"id":"3ee02210dfe6c1f7","type":"function","z":"c8a6321ead03bb3c","name":"function 16","func":"msg.payload = { \"idx\": 608, \"svalue\": String(Number(msg.payload)) };\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":970,"y":200,"wires":[["8dd5b50f97c6341d","75320a84cfc089df"]]},{"id":"9b711245a18cdc0e","type":"function","z":"c8a6321ead03bb3c","name":"function 17","func":"msg.payload = { \"idx\": 609, \"svalue\": String(Number(msg.payload)) };\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":970,"y":460,"wires":[["8dd5b50f97c6341d"]]},{"id":"75320a84cfc089df","type":"debug","z":"c8a6321ead03bb3c","name":"debug 117","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1530,"y":200,"wires":[]},{"id":"92e5b2c.00a8b5","type":"mqtt-broker","name":"MQTT (NAS)","broker":"10.0.0.4","port":"1883","clientid":"Node_Red_Client","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}] |
Met de volgende functie:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| let msg1={}, msg2={}; if (msg.payload.heatprod != 'undefined' && msg.payload.heatprod != NaN) { msg1.payload = { "idx": 608, "svalue": String(Number(msg.payload.heatprod)) }; } else { msg1.payload = { "idx": 608, "svalue": String(Number(0)) }; } if (msg.payload.heatcons != 'undefined' && msg.payload.heatcons != NaN) { msg2.payload = { "idx": 609, "svalue": String(Number(msg.payload.heatcons)) }; } else { msg2.payload = { "idx": 609, "svalue": String(Number(0)) }; } return [msg1,msg2]; |
Volgens mij zit ik mezelf flink in de knoop, maar ik krijg nu allerlei NaN meldingen, terwijl de losse waardes gewoon netjes gevuld worden. Iemand een zetje in de goede richting?
En je hebt String(Number()), dus iets wat wellicht al een string is maak je een number van en dan moet het weer terug naar een string? Whut?

Handig truukje is om het volgende even in je function node te zetten
1
| node.warn(typeof jouwvariabele) |
[Voor 31% gewijzigd door ThinkPad op 25-01-2023 15:36]
★ Gas besparen door CV-tuning | Elektriciteit besparen ★
Geen vragen via privébericht die ook via het forum kunnen a.u.b.
Weet jij misschien wat ik verkeerd doe ik deze flow.
Je hebt me eerder geholpen door lampen te laten dimmen, net voordat de lamp uit zou gaan.
Dit werkt op zich helemaal goed, behalve 1 ding.
Zodra het dimmen is ingezet (dus net voor de lamp uit gaat), dan blijft de lamp wel aan, maar dan in diezelfde gedimde stand. Ik dacht dat een reset op de trigger het probleem wel zou helpen en dat de lamp dan opnieuw aan zou gaan, maar helaas.
Wat zie ik over het hoofd?
1
| [{"id":"22088a9c6f6e1a67","type":"subflow","name":"Vertragingen (3) (2)","info":"","category":"","in":[{"x":100,"y":120,"wires":[{"id":"43450335975589ca"}]}],"out":[{"x":980,"y":280,"wires":[{"id":"6db119437475920b","port":0},{"id":"d9a7d2c5bf0255dc","port":0},{"id":"c8d7e0ca9a7b7d65","port":0},{"id":"2c8e1e230621cc25","port":0}]}],"env":[{"name":"dimmer","type":"str","value":""}],"meta":{},"color":"#DDAA99"},{"id":"43450335975589ca","type":"api-current-state","z":"22088a9c6f6e1a67","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":[["6db119437475920b"],["6e835e1b40dd9daf"]]},{"id":"6e835e1b40dd9daf","type":"api-current-state","z":"22088a9c6f6e1a67","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_gang","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":310,"y":200,"wires":[["2c8e1e230621cc25"],["1dd013fb17cb6354"]]},{"id":"1dd013fb17cb6354","type":"api-current-state","z":"22088a9c6f6e1a67","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":310,"y":280,"wires":[["d9a7d2c5bf0255dc"],["c8d7e0ca9a7b7d65"]],"outputLabels":["aan","uit"]},{"id":"c8d7e0ca9a7b7d65","type":"change","z":"22088a9c6f6e1a67","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":720,"y":300,"wires":[[]]},{"id":"d9a7d2c5bf0255dc","type":"change","z":"22088a9c6f6e1a67","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":710,"y":240,"wires":[[]]},{"id":"6db119437475920b","type":"change","z":"22088a9c6f6e1a67","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":740,"y":120,"wires":[[]]},{"id":"744d3c76cd03d400","type":"comment","z":"22088a9c6f6e1a67","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":"2c8e1e230621cc25","type":"change","z":"22088a9c6f6e1a67","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":710,"y":180,"wires":[[]]},{"id":"b94d3c6bf94c92d1","type":"subflow","name":"Dagdeel Hue color (3) (2)","info":"","category":"","in":[{"x":180,"y":240,"wires":[{"id":"6224bde6d9d9ae1d"},{"id":"710c8a8eb3088fb6"},{"id":"3f8d2d33f2d279ca"}]}],"out":[{"x":1040,"y":260,"wires":[{"id":"efe8c88b4ddc2dfc","port":0},{"id":"54b4264999c0795a","port":0},{"id":"7d4456bb8c401165","port":0},{"id":"497877dcafd7a4c6","port":0}]}],"env":[],"meta":{},"color":"#DDAA99","outputLabels":["Overdag"]},{"id":"6224bde6d9d9ae1d","type":"time-range-switch","z":"b94d3c6bf94c92d1","name":"tussen Sunrise & Sunset","lat":"52.12","lon":"4.65","startTime":"sunrise","endTime":"sunset","startOffset":0,"endOffset":0,"x":390,"y":180,"wires":[["efe8c88b4ddc2dfc"],[]]},{"id":"710c8a8eb3088fb6","type":"time-range-switch","z":"b94d3c6bf94c92d1","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":[["54b4264999c0795a"],[]]},{"id":"3f8d2d33f2d279ca","type":"time-range-switch","z":"b94d3c6bf94c92d1","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":[["c3a49e61540bb6f6"],[]]},{"id":"efe8c88b4ddc2dfc","type":"change","z":"b94d3c6bf94c92d1","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":"2700","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":"54b4264999c0795a","type":"change","z":"b94d3c6bf94c92d1","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":"2700","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":"7d4456bb8c401165","type":"change","z":"b94d3c6bf94c92d1","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":"c3a49e61540bb6f6","type":"api-current-state","z":"b94d3c6bf94c92d1","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":[["7d4456bb8c401165"],["497877dcafd7a4c6"]]},{"id":"497877dcafd7a4c6","type":"change","z":"b94d3c6bf94c92d1","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":"4e0b1fa01c86a80e","type":"comment","z":"934d9cd289491d7c","name":"Algemene info","info":"**Kelvin waardes**\n\n6000 Kelvin: Koel wit, zoals een helder blauwe lucht met een middagzon.\n\n5500 Kelvin: Standaard daglicht wit, zoals een heldere lucht.\n\n4800 Kelvin: Daglicht met direct zonlicht.\n\n4000 Kelvin: Wit met een warme gloed, zoals het licht van TL buizen.\n\n3000 Kelvin: Warmwit zoals het licht van halogeenlampen. (badkamer en keuken)\n\n2800 Kelvin: Warm licht zoals een gloeilamp.\n\n2200 Kelvin: Warm licht zoals het licht van HPS lampen.\n\n1900 Kelvin: Warm licht zoals kaarslicht\n\n**standaard helder scene schoonmaakster**\n{\"brightness\":255,\"color_temp\":255,\"transition\":1}\n\n**Let op dat de wait untill node tijd 2x telt aangezien de off node ook een signaal geeft**\n\n\n{\"brightness_pct\":100,\"transition\":0.5}\n\n{\"brightness_pct\":{{global.hue_color_brightness_pct}}, \"transition\":{{global.hue_color_transition}}}","x":150,"y":40,"wires":[]},{"id":"e6c95492613167dd","type":"comment","z":"934d9cd289491d7c","name":"Light informatie zit in HACS adaptive lightning","info":"**Kelvin waardes**\n\n6000 Kelvin: Koel wit, zoals een helder blauwe lucht met een middagzon.\n\n5500 Kelvin: Standaard daglicht wit, zoals een heldere lucht.\n\n4800 Kelvin: Daglicht met direct zonlicht.\n\n4000 Kelvin: Wit met een warme gloed, zoals het licht van TL buizen.\n\n3000 Kelvin: Warmwit zoals het licht van halogeenlampen. (badkamer en keuken)\n\n2800 Kelvin: Warm licht zoals een gloeilamp.\n\n2200 Kelvin: Warm licht zoals het licht van HPS lampen.\n\n1900 Kelvin: Warm licht zoals kaarslicht\n\n**standaard helder scene schoonmaakster**\n{\"brightness\":255,\"color_temp\":255,\"transition\":1}\n\n**Let op dat de wait untill node tijd 2x telt aangezien de off node ook een signaal geeft**\n\n\n{\"brightness_pct\":100,\"transition\":0.5}\n\n{\"brightness_pct\":{{global.hue_color_brightness_pct}}, \"transition\":{{global.hue_color_transition}}}","x":410,"y":40,"wires":[]},{"id":"264f3a58d2de6549","type":"server-state-changed","z":"934d9cd289491d7c","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":180,"wires":[["4d5c40d49e71d8ad","f0a7dd54a43f8c65"],["76c99aa275610b78"]]},{"id":"4197e0a92a035d05","type":"comment","z":"934d9cd289491d7c","name":"Gang","info":"{\"brightness_pct\":{{global.hue_color_brightness_pct}}, \"transition\":{{global.hue_color_transition}}}","x":130,"y":140,"wires":[]},{"id":"aa19be224f8d87e5","type":"api-call-service","z":"934d9cd289491d7c","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":980,"y":140,"wires":[[]]},{"id":"150ec21a7fe49e41","type":"api-call-service","z":"934d9cd289491d7c","name":"Lamp dimmen","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_on","areaId":[],"deviceId":[],"entityId":["light.gang_group"],"data":"{ \"brightness\": $max([ $entities(\"light.gang_group\").attributes.brightness /2, 5 ])}","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1020,"y":280,"wires":[["dbcf79d1f6198cfb"]]},{"id":"bf14341cd2cea7ae","type":"trigger","z":"934d9cd289491d7c","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"1","extend":true,"overrideDelay":true,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":820,"y":280,"wires":[["150ec21a7fe49e41"]]},{"id":"32a2843399f594ae","type":"change","z":"934d9cd289491d7c","name":"Stel vertraging in","rules":[{"t":"set","p":"delay","pt":"msg","to":"vertraging","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":280,"wires":[["bf14341cd2cea7ae"]]},{"id":"4d5c40d49e71d8ad","type":"change","z":"934d9cd289491d7c","name":"Reset trigger","rules":[{"t":"set","p":"reset","pt":"msg","to":"","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":570,"y":240,"wires":[["bf14341cd2cea7ae","dbcf79d1f6198cfb"]]},{"id":"d411c2deb94d5825","type":"subflow:b94d3c6bf94c92d1","z":"934d9cd289491d7c","name":"Lampwaardes dagdeel","env":[],"x":760,"y":140,"wires":[["aa19be224f8d87e5","161666ae99c1485a"]]},{"id":"161666ae99c1485a","type":"debug","z":"934d9cd289491d7c","name":"Welke dagdeel is het","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1020,"y":80,"wires":[]},{"id":"f0a7dd54a43f8c65","type":"api-current-state","z":"934d9cd289491d7c","name":"lux onder 50","server":"9b8bc642.fed038","version":3,"outputs":2,"halt_if":"50","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":550,"y":140,"wires":[["d411c2deb94d5825"],[]]},{"id":"76c99aa275610b78","type":"subflow:22088a9c6f6e1a67","z":"934d9cd289491d7c","name":"","env":[{"name":"dimmer","value":"input_boolean.dimmer_overloop","type":"str"}],"x":380,"y":280,"wires":[["32a2843399f594ae","1afa2bbbec7ec64c"]]},{"id":"1afa2bbbec7ec64c","type":"debug","z":"934d9cd289491d7c","name":"Welke vertraging wordt ingesteld","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":630,"y":340,"wires":[]},{"id":"0e6281475183fab7","type":"api-call-service","z":"934d9cd289491d7c","name":"Lamp uit","server":"2065350e.86a40a","version":5,"debugenabled":false,"domain":"light","service":"turn_off","areaId":[],"deviceId":[],"entityId":["light.gang_group"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1380,"y":280,"wires":[[]]},{"id":"dbcf79d1f6198cfb","type":"trigger","z":"934d9cd289491d7c","name":"","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"10","extend":true,"overrideDelay":false,"units":"s","reset":"","bytopic":"all","topic":"topic","outputs":1,"x":1210,"y":280,"wires":[["0e6281475183fab7"]]},{"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!
Je zegt; zodra het dimmen is ingezet, dan blijft de lamp wel aan, maar dan in diezelfde gedimde stand?
Waar in de flow loopt het precies mis? Lamp dimmen? Lamp uit?
Edit;
ik heb het even getest; heb enkel mijn eigen lamp er in gezet. De lamp dimt en gaat daarna uit?
[Voor 42% gewijzigd door denuz op 26-01-2023 20:56]
Sorry, ik bedoel dat zodra het gedimde stuk is ingezet, en ik loopt toevallig weer de kamer in, dan wil ik (of zou ik verwachten) dat de lamp weer vol gaat branden alsof de flow opnieuw draait. Dit gebeurt echter niet. De lamp blijft dus wel aan, maar dan in de gedimde stand.denuz schreef op donderdag 26 januari 2023 @ 20:53:
@Wachten... Ik snap het niet?
Je zegt; zodra het dimmen is ingezet, dan blijft de lamp wel aan, maar dan in diezelfde gedimde stand?
Waar in de flow loopt het precies mis? Lamp dimmen? Lamp uit?
Edit;
ik heb het even getest; heb enkel mijn eigen lamp er in gezet. De lamp dimt en gaat daarna uit?
[Afbeelding]
Als je dit kunt lezen, dan werkt mij Signature!
Bij beweging stuur je een reset naar de 2 triggers. De lamp gaat daardoor inderdaad niet meer uit.Wachten... schreef op donderdag 26 januari 2023 @ 21:10:
[...]
Sorry, ik bedoel dat zodra het gedimde stuk is ingezet, en ik loopt toevallig weer de kamer in, dan wil ik (of zou ik verwachten) dat de lamp weer vol gaat branden alsof de flow opnieuw draait. Dit gebeurt echter niet. De lamp blijft dus wel aan, maar dan in de gedimde stand.
In dit gedeelte van je flow gebeurt verder niets om de lamp opnieuw in te stellen. (enkel dimmen en uit)
Is de lux wel onder 50?
Als je de eerste keer motion hebt gaat de lamp wel aan?
Ja bij de eerste keer doet hij gewoon wat hij moet doen. De reset is dat als er opnieuw beweging is, dat de triggers dan gereset worden.denuz schreef op donderdag 26 januari 2023 @ 21:21:
[...]
Bij beweging stuur je een reset naar de 2 triggers. De lamp gaat daardoor inderdaad niet meer uit.
In dit gedeelte van je flow gebeurt verder niets om de lamp opnieuw in te stellen. (enkel dimmen en uit)
[Afbeelding]
[Afbeelding]
Is de lux wel onder 50?
Als je de eerste keer motion hebt gaat de lamp wel aan?
Mij lijkt niet dat het aan de Lux ligt, want als de lamp aan gaat dan gaat niet de lux omhoog door de lamp toch?
Als je dit kunt lezen, dan werkt mij Signature!
Het lastige is dat ik niet kan zien of debuggen waarom het niet werkt. Het lukt de eerste keer wel, daarnaWachten... schreef op donderdag 26 januari 2023 @ 21:32:
[...]
Ja bij de eerste keer doet hij gewoon wat hij moet doen. De reset is dat als er opnieuw beweging is, dat de triggers dan gereset worden.
Mij lijkt niet dat het aan de Lux ligt, want als de lamp aan gaat dan gaat niet de lux omhoog door de lamp toch?
niet.
Mijn advies: koppel er 5 debugs node's achter en je ziet precies achter welke node je flow stopt.
Plug er nog een aantal inject nodes bij en je kan binnen een paar minuten alles testen

Gek genoeg werkt alles wel als ik het wil debuggen.denuz schreef op donderdag 26 januari 2023 @ 21:34:
[...]
Het lastige is dat ik niet kan zien of debuggen waarom het niet werkt. Het lukt de eerste keer wel, daarna
niet.
Mijn advies: koppel er 5 debugs node's achter en je ziet precies achter welke node je flow stopt.
Plug er nog een aantal inject nodes bij en je kan binnen een paar minuten alles testen
Ik heb voor de zekerheid even de lux er toch maar wel uitgehaald. Even kijken of dat het probleem op gaat lossen.
Als je dit kunt lezen, dan werkt mij Signature!
Heel eerlijk; ik heb geen flauw idee wat ik aan het doen benThinkPad schreef op woensdag 25 januari 2023 @ 15:32:
Misschien kun je uitleggen wat je precies wil doen? Heb de nodes even geimporteerd, je hebt twee waardes en er moet één waarde uit? Ik mis waarschijnlijk een berekening ofzo?
En je hebt String(Number()), dus iets wat wellicht al een string is maak je een number van en dan moet het weer terug naar een string? Whut?Domoticz wil toch ook gewoon een number/float hebben aangezien het een sensorwaarde is (temperatuur/verbruik o.i.d. maak ik op uit de context).
Handig truukje is om het volgende even in je function node te zettenJavaScript:In de debug console zie je dan netjes 'string', 'number' etc.
1 node.warn(typeof jouwvariabele)

Nee, ik wil het stap voor stap doen, uiteindelijk wil ik een COP berekening gaan maken.
Daarvoor wilde ik eerst de productie en de consumptie in één function node trekken, om te zien of de waardes correct zijn. Vervolgens kreeg ik NaN waardes, en daar was ik een beetje gestrand.
Domoticz wil volgens mij voor een Custom sensor met COP een string waarde hebben.
Was nu bezig deze afzonderlijke waardes correct naar Domoticz te krijgen.
Belangrijk om te onthouden: nodes in een flow zijn agnostisch, maw ze zijn niet aware van andere messages (elke msg heeft zijn eigen ID en word individueel behandeld), je kunt dus niet 2 verschillende sources aan een enkele functie node hangen en dan de values vergelijken.MikeyMan schreef op vrijdag 27 januari 2023 @ 09:31:
Vervolgens kreeg ik NaN waardes, en daar was ik een beetje gestrand.
Je zult de berichten eerst moeten combineren, dit kan met de join-node, deze kun je flexibel instellen zodat je 1 msg krijgt met beide properties, die je dan op zijn beurt de function node in kunt sturen. Zelfs zou ik dan de native switch nodes gebruiken, maakt een flow veel leesbaarder.
De in inhoud van beide payloads zijn het hetzelfde maar toch laat hij het bericht niet door. Aan 11 ipv 11.0 ligt het niet dat heb ik al wel getest.Want als ik payload2 vergelijk met een vaste waarde maakt het niet uit of ik 11 of 11.0 ingeef.
[Voor 21% gewijzigd door OcGuru op 12-02-2023 14:06]
Bl44t
Als je number 11 en number 11.0 met elkaar vergelijkt, zal hij wel de waarde "on" doorgeven.
Of pas je HA-node aan dat hij bij State type niet string, maar number doorgeeft. Maar in dat geval zal je bij payload geen "on" meer krijgen maar een nummer.
[Voor 20% gewijzigd door iCrOn op 12-02-2023 16:33]
Thx voor je bericht. Het aanpassen van de events : state node naar number ipv string maakte geen verschil.iCrOn schreef op zondag 12 februari 2023 @ 15:18:
Kan je payload1 en payload2 niet omzetten naar number ipv string? Als je aan je switch een 2e regel toevoegt met "otherwise" en daar een debug er aan zal je zien dat 11.0 en 11 in string niet hetzelfde zijn en dus via de "otherwise" er uit komt als je een string vergelijkt met elkaar.
Als je number 11 en number 11.0 met elkaar vergelijkt, zal hij wel de waarde "on" doorgeven.
Of pas je HA-node aan dat hij bij State type niet string, maar number doorgeeft. Maar in dat geval zal je bij payload geen "on" meer krijgen maar een nummer.
Volgens mij zit het probleem is dat payload2 payload3 HA helpers van het float datatype zijn ipv payload1 die weer een integer is.
Maak nu via een omweg van payload2 en payload3 een integer en daarna de vergelijking. En dit werkt voorlopig


Bl44t
Hiervoor heb ik logischerwijs twee bronnen, de lichtsensor vanuit Tahoma en de temperatuur vanuit Evohome.
De losse berichten kan ik op zich benaderen, maar het samenvoegen om ze in een functie te kunnen gebruiken gaat me niet zo heel goed af.
Heb een join node gebruikt om ze samen in één function node te krijgen. Maar, dit levert geregeld een foutmelding op:
1
2
3
| 22-2-2023 16:57:15node: Functie 2e verdieping function : (error) "TypeError: Cannot read properties of undefined (reading 'svalue2')" |
Ik denk dat dit komt doordat niet alle berichten synchroon binnen komen. De lichtsensor geeft vaker een bericht dan EvoHome, en daar zit die svalue2 niet in.
Deze code heb ik geprutst in de opvolgende function node:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| let measure = parseFloat(msg.payload["domoticz/out/Verlichtingssensor achterkant"].svalue1); let setpoint = parseFloat('2500'); let roomtemp = msg.payload["domoticz/out/2e Verdieping"]; let roomset = parseFloat(msg.payload["domoticz/out/2e Verdieping"].svalue2); let msg1 = {}; let msg2 = {}; if (measure >= setpoint && roomtemp >= (roomset - 1)) { msg1.payload = { "command": "switchlight", "idx": 499, "switchcmd": "Off" }; //Off = Down msg2.payload = { "command": "switchlight", "idx": 500, "switchcmd": "Off" }; //Off = Down } else { msg1.payload = { "command": "switchlight", "idx": 499, "switchcmd": "On" }; //On = Up msg2.payload = { "command": "switchlight", "idx": 500, "switchcmd": "On" }; //On = Up } return [msg1, msg2]; |
Iemand enig idee hoe dit te voorkomen?
Het lijkt op zich te werken, maar beter zonder errors natuurlijk

voor de volledigheid: flowtje:
1
| [{"id":"72dbd6e0609fb14a","type":"mqtt in","z":"743a62898f598be4","name":"","topic":"domoticz/out/Verlichtingssensor achterkant","qos":"2","datatype":"json","broker":"92e5b2c.00a8b5","nl":false,"rap":true,"rh":0,"inputs":0,"x":200,"y":400,"wires":[["e22b7252c47338be","6d9ebcd15f26eb47","16f10790b1453774"]]},{"id":"e22b7252c47338be","type":"debug","z":"743a62898f598be4","name":"Debug Input","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":570,"y":400,"wires":[]},{"id":"d26215205e094572","type":"mqtt out","z":"743a62898f598be4","name":"","topic":"domoticz/in","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"92e5b2c.00a8b5","x":1410,"y":500,"wires":[]},{"id":"882f9884960f2879","type":"function","z":"743a62898f598be4","name":"Functie 2e verdieping","func":"let measure = parseFloat(msg.payload[\"domoticz/out/Verlichtingssensor achterkant\"].svalue1);\nlet setpoint = parseFloat('2500');\nlet roomtemp = msg.payload[\"domoticz/out/2e Verdieping\"];\nlet roomset = parseFloat(msg.payload[\"domoticz/out/2e Verdieping\"].svalue2);\nlet msg1 = {};\nlet msg2 = {};\n\n\nif (measure >= setpoint && roomtemp >= (roomset - 1)) {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 499, \"switchcmd\": \"Off\" }; //Off = Down\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"Off\" }; //Off = Down\n}\n\nelse {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 499, \"switchcmd\": \"On\" }; //On = Up\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"On\" }; //On = Up\n}\n\nreturn [msg1, msg2];","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1120,"y":500,"wires":[["d26215205e094572","5110aa3d54c890d5"]]},{"id":"5110aa3d54c890d5","type":"debug","z":"743a62898f598be4","name":"Debug Functie 2e verdieping","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1460,"y":560,"wires":[]},{"id":"b88bd87a65abac9a","type":"link in","z":"743a62898f598be4","name":"2e Verdieping Evohome","links":["abcf7140801bb72a"],"x":360,"y":500,"wires":[["16f10790b1453774","d7ccae4e9da1b344"]],"l":true},{"id":"f4e134461ec0c386","type":"debug","z":"743a62898f598be4","name":"debug 94","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1020,"y":560,"wires":[]},{"id":"16f10790b1453774","type":"join","z":"743a62898f598be4","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":true,"timeout":"","count":"1","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":790,"y":500,"wires":[["f4e134461ec0c386","882f9884960f2879"]]},{"id":"d7ccae4e9da1b344","type":"debug","z":"743a62898f598be4","name":"debug 125","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":770,"y":580,"wires":[]},{"id":"92e5b2c.00a8b5","type":"mqtt-broker","name":"MQTT (NAS)","broker":"10.0.0.4","port":"1883","clientid":"Node_Red_Client","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}] |
Volgende uitdaging... Vanuit de EvoHome api komen ook rechtstreeks berichten in nodered... Deze zijn per zone gescheiden, en zien er dan zo uit:
1
2
| {"id":"5589567","name":"garage","currentTemperature":15,"targetTemperature":17,"systemModeStatus":{"mode":"Auto","isPermanent":true}} {"id":"3873688","name":"woonkamer","currentTemperature":19.5,"targetTemperature":19.5,"systemModeStatus":{"mode":"Auto","isPermanent":true}} |
Wat zou een logische manier zijn om deze in afzonderlijke output te pushen? Ben met filter en change node aan de gang geweest; maar ik vrees een beetje dat het losse function nodes worden per kamer?
Begin steeds meer het idee te krijgen dat die aanhalingstekens wel uit de topic titel mogen

[Voor 58% gewijzigd door MikeyMan op 22-02-2023 17:29]
Die hadden er ook nooit mogen staan.MikeyMan schreef op woensdag 22 februari 2023 @ 17:01:
Begin steeds meer het idee te krijgen dat die aanhalingstekens wel uit de topic titel mogen
Het is wel degelijk programmeren. Dat de presentatie grotendeels grafisch is doet daar niets aan af.
Als je in de Join node bij 'After a number of message parts' 2 invult, wacht de node totdat hij twee topics binnen heeft voordat hij een message doorgeeft.
[Voor 18% gewijzigd door JW te R op 22-02-2023 19:44]
Ja eensJW te R schreef op woensdag 22 februari 2023 @ 19:12:
[...]
Die hadden er ook nooit mogen staan.
Het is wel degelijk programmeren. Dat de presentatie grotendeels grafisch is doet daar niets aan af.
Als je in de Join node bij 'After a number of message parts' 2 invult, wacht de node totdat hij twee topics binnen heeft voordat hij een message doorgeeft.

Twee topics; dat kunnen ook twee dezelfde zijn? Of wacht ie dan echt op de beide inputs?
Zit sowieso te denken, die mismatch in binnenkomende berichten maakt het misschien wel lastig om deze samen te gebruiken of niet?
Ik bedoel; als ie de functie alleen kan uitvoeren op de momenten dat er toevallig twee waardes binnen komen...? Zou dan die inkomende info niet eerst in een variabele moeten worden opgeslagen waartegen daarna getest kan worden? Hij lijkt nu alleen data te kunnen vinden op het moment van het ontvangen van een bericht.
Maar misschien zit ik er te ver over na te denken nu. Eerst die join node maar doen

[Voor 15% gewijzigd door MikeyMan op 23-02-2023 11:29]
Die error kun je denk ik voorkomen door zoiets:MikeyMan schreef op woensdag 22 februari 2023 @ 17:01:
Heb een join node gebruikt om ze samen in één function node te krijgen. Maar, dit levert geregeld een foutmelding op:
code:
1 2 3 22-2-2023 16:57:15node: Functie 2e verdieping function : (error) "TypeError: Cannot read properties of undefined (reading 'svalue2')"
Ik denk dat dit komt doordat niet alle berichten synchroon binnen komen. De lichtsensor geeft vaker een bericht dan EvoHome, en daar zit die svalue2 niet in.
Deze code heb ik geprutst in de opvolgende function node:
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 let measure = parseFloat(msg.payload["domoticz/out/Verlichtingssensor achterkant"].svalue1); let setpoint = parseFloat('2500'); let roomtemp = msg.payload["domoticz/out/2e Verdieping"]; let roomset = parseFloat(msg.payload["domoticz/out/2e Verdieping"].svalue2); let msg1 = {}; let msg2 = {}; if (measure >= setpoint && roomtemp >= (roomset - 1)) { msg1.payload = { "command": "switchlight", "idx": 499, "switchcmd": "Off" }; //Off = Down msg2.payload = { "command": "switchlight", "idx": 500, "switchcmd": "Off" }; //Off = Down } else { msg1.payload = { "command": "switchlight", "idx": 499, "switchcmd": "On" }; //On = Up msg2.payload = { "command": "switchlight", "idx": 500, "switchcmd": "On" }; //On = Up } return [msg1, msg2];
Iemand enig idee hoe dit te voorkomen?
Het lijkt op zich te werken, maar beter zonder errors natuurlijk
...
1
2
3
4
5
| if (msg.payload[xxx] != undefined) { if (msg.payload [xxx].yyy != undefined) { do something } } |
Ik heb even je flow bekeken en hoewel ik geen expert ben op de join node, denk ik dat het zo niet gaat werken...MikeyMan schreef op woensdag 22 februari 2023 @ 17:01:
Ik probeer een sturing te maken die op basis van de kamertemperatuur de zonneschermen wel of niet dicht laat gaan.
Hiervoor heb ik logischerwijs twee bronnen, de lichtsensor vanuit Tahoma en de temperatuur vanuit Evohome.
De losse berichten kan ik op zich benaderen, maar het samenvoegen om ze in een functie te kunnen gebruiken gaat me niet zo heel goed af.
Heb een join node gebruikt om ze samen in één function node te krijgen. Maar, dit levert geregeld een foutmelding op:
code:
1 2 3 22-2-2023 16:57:15node: Functie 2e verdieping function : (error) "TypeError: Cannot read properties of undefined (reading 'svalue2')"
Ik denk dat dit komt doordat niet alle berichten synchroon binnen komen. De lichtsensor geeft vaker een bericht dan EvoHome, en daar zit die svalue2 niet in.
Iemand enig idee hoe dit te voorkomen?
Je hebt nu namelijk 2 triggers, namelijk Kamertemp en Lichtsensor.
Met "message parts" op 1, dan triggert elk van deze de function node en dan zal er dus maar 1 van de waarden beschikbaar zijn.
Met "message parts" op 2, dan wordt de function node pas uitgevoerd als van elk van de trigger nodes er 1-tje is binnengekomen (aangenomen dat het topic verschillend is)
Wat je kunt doen om te debuggen is een inject node naast de trigger nodes plaatsen met verschillende waarden zodat je eenvoudig verschillende inputs kunt testen.
Wat je volgens mij eigenlijk wilt is slechts 1 trigger, namelijk de Lichtsensor. Als deze boven een bepaalde waarde komt (2500) dan moet pas gekeken worden naar de temperatuur in de kamer (is dus geen trigger, maar gewoon waarde uitlezen).
Andersom kan misschien ook: als de temp in de kamer te hoog wordt (trigger), kijk dan of de zon schijnt (waarde uitlezen). Zo ja, doe het scherm omlaag.
Hou er wel rekening mee dat je waarschijnlijk nog een vertraging of temperatuurbereik moet inbouwen, want anders kan het zomaar zijn dat je zonnescherm open/dicht/open/dicht/etc gaat. De temperatuur in de kamer kan namelijk dalen als het zonnescherm naar beneden gaat, of er kan een wolkje langsdrijven.
Feel free to Buy me a coffee
Ben nu bezig om e.e.a. om te gooien. Heb nu domoticz als bron voor de evohome input. Maar merk dat daar weleens een paar rare dingen in zitten. Ga node red leading maken en de data daar vandaan naar domoticz sturen ipv andersom.
Daarna verder met de zonneschermen. De vertraging is ook wel een punt. Wilde dat idd met een range doen en een beetje afvlakken met de smooth node.
Die waarde moet je natuurlijk dan wel kunnen ophalen.
Nog steeds tevreden domoticz gebruiker? Stap over op HA

En waarde ophalen betekent dan iets van global set?denuz schreef op vrijdag 24 februari 2023 @ 12:35:
@MikeyMan Nee, hoeft niet in hetzelfde bericht ( de trigger) te zitten je kan later in de flow altijd nog een check doen op de huidige waarde.
Die waarde moet je natuurlijk dan wel kunnen ophalen.
Als ik iets niet wil is het integratie tussen verschillende stukken software. Node red draait nu in docker op mn nas. Zit me prima zo.offtopic:
Nog steeds tevreden domoticz gebruiker? Stap over op HAdie heeft een stuk betere integratie met Node-red
Mbt domoticz; het heeft allebei zn voors en tegens. Was door het stoppen van openzwave support op het punt om over te stappen, maar de migratie is me veel teveel moeite voor wat ik ervoor terug krijg eerlijk gezegd. Heb het wel naast elkaar draaien nu om te testen, heeft allebei zn voors en tegens. Maar domoticz is nu in vele jaren zo gegroeid.
Kun je o.b.v. de Idx in domoticz de waarde ophalen?MikeyMan schreef op vrijdag 24 februari 2023 @ 12:55:
[...]
En waarde ophalen betekent dan iets van global set?
[...]
Als ik iets niet wil is het integratie tussen verschillende stukken software. Node red draait nu in docker op mn nas. Zit me prima zo.
Mbt domoticz; het heeft allebei zn voors en tegens. Was door het stoppen van openzwave support op het punt om over te stappen, maar de migratie is me veel teveel moeite voor wat ik ervoor terug krijg eerlijk gezegd. Heb het wel naast elkaar draaien nu om te testen, heeft allebei zn voors en tegens. Maar domoticz is nu in vele jaren zo gegroeid.
Ik zie dat je nu naar MQTT gebruikt, je zou o.b.v. de MQTT de waarde in een flow.variabele kunnen zetten.
Mogelijke oplossing:
De functie bouw je dus om om niet de payload waarde maar de flow waarde te gebruiken.
En wat betreft de integratie.. je gebruikt nu MQTT om waardes in node-red te krijgen. Dat is toch ook een vorm van integratie/connectie.
Ik gebruik in node-red websockets(gewoon een addon) om connectie te maken. Daarmee kan je dus direct de waarde opvragen van een sensor in home assistant.
Probeer alleen te zeggen dat de moeite die je nu(en ook eerder) moet doen om iets uit domoticz te halen een enorm verschil is.
Ik heb ook in het verleden domoticz gebruikt en snap dat de overstap tijd/moeite kost.
Eenmaal over op HomeAssitant krijg ik deze rotine niet meer nagebouwd. Eerst tevergeefs met blueprints geprobeert. Nu in NodeRed ben ik voor mijn gevoel dichtbij, maar hij doet het nog niet helemaal. Als beweging de trigger is, schakelt de verlichting niet automatisch aan en uit, en als dag/nacht de trigger is, lijkt de beweging het niet altijd te doen. Iemand tips?
Beweging heb je nu niet als trigger?Dr.156 schreef op zaterdag 25 februari 2023 @ 13:39:
Ik had in Domoticz een mooie routine voor mijn dimbare buitenverlichting met bewegingssensor: na zonsondergang aan op 30% (voor de sfeer), bij beweging even naar 100%. Na 22:00 uit, maar bij beweging wel weer op 100%, en overdag helemaal uit natuurlijk. Dit was de blocky die werkte:
[Afbeelding]
Eenmaal over op HomeAssitant krijg ik deze rotine niet meer nagebouwd. Eerst tevergeefs met blueprints geprobeert. Nu in NodeRed ben ik voor mijn gevoel dichtbij, maar hij doet het nog niet helemaal. Als beweging de trigger is, schakelt de verlichting niet automatisch aan en uit, en als dag/nacht de trigger is, lijkt de beweging het niet altijd te doen. Iemand tips?
[Afbeelding]
De big timer(gebruik ik zelf niet) is nu je trigger. Als deze wijzigt wordt er gecheckt of er beweging is.
Ik zou het opsplitsen.
1x om licht aan te zetten op 25%
1x licht uit
1x beweging, afhankelijk van tijd, kan gewoon met time range node de verlichting naar 100%
Kun je daar wat mee?
1
| [{"id":"f9baa6877a6cb5f7","type":"http request","z":"743a62898f598be4","name":"Get Devices","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://10.0.0.161:8443/enduser-mobile-web/1/enduserAPI/setup/devices","tls":"930fdadf3d5bf745","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"bearer","senderr":false,"headers":[],"x":330,"y":1080,"wires":[["8996eb27cc3798ba"]]},{"id":"c013bae9169e27b9","type":"inject","z":"743a62898f598be4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"60","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":1080,"wires":[["f9baa6877a6cb5f7"]]},{"id":"8996eb27cc3798ba","type":"json","z":"743a62898f598be4","name":"","property":"payload","action":"","pretty":false,"x":550,"y":1080,"wires":[["d166203d735fae5f","1eaab033f68f4aeb"]]},{"id":"017a08c0a582c90c","type":"debug","z":"743a62898f598be4","name":"Debug zonnescherm Woonkamer","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1100,"y":1080,"wires":[]},{"id":"d166203d735fae5f","type":"function","z":"743a62898f598be4","name":"Functie Woonkamer","func":"var Lichtsensor = msg.payload[3].states[3].value;\nvar Woonkamer_PV = global.get('EvoHome_woonkamer_PV', \"file\");\nvar Woonkamer_SP = global.get('EvoHome_woonkamer_SP', \"file\");\nlet Setpoint = global.get('Tahoma_setpoint', \"file\"); // parseFloat ('25000');\nlet msg1 = {};\nlet msg2 = {};\nlet msg3 = {};\nlet Check = Woonkamer_SP + 1;\n\nmsg.payload = { \"Licht\": Lichtsensor, \"PV\": Woonkamer_PV, \"SP\": Woonkamer_SP, \"Setpoint\": Setpoint };\n\nreturn msg;\n\n\n/*\nvar Lichtsensor = msg.payload[3].states[3].value ;\nvar Zolder_PV = global.get('EvoHome_2everdieping_PV', \"file\");\nvar Zolder_SP = global.get('EvoHome_2everdieping_SP', \"file\");\nlet Setpoint = global.get('Tahoma_setpoint', \"file\"); // parseFloat ('25000');\nlet Check = Zolder_SP + 1;\nlet msg1 = {};\nlet msg2 = {};\nlet msg3 = {};\n\n//msg.payload = {\"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint};\n\nif (Lichtsensor >= Setpoint && Zolder_PV >= (Check)) {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 496, \"switchcmd\": \"Off\" }; //Off = Down\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"Off\" }; //Off = Down\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint }; //test\n}\n\nelse {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 496, \"switchcmd\": \"On\" }; //On = Up\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"On\" }; //On = Up\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint, 'Check': Check }; //test\n}\n\nreturn [msg1, msg2, msg3];\n*/","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":800,"y":1080,"wires":[["017a08c0a582c90c"]]},{"id":"1eaab033f68f4aeb","type":"function","z":"743a62898f598be4","name":"Functie 2e Verdieping","func":"var Lichtsensor = msg.payload[3].states[3].value ;\nvar Zolder_PV = global.get('EvoHome_2everdieping_PV', \"file\");\nvar Zolder_SP = global.get('EvoHome_2everdieping_SP', \"file\");\nlet Setpoint = global.get('Tahoma_setpoint', \"file\"); // parseFloat ('25000');\nlet Check = Zolder_SP + 1;\nlet msg1 = {};\nlet msg2 = {};\nlet msg3 = {};\n\n//msg.payload = {\"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint};\n\nif (Lichtsensor >= Setpoint && Zolder_PV >= (Check)) {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 496, \"switchcmd\": \"Off\" }; //Off = Down\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"Off\" }; //Off = Down\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint }; //test\n}\n\nelse {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 496, \"switchcmd\": \"On\" }; //On = Up\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"On\" }; //On = Up\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint, 'Check': Check }; //test\n}\n\nreturn [msg1, msg2, msg3];\n\n//return [msg];\n\n\n/*\n\n\n\nif (Lichtsensor >= Setpoint && Zolder_PV >= (Zolder_SP - 1)) {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 499, \"switchcmd\": \"Off\" }; //Off = Down\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"Off\" }; //Off = Down\n}\n\nelse {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 499, \"switchcmd\": \"On\" }; //On = Up\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"On\" }; //On = Up\n}\n\nreturn [msg1, msg2];\n*/","outputs":3,"noerr":0,"initialize":"","finalize":"","libs":[],"x":800,"y":1180,"wires":[["4e1831d42cf531af","2348cf9aa4611024"],["4e1831d42cf531af","2348cf9aa4611024"],["4e1831d42cf531af"]]},{"id":"4e1831d42cf531af","type":"debug","z":"743a62898f598be4","name":"Debug zonneschermen 2e verdieping","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1230,"y":1240,"wires":[]},{"id":"2348cf9aa4611024","type":"mqtt out","z":"743a62898f598be4","name":"","topic":"domoticz/in","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"92e5b2c.00a8b5","x":1650,"y":1160,"wires":[]},{"id":"930fdadf3d5bf745","type":"tls-config","name":"","cert":"","key":"","ca":"","certname":"","keyname":"","caname":"","servername":"","verifyservercert":false,"alpnprotocol":""},{"id":"92e5b2c.00a8b5","type":"mqtt-broker","name":"MQTT (NAS)","broker":"10.0.0.4","port":"1883","clientid":"Node_Red_Client","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}] |
Variabelen zijn m.i. nog een beetje een rommeltje qua naamgeving.
En denk dat ik nog iets moet met een smooth node op de lichtsensor om op en neergaan van de schermen te voorkomen.
En ik zie eerlijk gezegd de Tahoma API call nog weleens stuk lopen op de autorisatie ook. Draak van een oplossing voor een lokale doos.

Zit te denken aan elke minuut pollen en dan een smooth node over vijf waardes.
Met HA heb je een aantal HA-specifieke Node Red nodes ter beschikking, en dan zou een (heel erg basic) flow er zo uit kunnen zien:
Natuurlijk heb je in jouw geval wat specifieke dingen zoals de EvoHome en TaHoma communicatie, maar dat zou voor de basis-logica niet uit moeten maken.
Is het in jouw situatie mogelijk om de boel op te delen in elementaire bouwsteentjes, die elk afzonderlijk kunnen werken? Dus zoiets:
Ik weet overigens niet wat EvoHome_woonkamer_PV en EvoHome_woonkamer_SP precies betekenen. Is dat toevallig de actuele vs de ingestelde temperatuur in de woonkamer?
Feel free to Buy me a coffee
Ik wil juist de afhankelijkheid van domoticz verminderen door de APIs rechtstreeks aan te roepen. Das dus inderdaad een aparte evohome en een aparte tahoma api.
Daarnaast zijn het zes zonneschermen die op basis van vier kamertemperaturen en bijbehorend setpoint mogen werken

Feel free to Buy me a coffee
Vooral uitgaande mqtt berichten mis ik weleens wat. En de evohome api loopt achter in domoticz.musicpixel schreef op dinsdag 28 februari 2023 @ 12:44:
@MikeyMan Nu hou ik ook niet van teveel afhankelijkheden, maar wat is voor jou de reden dat je minder afhankelijkheid van domoticz wilt?
Heb daar nu meer controle over op deze manier.
Je kunt ook een hysterese inbouwen:MikeyMan schreef op dinsdag 28 februari 2023 @ 10:06:
En denk dat ik nog iets moet met een smooth node op de lichtsensor om op en neergaan van de schermen te voorkomen.
(..)
Zit te denken aan elke minuut pollen en dan een smooth node over vijf waardes.
Scherm omhoog bij (waarde < x), omlaag bij (waarde > (x + y))
Goeie! Kan ik idd wel doen.JW te R schreef op dinsdag 28 februari 2023 @ 19:33:
[...]
Je kunt ook een hysterese inbouwen:
Scherm omhoog bij (waarde < x), omlaag bij (waarde > (x + y))
Zal wel naast elkaar moeten denk ik. Je wilt niet bij elke wolk de schermen weer in hebben.
In principe stuur je natuurlijk vooral het moment van openen. En als het zomer is, zal alles als het goed is vooral op de lichtsensor lopen.
Denk vooral wat stoken te besparen zo, door meer gebruik te maken van de zon

[Voor 24% gewijzigd door MikeyMan op 28-02-2023 20:08]
Ben er ff mee aan het stoeien, want kleine variaties rond het meetpunt leverden inderdaad wat heen en weer gedrag op.... Maar volgens mij gaat er in m'n logica nu iets niet helemaal goed...?
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
| var Lichtsensor = msg.payload; Lichtsensor = parseFloat(Lichtsensor.toFixed(0)); var Woonkamer_PV = global.get('EvoHome_woonkamer_PV', "file"); var Woonkamer_SP = global.get('EvoHome_woonkamer_SP', "file"); let Setpoint = global.get('Tahoma_setpoint', "file"); // parseFloat ('25000'); let DT = global.get('Woonkamer_dT', "file") let msg1 = {}; let msg2 = {}; let msg3 = {}; let msg4 = {}; let Switch = Woonkamer_SP + DT let OnOff = global.get('TahomaSwitch',"file"); //msg.payload = { "Licht": Lichtsensor, "PV": Woonkamer_PV, "SP": Woonkamer_SP, "Setpoint": Setpoint }; if (Lichtsensor >= Setpoint && Woonkamer_PV >= (Switch) && OnOff == true) { msg1.payload = { "command": "switchlight", "idx": 492, "switchcmd": "Off" }; //Off = Down msg2.payload = { "command": "switchlight", "idx": 493, "switchcmd": "Off" }; //Off = Down msg3.payload = { "Licht": Lichtsensor, "PV": Woonkamer_PV, "SP": Woonkamer_SP, "Setpoint": Setpoint, 'DT': DT, 'Switch@': Switch, 'OnOff': OnOff }; //test msg4.payload = Woonkamer_PV } else if (Lichtsensor >= Setpoint && Woonkamer_PV < (Switch-0.5) && OnOff == true) { msg1.payload = { "command": "switchlight", "idx": 492, "switchcmd": "On" }; //On = Up msg2.payload = { "command": "switchlight", "idx": 493, "switchcmd": "On" }; //On = Up msg3.payload = { "Licht": Lichtsensor, "PV": Woonkamer_PV, "SP": Woonkamer_SP, "Setpoint": Setpoint, 'DT': DT, 'Switch@': Switch, 'OnOff': OnOff }; //test msg4.payload = Woonkamer_PV } else { msg1.payload = { "command": "switchlight", "idx": 492, "switchcmd": "On" }; //On = Up msg2.payload = { "command": "switchlight", "idx": 493, "switchcmd": "On" }; //On = Up msg3.payload = { "Licht": Lichtsensor, "PV": Woonkamer_PV, "SP": Woonkamer_SP, "Setpoint": Setpoint, 'DT': DT, 'Switch@': Switch, 'OnOff': OnOff }; //test msg4.payload = Woonkamer_PV } |
Moet ik nou een else verzinnen die buiten alle bovenstaande gevallen gaat? Was mijn eerste ingeving, maar heb het idee dat ik daar iets over het hoofd zie...?
Of toch nog een else if toevoegen die op de lichtsensor triggert?
[Voor 5% gewijzigd door ThinkPad op 02-03-2023 16:54. Reden: code=javascript voor extragratis kleurtjes!11]
Ik begrijp niet goed wat je probeert te bereiken. Wat wil je bijvoorbeeld doen als het donker is?
Ook zie ik niet hoe dit stukje Javascript in je flow past (ik heb even teruggekeken naar de flow die je een paar dagen geleden hebt gepost, maar ik denk dat die niet meer uptodate is).
Ik ga toch een poging wagen.
Die lichtsensor buiten beschouwing latend vermoed ik dat er nog iets niet goed gaat in je condities.
De eerste : (Woonkamer_PV >= (Switch)) moet m.i. zijn (Woonkamer_PV > (Switch))
De tweede if: (Woonkamer_PV < (Switch-0.5) moet m.i. zijn (Woonkamer_PV < Woonkamer_SP))
en in de laatste else tak moet je niks met het scherm doen. Dan zit je ongeveer op de gewenste temperatuur.
De DT moet denk ik groter zijn dan 0,5 graad, want de Honeywell node werkt niet nauwkeuriger dan 0,5 graad.
Om die reden gebruik ik zelf de Honeywell integratie van Home Assistant, waarvan ik de metingen via MQTT doorgeef naar Node-Red. Omslachtig, maar het werkt op 0,1 graad nauwkeurig.
En nog een tip: Als je vanaf een SD kaart werkt kun je de PV beter niet wegschrijven naar een file; houd die lekker in het geheugen. Zie de documentatie over context.
Werk overigens op een NAS, dus file is op zich prima. Voordeel van file is dat ie na een reboot ook door draai lijkt me?
Ah ja, wilde juist de lichtsensor gebruiken als trigger, niet de temperatuur. Daarom heb ik die opgeslagen.JW te R schreef op donderdag 2 maart 2023 @ 20:28:
PV is de meting van het moment. Die wordt per definitie elke keer opnieuw bepaald met een sensor. Het heeft dus geen zin om die op disk te zetten.
Had misschien inderdaad niet gehoeven.
Gezien de volatiliteit van zowel de temperatuurmetingen (die evohome meting is echt drama. Rondt af richting setpoint) als de lichtmeting heb ik hier nog een paar smooth nodes op gezet. Tis daarmee wel een beetje uit de hand gelopen

Voor evohome gebruik ik nu de volgende flow om de metingen los te trekken. En een smooth node om de volatiliteit een beetje te dempen. Had eerst een enkele smooth node achter de evohome node zitten, maar dat leverde hele rare waardes op. Schrijf inderdaad alles naar file weg, leek me makkelijker om zo elders op te pakken als global value. Maar misschien overbodig inderdaad.
[Voor 92% gewijzigd door MikeyMan op 03-03-2023 14:24]

1
| [{"id":"c8d703f331c6071d","type":"group","z":"743a62898f598be4","name":"Zonneschermen","style":{"label":true},"nodes":["f9baa6877a6cb5f7","c013bae9169e27b9","8996eb27cc3798ba","017a08c0a582c90c","d166203d735fae5f","1eaab033f68f4aeb","4e1831d42cf531af","2348cf9aa4611024","f7ecd15f245f12af","ef617d8ce6930543","3ca391b0f4bd36e8","5be6961222360e34","04421a302892d6b4","600193ffafd5b981","2dc60a25e7b4e180","9602b1977e1bd875","980d0d0ec33fdb13","10505c1f6d64de38","9ebe33c37380e440","fa21d77d608d2e27","ecc7d7a1107b7fe1","d1bf2590bff5ebb0","1e3a6e1f00af0555","cd8247a5b99e3bba","1a1e75425d864eb2","e7d1685b76b30329","4984951f2f209c9a","1311622006974fd7","f98c7ce054f65983","a8e954352c582076","53f2ee23598af3bd","727ad394334376ae","02e40a2b349b97bb","1b7e179817b90ce8","5339a2cf2a892a70","12235a4e62659c4c","5a869be925c71afc","a544716e34b0934b","bff78000d0158a48","446e6035a22d2517","90914236891c77c7","095985e3aba8f8bd","07fd601fb49189ca","82ba4aae8b8369ea","c2c37f185ae8e4a4","566546da77f190ca","21d96ab435737c02","77a2a99ae11a396e","bd9766838d44804b","c53da0a8c39cac4d","f0a764cccac8b5b0","6c5e0442f3b81ca6","7a23dba3918351b7","2e3d397b960dfa16","cef03e389cc31311"],"x":14,"y":699,"w":2692,"h":962},{"id":"f9baa6877a6cb5f7","type":"http request","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Get Devices","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://10.0.0.161:8443/enduser-mobile-web/1/enduserAPI/setup/devices","tls":"930fdadf3d5bf745","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"bearer","senderr":false,"headers":[],"x":330,"y":1040,"wires":[["8996eb27cc3798ba","c2c37f185ae8e4a4"]]},{"id":"c013bae9169e27b9","type":"inject","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"180","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":1040,"wires":[["f9baa6877a6cb5f7"]]},{"id":"8996eb27cc3798ba","type":"json","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","property":"payload","action":"","pretty":false,"x":510,"y":1040,"wires":[["3ca391b0f4bd36e8"]]},{"id":"017a08c0a582c90c","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Debug zonnescherm Woonkamer Domoticz","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":2030,"y":740,"wires":[]},{"id":"d166203d735fae5f","type":"function","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Functie Woonkamer","func":"var Lichtsensor = msg.payload;\nLichtsensor = parseFloat(Lichtsensor.toFixed(0));\nvar Woonkamer_PV = global.get('EvoHome_woonkamer_PV', \"file\");\nvar Woonkamer_SP = global.get('EvoHome_woonkamer_SP', \"file\");\nlet Setpoint = global.get('Tahoma_setpoint', \"file\"); // parseFloat ('25000');\nlet DT = global.get('Woonkamer_dT', \"file\")\nlet msg1 = {};\nlet msg2 = {};\nlet msg3 = {};\nlet msg4 = {};\nlet Switch = Woonkamer_SP + DT\nlet OnOff = global.get('TahomaSwitch',\"file\");\n\n//msg.payload = { \"Licht\": Lichtsensor, \"PV\": Woonkamer_PV, \"SP\": Woonkamer_SP, \"Setpoint\": Setpoint };\n\nif (Lichtsensor >= Setpoint && Woonkamer_PV >= (Switch) && OnOff == true) {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 492, \"switchcmd\": \"Off\" }; //Off = Down\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 493, \"switchcmd\": \"Off\" }; //Off = Down\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Woonkamer_PV, \"SP\": Woonkamer_SP, \"Setpoint\": Setpoint, 'DT': DT, 'Switch@': Switch, 'OnOff': OnOff }; //test\n msg4.payload = Woonkamer_PV\n}\n\nelse if (Lichtsensor >= Setpoint && Woonkamer_PV < (Switch-0.5) && OnOff == true) {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 492, \"switchcmd\": \"On\" }; //On = Up\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 493, \"switchcmd\": \"On\" }; //On = Up\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Woonkamer_PV, \"SP\": Woonkamer_SP, \"Setpoint\": Setpoint, 'DT': DT, 'Switch@': Switch, 'OnOff': OnOff }; //test\n msg4.payload = Woonkamer_PV\n}\n\nelse {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 492, \"switchcmd\": \"On\" }; //On = Up\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 493, \"switchcmd\": \"On\" }; //On = Up\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Woonkamer_PV, \"SP\": Woonkamer_SP, \"Setpoint\": Setpoint, 'DT': DT, 'Switch@': Switch, 'OnOff': OnOff }; //test\n msg4.payload = Woonkamer_PV\n}\n\n\nreturn [msg1, msg2, msg3, msg4];\n\n\n\n//return msg;\n\n/*\nvar Lichtsensor = msg.payload[3].states[3].value;\nvar Zolder_PV = global.get('EvoHome_2everdieping_PV', \"file\");\nvar Zolder_SP = global.get('EvoHome_2everdieping_SP', \"file\");\nlet Setpoint = global.get('Tahoma_setpoint', \"file\"); // parseFloat ('25000');\nlet Check = Zolder_SP + 0.5;\nlet msg1 = {};\nlet msg2 = {};\nlet msg3 = {};\n\n//msg.payload = {\"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint};\n\nif (Lichtsensor >= Setpoint && Zolder_PV >= (Check)) {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 496, \"switchcmd\": \"Off\" }; //Off = Down\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"Off\" }; //Off = Down\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint }; //test\n}\n\nelse {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 496, \"switchcmd\": \"On\" }; //On = Up\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"On\" }; //On = Up\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint, 'Check': Check }; //test\n}\n\nreturn [msg1, msg2, msg3];\n*/","outputs":4,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1260,"y":820,"wires":[["017a08c0a582c90c","2348cf9aa4611024"],["017a08c0a582c90c","2348cf9aa4611024"],["ef617d8ce6930543","12235a4e62659c4c"],["77a2a99ae11a396e"]]},{"id":"1eaab033f68f4aeb","type":"function","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Functie 2e Verdieping","func":"var Lichtsensor = msg.payload;\nLichtsensor = parseFloat(Lichtsensor.toFixed(0));\nvar Zolder_PV = global.get('EvoHome_2everdieping_PV', \"file\");\nvar Zolder_SP = global.get('EvoHome_2everdieping_SP', \"file\");\nlet Setpoint = global.get('Tahoma_setpoint', \"file\"); // parseFloat ('25000');\nlet Zolder_DT = global.get('Zolder_dT', \"file\")\nlet Switch = Zolder_SP + Zolder_DT;\nlet msg1 = {};\nlet msg2 = {};\nlet msg3 = {};\nlet msg4 = {};\nlet OnOff = global.get('TahomaSwitch', \"file\");\n\n//msg.payload = {\"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint};\n\nif (Lichtsensor >= Setpoint && Zolder_PV >= (Switch) && OnOff == true) {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 496, \"switchcmd\": \"Off\" }; //Off = Down\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 497, \"switchcmd\": \"Off\" }; //Off = Down\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint, 'DT': Zolder_DT, 'Switch@': Switch, 'OnOff': OnOff }; //test\n msg4.payload = Zolder_PV;\n}\n\nelse {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 496, \"switchcmd\": \"On\" }; //On = Up\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 497, \"switchcmd\": \"On\" }; //On = Up\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint, 'DT': Zolder_DT, 'Switch@': Switch, 'OnOff': OnOff }; //test\n msg4.payload = Zolder_PV;\n}\n\nreturn [msg1, msg2, msg3, msg4];\n\n//return [msg];\n\n\n/*\n\n\n\nif (Lichtsensor >= Setpoint && Zolder_PV >= (Zolder_SP - 1)) {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 499, \"switchcmd\": \"Off\" }; //Off = Down\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"Off\" }; //Off = Down\n}\n\nelse {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 499, \"switchcmd\": \"On\" }; //On = Up\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"On\" }; //On = Up\n}\n\nreturn [msg1, msg2];\n*/","outputs":4,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1280,"y":1520,"wires":[["4e1831d42cf531af","2348cf9aa4611024"],["4e1831d42cf531af","2348cf9aa4611024"],["f7ecd15f245f12af","bff78000d0158a48"],["f0a764cccac8b5b0"]]},{"id":"4e1831d42cf531af","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Debug zonneschermen 2e verdieping domoticz","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":2060,"y":1480,"wires":[]},{"id":"2348cf9aa4611024","type":"mqtt out","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","topic":"domoticz/in","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"92e5b2c.00a8b5","x":2150,"y":1120,"wires":[]},{"id":"f7ecd15f245f12af","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Debug zonneschermen 2e verdieping values","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":2050,"y":1520,"wires":[]},{"id":"ef617d8ce6930543","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Debug zonnescherm Woonkamer values","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":2020,"y":780,"wires":[]},{"id":"3ca391b0f4bd36e8","type":"change","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload[3].states[3].value","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":700,"y":1040,"wires":[["5be6961222360e34","04421a302892d6b4","5a869be925c71afc","90914236891c77c7"]]},{"id":"5be6961222360e34","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug 140 raw measure","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":970,"y":1260,"wires":[]},{"id":"04421a302892d6b4","type":"smooth","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","property":"payload","action":"mean","count":"3","round":"0","mult":"single","reduce":false,"x":920,"y":1040,"wires":[["d166203d735fae5f","1eaab033f68f4aeb","600193ffafd5b981","2dc60a25e7b4e180","10505c1f6d64de38"]]},{"id":"600193ffafd5b981","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug 141 smooth measure","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1280,"y":1040,"wires":[]},{"id":"2dc60a25e7b4e180","type":"function","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Functie Slaapkamer","func":"var Lichtsensor = msg.payload;\nLichtsensor = parseFloat(Lichtsensor.toFixed(0));\nvar Slaapkamer_PV = global.get('EvoHome_slaapkamer_PV', \"file\");\nvar Slaapkamer_SP = global.get('EvoHome_slaapkamer_SP', \"file\");\nlet Setpoint = global.get('Tahoma_setpoint', \"file\"); // parseFloat ('25000');\nlet Slaapkamer_DT = global.get('Slaapkamer_dT', \"file\")\nlet msg1 = {};\nlet msg2 = {};\nlet msg3 = {};\nlet Switch = Slaapkamer_SP + Slaapkamer_DT;\nlet OnOff = global.get('TahomaSwitch', \"file\");\n\n\n/*\nmsg.payload = { \"Licht\": Lichtsensor, \"PV\": Slaapkamer_PV, \"SP\": Slaapkamer_SP, \"Setpoint\": Setpoint };\nreturn msg;\n*/\n\nif (Lichtsensor >= Setpoint && Slaapkamer_PV >= (Switch) && OnOff == true) {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 494, \"switchcmd\": \"Off\" }; //Off = Down\n msg2.payload = { \"Licht\": Lichtsensor, \"PV\": Slaapkamer_PV, \"SP\": Slaapkamer_SP, \"Setpoint\": Setpoint, 'DT': Slaapkamer_DT, 'Switch@': Switch, 'OnOff': OnOff }; //test\n msg3.payload = Slaapkamer_PV\n}\n\nelse {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 494, \"switchcmd\": \"On\" }; //On = Up\n msg2.payload = { \"Licht\": Lichtsensor, \"PV\": Slaapkamer_PV, \"SP\": Slaapkamer_SP, \"Setpoint\": Setpoint, 'DT': Slaapkamer_DT, 'Switch@': Switch, 'OnOff': OnOff }; //test\n msg3.payload = Slaapkamer_PV\n}\n\nreturn [msg1, msg2, msg3];\n\n\n\n\n/*\nvar Lichtsensor = msg.payload[3].states[3].value;\nvar Zolder_PV = global.get('EvoHome_2everdieping_PV', \"file\");\nvar Zolder_SP = global.get('EvoHome_2everdieping_SP', \"file\");\nlet Setpoint = global.get('Tahoma_setpoint', \"file\"); // parseFloat ('25000');\nlet Check = Zolder_SP + 0.5;\nlet msg1 = {};\nlet msg2 = {};\nlet msg3 = {};\n\n//msg.payload = {\"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint};\n\nif (Lichtsensor >= Setpoint && Zolder_PV >= (Check)) {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 496, \"switchcmd\": \"Off\" }; //Off = Down\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"Off\" }; //Off = Down\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint }; //test\n}\n\nelse {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 496, \"switchcmd\": \"On\" }; //On = Up\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"On\" }; //On = Up\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint, 'Check': Check }; //test\n}\n\nreturn [msg1, msg2, msg3];\n*/","outputs":3,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1260,"y":940,"wires":[["2348cf9aa4611024","9602b1977e1bd875"],["980d0d0ec33fdb13","a544716e34b0934b"],["21d96ab435737c02"]]},{"id":"9602b1977e1bd875","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Debug zonnescherm Slaapkamer Domoticz","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":2250,"y":900,"wires":[]},{"id":"980d0d0ec33fdb13","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Debug zonnescherm Slaapkamer Values","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":2240,"y":940,"wires":[]},{"id":"10505c1f6d64de38","type":"function","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Functie Gym","func":"var Lichtsensor = msg.payload;\nLichtsensor = parseFloat(Lichtsensor.toFixed(0));\nvar Gym_PV = global.get('EvoHome_gym_PV', \"file\");\nvar Gym_SP = global.get('EvoHome_gym_SP', \"file\");\nlet Setpoint = global.get('Tahoma_setpoint', \"file\"); // parseFloat ('25000');\nlet Gym_DT = global.get('Gym_dT', \"file\")\nlet msg1 = {};\nlet msg2 = {};\nlet msg3 = {};\nlet Switch = Gym_SP + Gym_DT;\nlet OnOff = global.get('TahomaSwitch', \"file\");\n\n/*\nmsg.payload = { \"Licht\": Lichtsensor, \"PV\": Gym_PV, \"SP\": Gym_SP, \"Setpoint\": Setpoint };\nreturn msg;\n*/\n\nif (Lichtsensor >= Setpoint && Gym_PV >= (Switch) && OnOff == true) {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 495, \"switchcmd\": \"Off\" }; //Off = Down\n msg2.payload = { \"Licht\": Lichtsensor, \"PV\": Gym_PV, \"SP\": Gym_SP, \"Setpoint\": Setpoint, 'DT': Gym_DT, 'Switch@': Switch, 'OnOff': OnOff }; //test\n msg3.payload = Gym_PV;\n}\n\nelse {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 495, \"switchcmd\": \"On\" }; //On = Up\n msg2.payload = { \"Licht\": Lichtsensor, \"PV\": Gym_PV, \"SP\": Gym_SP, \"Setpoint\": Setpoint, 'DT': Gym_DT, 'Switch@': Switch, 'OnOff': OnOff }; //test\n msg3.payload = Gym_PV;\n}\n\nreturn [msg1, msg2, msg3];\n\n\n\n/*\nvar Lichtsensor = msg.payload[3].states[3].value;\nvar Zolder_PV = global.get('EvoHome_2everdieping_PV', \"file\");\nvar Zolder_SP = global.get('EvoHome_2everdieping_SP', \"file\");\nlet Setpoint = global.get('Tahoma_setpoint', \"file\"); // parseFloat ('25000');\nlet Check = Zolder_SP + 0.5;\nlet msg1 = {};\nlet msg2 = {};\nlet msg3 = {};\n\n//msg.payload = {\"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint};\n\nif (Lichtsensor >= Setpoint && Zolder_PV >= (Check)) {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 496, \"switchcmd\": \"Off\" }; //Off = Down\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"Off\" }; //Off = Down\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint }; //test\n}\n\nelse {\n msg1.payload = { \"command\": \"switchlight\", \"idx\": 496, \"switchcmd\": \"On\" }; //On = Up\n msg2.payload = { \"command\": \"switchlight\", \"idx\": 500, \"switchcmd\": \"On\" }; //On = Up\n msg3.payload = { \"Licht\": Lichtsensor, \"PV\": Zolder_PV, \"SP\": Zolder_SP, \"Setpoint\": Setpoint, 'Check': Check }; //test\n}\n\nreturn [msg1, msg2, msg3];\n*/","outputs":3,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1250,"y":1300,"wires":[["2348cf9aa4611024","9ebe33c37380e440"],["fa21d77d608d2e27","446e6035a22d2517"],["c53da0a8c39cac4d"]]},{"id":"9ebe33c37380e440","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Debug zonnescherm Gym Domoticz","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":2190,"y":1240,"wires":[]},{"id":"fa21d77d608d2e27","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Debug zonnescherm Gym Values","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":2180,"y":1280,"wires":[]},{"id":"ecc7d7a1107b7fe1","type":"ui_numeric","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","label":"Lux Schakeling","tooltip":"","group":"11b8876a7b7e5539","order":2,"width":0,"height":0,"wrap":true,"passthru":true,"topic":"topic","topicType":"msg","format":"{{value}}","min":0,"max":"100000","step":"1000","className":"","x":140,"y":1320,"wires":[["1e3a6e1f00af0555"]]},{"id":"d1bf2590bff5ebb0","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug 144","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":1320,"wires":[]},{"id":"1e3a6e1f00af0555","type":"function","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Lux switch","func":"let Setpoint = {};\n\nSetpoint = msg.payload;\n{\nglobal.set('Tahoma_setpoint', Setpoint, \"file\");\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":390,"y":1320,"wires":[["d1bf2590bff5ebb0"]]},{"id":"cd8247a5b99e3bba","type":"ui_numeric","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","label":"dT Woonkamer","tooltip":"","group":"11b8876a7b7e5539","order":3,"width":0,"height":0,"wrap":false,"passthru":true,"topic":"topic","topicType":"msg","format":"{{value}}","min":0,"max":"2","step":"0.1","className":"","x":140,"y":1380,"wires":[["1a1e75425d864eb2"]]},{"id":"1a1e75425d864eb2","type":"function","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"function dT Woonkamer","func":"let DT = {};\n\nDT = msg.payload;\n{\nglobal.set('Woonkamer_dT', DT, \"file\");\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":1380,"wires":[["f98c7ce054f65983"]]},{"id":"e7d1685b76b30329","type":"function","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"function dT Slaapkamer","func":"let DT = {};\n\nDT = msg.payload;\n{\n global.set('Slaapkamer_dT', DT, \"file\");\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":1440,"wires":[["a8e954352c582076"]]},{"id":"4984951f2f209c9a","type":"function","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"function dT Gym","func":"let DT = {};\n\nDT = msg.payload;\n{\n global.set('Gym_dT', DT, \"file\");\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":1500,"wires":[["53f2ee23598af3bd"]]},{"id":"1311622006974fd7","type":"function","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"function 2e Verdieping","func":"let DT = {};\n\nDT = msg.payload;\n{\n global.set('Zolder_dT', DT, \"file\");\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":1560,"wires":[["727ad394334376ae"]]},{"id":"f98c7ce054f65983","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug 145","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":1380,"wires":[]},{"id":"a8e954352c582076","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug 146","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":1440,"wires":[]},{"id":"53f2ee23598af3bd","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug 147","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":1500,"wires":[]},{"id":"727ad394334376ae","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug 148","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":1560,"wires":[]},{"id":"02e40a2b349b97bb","type":"ui_numeric","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","label":"dT Slaapkamer","tooltip":"","group":"11b8876a7b7e5539","order":4,"width":0,"height":0,"wrap":false,"passthru":true,"topic":"topic","topicType":"msg","format":"{{value}}","min":0,"max":"2","step":"0.1","className":"","x":140,"y":1440,"wires":[["e7d1685b76b30329"]]},{"id":"1b7e179817b90ce8","type":"ui_numeric","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","label":"dT Gym","tooltip":"","group":"11b8876a7b7e5539","order":5,"width":0,"height":0,"wrap":false,"passthru":true,"topic":"topic","topicType":"msg","format":"{{value}}","min":0,"max":"2","step":"0.1","className":"","x":120,"y":1500,"wires":[["4984951f2f209c9a"]]},{"id":"5339a2cf2a892a70","type":"ui_numeric","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","label":"dT 2e Verdieping","tooltip":"","group":"11b8876a7b7e5539","order":6,"width":0,"height":0,"wrap":false,"passthru":true,"topic":"topic","topicType":"msg","format":"{{value}}","min":0,"max":"2","step":"0.1","className":"","x":150,"y":1560,"wires":[["1311622006974fd7"]]},{"id":"12235a4e62659c4c","type":"ui_text","z":"743a62898f598be4","g":"c8d703f331c6071d","group":"cdd6bc3a70d5012e","order":3,"width":0,"height":0,"name":"","label":"Woonkamer","format":"{{msg.payload}}","layout":"row-spread","className":"","x":1930,"y":820,"wires":[]},{"id":"5a869be925c71afc","type":"ui_text","z":"743a62898f598be4","g":"c8d703f331c6071d","group":"cdd6bc3a70d5012e","order":2,"width":0,"height":0,"name":"","label":"Lichtsensor","format":"{{msg.payload}}","layout":"row-spread","className":"","x":950,"y":880,"wires":[]},{"id":"a544716e34b0934b","type":"ui_text","z":"743a62898f598be4","g":"c8d703f331c6071d","group":"cdd6bc3a70d5012e","order":4,"width":0,"height":0,"name":"","label":"Slaapkamer","format":"{{msg.payload}}","layout":"row-spread","className":"","x":2150,"y":980,"wires":[]},{"id":"bff78000d0158a48","type":"ui_text","z":"743a62898f598be4","g":"c8d703f331c6071d","group":"cdd6bc3a70d5012e","order":6,"width":0,"height":0,"name":"","label":"2e Verdieping","format":"{{msg.payload}}","layout":"row-spread","className":"","x":1960,"y":1560,"wires":[]},{"id":"446e6035a22d2517","type":"ui_text","z":"743a62898f598be4","g":"c8d703f331c6071d","group":"cdd6bc3a70d5012e","order":5,"width":0,"height":0,"name":"","label":"Gym","format":"{{msg.payload}}","layout":"row-spread","className":"","x":2090,"y":1320,"wires":[]},{"id":"90914236891c77c7","type":"ui_chart","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","group":"85e909c93386b7a6","order":0,"width":"14","height":"10","label":"Lichtsterkte","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":true,"ymin":"0","ymax":"100000","removeOlder":"8","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":950,"y":800,"wires":[[]]},{"id":"095985e3aba8f8bd","type":"ui_switch","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","label":"Aan/uit","tooltip":"","group":"11b8876a7b7e5539","order":1,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","animate":false,"className":"","x":120,"y":1260,"wires":[["82ba4aae8b8369ea"]]},{"id":"07fd601fb49189ca","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug 150","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":650,"y":1260,"wires":[]},{"id":"82ba4aae8b8369ea","type":"function","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Functie aan/uit","func":"var FunctionSwitch = {};\n\nFunctionSwitch = msg.payload\nglobal.set('TahomaSwitch',FunctionSwitch, \"file\");\n\nreturn [msg]\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":1260,"wires":[["07fd601fb49189ca"]]},{"id":"c2c37f185ae8e4a4","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug 151","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":530,"y":920,"wires":[]},{"id":"566546da77f190ca","type":"ui_chart","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","group":"85e909c93386b7a6","order":1,"width":"14","height":"10","label":"Woonkamer PV","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":true,"ymin":"10","ymax":"30","removeOlder":"24","removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":2420,"y":1060,"wires":[["bd9766838d44804b"]]},{"id":"21d96ab435737c02","type":"change","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"PV_Slaapkamer","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":2150,"y":1020,"wires":[["566546da77f190ca"]]},{"id":"77a2a99ae11a396e","type":"change","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"PV_Woonkamer","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1930,"y":860,"wires":[["566546da77f190ca"]]},{"id":"bd9766838d44804b","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug 155","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":2590,"y":1060,"wires":[]},{"id":"c53da0a8c39cac4d","type":"change","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"PV_Gym","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":2110,"y":1360,"wires":[["566546da77f190ca"]]},{"id":"f0a764cccac8b5b0","type":"change","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"PV_2eVerdieping","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1950,"y":1600,"wires":[["566546da77f190ca"]]},{"id":"6c5e0442f3b81ca6","type":"inject","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":140,"y":1620,"wires":[["7a23dba3918351b7"]]},{"id":"7a23dba3918351b7","type":"http request","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"API Version","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://10.0.0.161:8443/enduser-mobile-web/1/enduserAPI/apiVersion","tls":"930fdadf3d5bf745","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"bearer","senderr":false,"headers":[],"x":350,"y":1620,"wires":[["2e3d397b960dfa16"]]},{"id":"2e3d397b960dfa16","type":"json","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"","property":"payload","action":"","pretty":false,"x":570,"y":1620,"wires":[["cef03e389cc31311"]]},{"id":"cef03e389cc31311","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug 136","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":770,"y":1620,"wires":[]},{"id":"930fdadf3d5bf745","type":"tls-config","name":"","cert":"","key":"","ca":"","certname":"","keyname":"","caname":"","servername":"","verifyservercert":false,"alpnprotocol":""},{"id":"92e5b2c.00a8b5","type":"mqtt-broker","name":"MQTT (NAS)","broker":"10.0.0.4","port":"1883","clientid":"Node_Red_Client","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthRetain":"false","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closeRetain":"false","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willRetain":"false","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"11b8876a7b7e5539","type":"ui_group","name":"Input","tab":"21daaeaaf5421973","order":1,"disp":true,"width":"12","collapse":false,"className":""},{"id":"cdd6bc3a70d5012e","type":"ui_group","name":"Waardes","tab":"21daaeaaf5421973","order":2,"disp":true,"width":"16","collapse":false,"className":""},{"id":"85e909c93386b7a6","type":"ui_group","name":"Chart","tab":"21daaeaaf5421973","order":3,"disp":true,"width":"28","collapse":false,"className":""},{"id":"21daaeaaf5421973","type":"ui_tab","name":"Zonneschermen","icon":"wi-wu-mostlysunny","order":14,"disabled":false,"hidden":false}] |
Ook hier dus een smoth node op de output van de lichtsensor, die ik rechtstreeks met de API ophaal.
Variabelen uit de eerder gepostte code:
Lichtsensor = meting vanuit de lichtsendor
Setpoint = ingesteld aantal lux waarbij de schermen open moeten
PV = gemeten temperatuur evohome per kamer. Begreep van @edterbak dat dat een gebruikelijke term is voor proces value

SP = ingestelde setpoint per kamer
DT = Waarde bovenop setpoint
Switch = SP + DT. Dus stel; het setpoint voor de slaapkamer is 19 graden, DT = 1, dan gaan de schermen open bij 20 graden.
OnOff = schakelaar die ik op het dash heb gezet om de functie aan of uit te kunnen zetten. Moet nog aan de slag om ze bij 'off' eenmalig allemaal in te klappen.
Dan de logica. Ik beoog:
- Als de gemeten lichtwaarde hoger is dan ingestelde lichtwaarde, en de temperatuur in de kamer hoger is dan het schakelpunt, dan schermen open.
- Als de gemeten lichtwaarde hoger is dan de ingestelde waarde en de kamertemperatuur daalt tot onder het SP, dan schermen dicht
- Als de gemeten lichtwaarde onder setpoint komt, dan ook schermen dicht.
Of die laatste goed met de 'else' wordt afgevangen is vraag twee.
Wil het sowieso nog enigszins om gooien zodat ik op het dashboard ook de stand van de schermen terug kan zien.
[Voor 3% gewijzigd door MikeyMan op 03-03-2023 09:27]
Die dacht ik eerst afgevangen te hebben door een enkele if/else. Dat werkte op zich goed, alleen ging het geheel nogal vaak open en dicht.JW te R schreef op donderdag 2 maart 2023 @ 20:17:
@MikeyMan Ik ben bang dat ik je hiermee niet echt kan helpen.
Ik begrijp niet goed wat je probeert te bereiken. Wat wil je bijvoorbeeld doen als het donker is?
Ook zie ik niet hoe dit stukje Javascript in je flow past (ik heb even teruggekeken naar de flow die je een paar dagen geleden hebt gepost, maar ik denk dat die niet meer uptodate is).
Daarom ben ik nu aan het prutsen met een if, else if, else. Om een marge in te bouwen tussen open gaan en dicht gaan.
Das een keuze, maar inderdaad, wellicht handiger. Gaan we doen.Ik ga toch een poging wagen.
Die lichtsensor buiten beschouwing latend vermoed ik dat er nog iets niet goed gaat in je condities.
De eerste : (Woonkamer_PV >= (Switch)) moet m.i. zijn (Woonkamer_PV > (Switch))
Ik wilde juist die instelbare switch waarde gebruiken, zodat er nog iets in te stellen valt.De tweede if: (Woonkamer_PV < (Switch-0.5) moet m.i. zijn (Woonkamer_PV < Woonkamer_SP))
Heb ff een dashboardje geknutseld:
Heb daar nu inderdaad niks ingesteld, maar daar zit eigenlijk mijn grootste vraagteken. Dekt die laatste else de lading?en in de laatste else tak moet je niks met het scherm doen. Dan zit je ongeveer op de gewenste temperatuur.
Met smooth node op laatste drie waardes lijkt dat nu redelijk ok te gaan, maar dat moeten we even uitproberen.De DT moet denk ik groter zijn dan 0,5 graad, want de Honeywell node werkt niet nauwkeuriger dan 0,5 graad.
Ja, ik zou de waarde ook op kunnen pakken vanuit domoticz. Das zelfs op 0,01 graden nauwkeurig. En rondt dan ook niet af richting setpoint. Maar afhankelijk van de oude API (V1) en geeft geregeld foutmeldingen. Wilde juist rechtstreeks gebruik maken van de API. Maargoed, als dat niet naar wens werkt is dat zo omgezetOm die reden gebruik ik zelf de Honeywell integratie van Home Assistant, waarvan ik de metingen via MQTT doorgeef naar Node-Red. Omslachtig, maar het werkt op 0,1 graad nauwkeurig.

Al met al; was het een heel leertraject. Eerste keer dat ik uberhaupt iets werkend heb gekregen. Dus cut me some slack

Klopt. Vandaar mijn keuze om die niet door Node-Red te laten uitlezen.MikeyMan schreef op vrijdag 3 maart 2023 @ 09:01:
die evohome meting is echt drama. Rondt af richting setpoint
Het gaat er m.i. juist om dat je een DT instelt waarbinnen niks gebeurt. Nu is dat bereik altijd een halve graad.
[...]
Ik wilde juist die instelbare switch waarde gebruiken, zodat er nog iets in te stellen valt.
Refactoring is hier het toverwoord. En dat is eenvoudiger met een werkend systeem.De aansturing van de zonneschermen is nog harder uit de klauwen geescaleerd
Doen we, en gefeliciteerd!Al met al was het een heel leertraject. Eerste keer dat ik uberhaupt iets werkend heb gekregen. Dus cut me some slack

Wat betreft de beoogde werking: scherm open vanaf een bepaalde temperatuur kan in de zomer interessant worden ...
Hoe bedoel je dat? Gemiddeld genomen zal het er dan op neer komen dat ie volledig op de lichtsensor loopt, aangezien het dan altijd warm genoeg is.JW te R schreef op vrijdag 3 maart 2023 @ 19:21:
[...]
Wat betreft de beoogde werking: scherm open vanaf een bepaalde temperatuur kan in de zomer interessant worden ...
Maar goed, ik heb me er niet vergaand in verdiept, omdat ik niet alle dependencies van jouw flow geinstalleerd heb op mijn Node-Red systeem.
[Voor 10% gewijzigd door JW te R op 06-03-2023 16:56]
Ah zo... Nouja, punt is dat het in de zomer natuurlijk binnen niet ver genoeg afkoelt om dat een factor te laten zijn... Verwacht dat ie dan alleen op het licht reageert.JW te R schreef op maandag 6 maart 2023 @ 16:51:
Voor zover ik je flow begrijp doe je bij voldoende licht het scherm open als het warmer wordt, en dicht als het kouder wordt, en ik kan me voorstellen dat je dat niet wilt op warme dagen.
Maar goed, ik heb me er niet vergaand in verdiept, omdat ik niet alle dependencies van jouw flow geinstalleerd heb op mijn Node-Red systeem.
Maargoed, in dat kader had ik vandeweek nog wel wat last van wind. Appeltje eitje zou je zeggen, ff wind meenemen in de schakeling... Maar begin nu een beetje in de war te raken.
Mijn gedachte, in tekst uitgeschreven:
Als:
Lichtsensor boven ingestelde waarde is
temperatuur boven ingestelde waarde is
wind lager is dan ingestelde waarde
stuur dan MQTT bericht voor scherm dicht
Anders als:
Lichtsensor boven ingestelde waarde is
Temperatuur beneden ingestelde waarde -1 is
stuur dan MQTT bericht voor scherm open
Anders
stuur MQTT bericht voor scherm dicht
Maar ik vraag me af of deze logica nu klopt zo.
Tweede als op -1 gezet ter voorkoming van open dicht gedrag, hoewel je dat niet helemaal voorkomt.
Ziet er dan zo uit:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| if (Lichtsensor > Setpoint && Gym_PV > (Switch) && OnOff == true && Wind_PV < Wind_SP) { msg1.payload = { "command": "switchlight", "idx": 495, "switchcmd": "Off" }; //Off = Down msg2.payload = "Temp: " + Gym_PV + " - Switch@:" + Switchdec + " - Status: Neer" + " - Wind_PV:" + Wind_PV + " Wind_SP:" + Wind_SP; //msg2.payload = { "Licht": Lichtsensor, "PV": Gym_PV, "SP": Gym_SP, "Setpoint": Setpoint, 'DT': Gym_DT, 'Switch@': Switch, 'OnOff': OnOff }; //test msg3.payload = Gym_PV; } else if (Lichtsensor > Setpoint && Gym_PV < (Switch-1) && OnOff == true) { msg1.payload = { "command": "switchlight", "idx": 495, "switchcmd": "On" }; //Off = Down msg2.payload = "Temp: " + Gym_PV + " - Switch@:" + Switchdec + " - Status: Op (1)" + " - Wind_PV:" + Wind_PV + " Wind_SP:" + Wind_SP; //msg2.payload = { "Licht": Lichtsensor, "PV": Gym_PV, "SP": Gym_SP, "Setpoint": Setpoint, 'DT': Gym_DT, 'Switch@': Switch, 'OnOff': OnOff }; //test msg3.payload = Gym_PV; } else { msg1.payload = { "command": "switchlight", "idx": 495, "switchcmd": "On" }; //On = Up msg2.payload = "Temp: " + Gym_PV + " - Switch@:" + Switchdec + " - Status: Op (2)" + " - Wind_PV:" + Wind_PV + " Wind_SP:" + Wind_SP; //msg2.payload = { "Licht": Lichtsensor, "PV": Gym_PV, "SP": Gym_SP, "Setpoint": Setpoint, 'DT': Gym_DT, 'Switch@': Switch, 'OnOff': OnOff }; //test msg3.payload = Gym_PV; } return [msg1, msg2, msg3]; |
Ben druk aan het testen, maar heb het idee dat er iets niet helemaal goed gaat.
https://community.homey.a...tructuring-of-flows/65348
met deze flow:
Dit is een beetje hoe ik ook een Node Red flow voor me zie. Triggers links (7 stuks in het voorbeeld), en rechts daarvan condities gevolgd door acties, allemaal eenvoudig leesbaar en niet verstopt in javascript (al kom je daar soms niet omheen).
Misschien helpt dit om er op een andere manier naar te kijken en een oplossing te vinden voor je probleem.
Als je het trouwens voor 1 kamer/scherm werkend hebt, dan kun je dat natuurlijk vrij eenvoudig op de rest van de schermen ook toepassen.
Feel free to Buy me a coffee
Ik denk dat de enige uitdaging is om (bijvoorbeeld) bij een binnentemperatuur van >21 open te gaan en bij <20 weer in.
Overigens weet ik maar van twee schermen zeker of ze open of dicht zijn. De andere vier zijn helaas nog RTS schermen.
Ha, dat hoort bij het leerproces.Houdt wel in helemaal opnieuw beginnen. Zou toch met een if, then else wel moeten lukken.
En ik denk dat je het te ingewikkeld maakt..
Je werkt met verschillende grootheden, die je verschillend wilt wegen.
'scherm open omdat het hard waait' is belangrijker dan 'scherm dicht omdat het koud is'.
Dus de eerste vergelijking is 'if wind > x then scherm omhoog'. Licht en temperatuur hebben daar weinig mee te maken, en in je overige vergelijkingen kun je de wind negeren.
Nog nooit van RTS schermen gehoord dus daarmee kan ik je niet helpen.De andere vier zijn helaas nog RTS schermen.
<20 = 19,9 of lagerMikeyMan schreef op vrijdag 17 maart 2023 @ 13:54:
@musicpixel ja das ook nog een optie. Andere logica. Houdt wel in helemaal opnieuw beginnen. Zou toch met een if, then else wel moeten lukken.
Ik denk dat de enige uitdaging is om (bijvoorbeeld) bij een binnentemperatuur van >21 open te gaan en bij <20 weer in.
Overigens weet ik maar van twee schermen zeker of ze open of dicht zijn. De andere vier zijn helaas nog RTS schermen.
>21 = 21,1 of hoger
Dus van 20 tot 21 doet de automation niks denk ik zo

doel = temperatuur binnen laag te houden en dat is bv 18 graden of lager als ik het vluchtig lees ..
doe met het volgende wat je wilt .. het is bedoelt als "food for thought"
"actie tijd" / moment lijst
- ik wil niet dat hij elke 5 minuten open/dicht gaat, prettig is bv elk "uur"
- ik wil niet dat hij kapot waait door harde wind --> ruk wind of constante wind ?
- als de verwarming (binnen) aanstaat
--- ook als de verwarming uitstaat en binnen warmer is dan 18?
- als de sensor in de zon hangt (jou wens temp = niet de temp die de sensor meet) om de buiten temp te meten.
- als de zon schijnt (sluit je begin van de ochtend uit)
- wil je buiten zitten ? met druilerig weer beschermd door het doek ? of even uit de "Zachte" wind
- je hebt ook half open/helemaal open waar wind condities meer/minder invloed hebben
kortom een lijst met condities die we als mens "normaal" vinden maar de computer niet kan weten..
bv als ik savonds buiten zit en er is zachte wind vind ik het wel eens lekker om het zonnescherm open te laten.. tot 23:00 (zon is allang onder) .. dan moet niet een automation ingrijpen om dicht te doen. tenzij het te hard gaat waaien.
Dus een "user override" die alleen door ruk/harde wind overruled mag worden, maar 01:00 is het echt welletjes bv dan ga jezoiezo dicht.
ik kan met mijn RTL_433 windmeter(s) van buren ontvangen .. erg handig als input kan ook op lora dongels
Als je daarna een "som" kan maken waar opgestelde condities True/False zijn een actie gebeurt maak je het veel makkelijker in NR erna. los van de "overrulende" condities
probeer te progammeren met een negatieve (in dit geval is dat "gesloten") toestand als eind resultaat.
- ga dicht bij A B C
dan hoef je alleen te openen (apart) wanneer het te warm word .. want de negatieve overschrijven toch wel ..
Tja vanalles
Eerste if voor de situatie waarin er iets open moet. In alle andere gevallen dicht. Maar misschien valt het inderdaad nog wel een beetje uit elkaar te trekken.
[Voor 23% gewijzigd door MikeyMan op 17-03-2023 15:32]
MikeyMan schreef op vrijdag 17 maart 2023 @ 15:31:
@vso dank, moet het even op me in laten werken. Volgens mij komt de huidige functie daar nu ook ongeveer op neer.
Eerste if voor de situatie waarin er iets open moet. In alle andere gevallen dicht. Maar misschien valt het inderdaad nog wel een beetje uit elkaar te trekken.

je hoeft niet uit elkaar te trekken, teminste houd alles "open" en "dicht" gegroepeerd.. en duidelijk over 3 maanden of een jaar dan ga je heel blij zijn met duidelijke flow en naamgevingen .. (en dus ook condities)
Tja vanalles
Dit is toch wel echt volledig NodeRed vraag => verplaatst
[Voor 6% gewijzigd door septillion op 20-03-2023 12:41]
Ik heb een Unifi G4 deurbel en wil deze bij aanbellen een notificatie laten sturen naar Slack. Het onderstaande stappenplan heb ik gevolgd, echter is 'node-red-contrib-slack-WebHook' niet meer beschikbaar. Is er iemand die mij verder op weg kan helpen?
Wat heb ik al gedaan:
- Geprobeerd een connectie te maken met Unifi in node-red
- De webhook URL van Slack heb ik al, dit werkt als ik een curl uitvoer in terminal
@Ruupjeh als je het nu apart doet in 2 flow(s) 1 flow voor de deurbel en 1 voor slack
De deurbel moet x doen (handstand / berichtje oid) als er aangebeld word, als dat werkt is die flow "compleet"
voor slack wil je via een druk op een knop dat er een bericht op een plek in slack verschijnt, dat kan via CLI of API van slack er zijn vele wegen naar Rome.
daarna combineer je de flow's
het opdelen, maakt debuggen makkelijker (wat werkt er wel/niet) betreft slack is het vaak een
http://<weburl>/?=<commando-string+ tekst+ zooi> dat je moet sturen als je de opbouw weet kan je die nabouwen met NR
[Voor 19% gewijzigd door vso op 21-03-2023 10:56]
Tja vanalles
Liefste in een nieuwe flow zodat het lekker overzichtelijk blijft.
Ik zal de situatie beschrijven.
Ik heb een flow die de verlichting schakelt, dit gebeurd op basis van alarmsysteem/lichtsensor/wel of niet thuis.
Werkt als een zonnetje moet ik zeggen.
Nou is het zo dat in het trapgat een led strip hangt die bijvoorbeeld aangaat op 2% lichtsterkte.
Nu heb ik in het trapgat ook een bewegingssensor, die moet de led strip naar 10% brengen als je daar loopt.
Niet zo heel moeilijk om dit te maken, maar..... Nou zoek ik dus een soort functie die de vorige stand van die led stip nog weet. Oftewel was hij aan op 2% dan moet na beweging de stip weer op 2%, was hij uit dan moet hij weer uit na beweging.
Bestaat deze functie?
Gebruik je home assistant? Ik gebruik scene's on the fly.etienne001 schreef op woensdag 22 maart 2023 @ 21:41:
Ik zit mijzelf wellicht helemaal suf te piekeren hoe ik een flow moet maken cq moet aanpassen...
Liefste in een nieuwe flow zodat het lekker overzichtelijk blijft.
Ik zal de situatie beschrijven.
Ik heb een flow die de verlichting schakelt, dit gebeurd op basis van alarmsysteem/lichtsensor/wel of niet thuis.
Werkt als een zonnetje moet ik zeggen.
Nou is het zo dat in het trapgat een led strip hangt die bijvoorbeeld aangaat op 2% lichtsterkte.
Nu heb ik in het trapgat ook een bewegingssensor, die moet de led strip naar 10% brengen als je daar loopt.
Niet zo heel moeilijk om dit te maken, maar..... Nou zoek ik dus een soort functie die de vorige stand van die led stip nog weet. Oftewel was hij aan op 2% dan moet na beweging de stip weer op 2%, was hij uit dan moet hij weer uit na beweging.
Bestaat deze functie?
Bij het schakelen met de bewegingssensor de huidige waarde opslaan in een variabele en na beweging die variable gebruiken voor de ledstrip.etienne001 schreef op woensdag 22 maart 2023 @ 21:41:
Ik zit mijzelf wellicht helemaal suf te piekeren hoe ik een flow moet maken cq moet aanpassen...
Liefste in een nieuwe flow zodat het lekker overzichtelijk blijft.
Ik zal de situatie beschrijven.
Ik heb een flow die de verlichting schakelt, dit gebeurd op basis van alarmsysteem/lichtsensor/wel of niet thuis.
Werkt als een zonnetje moet ik zeggen.
Nou is het zo dat in het trapgat een led strip hangt die bijvoorbeeld aangaat op 2% lichtsterkte.
Nu heb ik in het trapgat ook een bewegingssensor, die moet de led strip naar 10% brengen als je daar loopt.
Niet zo heel moeilijk om dit te maken, maar..... Nou zoek ik dus een soort functie die de vorige stand van die led stip nog weet. Oftewel was hij aan op 2% dan moet na beweging de stip weer op 2%, was hij uit dan moet hij weer uit na beweging.
Bestaat deze functie?
is er ook zoiets voor node-red zonder veel gedoe ?
Ben er inmiddels uit. Met een call service > notify

[Voor 16% gewijzigd door OcGuru op 25-03-2023 14:43]
Bl44t