Acties:
  • 0Henk 'm!

  • denuz
  • Registratie: Augustus 2006
  • Laatst online: 00:12
OcGuru schreef op woensdag 3 mei 2023 @ 17:24:
[...]


Nog niet veel :P

Heb nu een dropdown helper in HA gemaakt met de gewenste uitschakeltijden. Dus 20:00, 22:00, 23:00 enz.

Met een change node schrijf ik deze naar een global variable
Idem met de actuele tijd.

Daarna weer een inject node met beide variable naar een switch node die beide vergelijkt. Zijn beide gelijk aan elkaar gaat de buitenlamp uit.

Kan vast veel simpeler maar het werkt :+ :o
Ipv een dropdown helper kan je ook een time/date helper aanmaken. Deze kun je direct op de ingestelde tijd laten triggeren.

Heb je maar 1 node nodig, namelijk de Time node.

Acties:
  • 0Henk 'm!

  • OcGuru
  • Registratie: Juni 2004
  • Laatst online: 02-06 17:53

OcGuru

Giulietta Qv

denuz schreef op woensdag 3 mei 2023 @ 18:37:
[...]

Ipv een dropdown helper kan je ook een time/date helper aanmaken. Deze kun je direct op de ingestelde tijd laten triggeren.
[Afbeelding]
Heb je maar 1 node nodig, namelijk de Time node.
Thx, handige functie inderdaad, wist ik niet.

Heb het inmiddels anders gedaan, nog steeds een dropdown box met verschillende tijden en nu ook de keuze tot automatisch.

Buitenlamp gaat nog steeds aan op basis van de status van sun.sun entity ( below horizon) en gaat op de tijd die gekozen is uit. Of op de stand Automatisch op de status sun.sun entity ( above horizon) uit.


Ben benieuwd of de lamp morgenochtend uit is :P

Bl44t


  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
MikeyMan schreef op woensdag 3 mei 2023 @ 13:45:
@musicpixel Ben op basis van je suggestie eens gaan kijken om m'n zonnescherm flow een beetje anders op te bouwen, met losse functies per 'input'.

Maar loop een beetje vast in mijn gedachtegang merk ik.
Als inputs heb ik:
- Windsnelheid (nu nog van online aanbieder)
- Licht (vanuit tahoma api)
- Kamertemperatuur (vanuit Evohome Api)

Op dit moment heb ik dit allemaal in een enkele functie gepropt. Het werkt op zich best aardig, behalve dat ik nu liever het openen en sluiten van de zonwering bij een ander aantal lux zou willen regelen. Dus toch maar aan de slag gegaan met uit elkaar trekken.
Per input een functie die de losse tests doet geeft hierbij inderdaad wat meer flexibiliteit.

heb nu deze flow:
code:
1
[{"id":"ac5c855a4203b94a","type":"function","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Sunscreen Light","func":"let SetpointDown = global.get('Tahoma.Light_Down', \"file\");\nlet SetpointUp = global.get('Tahoma.Light_Up', \"file\");\n\nif (msg.payload <  SetpointUp)\n{\n    msg.payload = \"Up\";\n    return msg;\n}\n\nelse if (msg.payload >= SetpointDown)\n{\n    msg.payload = \"Down\"\n    return msg;\n}\n\n\nelse\n{\n    msg.payload = \"Hold\"    \n}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1980,"y":1120,"wires":[["ddde0956f5a04cb9","a3b06caac89f4822","06eabc507ba89fdc"]]},{"id":"ddde0956f5a04cb9","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug licht","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":2310,"y":1120,"wires":[]},{"id":"a3b06caac89f4822","type":"ui_text","z":"743a62898f598be4","g":"c8d703f331c6071d","group":"cdd6bc3a70d5012e","order":1,"width":0,"height":0,"name":"","label":"Licht","format":"{{msg.payload}}","layout":"row-spread","className":"","x":2290,"y":1160,"wires":[]},{"id":"06eabc507ba89fdc","type":"function","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Function gym test","func":"//var Wind = global.get('Tahoma.Wind_Screens', \"file\");\nvar Wind = msg.wind;\nvar Temp = global.get('Tahoma.Temp_Gym', 'file');\n\nif (msg.payload == 'Down' && Wind == 'Down' && Temp == 'Down')\n{\nmsg.payload = 'Down';\n}\n\nelse if (msg.payload == 'Up' || Wind == 'Up' || Temp == 'Up')\n{\nmsg.payload = 'Up' + Wind; \n}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":2390,"y":1240,"wires":[["5a8dc3d7c7823340"]]},{"id":"5a8dc3d7c7823340","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug 183","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2670,"y":1240,"wires":[]},{"id":"c23caaad5005c3ce","type":"link in","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"Link in Wind","links":["f0556cd2fb75c2e1"],"x":1825,"y":1380,"wires":[["536325eae80dc1af","09c152d5c4f3b9f4"]]},{"id":"536325eae80dc1af","type":"function","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"function Wind Test","func":"var msg1 = {};\nvar msg2 = {};\nvar msg3 = {};\n\nvar windWoonkamer = global.get('Wind.Woonkamer', \"file\");\nvar windScreens = global.get('Wind.Screens', \"file\");\nvar windZipscreens = global.get('Wind.Zipscreens', \"file\");\n\nvar tahomaWind_Woonkamer = {};\nvar tahomaWind_Screens = {};\nvar tahomaWind_Zipscreens = {};\n\nif (msg.payload <= windWoonkamer)\n{\n    msg1.wind = 'Down';\n    global.set('Tahoma.Wind_Woonkamer',\"Down\", \"file\");\n}\n\nelse\n{\n    msg1.wind = 'Up';\n    global.set('Tahoma.Wind_Woonkamer', \"Up\", \"file\");\n}\n\nif (msg.payload <= windScreens)\n{\n    msg2.wind = 'Down';\n    global.set('Tahoma.Wind_Screens', \"Down\", \"file\");\n}\n\nelse \n{\n    msg2.wind = 'Up';\n    global.set('Tahoma.Wind_Screens', \"Up\", \"file\");\n}\n\nif (msg.payload <= windScreens)\n{\n    msg3.wind = 'Down';\n    global.set('Tahoma.Wind_Zipscreens', \"Down\", \"file\");\n}\n\nelse\n{\n    msg3.wind = 'Up';\n    global.set('Tahoma.Wind_Zipscreens', \"Up\", \"file\");\n}\n\nreturn [msg1,msg2,msg3];","outputs":3,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1990,"y":1380,"wires":[["9bc60edb91af0dbd"],["1258b9d18c21d2f4","06eabc507ba89fdc"],["f4a88f5837c3ee58"]]},{"id":"9bc60edb91af0dbd","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug wind woonkamer","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2270,"y":1320,"wires":[]},{"id":"09c152d5c4f3b9f4","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug 185","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1970,"y":1320,"wires":[]},{"id":"1258b9d18c21d2f4","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug wind screens","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2260,"y":1380,"wires":[]},{"id":"f4a88f5837c3ee58","type":"debug","z":"743a62898f598be4","g":"c8d703f331c6071d","name":"debug wind zipscreens","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":2260,"y":1440,"wires":[]},{"id":"cdd6bc3a70d5012e","type":"ui_group","name":"Current State","tab":"21daaeaaf5421973","order":3,"disp":true,"width":"12","collapse":false,"className":""},{"id":"21daaeaaf5421973","type":"ui_tab","name":"Zonneschermen","icon":"wi-wu-mostlysunny","order":14,"disabled":false,"hidden":false}]


Met als uiteindelijke functie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//var Wind = global.get('Tahoma.Wind_Screens', "file");
var Wind = msg.wind;
var Temp = global.get('Tahoma.Temp_Gym', 'file');

if (msg.payload == 'Down' && Wind == 'Down' && Temp == 'Down')
{
msg.payload = 'Down';
}

else if (msg.payload == 'Up' || Wind == 'Up' || Temp == 'Up')
{
msg.payload = 'Up' + Wind; 
}

return msg;


Hiermee is het op zich ook prima werkend te krijgen.
Enige waar ik nu tegenaan loop is dat de lichtsensor de enige trigger is. Die loopt elke vijf minuten.
Maar; hoe gebruik je nu twee inputs als trigger voor een functienode? Zou namelijk graag de windsnelheid onafhankelijk willen laten triggeren. Echter; als ik deze beide aan de functienode zet, krijg ik een asynchrone trigger met onvolledige info.
Zit naar je flow te kijken, maar heb het idee dat ik de helft mis. Ik zie bijvoorbeeld nergens waar die globals gezet worden, of waar de link-in node wordt aangeroepen.

Dit is alles wat ik zie als ik 'm importeer:

Feel free to Buy me a coffee


  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

musicpixel schreef op donderdag 4 mei 2023 @ 23:08:
[...]


Zit naar je flow te kijken, maar heb het idee dat ik de helft mis. Ik zie bijvoorbeeld nergens waar die globals gezet worden, of waar de link-in node wordt aangeroepen.

Dit is alles wat ik zie als ik 'm importeer:
[Afbeelding]
Ja klopt. Wilde er niet een enorme import van maken. Maar maakt het idd niet makkelijker snap ik.

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
MikeyMan schreef op donderdag 4 mei 2023 @ 23:19:
[...]


Ja klopt. Wilde er niet een enorme import van maken. Maar maakt het idd niet makkelijker snap ik.
Is beetje moeilijk zo ja ;) . Kun je m in z'n geheel delen?

Feel free to Buy me a coffee


Acties:
  • 0Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

musicpixel schreef op donderdag 4 mei 2023 @ 23:24:
[...]


Is beetje moeilijk zo ja ;) . Kun je m in z'n geheel delen?
Jahoor... Niet schrikken! :P

edit: niet dus... Teveel tekens.
Zo maar dan:
https://github.com/MikeyMan83/Tahoma-Node-Red/tree/main

Ben dus een aparte afsplitsing begonnen in het reeds werkende spul.
Denk dat ik er een beetje te moeilijk over denk qua opbouw.

Op zich werken de functies wel prima nu. Maar wil nu een onderscheid maken in zonneschermen uit (bij zeg 20k lux) en zonneschermen in (bij zeg 15k lux). Dat toevoegen aan de bestaande functies maakt het geheel weer een heel stuk lastiger. Vandaar dat ik je suggestie wilde oppakken om het meer te scheiden.

[Voor 40% gewijzigd door MikeyMan op 05-05-2023 09:54]


Acties:
  • 0Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
MikeyMan schreef op vrijdag 5 mei 2023 @ 09:51:
[...]


Jahoor... Niet schrikken! :P

edit: niet dus... Teveel tekens.
Zo maar dan:
https://github.com/MikeyMan83/Tahoma-Node-Red/tree/main

Ben dus een aparte afsplitsing begonnen in het reeds werkende spul.
Denk dat ik er een beetje te moeilijk over denk qua opbouw.

Op zich werken de functies wel prima nu. Maar wil nu een onderscheid maken in zonneschermen uit (bij zeg 20k lux) en zonneschermen in (bij zeg 15k lux). Dat toevoegen aan de bestaande functies maakt het geheel weer een heel stuk lastiger. Vandaar dat ik je suggestie wilde oppakken om het meer te scheiden.
Zo, dat ziet er complex uit... daar moet ik even voor gaan zitten. ;)
Zal je later vast nog wat vragen stellen...

Klopt het dat er wat verbindingslijntjes ontbreken? Onder andere hier:

en hier:



Verder: als er belangrijke wachtwoorden of geolocaties in de json staan zou ik m weer van github verwijderen.

Feel free to Buy me a coffee


Acties:
  • 0Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
@MikeyMan
Ik zie onder andere:

global.get('EvoHome_woonkamer_PV', "file");
global.get('EvoHome_woonkamer_SP', "file");
global.get('Tahoma_setpoint', "file");
etc

Zou je nog de flow kunnen delen waar deze globals gezet worden?

Feel free to Buy me a coffee


Acties:
  • 0Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
@MikeyMan
Ik zou ook wel willen weten wat de output van de "Get Devices" node is.

Mijn idee is overigens om je te laten zien hoe je alles zeer sterk kunt versimpelen,

Feel free to Buy me a coffee


Acties:
  • 0Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

musicpixel schreef op vrijdag 5 mei 2023 @ 16:29:
@MikeyMan
Ik zou ook wel willen weten wat de output van de "Get Devices" node is.

Mijn idee is overigens om je te laten zien hoe je alles zeer sterk kunt versimpelen,
Wat een gepruts he... Verbazingwekkend dat het überhaupt werkt zo _O-

Ben momenteel niet thuis, de output van die get devices is vrij rommelig. Das de hele api aanroep vanuit de tahoma api. Waar ik dus eigenlijk alleen het aantal lux uit sloop.

Snap er alleen niks van dat bij jou de lijken in dat stuk van de flow niet verbonden zijn. Dat waren ze bij mij voor het exporteren wel.

Onderaan mist er nog wel iets aan links. Die hoef ik denk ik niet op te halen on boot.

Krijg het op mn mobiel niet voor elkaar om een fatsoenlijke export te maken. Die komt als ik thuis ben :*)

Acties:
  • +1Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
@MikeyMan Ik had vorig weekend een klein beginnetje gemaakt, maar wilde dat nog niet delen voor ik die andere export, etc van je had gehad, dus ik vroeg me af of je ondertussen alweer thuis bent? ;)
Ik verwacht er namelijk dit weekend wat tijd voor te hebben...

Feel free to Buy me a coffee


Acties:
  • 0Henk 'm!

  • Woohooo
  • Registratie: Februari 2001
  • Laatst online: 22:14

Woohooo

Smilie, James Smilie

Wij hadden last van een geest hier in huis die elke keer het badkamer licht aan deed, vooral overdag. Aldus mn vriendin :+

Had een Aqara switch hangen in de badkamer (WXKG11LM) die op basis van een click de state aanpast

https://tweakers.net/i/Ji1E78HUx_uqKJWpteptmksrJtY=/800x/filters:strip_exif()/f/image/jT2mpPqQjq7UEYlEHwhbkggl.png?f=fotoalbum_large



Best wel ff moeten zoeken maar de state van die Aqara switch stond dus zo;



Een paar keer per dag valt de verbinding kennelijk weg en kreeg ik een unknown state, daarna ging het licht aan voor een uurtje |:(

Acties:
  • 0Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

musicpixel schreef op vrijdag 12 mei 2023 @ 13:46:
@MikeyMan Ik had vorig weekend een klein beginnetje gemaakt, maar wilde dat nog niet delen voor ik die andere export, etc van je had gehad, dus ik vroeg me af of je ondertussen alweer thuis bent? ;)
Ik verwacht er namelijk dit weekend wat tijd voor te hebben...
Yes, ben thuis! Nu even uitzoeken waar ik precies alles vandaan heb gehaald :P

Acties:
  • 0Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

Zojuist nieuwe json op github gezet.

Gelijk maar even uitzoeken hoe daar te verwijderen ook...

  • ray1979
  • Registratie: April 2006
  • Laatst online: 02-06 16:41
FrankJ91 schreef op zondag 24 mei 2020 @ 20:56:
[...]


Toevallig was ik hier van de week ook mee bezig. Leuk om te zien hoe jij nu ook probeert om de zonwering niet zo vaak op en neer te laten gaan. Ik doe het ook met het weer maar is voor mij ook nog wel een uitdaging hoe ik zon/regen en wind combineer. Heb zelf een node ertussen die het gemiddelde/max uitrekent, dus bij mij zou hij nooit elk minuut op en neergaan maar in het ergste geval wel elke 20 min... Helaas is het nu slecht weer maar deze week hoop ik te zien of hij beetje doet wat ik wil :p

[Afbeelding]
Deze flow ziet er perfect uit. Heb je deze nog actief? Zo ja, zou je de code hier willen delen? Zou een perfect startpunt voor mijn automatisering zijn.

Acties:
  • +1Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
MikeyMan schreef op vrijdag 12 mei 2023 @ 19:15:
[...]


Yes, ben thuis! Nu even uitzoeken waar ik precies alles vandaan heb gehaald :P
Nieuwe Json even bekeken en ik kan nog niet echt vinden waar de volgende globals worden gezet:

global.get('EvoHome_woonkamer_PV', "file");
global.get('EvoHome_woonkamer_SP', "file");
global.get('Tahoma_setpoint', "file");
(deze staan in de "Functie Woonkamer", zelfde idee voor de andere functies)

Ik zie nu wel een heleboel LinkOut nodes die nergens naartoe gaan (zal dat deel wel missen) waarbij ik vermoed dat daarachter deze globals gezet worden?

Feel free to Buy me a coffee


Acties:
  • +1Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

musicpixel schreef op zaterdag 13 mei 2023 @ 20:42:
[...]


Nieuwe Json even bekeken en ik kan nog niet echt vinden waar de volgende globals worden gezet:

global.get('EvoHome_woonkamer_PV', "file");
global.get('EvoHome_woonkamer_SP', "file");
global.get('Tahoma_setpoint', "file");
(deze staan in de "Functie Woonkamer", zelfde idee voor de andere functies)

Ik zie nu wel een heleboel LinkOut nodes die nergens naartoe gaan (zal dat deel wel missen) waarbij ik vermoed dat daarachter deze globals gezet worden?
Excuus, dacht dat ik compleet was.

Komen zo te zien hier vandaan voor wat betreft EvoHome:
code:
1
[{"id":"fc18afd7869318ac","type":"tab","label":"EvoHome to MQTT","disabled":false,"info":"","env":[]},{"id":"397ad3f39c905319","type":"evohome-status","z":"fc18afd7869318ac","confignode":"7687a3a898660764","name":"Thuis","interval":"180","x":210,"y":560,"wires":[["c0a0d61889f6a940","55a51230139c569d","7e8daff12e88aaf7","dfc13c48320b95b5","2fe953edf6b5a4cc","3f90781fa816a3d2","9f62cb20a9c885e1","d5fa5883d49f1ad9"]]},{"id":"c0a0d61889f6a940","type":"debug","z":"fc18afd7869318ac","name":"debug evohome api","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":690,"y":160,"wires":[]},{"id":"0d623e246dca3e4c","type":"debug","z":"fc18afd7869318ac","name":"debug woonkamer evohome API","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1490,"y":380,"wires":[]},{"id":"a32052157634c93d","type":"function","z":"fc18afd7869318ac","name":"Woonkamer","func":"var Temperatuur = {};\nTemperatuur = msg.payload.currentTemperature;\nvar Setpoint = {};\nSetpoint = msg.payload.targetTemperature;\n\n/* de opties zijn:\n- woonkamer\n- babykamer\n- slaapkamer\n- gym\n- kantoor\n- garage\n- 2e verdieping\n*/\n\nif (msg.payload.name == 'woonkamer') \n{\n\n    global.set('EvoHome_woonkamer_PV', Temperatuur, \"file\");\n    global.set('EvoHome_woonkamer_SP', Setpoint, \"file\");\n    msg.payload = { \"Temp\": Temperatuur, \"Setpoint\": Setpoint };\n\n    return [msg]\n\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1170,"y":380,"wires":[["0d623e246dca3e4c"]]},{"id":"395e970ea0b4eb97","type":"debug","z":"fc18afd7869318ac","name":"debug babykamer evohome API","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1490,"y":440,"wires":[]},{"id":"befaf2a23f6d88c2","type":"function","z":"fc18afd7869318ac","name":"Babykamer","func":"var Temperatuur = {};\nvar Setpoint = {};\n\n/* de opties zijn:\n- woonkamer\n- babykamer\n- slaapkamer\n- gym\n- kantoor\n- garage\n- 2e verdieping\n*/\n\nif (msg.payload.name == 'babykamer') \n{\n\n    Temperatuur = msg.payload.currentTemperature;\n    global.set('EvoHome_babykamer_PV', Temperatuur, \"file\");\n    Setpoint = msg.payload.targetTemperature;\n    global.set('EvoHome_babykamer_SP', Setpoint, \"file\");\n    msg.payload = { \"Temp\": Temperatuur, \"Setpoint\": Setpoint };\n\n    return [msg]\n\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1170,"y":440,"wires":[["395e970ea0b4eb97"]]},{"id":"273a94d93154b1c7","type":"function","z":"fc18afd7869318ac","name":"Slaapkamer","func":"var Temperatuur = {};\nvar Setpoint = {};\n\n/* de opties zijn:\n- woonkamer\n- babykamer\n- slaapkamer\n- gym\n- kantoor\n- garage\n- 2e verdieping\n*/\n\nif (msg.payload.name == 'slaapkamer') \n{\n\n    Temperatuur = msg.payload.currentTemperature;\n    global.set('EvoHome_slaapkamer_PV', Temperatuur, \"file\");\n    Setpoint = msg.payload.targetTemperature;\n    global.set('EvoHome_slaapkamer_SP', Setpoint, \"file\");\n    msg.payload = { \"Temp\": Temperatuur, \"Setpoint\": Setpoint };\n\n    return [msg]\n\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1170,"y":500,"wires":[["551fadca942074e5"]]},{"id":"551fadca942074e5","type":"debug","z":"fc18afd7869318ac","name":"debug slaapkamer evohome API","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1490,"y":500,"wires":[]},{"id":"932120526c45ac22","type":"function","z":"fc18afd7869318ac","name":"Gym","func":"var Temperatuur = {};\nvar Setpoint = {};\n\n\n/* de opties zijn:\n- woonkamer\n- babykamer\n- slaapkamer\n- gym\n- kantoor\n- garage\n- 2e verdieping\n*/\n\nif (msg.payload.name == 'gym') \n{\n\n    Temperatuur = msg.payload.currentTemperature;\n    global.set('EvoHome_gym_PV', Temperatuur, \"file\");\n    Setpoint = msg.payload.targetTemperature;\n    global.set('EvoHome_gym_SP', Setpoint, \"file\");\n    msg.payload = { \"Temp\": Temperatuur, \"Setpoint\": Setpoint };\n\n    return [msg]\n\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1150,"y":560,"wires":[["ceac925bf555e6e6"]]},{"id":"ceac925bf555e6e6","type":"debug","z":"fc18afd7869318ac","name":"debug gym evohome API","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1470,"y":560,"wires":[]},{"id":"cef2c283a6e09414","type":"function","z":"fc18afd7869318ac","name":"Kantoor","func":"var Temperatuur = {};\nvar Setpoint = {};\n\n\n/* de opties zijn:\n- woonkamer\n- babykamer\n- slaapkamer\n- gym\n- kantoor\n- garage\n- 2e verdieping\n*/\n\nif (msg.payload.name == 'kantoor') \n{\n\n    Temperatuur = msg.payload.currentTemperature;\n        global.set('EvoHome_kantoor_PV', Temperatuur, \"file\");\n    Setpoint = msg.payload.targetTemperature;\n    global.set('EvoHome_kantoor_SP', Setpoint, \"file\");\n    msg.payload = { \"Temp\": Temperatuur, \"Setpoint\": Setpoint };\n\n    return [msg]\n\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1160,"y":620,"wires":[["abe63276ecfe470e"]]},{"id":"abe63276ecfe470e","type":"debug","z":"fc18afd7869318ac","name":"debug kantoor evohome API","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1480,"y":620,"wires":[]},{"id":"54bed4b1cdf2fa31","type":"function","z":"fc18afd7869318ac","name":"Garage","func":"var Temperatuur = {};\nvar Setpoint = {};\n\n/* de opties zijn:\n- woonkamer\n- babykamer\n- slaapkamer\n- gym\n- kantoor\n- garage\n- 2e verdieping\n*/\n\nif (msg.payload.name == 'garage') \n{\n\n    Temperatuur = msg.payload.currentTemperature;\n    global.set('EvoHome_garage_PV', Temperatuur, \"file\");\n    Setpoint = msg.payload.targetTemperature;\n    global.set('EvoHome_garage_SP', Setpoint, \"file\");\n    msg.payload = { \"Temp\": Temperatuur, \"Setpoint\": Setpoint };\n\n    return [msg]\n\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1160,"y":680,"wires":[["b941e9120b8c361e"]]},{"id":"b941e9120b8c361e","type":"debug","z":"fc18afd7869318ac","name":"debug garage evohome API","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1480,"y":680,"wires":[]},{"id":"e366c003d5c1a55c","type":"debug","z":"fc18afd7869318ac","name":"debug 2e verdieping evohome API","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1500,"y":740,"wires":[]},{"id":"f8b42e274f343306","type":"function","z":"fc18afd7869318ac","name":"2e Verdieping","func":"var Temperatuur = {};\nvar Setpoint = {};\n\n\n/* de opties zijn:\n- woonkamer\n- babykamer\n- slaapkamer\n- gym\n- kantoor\n- garage\n- 2e verdieping\n*/\n\nif (msg.payload.name == '2e verdieping') \n{\n\n    Temperatuur = msg.payload.currentTemperature;\n    global.set('EvoHome_2everdieping_PV', Temperatuur, \"file\");\n    Setpoint = msg.payload.targetTemperature;\n    global.set('EvoHome_2everdieping_SP', Setpoint, \"file\");\n    msg.payload = { \"Temp\": Temperatuur, \"Setpoint\": Setpoint };\n\n    return [msg]\n\n}\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1180,"y":740,"wires":[["e366c003d5c1a55c"]]},{"id":"55a51230139c569d","type":"function","z":"fc18afd7869318ac","name":"Woonkamer filter","func":"if (msg.payload.name == 'woonkamer') \nreturn [msg]","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":710,"y":380,"wires":[["2716bca27e8b0e93","ab3952e03a7838c7"]]},{"id":"ab3952e03a7838c7","type":"debug","z":"fc18afd7869318ac","name":"debug 152","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1070,"y":260,"wires":[]},{"id":"2716bca27e8b0e93","type":"smooth","z":"fc18afd7869318ac","name":"","property":"payload.currentTemperature","action":"mean","count":"3","round":"2","mult":"single","reduce":false,"x":960,"y":380,"wires":[["a32052157634c93d","4433521710b33e83"]]},{"id":"7e8daff12e88aaf7","type":"function","z":"fc18afd7869318ac","name":"Babykamer filter","func":"if (msg.payload.name == 'babykamer') \nreturn [msg]","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":700,"y":440,"wires":[["b4353240a13d0723"]]},{"id":"dfc13c48320b95b5","type":"function","z":"fc18afd7869318ac","name":"Slaapkamer filter","func":"if (msg.payload.name == 'slaapkamer') \nreturn [msg]","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":710,"y":500,"wires":[["040c8ae0148925b4"]]},{"id":"b4353240a13d0723","type":"smooth","z":"fc18afd7869318ac","name":"","property":"payload.currentTemperature","action":"mean","count":"3","round":"2","mult":"single","reduce":false,"x":960,"y":440,"wires":[["befaf2a23f6d88c2"]]},{"id":"040c8ae0148925b4","type":"smooth","z":"fc18afd7869318ac","name":"","property":"payload.currentTemperature","action":"mean","count":"3","round":"2","mult":"single","reduce":false,"x":960,"y":500,"wires":[["273a94d93154b1c7"]]},{"id":"2fe953edf6b5a4cc","type":"function","z":"fc18afd7869318ac","name":"Gym filter","func":"if (msg.payload.name == 'gym') \nreturn [msg]","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":680,"y":560,"wires":[["f58389e2cfebc297"]]},{"id":"f58389e2cfebc297","type":"smooth","z":"fc18afd7869318ac","name":"","property":"payload.currentTemperature","action":"mean","count":"3","round":"2","mult":"single","reduce":false,"x":960,"y":560,"wires":[["932120526c45ac22"]]},{"id":"3f90781fa816a3d2","type":"function","z":"fc18afd7869318ac","name":"Kantoor filter","func":"if (msg.payload.name == 'kantoor') \nreturn [msg]","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":690,"y":620,"wires":[["b1e86b9bdc404c99"]]},{"id":"9f62cb20a9c885e1","type":"function","z":"fc18afd7869318ac","name":"Garage filter","func":"if (msg.payload.name == 'garage') \nreturn [msg]","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":690,"y":680,"wires":[["9a1f4e28264f8b8d"]]},{"id":"b1e86b9bdc404c99","type":"smooth","z":"fc18afd7869318ac","name":"","property":"payload.currentTemperature","action":"mean","count":"3","round":"2","mult":"single","reduce":false,"x":960,"y":620,"wires":[["cef2c283a6e09414"]]},{"id":"9a1f4e28264f8b8d","type":"smooth","z":"fc18afd7869318ac","name":"","property":"payload.currentTemperature","action":"mean","count":"3","round":"2","mult":"single","reduce":false,"x":960,"y":680,"wires":[["54bed4b1cdf2fa31"]]},{"id":"d5fa5883d49f1ad9","type":"function","z":"fc18afd7869318ac","name":"Woonkamer filter","func":"if (msg.payload.name == '2e verdieping') \nreturn [msg]","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":710,"y":740,"wires":[["343e98a103361ec7"]]},{"id":"343e98a103361ec7","type":"smooth","z":"fc18afd7869318ac","name":"","property":"payload.currentTemperature","action":"mean","count":"3","round":"2","mult":"single","reduce":false,"x":960,"y":740,"wires":[["f8b42e274f343306","30739de5eaa89282"]]},{"id":"4433521710b33e83","type":"debug","z":"fc18afd7869318ac","name":"debug 153","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1170,"y":320,"wires":[]},{"id":"30739de5eaa89282","type":"debug","z":"fc18afd7869318ac","name":"debug 154","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1170,"y":800,"wires":[]},{"id":"7687a3a898660764","type":"evohome-config","name":"Thuis","userid":"m.r.j.","passwd":"2!"}]


Nadeel van deze api is wel dat ie maar op de halve graad nauwkeurig is, maar dat terzijde.

Tahoma_setpoint wordt als het goed is wel in dezelfde flow gezet. In functie lux switch. Zat deze er niet bij?

Acties:
  • +1Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
MikeyMan schreef op zaterdag 13 mei 2023 @ 21:40:
[...]
Nadeel van deze api is wel dat ie maar op de halve graad nauwkeurig is, maar dat terzijde.
Is dat waarom je die smooth nodes gebruikt?
Tahoma_setpoint wordt als het goed is wel in dezelfde flow gezet. In functie lux switch. Zat deze er niet bij?
Check. Die had ik even gemist.

Mocht je nog een voorbeeld hebben van de JSON die uit "Get Devices" komt, dan graag.

Wat is trouwens de reden dat je zowel een "EvoHome Domoticz" als een "EvoHome to MQTT" hebt? Waarbij de een waarden uit domoticz binnen krijgt en de ander via de EvoHome api, maar verder soort van hetzelfde lijken te zijn?

Ik ga ondertussen even puzzelen.

Feel free to Buy me a coffee


Acties:
  • +1Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

musicpixel schreef op zondag 14 mei 2023 @ 12:17:
[...]


Is dat waarom je die smooth nodes gebruikt?
Yup. Hij fluctueert weleens tussen die halve graden. Door het gebrek aan accuratesse.
[...]


Check. Die had ik even gemist.

Mocht je nog een voorbeeld hebben van de JSON die uit "Get Devices" komt, dan graag.
Yup, komt eraan.
Dit is de output:

code:
1
[{"deviceURL":"zigbee:\/\/2017-8871-5701\/0\/242","available":true,"synced":true,"type":5,"states":[],"label":"ZIGBEE (0\/242)","subsystemId":0,"attributes":[{"type":3,"name":"zigbee:Role","value":"coordinator"},{"type":1,"name":"zigbee:RadioChannel","value":20},{"type":3,"name":"core:MacAddress","value":"6DEO\/v8+ehg="}],"enabled":true,"controllableName":"zigbee:StackV3Component","definition":{"states":[{"name":"core:DiscreteRSSILevelState","rawStateId":"Rssi"},{"name":"core:RSSILevelState","rawStateId":"Rssi"},{"name":"core:ManufacturerNameState"},{"name":"core:ProductModelNameState"},{"name":"zigbee:LinkQualityIndicatorState","rawStateId":"Lqi"}],"widgetName":"ZigbeeStack","attributes":[{"name":"zigbee:Role"},{"name":"core:ManufacturerId"},{"name":"zigbee:RadioChannel"},{"name":"core:MacAddress"}],"uiClass":"ProtocolGateway","commands":[{"commandName":"openNetworkWithCommissioningManagement","nparams":0},{"commandName":"closeNetworkManagement","nparams":0},{"nparams":2,"commandName"...


Althans, deels... De debug node geeft niet meer weer...

De JSON Misschien dan?

code:
1
[{"deviceURL":"zigbee://2017-8871-5701/0/242","available":true,"synced":true,"type":5,"states":[],"label":"ZIGBEE (0/242)","subsystemId":0,"attributes":[{"type":3,"name":"zigbee:Role","value":"coordinator"},{"type":1,"name":"zigbee:RadioChannel","value":20},{"type":3,"name":"core:MacAddress","value":"6DEO/v8+ehg="}],"enabled":true,"controllableName":"zigbee:StackV3Component","definition":{"states":[{"name":"core:DiscreteRSSILevelState","rawStateId":"Rssi"},{"name":"core:RSSILevelState","rawStateId":"Rssi"},{"name":"core:ManufacturerNameState"},{"name":"core:ProductModelNameState"},{"name":"zigbee:LinkQualityIndicatorState","rawStateId":"Lqi"}],"widgetName":"ZigbeeStack","attributes":[{"name":"zigbee:Role"},{"name":"core:ManufacturerId"},{"name":"zigbee:RadioChannel"},{"name":"core:MacAddress"}],"uiClass":"ProtocolGateway","commands":[{"commandName":"openNetworkWithCommissioningManagement","nparams":0},{"commandName":"closeNetworkManagement","nparams":0},{"nparams":2,"commandName":"unbind","paramsSig":"p1,p2"},{"commandName":"refreshNetwork","nparams":0},{"nparams":1,"commandName":"openNetwork","paramsSig":"p1"},{"commandName":"closeNetwork","nparams":0},{"commandName":"openNetworkManagement","nparams":0},{"commandName":"bindingNetwork","nparams":0},{"nparams":2,"commandName":"bind","paramsSig":"p1,p2"}],"type":"PROTOCOL_GATEWAY"}},{"deviceURL":"zigbee://2017-8871-5701/0/1","available":true,"synced":true,"type":5,"states":[],"label":"ZIGBEE (0/1)","subsystemId":0,"attributes":[{"type":3,"name":"zigbee:Role","value":"coordinator"},{"type":1,"name":"zigbee:RadioChannel","value":20},{"type":3,"name":"core:MacAddress","value":"6DEO/v8+ehg="}],"enabled":true,"controllableName":"zigbee:StackV3Component","definition":{"states":[{"name":"core:DiscreteRSSILevelState","rawStateId":"Rssi"},{"name":"core:RSSILevelState","rawStateId":"Rssi"},{"name":"core:ManufacturerNameState"},{"name":"core:ProductModelNameState"},{"name":"zigbee:LinkQualityIndicatorState","rawStateId":"Lqi"}],"widgetName":"ZigbeeStack","attributes":[{"name":"zigbee:Role"},{"name":"core:ManufacturerId"},{"name":"zigbee:RadioChannel"},{"name":"core:MacAddress"}],"uiClass":"ProtocolGateway","commands":[{"commandName":"openNetworkWithCommissioningManagement","nparams":0},{"commandName":"closeNetworkManagement","nparams":0},{"nparams":2,"commandName":"unbind","paramsSig":"p1,p2"},{"commandName":"refreshNetwork","nparams":0},{"nparams":1,"commandName":"openNetwork","paramsSig":"p1"},{"commandName":"closeNetwork","nparams":0},{"commandName":"openNetworkManagement","nparams":0},{"commandName":"bindingNetwork","nparams":0},{"nparams":2,"commandName":"bind","paramsSig":"p1,p2"}],"type":"PROTOCOL_GATEWAY"}},{"deviceURL":"internal://2017-8871-5701/wifi/0","available":true,"synced":true,"type":1,"states":[{"type":1,"name":"internal:SignalStrengthState","value":93},{"type":3,"name":"internal:CurrentInfraConfigState","value":"ubnt"},{"type":3,"name":"internal:WifiModeState","value":"infrastructure"}],"label":"INTERNAL (wifi/0)","subsystemId":0,"attributes":[],"enabled":true,"controllableName":"internal:WifiComponent","definition":{"states":[{"name":"internal:CurrentInfraConfigState","rawStateId":"currentInfraConfig"},{"name":"internal:SignalStrengthState","rawStateId":"signalStrength"},{"name":"internal:WifiModeState","rawStateId":"mode"}],"widgetName":"Wifi","attributes":[],"uiClass":"Wifi","commands":[{"nparams":1,"commandName":"setWifiMode","paramsSig":"p1"},{"commandName":"clearCredentials","nparams":0},{"nparams":2,"commandName":"setTargetInfraConfig","paramsSig":"p1,p2"}],"type":"ACTUATOR"}},{"deviceURL":"io://2017-8871-5701/14384853","available":true,"synced":true,"type":2,"states":[{"type":3,"name":"core:DiscreteRSSILevelState","value":"normal"},{"type":1,"name":"core:RSSILevelState","value":60},{"type":1,"name":"core:LuminanceState","value":56448}],"label":"Verlichtingssensor achterkant","subsystemId":0,"attributes":[{"type":3,"name":"core:PowerSourceType","value":"battery"},{"type":3,"name":"core:FirmwareRevision","value":"5126936A15"},{"type":3,"name":"core:Manufacturer","value":"Somfy"}],"enabled":true,"controllableName":"io:LightIOSystemSensor","definition":{"states":[{"name":"core:StatusState","rawStateId":"2147426304"},{"name":"core:DiscreteRSSILevelState","rawStateId":"2146500638"},{"name":"core:RSSILevelState","rawStateId":"2146500638"},{"name":"core:LuminanceState","rawStateId":"2415919106"},{"name":"core:SensorDefectState","rawStateId":"2415919110"}],"widgetName":"LuminanceSensor","attributes":[{"name":"core:MaxSensedValue"},{"name":"core:PowerSourceType"},{"name":"core:MinSensedValue"},{"name":"core:MeasuredValueType"},{"name":"core:FirmwareRevision"},{"name":"core:Manufacturer"}],"uiClass":"LightSensor","commands":[{"nparams":1,"commandName":"advancedRefresh","paramsSig":"p1"}],"type":"SENSOR"}},{"deviceURL":"io://2017-8871-5701/3196925","available":true,"synced":true,"type":1,"states":[{"type":11,"name":"core:AdditionalStatusState","value":{"noKeyTransferSetupRequired":false}},{"type":11,"name":"core:ManufacturerSettingsState","value":{"current_position":51200}},{"type":1,"name":"core:ClosureState","value":100},{"type":3,"name":"core:OpenClosedState","value":"closed"},{"type":1,"name":"core:TargetClosureState","value":100},{"type":1,"name":"core:DeploymentState","value":100},{"type":3,"name":"core:NameState","value":"Zonwering Balkon"},{"type":3,"name":"core:StatusState","value":"available"},{"type":6,"name":"core:MovingState","value":false},{"type":3,"name":"core:DiscreteRSSILevelState","value":"normal"},{"type":1,"name":"core:RSSILevelState","value":42},{"type":1,"name":"core:Memorized1PositionState","value":105}],"label":"Zonwering Balkonraam","subsystemId":0,"attributes":[{"type":10,"name":"core:SupportedManufacturerSettingsCommands","value":["dead_man_up","dead_man_down","dead_man_stop","dead_man_impulse_up","dead_man_impulse_down","enter_settings_mode","save_upper_end_limit","save_lower_end_limit","stop_after_save_limit","save_settings","invert_rotation","save_my_position","delete_my_position","reset_actuator","double_power_cut","eject_from_setting_mode","enter_back_impulse_setting_mode","save_back_impulse_position"]},{"type":3,"name":"core:Manufacturer","value":"Somfy"},{"type":3,"name":"core:FirmwareRevision","value":"5104761X04"}],"enabled":true,"controllableName":"io:VerticalExteriorAwningIOComponent","definition":{"states":[{"name":"core:StatusState","rawStateId":"2147426304"},{"name":"core:NameState","rawStateId":"1"},{"name":"core:AdditionalStatusState","rawStateId":"2146500645"},{"name":"core:TargetClosureState","rawStateId":"16832522"},{"name":"core:SecuredPositionState","rawStateId":"16832522"},{"name":"core:ManufacturerSettingsState","rawStateId":"65537"},{"name":"core:ClosureState","rawStateId":"65537"},{"name":"core:OpenClosedState","rawStateId":"65537"},{"name":"core:DeploymentState","rawStateId":"65537"},{"name":"core:MovingState","rawStateId":"65557"},{"name":"core:ManufacturerDiagnosticsState","rawStateId":"2"},{"name":"core:DiscreteRSSILevelState","rawStateId":"2146500638"},{"name":"core:RSSILevelState","rawStateId":"2146500638"},{"name":"core:Memorized1PositionState","rawStateId":"16832512"}],"widgetName":"PositionableScreen","attributes":[{"name":"core:SupportedManufacturerSettingsCommands"},{"name":"core:Manufacturer"},{"name":"core:FirmwareRevision"}],"uiClass":"ExteriorScreen","commands":[{"commandName":"stop","nparams":0},{"nparams":1,"commandName":"setDeployment","paramsSig":"p1"},{"nparams":1,"commandName":"delayedStopIdentify","paramsSig":"p1"},{"nparams":2,"commandName":"runManufacturerSettingsCommand","paramsSig":"p1,p2"},{"commandName":"down","nparams":0},{"nparams":1,"commandName":"setClosure","paramsSig":"p1"},{"commandName":"unpairAllOneWayControllers","nparams":0},{"nparams":1,"commandName":"setConfigState","paramsSig":"p1"},{"nparams":1,"commandName":"pairOneWayController","paramsSig":"p1,*p2"},{"nparams":1,"commandName":"advancedRefresh","paramsSig":"p1,*p2"},{"commandName":"unpairAllOneWayControllersAndDeleteNode","nparams":0},{"commandName":"refreshMemorized1Position","nparams":0},{"commandName":"undeploy","nparams":0},{"commandName":"up","nparams":0},{"commandName":"startIdentify","nparams":0},{"commandName":"stopIdentify","nparams":0},{"commandName":"open","nparams":0},{"commandName":"deploy","nparams":0},{"commandName":"keepOneWayControllersAndDeleteNode","nparams":0},{"commandName":"sendIOKey","nparams":0},{"nparams":1,"commandName":"setMemorized1Position","paramsSig":"p1"},{"nparams":1,"commandName":"wink","paramsSig":"p1"},{"commandName":"close","nparams":0},{"nparams":1,"commandName":"setName","paramsSig":"p1"},{"commandName":"identify","nparams":0},{"nparams":1,"commandName":"setPosition","paramsSig":"p1"},{"nparams":1,"commandName":"unpairOneWayController","paramsSig":"p1,*p2"},{"nparams":1,"commandName":"setSecuredPosition","paramsSig":"p1"},{"commandName":"my","nparams":0},{"commandName":"getName","nparams":0}],"type":"ACTUATOR"}},{"creationTime":1682072545840,"deviceURL":"rts://2017-8871-5701/16736992","available":true,"synced":true,"type":1,"states":[],"label":"Zonwering woonkamer","definition":{"states":[],"widgetName":"UpDownExteriorScreen","attributes":[],"uiClass":"ExteriorScreen","commands":[{"nparams":0,"commandName":"stop","paramsSig":"*p1"},{"commandName":"test","nparams":0},{"nparams":0,"commandName":"open","paramsSig":"*p1"},{"nparams":0,"commandName":"close","paramsSig":"*p1"},{"commandName":"identify","nparams":0},{"nparams":0,"commandName":"up","paramsSig":"*p1"},{"nparams":0,"commandName":"down","paramsSig":"*p1"},{"nparams":0,"commandName":"my","paramsSig":"*p1"},{"nparams":0,"commandName":"openConfiguration","paramsSig":"*p1"},{"nparams":0,"commandName":"rest","paramsSig":"*p1"}],"type":"ACTUATOR"},"attributes":[],"enabled":true,"controllableName":"rts:ExteriorBlindRTSComponent","subsystemId":0},{"deviceURL":"internal://2017-8871-5701/pod/0","available":true,"synced":true,"type":1,"states":[{"type":3,"name":"core:NameState","value":"Box"},{"type":3,"name":"core:CountryCodeState","value":"NL"},{"type":1,"name":"internal:LightingLedPodModeState","value":0},{"type":3,"name":"core:LocalIPv4AddressState","value":"10.0.0.161"},{"type":3,"name":"core:ConnectivityState","value":"online"}],"label":"Box","subsystemId":0,"attributes":[],"enabled":true,"controllableName":"internal:PodV3Component","definition":{"states":[{"name":"core:ConnectivityState","rawStateId":"networkConnectivity"},{"name":"core:LocalAccessProofState","rawStateId":"localAccessProof"},{"name":"internal:Button2State","rawStateId":"button2"},{"name":"core:LocalIPv4AddressState","rawStateId":"ip"},{"name":"core:CountryCodeState","rawStateId":"countryCode"},{"name":"internal:Button3State","rawStateId":"button3"},{"name":"internal:LightingLedPodModeState","rawStateId":"lightingLedPodMode"},{"name":"core:NameState","rawStateId":"name"},{"name":"internal:Button1State","rawStateId":"button1"}],"widgetName":"Pod","attributes":[],"uiClass":"Pod","commands":[{"commandName":"deactivateCalendar","nparams":0},{"commandName":"refreshPodMode","nparams":0},{"commandName":"getName","nparams":0},{"commandName":"setPodLedOff","nparams":0},{"nparams":1,"commandName":"setCalendar","paramsSig":"p1"},{"commandName":"setPodLedOn","nparams":0},{"commandName":"activateCalendar","nparams":0},{"nparams":1,"commandName":"setLightingLedPodMode","paramsSig":"p1"},{"commandName":"update","nparams":0},{"commandName":"refreshUpdateStatus","nparams":0},{"nparams":1,"commandName":"setCountryCode","paramsSig":"p1"}],"type":"ACTUATOR"}},{"deviceURL":"io://2017-8871-5701/15149504","available":true,"synced":true,"type":5,"states":[],"label":"IO (15149504)","subsystemId":0,"attributes":[],"enabled":true,"controllableName":"io:StackComponent","definition":{"states":[],"widgetName":"IOStack","attributes":[],"uiClass":"ProtocolGateway","commands":[{"nparams":1,"commandName":"discoverActuators","paramsSig":"p1"},{"commandName":"joinNetwork","nparams":0},{"nparams":1,"commandName":"advancedSomfyDiscover","paramsSig":"p1"},{"commandName":"resetNetworkSecurity","nparams":0},{"commandName":"shareNetwork","nparams":0},{"nparams":0,"commandName":"discover1WayController","paramsSig":"*p1,*p2"},{"nparams":1,"commandName":"discoverSensors","paramsSig":"p1"},{"commandName":"discoverSomfyUnsetActuators","nparams":0}],"type":"PROTOCOL_GATEWAY"}},{"creationTime":1682072545612,"deviceURL":"rts://2017-8871-5701/16722109","available":true,"synced":true,"type":1,"states":[],"label":"Zonwering Slaapkamer","definition":{"states":[],"widgetName":"UpDownExteriorScreen","attributes":[],"uiClass":"ExteriorScreen","commands":[{"nparams":0,"commandName":"stop","paramsSig":"*p1"},{"commandName":"test","nparams":0},{"nparams":0,"commandName":"open","paramsSig":"*p1"},{"nparams":0,"commandName":"close","paramsSig":"*p1"},{"commandName":"identify","nparams":0},{"nparams":0,"commandName":"up","paramsSig":"*p1"},{"nparams":0,"commandName":"down","paramsSig":"*p1"},{"nparams":0,"commandName":"my","paramsSig":"*p1"},{"nparams":0,"commandName":"openConfiguration","paramsSig":"*p1"},{"nparams":0,"commandName":"rest","paramsSig":"*p1"}],"type":"ACTUATOR"},"attributes":[],"enabled":true,"controllableName":"rts:ExteriorBlindRTSComponent","subsystemId":0},{"creationTime":1682072546056,"deviceURL":"rts://2017-8871-5701/16740764","available":true,"synced":true,"type":1,"states":[],"label":"Zonwering keuken","definition":{"states":[],"widgetName":"UpDownExteriorScreen","attributes":[],"uiClass":"ExteriorScreen","commands":[{"nparams":0,"commandName":"stop","paramsSig":"*p1"},{"commandName":"test","nparams":0},{"nparams":0,"commandName":"open","paramsSig":"*p1"},{"nparams":0,"commandName":"close","paramsSig":"*p1"},{"commandName":"identify","nparams":0},{"nparams":0,"commandName":"up","paramsSig":"*p1"},{"nparams":0,"commandName":"down","paramsSig":"*p1"},{"nparams":0,"commandName":"my","paramsSig":"*p1"},{"nparams":0,"commandName":"openConfiguration","paramsSig":"*p1"},{"nparams":0,"commandName":"rest","paramsSig":"*p1"}],"type":"ACTUATOR"},"attributes":[],"enabled":true,"controllableName":"rts:ExteriorBlindRTSComponent","subsystemId":0},{"creationTime":1682072546227,"deviceURL":"rts://2017-8871-5701/16745695","available":true,"synced":true,"type":1,"states":[],"label":"Zonwering Gym","definition":{"states":[],"widgetName":"UpDownExteriorScreen","attributes":[],"uiClass":"ExteriorScreen","commands":[{"nparams":0,"commandName":"stop","paramsSig":"*p1"},{"commandName":"test","nparams":0},{"nparams":0,"commandName":"open","paramsSig":"*p1"},{"nparams":0,"commandName":"close","paramsSig":"*p1"},{"commandName":"identify","nparams":0},{"nparams":0,"commandName":"up","paramsSig":"*p1"},{"nparams":0,"commandName":"down","paramsSig":"*p1"},{"nparams":0,"commandName":"my","paramsSig":"*p1"},{"nparams":0,"commandName":"openConfiguration","paramsSig":"*p1"},{"nparams":0,"commandName":"rest","paramsSig":"*p1"}],"type":"ACTUATOR"},"attributes":[],"enabled":true,"controllableName":"rts:ExteriorBlindRTSComponent","subsystemId":0},{"deviceURL":"zigbee://2017-8871-5701/65535","available":true,"synced":true,"type":5,"states":[],"label":"ZIGBEE (65535)","subsystemId":0,"attributes":[],"enabled":true,"controllableName":"zigbee:TransceiverV3_0Component","definition":{"states":[],"widgetName":"ZigbeeStack","attributes":[],"uiClass":"ProtocolGateway","commands":[],"type":"PROTOCOL_GATEWAY"}},{"deviceURL":"io://2017-8871-5701/8684910","available":true,"synced":true,"type":1,"states":[{"type":6,"name":"core:MovingState","value":false},{"type":1,"name":"core:TargetClosureState","value":100},{"type":3,"name":"core:StatusState","value":"available"},{"type":1,"name":"core:Memorized1PositionState","value":105},{"type":3,"name":"core:NameState","value":"Zonwering Balkon"},{"type":11,"name":"core:ManufacturerSettingsState","value":{"current_position":51200}},{"type":1,"name":"core:ClosureState","value":100},{"type":3,"name":"core:OpenClosedState","value":"closed"},{"type":1,"name":"core:DeploymentState","value":100},{"type":3,"name":"core:DiscreteRSSILevelState","value":"normal"},{"type":1,"name":"core:RSSILevelState","value":42}],"label":"Zonwering Balkondeur","subsystemId":0,"attributes":[{"type":10,"name":"core:SupportedManufacturerSettingsCommands","value":["dead_man_up","dead_man_down","dead_man_stop","dead_man_impulse_up","dead_man_impulse_down","enter_settings_mode","save_upper_end_limit","save_lower_end_limit","stop_after_save_limit","save_settings","invert_rotation","save_my_position","delete_my_position","reset_actuator","double_power_cut","eject_from_setting_mode","enter_back_impulse_setting_mode","save_back_impulse_position"]},{"type":3,"name":"core:Manufacturer","value":"Somfy"},{"type":3,"name":"core:FirmwareRevision","value":"5104761X04"}],"enabled":true,"controllableName":"io:VerticalExteriorAwningIOComponent","definition":{"states":[{"name":"core:StatusState","rawStateId":"2147426304"},{"name":"core:NameState","rawStateId":"1"},{"name":"core:AdditionalStatusState","rawStateId":"2146500645"},{"name":"core:TargetClosureState","rawStateId":"16832522"},{"name":"core:SecuredPositionState","rawStateId":"16832522"},{"name":"core:ManufacturerSettingsState","rawStateId":"65537"},{"name":"core:ClosureState","rawStateId":"65537"},{"name":"core:OpenClosedState","rawStateId":"65537"},{"name":"core:DeploymentState","rawStateId":"65537"},{"name":"core:MovingState","rawStateId":"65557"},{"name":"core:ManufacturerDiagnosticsState","rawStateId":"2"},{"name":"core:DiscreteRSSILevelState","rawStateId":"2146500638"},{"name":"core:RSSILevelState","rawStateId":"2146500638"},{"name":"core:Memorized1PositionState","rawStateId":"16832512"}],"widgetName":"PositionableScreen","attributes":[{"name":"core:SupportedManufacturerSettingsCommands"},{"name":"core:Manufacturer"},{"name":"core:FirmwareRevision"}],"uiClass":"ExteriorScreen","commands":[{"commandName":"stop","nparams":0},{"nparams":1,"commandName":"setDeployment","paramsSig":"p1"},{"nparams":1,"commandName":"delayedStopIdentify","paramsSig":"p1"},{"nparams":2,"commandName":"runManufacturerSettingsCommand","paramsSig":"p1,p2"},{"commandName":"down","nparams":0},{"nparams":1,"commandName":"setClosure","paramsSig":"p1"},{"commandName":"unpairAllOneWayControllers","nparams":0},{"nparams":1,"commandName":"setConfigState","paramsSig":"p1"},{"nparams":1,"commandName":"pairOneWayController","paramsSig":"p1,*p2"},{"nparams":1,"commandName":"advancedRefresh","paramsSig":"p1,*p2"},{"commandName":"unpairAllOneWayControllersAndDeleteNode","nparams":0},{"commandName":"refreshMemorized1Position","nparams":0},{"commandName":"undeploy","nparams":0},{"commandName":"up","nparams":0},{"commandName":"startIdentify","nparams":0},{"commandName":"stopIdentify","nparams":0},{"commandName":"open","nparams":0},{"commandName":"deploy","nparams":0},{"commandName":"keepOneWayControllersAndDeleteNode","nparams":0},{"commandName":"sendIOKey","nparams":0},{"nparams":1,"commandName":"setMemorized1Position","paramsSig":"p1"},{"nparams":1,"commandName":"wink","paramsSig":"p1"},{"commandName":"close","nparams":0},{"nparams":1,"commandName":"setName","paramsSig":"p1"},{"commandName":"identify","nparams":0},{"nparams":1,"commandName":"setPosition","paramsSig":"p1"},{"nparams":1,"commandName":"unpairOneWayController","paramsSig":"p1,*p2"},{"nparams":1,"commandName":"setSecuredPosition","paramsSig":"p1"},{"commandName":"my","nparams":0},{"commandName":"getName","nparams":0}],"type":"ACTUATOR"}},{"deviceURL":"zigbee://2017-8871-5701/0/0","available":true,"synced":true,"type":6,"states":[{"type":3,"name":"core:StatusState","value":"available"}],"label":"ZIGBEE (0/0)","subsystemId":0,"attributes":[{"type":3,"name":"core:MacAddress","value":"6DEO/v8+ehg="}],"enabled":true,"controllableName":"zigbee:ZigbeeNetworkNode","definition":{"states":[{"name":"zigbee:RoutingTableState","rawStateId":"32818"},{"name":"zigbee:NeighborTableState","rawStateId":"32817"},{"name":"core:StatusState","rawStateId":"Available"},{"name":"zigbee:BindingTableState","rawStateId":"32819"}],"widgetName":"ZigbeeNetwork","attributes":[{"name":"core:MacAddress"},{"name":"core:CommissioningCode"}],"uiClass":"NetworkComponent","commands":[{"commandName":"refreshNeighborTable","nparams":0},{"commandName":"refreshRoutingTable","nparams":0},{"commandName":"refreshBindingTable","nparams":0},{"commandName":"leaveNetwork","nparams":0}],"type":"INFRASTRUCTURE_COMPONENT"}}]


Had ik al gezegd dat het een draak van een API is?
Wat is trouwens de reden dat je zowel een "EvoHome Domoticz" als een "EvoHome to MQTT" hebt? Waarbij de een waarden uit domoticz binnen krijgt en de ander via de EvoHome api, maar verder soort van hetzelfde lijken te zijn?

Ik ga ondertussen even puzzelen.
Had eerst domoticz aan de praat en pas later de api ontdekt. De domoticz input gebruikt nog de oude api. Die wel in tienden of zelfs honderdsten de temperatuur doorgeeft. Maar domoticz zelf loopt weleens vast, dus daarom omgezet naar de node red api.

Wat trouwens nog niet echt uitmaakt; omdat ik het nog niet voor elkaar heb om de schermen rechtstreeks via de API aan te sturen. Dus dat loopt ook nog via domoticz. :X

[Voor 126% gewijzigd door MikeyMan op 14-05-2023 12:33]


Acties:
  • +1Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
@MikeyMan

Refactoring van je flows zal ik stap voor stap doen zodat je kunt volgen wat ik doe.

Uitgangspunten bij het herstructureren zijn o.a.:
- Dubbele code/nodes zoveel mogelijk verminderen. Dit helpt bij de onderhoudbaarheid.
- Nodes of flows die nu meerdere niet/half-gerelateerde dingen doen uit elkaar trekken zodat de nieuwe maar voor 1 ding verantwoordelijk zijn. Dit komt hergebruik ten goede.
- Harde waarden vervangen door variabelen zodat deze makkelijk kunnen worden aangepast indien nodig. Dit zorgt voor meer robuustheid en verbetert ook de leesbaarheid.
- En vast nog wel meer ;)

Feel free to Buy me a coffee


Acties:
  • 0Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

@musicpixel haha thanks! Is het zo erg? :+

Acties:
  • +1Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
MikeyMan schreef op zondag 14 mei 2023 @ 12:23:
[...]
Had ik al gezegd dat het een draak van een API is?
[...]
Eerste wat ik tegenkom:

Op dit moment haal je de status van ALLE devices op met de GetDevices node. Dat levert nogal een bak JSON op, wat extra load geeft op je gateway. Vervolgens haal je daar het 4e device uit, en daarvan weer de 3e state, wat dan de lux waarde is.

Probleem hiermee is dat het niet gegarandeerd het 4e device en de 3e state blijft. Dit kan bijvoorbeeld veranderen als er een device bij komt of er iets in de API gewijzigd wordt.

Heb je al geprobeerd om de status van ALLEEN de lichtsensor op te halen door de URL te veranderen van .../setup/devices naar .../setup/devices/{deviceURL}/states of zelfs .../setup/devices/{deviceURL}/states/{name}?

De lichtsensor heeft deviceURL "io://2017-8871-5701/14384853" en de name van de state is "core:LuminanceState" dus dan zou dat worden ("..." even vervangen door het eerste deel van jouw URL in je node):
code:
1
.../setup/devices/io%3A%2F%2F2017-8871-5701%2F14384853/states/core%3ALuminanceState


URLEncode wordt hier toegepast voor de deviceURL en name zoals in de Somfy Tahoma swagger-ui ook gedaan wordt.

Ik kan het helaas niet testen want heb geen Somfy spul, maar test-flowtje zou zoiets zijn. Laat even weten of dit werkt zodat ik hierop kan verder borduren.



code:
1
[{"id":"0d4206cfbb99afbe","type":"inject","z":"59634d1e16095311","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":400,"y":760,"wires":[["e2291e974eac8bf7"]]},{"id":"e2291e974eac8bf7","type":"http request","z":"59634d1e16095311","name":"Get Lichtsensor State","method":"GET","ret":"txt","paytoqs":"ignore","url":"https://10.0.0.161:8443/enduser-mobile-web/1/enduserAPI/setup/devices/io%3A%2F%2F2017-8871-5701%2F14384853/states/core%3ALuminanceState","tls":"930fdadf3d5bf745","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"bearer","senderr":false,"headers":[],"x":640,"y":760,"wires":[["f5886ed68cf93c12","39dddc71d36eb392"]]},{"id":"f5886ed68cf93c12","type":"json","z":"59634d1e16095311","name":"","property":"payload","action":"","pretty":false,"x":870,"y":760,"wires":[["b2adab4d4ce6e6b0"]]},{"id":"39dddc71d36eb392","type":"debug","z":"59634d1e16095311","name":"Lichtsensor State RAW","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":930,"y":700,"wires":[]},{"id":"b2adab4d4ce6e6b0","type":"debug","z":"59634d1e16095311","name":"Lichtsensor State Object","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1130,"y":760,"wires":[]},{"id":"930fdadf3d5bf745","type":"tls-config","name":"","cert":"","key":"","ca":"","certname":"","keyname":"","caname":"","servername":"","verifyservercert":false,"alpnprotocol":""}]


Ik neem aan dat je deze API links ook gevonden had?
https://github.com/Somfy-...mfy-TaHoma-Developer-Mode
https://github.com/Somfy-...ob/main/docs/openapi.yaml
https://somfy-developer.g...fy-TaHoma-Developer-Mode/

Feel free to Buy me a coffee


Acties:
  • +1Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
Gelukkig is het (met een beetje moeite) nog redelijk te volgen wat er gebeurt, maar kijkend naar je "Somfy Tahoma API" flow tabblad moest ik al snel hier aan denken, zeker met die lijntjes in Node Red ;)

Het feit dat je tegen problemen aanliep met de implementatie van "wind" betekende dat het waarschijnlijk te complex geworden was en er versimpeld/geherstructureerd moest worden. Dat is een normaal proces tijdens het programmeren.

Feel free to Buy me a coffee


Acties:
  • 0Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

@musicpixel dat flowtje deed het niet:


gek genoeg met zelfde bearer token etc.


Heb de gok genomen, en de originele link vervangen en dat ziet er als volgt uit:



Ziet er volgens mij goed uit. :Y
Change node toegevoegd om msg.payload.value om te zetten naar msg.payload. En wat lijntjes omgehangen. Works like a charm.

Was er inderdaad al een keer tegenaan gelopen dat er blijkbaar iets veranderd was in de nummering. _/-\o_
Al lang blij dat er uberhaupt iets werkte eerlijk gezegd :)

Blijf het een dramatische implementatie vinden eerlijk gezegd. Lokale API met een tijdelijke bearer token. Why...?

[Voor 55% gewijzigd door MikeyMan op 14-05-2023 20:18]


Acties:
  • 0Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
MikeyMan schreef op zondag 14 mei 2023 @ 20:10:
@musicpixel dat flowtje deed het niet:
gek genoeg met zelfde bearer token etc.
Was er al bang voor dat er iets met de authenticatie niet goed zou overkomen.
Heb de gok genomen, en de originele link vervangen
Ziet er volgens mij goed uit. :Y
Change node toegevoegd om msg.payload.value om te zetten naar msg.payload. En wat lijntjes omgehangen. Works like a charm.
Gelukkig had ik het voldoende uitgelegd dus je kon het zelf aanpassen. Blij dat het werkt en goed dat ik de payload kan zien in je laatste afbeelding. Kan ik daar mee verder.
Was er inderdaad al een keer tegenaan gelopen dat er blijkbaar iets veranderd was in de nummering. _/-\o_
Al lang blij dat er uberhaupt iets werkte eerlijk gezegd :)
Ik zag in je originele flow dat je harde getallen gebruikte om een waarde uit een zooi JSON te halen en dacht meteen dat dat wel eens problemen kon geven, vandaar dat ik een voorbeeld van de JSON vroeg om het even te bekijken. Nu maar hopen dat de deviceURL wel gelijk blijft ;)
Blijf het een dramatische implementatie vinden eerlijk gezegd. Lokale API met een tijdelijke bearer token. Why...?
Ik vermoed dat het een (bijna) 1-op-1 kopie is van een Cloud API, kijkend naar hun swagger-ui implementatie.

Feel free to Buy me a coffee


Acties:
  • +1Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
@MikeyMan

Okee, had vandaag weer wat tijd, dus hier komt stap 1 van de refactoring.

STAP 1

Ik ben begonnen met het kijken naar de functie "Functie Woonkamer".



Het viel me op dat deze functie meerdere dingen doet, namelijk
  • het bepalen van de domoticz commands om de woonkamer en keuken zonneschermen open of dicht te doen
  • het samenstellen van een statusbericht om te tonen op het dashboard en
  • het outputten van de temperatuur van de woonkamer om te tonen in een grafiek op het dashboard.
Dit ga ik hieronder uit elkaar trekken zodat de functie nog maar voor één ding verantwoordelijk is, namelijk het bepalen of de woonkamer/keuken zonneschemen open of dicht moeten (of dat er niets moet gebeuren).
De nieuwe functie krijgt dus maar één output, en die kan "open", "close", of "" zijn op basis van de logica die al in de huidige functie aanwezig is.

Tevens probeer ik te bewerkstelligen dat er een stuk minder kris-kras lijntjes zijn. In deze eerste stap zal dat nog niet heel zichtbaar zijn, maar wat ik nu in stap 1 doe is een voorbereiding hierop.

Alvast een plaatje en de export van hoe het er na stap 1 uit ziet:



code:
1
[{"id":"76f463840671d95b","type":"function","z":"59634d1e16095311","name":"Zonnescherm Woonkamer Logica","func":"var Lichtsensor = msg.payload;\nLichtsensor = parseFloat(Lichtsensor.toFixed(0));\nvar Woonkamer_PV = global.get('EvoHome_woonkamer_PV', \"file\");\n// var Woonkamer_PVdec = parseFloat(Woonkamer_PV).toFixed(1);\nvar Woonkamer_SP = global.get('EvoHome_woonkamer_SP', \"file\");\n// var Woonkamer_SPdec = parseFloat(Woonkamer_SP).toFixed(1);\nlet Setpoint = global.get('Tahoma_setpoint', \"file\"); // Setpoint schermen uit;\nvar Switch = global.get('Switch.Woonkamer', \"file\"); //Schakeltemp woonkamer\nvar SwitchOpen = Switch-1;\n// var Switchdec = parseFloat(Switch).toFixed(1);\nlet OnOff = global.get('TahomaSwitch',\"file\");\nlet Wind_PV = global.get('Wind_PV', \"file\");\nlet Wind_SP = global.get('Wind.Woonkamer', \"file\")\n\n\nlet action = \"\";\nlet logicpath = 0;\n\nif (OnOff == true) {\n    if (Lichtsensor > Setpoint && Woonkamer_PV >= (Switch) && Wind_PV < Wind_SP) {\n        action = \"close\";\n        logicpath = 1;\n    }\n    else if (Lichtsensor > Setpoint && Woonkamer_PV >= (SwitchOpen) && Woonkamer_PV < Switch) {\n        action = \"\";\n        logicpath = 2;\n    }\n    else if (Lichtsensor > Setpoint && Woonkamer_PV < (SwitchOpen)) {\n        action = \"open\";\n        logicpath = 3;\n    }\n    else {\n        action = \"open\";\n        logicpath = 4;\n    }\n}\n\nmsg.payload = action;\nmsg.logicpath = logicpath;\n\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":820,"wires":[["9b97b6a610ecf1d9","f9258f0295134b2f","98b4f6f1954b9e69","444ca403c394f79e"]]},{"id":"8e8bc9fe64a517f7","type":"change","z":"59634d1e16095311","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"PV_Woonkamer","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1470,"y":1000,"wires":[["4b43aea169370583","f2a6fa288b9f1b39"]]},{"id":"a5af0c26964e592b","type":"mqtt out","z":"59634d1e16095311","name":"","topic":"domoticz/in","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"92e5b2c.00a8b5","x":1510,"y":840,"wires":[]},{"id":"9b97b6a610ecf1d9","type":"function","z":"59634d1e16095311","name":"Domoticz command Woonkamer","func":"var action = msg.payload;   // action can be \"open\", \"close\" or something else (eg. \"\")\n\nlet domoticzIdx = 492;  // zonnescherm woonkamer\nlet domoticzCommand = \"\";\n\n// determine domoticz command from action (open/close)\nswitch (action) {\n    case 'open':\n        domoticzCommand = { \"command\": \"switchlight\", \"idx\": domoticzIdx, \"switchcmd\": \"On\" };  // On = up\n        break;\n    case 'close':\n        domoticzCommand = { \"command\": \"switchlight\", \"idx\": domoticzIdx, \"switchcmd\": \"Off\" }; // Off = down\n        break;\n    default:\n        domoticzCommand = {};\n}\n\nmsg.payload = domoticzCommand;\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1210,"y":820,"wires":[["a5af0c26964e592b","d537b9469316c3e3"]]},{"id":"f9258f0295134b2f","type":"function","z":"59634d1e16095311","name":"Domoticz command Keuken","func":"var action = msg.payload;   // action can be \"open\", \"close\" or something else (eg. \"\")\n\nlet domoticzIdx = 493;  // zonnescherm keuken\nlet domoticzCommand = \"\";\n\n// determine domoticz command from action (open/close)\nswitch (action) {\n    case 'open':\n        domoticzCommand = { \"command\": \"switchlight\", \"idx\": domoticzIdx, \"switchcmd\": \"On\" };  // On = up\n        break;\n    case 'close':\n        domoticzCommand = { \"command\": \"switchlight\", \"idx\": domoticzIdx, \"switchcmd\": \"Off\" }; // Off = down\n        break;\n    default:\n        domoticzCommand = {};\n}\n\nmsg.payload = domoticzCommand;\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1200,"y":860,"wires":[["a5af0c26964e592b","87b1a3fad4083c68"]]},{"id":"98b4f6f1954b9e69","type":"function","z":"59634d1e16095311","name":"Prepare status message","func":"var action = msg.payload;       // action can be \"open\", \"close\" or something else (eg. \"\")\nvar logicpath = msg.logicpath;  // 1..4\nvar status = \"\";\n\nvar Woonkamer_PV = global.get('EvoHome_woonkamer_PV', \"file\");\nvar Woonkamer_SP = global.get('EvoHome_woonkamer_SP', \"file\");\nlet Wind_PV = global.get('Wind_PV', \"file\");\nlet Wind_SP = global.get('Wind.Woonkamer', \"file\")\nvar Switch = global.get('Switch.Woonkamer', \"file\"); //Schakeltemp woonkamer\nvar SwitchOpen = Switch - 1;\n\nvar Woonkamer_PVdec = parseFloat(Woonkamer_PV).toFixed(1);\nvar Woonkamer_SPdec = parseFloat(Woonkamer_SP).toFixed(1);\nvar Switchdec = parseFloat(Switch).toFixed(1);\n\n// determine domoticz command from action (open/close)\nswitch (action) {\n    case 'open':\n        status = \"In\"\n        break;\n    case 'close':\n        status = \"Uit\"\n        break;\n    default:\n        status = \"Hold\"\n}\n\nlet statusMessage = \"Status: \" + status + \" (\" + logicpath + \") - \" + \"Temp: \" + Woonkamer_PVdec + \" - Switch@:\" + Switchdec + \" - SwitchOpen\" + SwitchOpen + \" - Wind_PV:\" + Wind_PV + \" Wind_SP:\" + Wind_SP;\n\nmsg.payload = statusMessage;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1190,"y":960,"wires":[["69991cb20a29b17e"]]},{"id":"d537b9469316c3e3","type":"debug","z":"59634d1e16095311","name":"Debug zonnescherm Woonkamer Domoticz","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1610,"y":780,"wires":[]},{"id":"4b43aea169370583","type":"debug","z":"59634d1e16095311","name":"debug 192","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1690,"y":1040,"wires":[]},{"id":"ff6cad665b7daeac","type":"inject","z":"59634d1e16095311","name":"Lichtsensor dummy","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"22222","payloadType":"num","x":530,"y":820,"wires":[["76f463840671d95b"]]},{"id":"87b1a3fad4083c68","type":"debug","z":"59634d1e16095311","name":"Debug zonnescherm Keuken Domoticz","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1590,"y":900,"wires":[]},{"id":"444ca403c394f79e","type":"function","z":"59634d1e16095311","name":"Prepare graph value","func":"var Woonkamer_PV = global.get('EvoHome_woonkamer_PV', \"file\");\n\nmsg.payload = Woonkamer_PV;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1180,"y":1000,"wires":[["8e8bc9fe64a517f7"]]},{"id":"2caf20fc0f9e78a0","type":"ui_text","z":"59634d1e16095311","group":"cdd6bc3a70d5012e","order":3,"width":0,"height":0,"name":"","label":"Woonkamer","format":"{{msg.payload}}","layout":"row-spread","className":"","x":590,"y":1140,"wires":[]},{"id":"b874d5b31b2ad2dd","type":"link in","z":"59634d1e16095311","name":"Dashboard | Current State | Woonkamer","links":["69991cb20a29b17e","408d93a3edc8940e"],"x":435,"y":1140,"wires":[["2caf20fc0f9e78a0"]]},{"id":"69991cb20a29b17e","type":"link out","z":"59634d1e16095311","name":"Update Dashboard Current State Woonkamer","mode":"link","links":["b874d5b31b2ad2dd"],"x":1415,"y":960,"wires":[]},{"id":"bfe89eafea81c517","type":"ui_chart","z":"59634d1e16095311","name":"","group":"85e909c93386b7a6","order":1,"width":"14","height":"10","label":"Roomtemperature PV","chartType":"line","legend":"false","xformat":"HH:mm","interpolate":"linear","nodata":"","dot":false,"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":620,"y":1180,"wires":[["a2588b46222ede69"]]},{"id":"828c2195ec1dd210","type":"link in","z":"59634d1e16095311","name":"Dashboard | Chart Roomtemperature PV","links":["f2a6fa288b9f1b39","650f01eafc49c289"],"x":435,"y":1180,"wires":[["bfe89eafea81c517"]]},{"id":"a2588b46222ede69","type":"debug","z":"59634d1e16095311","name":"Roomtemperature PV Chart State","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":960,"y":1180,"wires":[]},{"id":"f2a6fa288b9f1b39","type":"link out","z":"59634d1e16095311","name":"Plot to Chart Roomtemperature PV","mode":"link","links":["828c2195ec1dd210"],"x":1635,"y":1000,"wires":[]},{"id":"bb35b611dc5e31f7","type":"comment","z":"59634d1e16095311","name":"Update Dashboard Current State Woonkamer","info":"","x":1650,"y":960,"wires":[]},{"id":"523e0ef0bd35591b","type":"comment","z":"59634d1e16095311","name":"Plot to Chart Roomtemperature PV","info":"","x":1840,"y":1000,"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":""},{"id":"cdd6bc3a70d5012e","type":"ui_group","name":"Current State","tab":"21daaeaaf5421973","order":3,"disp":true,"width":"12","collapse":false,"className":""},{"id":"85e909c93386b7a6","type":"ui_group","name":"Chart","tab":"21daaeaaf5421973","order":4,"disp":true,"width":"28","collapse":false,"className":""},{"id":"21daaeaaf5421973","type":"ui_tab","name":"Zonneschermen","icon":"wi-wu-mostlysunny","order":14,"disabled":false,"hidden":false}]


Het lijkt zo op het eerste gezicht alsof het alleen maar meer wordt, maar heb geduld ;)

Allereerst: ik heb een lichtsensor dummy gebruikt om te testen, maar hier komt natuurlijk de lichtsensor output zoals je die nu al hebt in je flow.

Wat heb ik gedaan:

Dit was de inhoud van de OUDE function node Functie Woonkamer:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
var Lichtsensor = msg.payload;
Lichtsensor = parseFloat(Lichtsensor.toFixed(0));
var Woonkamer_PV = global.get('EvoHome_woonkamer_PV', "file");
var Woonkamer_PVdec = parseFloat(Woonkamer_PV).toFixed(1);
var Woonkamer_SP = global.get('EvoHome_woonkamer_SP', "file");
var Woonkamer_SPdec = parseFloat(Woonkamer_SP).toFixed(1);
let Setpoint = global.get('Tahoma_setpoint', "file"); // Setpoint schermen uit;
let msg1 = {};
let msg2 = {};
let msg3 = {};
let msg4 = {};
var Switch = global.get('Switch.Woonkamer', "file"); //Schakeltemp woonkamer
var SwitchOpen = Switch-1;
var Switchdec = parseFloat(Switch).toFixed(1);
let OnOff = global.get('TahomaSwitch',"file");
let Wind_PV = global.get('Wind_PV', "file");
let Wind_SP = global.get('Wind.Woonkamer', "file")

//msg.payload = { "Licht": Lichtsensor, "PV": Woonkamer_PV, "SP": Woonkamer_SP, "Setpoint": Setpoint };
if( OnOff == true){
if (Lichtsensor > Setpoint && Woonkamer_PV >= (Switch) && Wind_PV < Wind_SP) {
    msg1.payload = { "command": "switchlight", "idx": 492, "switchcmd": "Off" }; //Off = Down
    msg2.payload = { "command": "switchlight", "idx": 493, "switchcmd": "Off" }; //Off = Down
    msg3.payload = "Status: Uit (1) - " + "Temp: " + Woonkamer_PVdec + " - Switch@:" + Switchdec + " - SwitchOpen" + SwitchOpen + " - Wind_PV:" + Wind_PV + " Wind_SP:" + Wind_SP; //test
    //msg3.payload = { "Licht": Lichtsensor, "PV": Woonkamer_PV, "SP": Woonkamer_SP, "Setpoint": Setpoint, 'Switch@': Switch, 'OnOff': OnOff }; //test
    msg4.payload = Woonkamer_PV
}

else if (Lichtsensor > Setpoint && Woonkamer_PV >= (SwitchOpen) && Woonkamer_PV < Switch) {
    msg1.payload = null; //No message
    msg2.payload = null; //No message
    msg3.payload = "Status: Hold (2) - " + "Temp: " + Woonkamer_PVdec + " - Switch@:" + Switchdec + " - SwitchOpen" + SwitchOpen + " - Wind_PV:" + Wind_PV + " Wind_SP:" + Wind_SP;
    //msg2.payload = { "Licht": Lichtsensor, "PV": Woonkamer_PV, "SP": Slaapkamer_SP, "Setpoint": Setpoint, 'DT': Slaapkamer_DT, 'Switch@': Switch, 'OnOff': OnOff }; //test
    msg4.payload = Woonkamer_PV
}


else if (Lichtsensor > Setpoint && Woonkamer_PV < (SwitchOpen)) {
    msg1.payload = { "command": "switchlight", "idx": 492, "switchcmd": "On" }; //On = Up
    msg2.payload = { "command": "switchlight", "idx": 493, "switchcmd": "On" }; //On = Up
    msg3.payload = "Status: In (3) - " + "Temp: " + Woonkamer_PVdec + " - Switch@:" + Switchdec + " - SwitchOpen" + SwitchOpen + " - Wind_PV:" + Wind_PV + " Wind_SP:" + Wind_SP; //{ 'Switch@': Switch, 'Status': 'In' };
    //msg3.payload = { "Licht": Lichtsensor, "PV": Woonkamer_PV, "SP": Woonkamer_SP, "Setpoint": Setpoint, '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 = "Status: In (4) - " + "Temp: " + Woonkamer_PVdec + " - Switch@:" + Switchdec + " - SwitchOpen" + SwitchOpen + " - Wind_PV:" + Wind_PV + " Wind_SP:" + Wind_SP;
    //msg3.payload = { "Licht": Lichtsensor, "PV": Woonkamer_PV, "SP": Woonkamer_SP, "Setpoint": Setpoint, 'Switch@': Switch, 'OnOff': OnOff }; //test
    msg4.payload = Woonkamer_PV
}


return [msg1, msg2, msg3, msg4];
}


Allereerst heb ik een kopie gemaakt van de "Functie Woonkamer" node en deze hernoemd naar "Zonnescherm Woonkamer Logica". Daarin heb ik de volgende wijzigingen gemaakt.
  1. Ik heb bij elk if-blokje alles weggehaald en vervangen door de actie (action) die moet worden uitgevoerd: "open", "close", of "".
  2. Ik heb de msg1,2,3,4 vervangen door slechts 1 output, namelijk de action, in de msg.payload output.
  3. Omdat in de status message op het dashboard getoond moest worden welke van de 4 if's is uitgevoerd heb ik een logicpath toegevoegd, welke als msg.logicpath wordt ge-output.
  4. De variabelen aan het begin die niet meer worden gebruikt heb ik uitgecommentarieerd. Later gaan deze weg.
De inhoud van de NIEUWE function node Zonnescherm Woonkamer Logica welke de oude function node Functie Woonkamer moet gaan vervangen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
var Lichtsensor = msg.payload;
Lichtsensor = parseFloat(Lichtsensor.toFixed(0));
var Woonkamer_PV = global.get('EvoHome_woonkamer_PV', "file");
// var Woonkamer_PVdec = parseFloat(Woonkamer_PV).toFixed(1);
var Woonkamer_SP = global.get('EvoHome_woonkamer_SP', "file");
// var Woonkamer_SPdec = parseFloat(Woonkamer_SP).toFixed(1);
let Setpoint = global.get('Tahoma_setpoint', "file"); // Setpoint schermen uit;
var Switch = global.get('Switch.Woonkamer', "file"); //Schakeltemp woonkamer
var SwitchOpen = Switch-1;
// var Switchdec = parseFloat(Switch).toFixed(1);
let OnOff = global.get('TahomaSwitch',"file");
let Wind_PV = global.get('Wind_PV', "file");
let Wind_SP = global.get('Wind.Woonkamer', "file")


let action = "";
let logicpath = 0;

if (OnOff == true) {
    if (Lichtsensor > Setpoint && Woonkamer_PV >= (Switch) && Wind_PV < Wind_SP) {
        action = "close";
        logicpath = 1;
    }
    else if (Lichtsensor > Setpoint && Woonkamer_PV >= (SwitchOpen) && Woonkamer_PV < Switch) {
        action = "";
        logicpath = 2;
    }
    else if (Lichtsensor > Setpoint && Woonkamer_PV < (SwitchOpen)) {
        action = "open";
        logicpath = 3;
    }
    else {
        action = "open";
        logicpath = 4;
    }
}

msg.payload = action;
msg.logicpath = logicpath;

return msg;



Omdat deze nieuwe function node nu geen domoticz commands maakt en geen status messages meer formatteert, komt deze functionaliteit nu in aparte nodes rechts van de function node:
  • Een tweetal function nodes die een domoticz commando samenstellen gevolgd door een domoticz/in node (en debug nodes). Het was hiervoor niet nodig om enige informatie/variabelen te gebruiken uit de Logica-node, behalve dan de action.
  • Een "prepare status message" node die een bericht formatteert dat getoond wordt in het dashboard. Alle variabelen die hiervoor nodig zijn zitten al in globals, dus deze worden gewoon weer opgehaald met global.get. De enige die uit de Logic node worden gebruikt zijn de action en de logicpath.
  • Een "prepare graph value" node die de Woonkamer_PV waarde vanuit een global in de msg.payload zet zodat deze gebruikt kan worden in de chart op het dashboard.
Nog even een herhaling van het plaatje hiervan om het makkelijker te kunnen bekijken:


Omdat bij het plaatsen van elke dashboard-node er ook een item in het dashboard verschijnt en ik geen dubbele items in het dashboard wil heb ik de dashboard nodes voor "Woonkamer" en "Roomtemperature PV" losgekoppeld en voorzien van een link-in node.
Vanuit de logica, of eigenlijk elke andere flow, kan ik nu een link-out node opnemen die het dashboard update zonder meerdere gelijke items in het dashboard te krijgen.
Zeker voor de Roomtemperature PV dashboard-node scheelt dat heel wat kris-kras lijntjes.

Dubbele items in het dashboard zijn niet de bedoeling:


LET OP dat ik tot nu alleen naar de Woonkamer heb gekeken. Ik laat expres de andere ruimtes nog even buiten beschouwing omdat deze er erg op lijken en ik anders alleen maar dubbel werk aan het doen ben. Zodra de Woonkamer is gerefactored doe ik pas de rest. Dit is dus een tussenfase en er zullen nog behoorlijk wat dingen wijzigen, ook in wat ik tot nu toe heb gedaan.

Stap 2 heb ik ook al klaar, deze volgt snel, dus wacht nog even met integreren en testen.
Je kunt het wel importeren in een nieuwe flow om alles even te bekijken.

Feel free to Buy me a coffee


Acties:
  • +1Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

@musicpixel wat een werk joh! Top man! Ga hem vanavond of morgen even importeren en bekijken.

  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

@musicpixel eindelijk genoeg tijd kunnen vinden om er eens beter naar te kijken. Lijkt erop dat mijn test opzetje toch al een klein beetje in de juiste richting was :+

Idealiter zou domoticz natuurlijk helemaal buiten beschouwing blijven. Tenminste; ik heb toch geregeld een vastloper of twee. Maar ben nog aan het klooien om de api rechtstreeks aan te sturen vanuit NodeRed. Lijken helaas weinig voorbeelden rond te zwerven nog.

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
MikeyMan schreef op woensdag 24 mei 2023 @ 13:52:
@musicpixel eindelijk genoeg tijd kunnen vinden om er eens beter naar te kijken. Lijkt erop dat mijn test opzetje toch al een klein beetje in de juiste richting was :+
Bij mij liep het de afgelopen dagen ook een beetje anders dan verwacht ;)
Is jouw test-opzetje eigenlijk het gedeelte met "function Wind Test"?
Idealiter zou domoticz natuurlijk helemaal buiten beschouwing blijven. Tenminste; ik heb toch geregeld een vastloper of twee. Maar ben nog aan het klooien om de api rechtstreeks aan te sturen vanuit NodeRed. Lijken helaas weinig voorbeelden rond te zwerven nog.
Je had inderdaad al gezegd dat je domoticz wilde vervangen door een directe api aanroep. Dat heb ik meegenomen in de volgende stap. Niet dat ik domoticz al heb vervangen, maar heb het wel zo ingericht dat je nog maar op 1 plek die domoticz aanroep hoeft te vervangen door die andere api. Zie hieronder:

Feel free to Buy me a coffee


  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

@musicpixel Yes, inderdaad het stukje wind test naar gym test :)
Eerste poging het uit elkaar te trekken.

Acties:
  • +1Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
@MikeyMan

STAP 2 van de refactoring

Deze stap borduurt verder op stap 1. In de vorige stap werden nog functies gebruikt om de domoticz commando's op te bouwen om vervolgens de domoticz/in node aan te roepen. Het opbouwen van deze domoticz commando's gebeurt op diverse plekken, terwijl de structuur van zo'n domoticz commando steeds hetzelfde is. Ik kwam deze domoticz commando's ook nog tegen bij het aan/uit schakelen van de diverse switches in het dashboard. Zie hieronder:



Wat heb ik gedaan:

Ik heb een subflow "Zonnescherm Service" gemaakt welke op basis van de naam van het zonnescherm (woonkamer, keuken, slaapkamer, gym, balkonraam, balkondeur) en de actie (open, close) het juiste domoticz commando samenstelt en uitvoert.



Gebruik van deze sublow gaat als volgt:
  1. Zet de juiste input parameters (msg.param.*)
  2. Roep de subflow aan
Wil je later de domoticz besturing van de zonneschermen vervangen door de andere api, dan hoef je alleen de subflow aan te passen.

Het is overigens ook mogelijk om gebruik te maken van subflow instance properties/environment variables bij het aanroepen van de subflow, maar dat heb ik hier niet geimplementeerd aangezien deze alleen hardcoded kunnen worden meegegeven, itt variabelen in de msg.

Ik heb ook geen gebruik gemaakt van link in/out/call nodes. Voor de verschillen met een subflow, zie hier.

Hieronder hoe dit er dan uit komt te zien, weer even alleen voor de Woonkamer:



code:
1
[{"id":"090dd6fdbc576709","type":"subflow","name":"Zonnescherm service","info":"","category":"","in":[{"x":200,"y":160,"wires":[{"id":"c6b546347ee6d969"}]}],"out":[],"env":[],"meta":{},"color":"#DDAA99"},{"id":"c6b546347ee6d969","type":"function","z":"090dd6fdbc576709","name":"Determine Domoticz  idx","func":"let idx = 0;\nlet name = msg.param.name.toLowerCase();\n\nmsg.domoticz = {};  // set to empty object\n\n// determine idx from name\nswitch(name)\n{\n    case 'woonkamer':\n        idx = 492;\n        break;\n    case 'keuken':\n        idx = 493;\n        break;\n    case 'slaapkamer':\n        idx = 494;\n        break;\n    case 'gym':\n        idx = 495;\n        break;\n    case 'balkonraam':\n        idx = 496;\n        break;\n    case 'balkondeur':\n        idx = 497;\n        break;\n    default:\n        idx = 0;\n}\n\nmsg.domoticz.idx = idx;\n\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":410,"y":160,"wires":[["cae55095c0708857"]]},{"id":"cc1e0a59a31de086","type":"function","z":"090dd6fdbc576709","name":"Create Domoticz command","func":"let domoticzIdx = msg.domoticz.idx;\nlet domoticzAction = msg.domoticz.action;\n\nlet domoticzCommand = {};\n\nif (domoticzIdx > 0 && domoticzAction != \"\")\n    domoticzCommand = { \"command\": \"switchlight\", \"idx\": domoticzIdx, \"switchcmd\": domoticzAction };\n\nmsg.payload = domoticzCommand;\n\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1040,"y":160,"wires":[["3ec05468283aa74b","6a07c909e8a69cb8"]]},{"id":"3ec05468283aa74b","type":"debug","z":"090dd6fdbc576709","name":"Zonnescherm service","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1360,"y":200,"wires":[]},{"id":"965eb1d3875b8db7","type":"comment","z":"090dd6fdbc576709","name":"msg.param.name => naam zonnescherm","info":"","x":340,"y":60,"wires":[]},{"id":"6a07c909e8a69cb8","type":"mqtt out","z":"090dd6fdbc576709","name":"","topic":"domoticz/in","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"92e5b2c.00a8b5","x":1330,"y":160,"wires":[]},{"id":"89c082c74e068f2e","type":"comment","z":"090dd6fdbc576709","name":" msg.param.action => uit te voeren actie (open/close)","info":"","x":370,"y":100,"wires":[]},{"id":"cae55095c0708857","type":"function","z":"090dd6fdbc576709","name":"Determine Domoticz action","func":"let action = msg.param.action.toLowerCase();\n\nlet domoticzAction = \"\";\n\n// determine domoticz action (switchcmd) from action parameter (open/close)\nswitch(action)\n{\n    case 'open':\n        domoticzAction = \"On\";  // up\n        break;\n    case 'close':\n        domoticzAction = \"Off\"; // down\n        break;\n    default:\n        domoticzAction = \"\";\n}\n\nmsg.domoticz.action = domoticzAction;    \n\nreturn msg","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":720,"y":160,"wires":[["cc1e0a59a31de086"]]},{"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":"092c9cfaa8bf1fe6","type":"inject","z":"59634d1e16095311","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":500,"y":680,"wires":[["3aa9c57de79c4e42"]]},{"id":"3aa9c57de79c4e42","type":"change","z":"59634d1e16095311","name":"Zonnescherm param: Keuken, close","rules":[{"t":"set","p":"param.name","pt":"msg","to":"keuken","tot":"str"},{"t":"set","p":"param.action","pt":"msg","to":"close","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":770,"y":680,"wires":[["71653c0c129ce6b2"]]},{"id":"71653c0c129ce6b2","type":"subflow:090dd6fdbc576709","z":"59634d1e16095311","name":"","x":1080,"y":680,"wires":[]},{"id":"8a83a9909c0f22a0","type":"function","z":"59634d1e16095311","name":"Zonnescherm Woonkamer Logica","func":"var Lichtsensor = msg.payload;\nLichtsensor = parseFloat(Lichtsensor.toFixed(0));\nvar Woonkamer_PV = global.get('EvoHome_woonkamer_PV', \"file\");\n// var Woonkamer_PVdec = parseFloat(Woonkamer_PV).toFixed(1);\nvar Woonkamer_SP = global.get('EvoHome_woonkamer_SP', \"file\");\n// var Woonkamer_SPdec = parseFloat(Woonkamer_SP).toFixed(1);\nlet Setpoint = global.get('Tahoma_setpoint', \"file\"); // Setpoint schermen uit;\nvar Switch = global.get('Switch.Woonkamer', \"file\"); //Schakeltemp woonkamer\nvar SwitchOpen = Switch-1;\n// var Switchdec = parseFloat(Switch).toFixed(1);\nlet OnOff = global.get('TahomaSwitch',\"file\");\nlet Wind_PV = global.get('Wind_PV', \"file\");\nlet Wind_SP = global.get('Wind.Woonkamer', \"file\")\n\n\nlet action = \"\";\nlet logicpath = 0;\n\nif (OnOff == true) {\n    if (Lichtsensor > Setpoint && Woonkamer_PV >= (Switch) && Wind_PV < Wind_SP) {\n        action = \"close\";\n        logicpath = 1;\n    }\n    else if (Lichtsensor > Setpoint && Woonkamer_PV >= (SwitchOpen) && Woonkamer_PV < Switch) {\n        action = \"\";\n        logicpath = 2;\n    }\n    else if (Lichtsensor > Setpoint && Woonkamer_PV < (SwitchOpen)) {\n        action = \"open\";\n        logicpath = 3;\n    }\n    else {\n        action = \"open\";\n        logicpath = 4;\n    }\n}\n\nmsg.payload = action;\nmsg.logicpath = logicpath;\n\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":860,"wires":[["e5b21bbacb5f1416","acad955c5f7c4c51","1fc4019443108cf8","ff732513666f0516"]]},{"id":"01724239939ed973","type":"change","z":"59634d1e16095311","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"PV_Woonkamer","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1470,"y":1040,"wires":[["8428dfc36d4b8c9c","650f01eafc49c289"]]},{"id":"e5b21bbacb5f1416","type":"function","z":"59634d1e16095311","name":"Prepare status message","func":"var action = msg.payload;       // action can be \"open\", \"close\" or something else (eg. \"\")\nvar logicpath = msg.logicpath;  // 1..4\nvar status = \"\";\n\nvar Woonkamer_PV = global.get('EvoHome_woonkamer_PV', \"file\");\nvar Woonkamer_SP = global.get('EvoHome_woonkamer_SP', \"file\");\nlet Wind_PV = global.get('Wind_PV', \"file\");\nlet Wind_SP = global.get('Wind.Woonkamer', \"file\")\nvar Switch = global.get('Switch.Woonkamer', \"file\"); //Schakeltemp woonkamer\nvar SwitchOpen = Switch - 1;\n\nvar Woonkamer_PVdec = parseFloat(Woonkamer_PV).toFixed(1);\nvar Woonkamer_SPdec = parseFloat(Woonkamer_SP).toFixed(1);\nvar Switchdec = parseFloat(Switch).toFixed(1);\n\n// determine domoticz command from action (open/close)\nswitch (action) {\n    case 'open':\n        status = \"In\"\n        break;\n    case 'close':\n        status = \"Uit\"\n        break;\n    default:\n        status = \"Hold\"\n}\n\nlet statusMessage = \"Status: \" + status + \" (\" + logicpath + \") - \" + \"Temp: \" + Woonkamer_PVdec + \" - Switch@:\" + Switchdec + \" - SwitchOpen\" + SwitchOpen + \" - Wind_PV:\" + Wind_PV + \" Wind_SP:\" + Wind_SP;\n\nmsg.payload = statusMessage;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1190,"y":1000,"wires":[["408d93a3edc8940e"]]},{"id":"8428dfc36d4b8c9c","type":"debug","z":"59634d1e16095311","name":"debug 194","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1690,"y":1080,"wires":[]},{"id":"199627d1c8c1be3d","type":"inject","z":"59634d1e16095311","name":"Lichtsensor dummy","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"22222","payloadType":"num","x":530,"y":860,"wires":[["8a83a9909c0f22a0"]]},{"id":"acad955c5f7c4c51","type":"function","z":"59634d1e16095311","name":"Prepare graph value","func":"var Woonkamer_PV = global.get('EvoHome_woonkamer_PV', \"file\");\n\nmsg.payload = Woonkamer_PV;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1180,"y":1040,"wires":[["01724239939ed973"]]},{"id":"2caf20fc0f9e78a0","type":"ui_text","z":"59634d1e16095311","group":"cdd6bc3a70d5012e","order":3,"width":0,"height":0,"name":"","label":"Woonkamer","format":"{{msg.payload}}","layout":"row-spread","className":"","x":590,"y":1180,"wires":[]},{"id":"b874d5b31b2ad2dd","type":"link in","z":"59634d1e16095311","name":"Dashboard | Current State | Woonkamer","links":["69991cb20a29b17e","408d93a3edc8940e"],"x":435,"y":1180,"wires":[["2caf20fc0f9e78a0"]]},{"id":"408d93a3edc8940e","type":"link out","z":"59634d1e16095311","name":"Update Dashboard Current State Woonkamer","mode":"link","links":["b874d5b31b2ad2dd"],"x":1415,"y":1000,"wires":[]},{"id":"bfe89eafea81c517","type":"ui_chart","z":"59634d1e16095311","name":"","group":"85e909c93386b7a6","order":1,"width":"14","height":"10","label":"Roomtemperature PV","chartType":"line","legend":"false","xformat":"HH:mm","interpolate":"linear","nodata":"","dot":false,"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":620,"y":1220,"wires":[["a2588b46222ede69"]]},{"id":"828c2195ec1dd210","type":"link in","z":"59634d1e16095311","name":"Dashboard | Chart Roomtemperature PV","links":["f2a6fa288b9f1b39","650f01eafc49c289"],"x":435,"y":1220,"wires":[["bfe89eafea81c517"]]},{"id":"a2588b46222ede69","type":"debug","z":"59634d1e16095311","name":"Roomtemperature PV Chart State","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":960,"y":1220,"wires":[]},{"id":"650f01eafc49c289","type":"link out","z":"59634d1e16095311","name":"Plot to Chart Roomtemperature PV","mode":"link","links":["828c2195ec1dd210"],"x":1635,"y":1040,"wires":[]},{"id":"19f14c6eedc8f55a","type":"comment","z":"59634d1e16095311","name":"Update Dashboard Current State Woonkamer","info":"","x":1650,"y":1000,"wires":[]},{"id":"b43c46f364e6f3a4","type":"comment","z":"59634d1e16095311","name":"Plot to Chart Roomtemperature PV","info":"","x":1840,"y":1040,"wires":[]},{"id":"2c0c5353a14b21b4","type":"change","z":"59634d1e16095311","name":"Zonnescherm param: Woonkamer, open","rules":[{"t":"set","p":"param.name","pt":"msg","to":"woonkamer","tot":"str"},{"t":"set","p":"param.action","pt":"msg","to":"open","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":780,"y":720,"wires":[["5b9a9e22c2977b26"]]},{"id":"aeb2ed38eaec4ad5","type":"inject","z":"59634d1e16095311","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":500,"y":720,"wires":[["2c0c5353a14b21b4"]]},{"id":"5b9a9e22c2977b26","type":"subflow:090dd6fdbc576709","z":"59634d1e16095311","name":"","x":1080,"y":720,"wires":[]},{"id":"1fc4019443108cf8","type":"change","z":"59634d1e16095311","name":"Zonnescherm Keuken params","rules":[{"t":"set","p":"param.name","pt":"msg","to":"keuken","tot":"str"},{"t":"set","p":"param.action","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1210,"y":900,"wires":[["3e570e0c3da9d0c3"]]},{"id":"3e570e0c3da9d0c3","type":"subflow:090dd6fdbc576709","z":"59634d1e16095311","name":"","x":1540,"y":900,"wires":[]},{"id":"ff732513666f0516","type":"change","z":"59634d1e16095311","name":"Zonnescherm Woonkamer params","rules":[{"t":"set","p":"param.name","pt":"msg","to":"woonkamer","tot":"str"},{"t":"set","p":"param.action","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1220,"y":860,"wires":[["e93ee793279cd83d"]]},{"id":"e93ee793279cd83d","type":"subflow:090dd6fdbc576709","z":"59634d1e16095311","name":"","x":1540,"y":860,"wires":[]},{"id":"70d3b80ab7c22c65","type":"ui_switch","z":"59634d1e16095311","name":"","label":"Woonkamer","tooltip":"","group":"a2e65bc36447190d","order":1,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"topic","topicType":"msg","style":"","onvalue":"close","onvalueType":"str","onicon":"","oncolor":"","offvalue":"open","offvalueType":"str","officon":"","offcolor":"","animate":false,"className":"","x":490,"y":1340,"wires":[["00bc96b6592c0efa"]]},{"id":"6bf3945b4d8e6271","type":"comment","z":"59634d1e16095311","name":"open = up = domoticz On = dashboard switch off","info":"","x":1540,"y":1340,"wires":[]},{"id":"66635b95a8124474","type":"comment","z":"59634d1e16095311","name":"close = down = domoticz Off = dashboard switch on","info":"","x":1550,"y":1380,"wires":[]},{"id":"00bc96b6592c0efa","type":"change","z":"59634d1e16095311","name":"Zonnescherm Woonkamer params","rules":[{"t":"set","p":"param.name","pt":"msg","to":"woonkamer","tot":"str"},{"t":"set","p":"param.action","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":800,"y":1340,"wires":[["a90ef4b3775a659e"]]},{"id":"a90ef4b3775a659e","type":"subflow:090dd6fdbc576709","z":"59634d1e16095311","name":"","x":1140,"y":1340,"wires":[]},{"id":"29406aa951fd0e26","type":"comment","z":"59634d1e16095311","name":"Zonnescherm service test","info":"","x":530,"y":640,"wires":[]},{"id":"c56f64f946f1b76a","type":"comment","z":"59634d1e16095311","name":"Zonnescherm service aanroep obv logica","info":"","x":580,"y":820,"wires":[]},{"id":"92e8351d2a132569","type":"comment","z":"59634d1e16095311","name":"Zonnescherm service aanroep obv switch in dashboard","info":"","x":620,"y":1300,"wires":[]},{"id":"766122cb7bb53d4f","type":"comment","z":"59634d1e16095311","name":"Voorbeeld dashboard waarden","info":"","x":550,"y":1140,"wires":[]},{"id":"cdd6bc3a70d5012e","type":"ui_group","name":"Current State","tab":"21daaeaaf5421973","order":3,"disp":true,"width":"12","collapse":false,"className":""},{"id":"85e909c93386b7a6","type":"ui_group","name":"Chart","tab":"21daaeaaf5421973","order":4,"disp":true,"width":"28","collapse":false,"className":""},{"id":"a2e65bc36447190d","type":"ui_group","name":"Control","tab":"21daaeaaf5421973","order":2,"disp":true,"width":"6","collapse":false,"className":""},{"id":"21daaeaaf5421973","type":"ui_tab","name":"Zonneschermen","icon":"wi-wu-mostlysunny","order":14,"disabled":false,"hidden":false}]

(Deze code bevat ook de subflow)

A) Dit zijn twee simpele test-flowtjes om de subflow te kunnen uitproberen, los van de rest van de automatiseringen.

B en C) Zelfde als de flow uit stap 1, maar nu met de subflow

D) Een voorbeeld van de Woonkamer switch uit het dashboard. Ik heb hierbij wel de "on" en "off" payload instelling aangepast:

Op deze manier kon ik de output daarvan direct gebruiken voor de aanroep van de subflow.

Ook bij deze stap geldt: ik zou 'm even importeren in een nieuw flow tabblad om 'm te bekijken, maar nog niet helemaal integreren in je bestaande flows. Er gaat nog het een en ander veranderen.

Feel free to Buy me a coffee


Acties:
  • 0Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

@musicpixel Ok, nu gaat het ineens hard. Moet hier echt even in duiken. Subflows lijken me voor en nadelen hebben. Eens even kijken hoe dat gaat :)

Overigens nog een leuk geintje met die API.

De token verloopt blijkbaar een keer in de zoveel tijd. Dan is het nieuwe token aanmaken en activeren.
Vind het echt zo'n baggeroplossing. :X

[Voor 39% gewijzigd door MikeyMan op 26-05-2023 15:06]


Acties:
  • 0Henk 'm!

  • FrankJ91
  • Registratie: September 2010
  • Laatst online: 30-05 14:56
ray1979 schreef op zaterdag 13 mei 2023 @ 11:38:
[...]


Deze flow ziet er perfect uit. Heb je deze nog actief? Zo ja, zou je de code hier willen delen? Zou een perfect startpunt voor mijn automatisering zijn.
Sorry voor mijn late bericht, nee helaas draait deze niet meer en heb de code niet meer. Uiteindelijk ging het scherm te vaak open en dicht ermee en op sommige momenten kon het nog steeds fel weer buiten zijn terwijl het scherm bijvoorbeeld gewoon weer open ging. Het finetunen lukte me gewoonweg niet perfect dus ik doe het weer ouderwets met de hand :p

Wellicht dat ik nog een keer kijk naar een combinatie van een lokale weerstation en een lichtsensor achter de screen zelf.

Acties:
  • 0Henk 'm!

  • musicpixel
  • Registratie: Juni 2011
  • Laatst online: 22:00
MikeyMan schreef op vrijdag 26 mei 2023 @ 13:57:
@musicpixel Ok, nu gaat het ineens hard. Moet hier echt even in duiken. Subflows lijken me voor en nadelen hebben. Eens even kijken hoe dat gaat :)
Hoop dat je er een beetje uit komt met de subflow. Is niet super ingewikkeld denk ik. De linkjes in mijn post zouden moeten helpen om het te begrijpen.
Overigens nog een leuk geintje met die API.

De token verloopt blijkbaar een keer in de zoveel tijd. Dan is het nieuwe token aanmaken en activeren.
Vind het echt zo'n baggeroplossing. :X
Voor zover ik de API documentatie begrijp zou het mogelijk moeten zijn om automatisch een nieuw token op te vragen. Maar is nogal lastig om te testen voor mij zonder toegang tot het apparaat in kwestie ;)

Nog wel een vraagje over wat ik zie in je "function Wind Test"... begrijp ik goed dat je 3 verschillende soorten zonwering hebt (woonkamer/standaard, screens en zipscreens)? En dat per soort zonwering er een andere max windbelasting is? Is dat wat je hier probeert te doen?

Feel free to Buy me a coffee


Acties:
  • 0Henk 'm!

  • MikeyMan
  • Registratie: Februari 2003
  • Laatst online: 03:18

MikeyMan

Vidi, Vici, Veni

musicpixel schreef op maandag 29 mei 2023 @ 08:44:
[...]


Hoop dat je er een beetje uit komt met de subflow. Is niet super ingewikkeld denk ik. De linkjes in mijn post zouden moeten helpen om het te begrijpen.


[...]


Voor zover ik de API documentatie begrijp zou het mogelijk moeten zijn om automatisch een nieuw token op te vragen. Maar is nogal lastig om te testen voor mij zonder toegang tot het apparaat in kwestie ;)

Nog wel een vraagje over wat ik zie in je "function Wind Test"... begrijp ik goed dat je 3 verschillende soorten zonwering hebt (woonkamer/standaard, screens en zipscreens)? En dat per soort zonwering er een andere max windbelasting is? Is dat wat je hier probeert te doen?
Correct!

Woonkamer heeft uitvalschermen.
Eerste verdieping ouderwetse screens.
Tweede verdieping zipscreens.

Moet er nog een stel gaan vervangen, maar dat kost uiteraard een godsvermogen.

Acties:
  • 0Henk 'm!

  • ray1979
  • Registratie: April 2006
  • Laatst online: 02-06 16:41
FrankJ91 schreef op zondag 28 mei 2023 @ 23:19:
[...]


Sorry voor mijn late bericht, nee helaas draait deze niet meer en heb de code niet meer. Uiteindelijk ging het scherm te vaak open en dicht ermee en op sommige momenten kon het nog steeds fel weer buiten zijn terwijl het scherm bijvoorbeeld gewoon weer open ging. Het finetunen lukte me gewoonweg niet perfect dus ik doe het weer ouderwets met de hand :p

Wellicht dat ik nog een keer kijk naar een combinatie van een lokale weerstation en een lichtsensor achter de screen zelf.
Dank voor je reactie. Ik herken het probleem dat je noemt wel. Met 13 zonneschermen op 4 verschillende gevels ben ik echter wel zo ver dat handmatige bediening geen lolletje meer is. Ik heb het uiteindelijk op deze manier opgelost. Na wat tunen van de parameters ben ik nu redelijk tevreden. Even kijken hoe het de komende weken gaat...



code:
1
[{"id":"d4683cb00fc074f4","type":"tab","label":"Sunscreens","disabled":false,"info":"","env":[]},{"id":"32cb62246676a2e2","type":"inject","z":"d4683cb00fc074f4","name":"","props":[{"p":"payload"}],"repeat":"120","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"","payloadType":"date","x":130,"y":320,"wires":[["8079e9af5b6c4830"]]},{"id":"54bef888c3f3782a","type":"comment","z":"d4683cb00fc074f4","name":"https://www.suncalc.org","info":"https://www.suncalc.org/#/0.0000,0.0000/2023.05.13/09:39/1/1","x":1000,"y":100,"wires":[]},{"id":"305b07639a24ec54","type":"api-call-service","z":"d4683cb00fc074f4","name":"Close N-O (weg-zijde)","server":"c7b344be.584158","version":5,"debugenabled":false,"domain":"cover","service":"close_cover","areaId":[],"deviceId":[],"entityId":["cover.screens_noordoost"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1480,"y":80,"wires":[[]],"icon":"font-awesome/fa-angle-double-down"},{"id":"3d8b9ea5323e70ba","type":"switch","z":"d4683cb00fc074f4","name":"","property":"payload","propertyType":"msg","rules":[{"t":"btwn","v":"50","vt":"num","v2":"150","v2t":"num"},{"t":"btwn","v":"75","vt":"num","v2":"225","v2t":"num"},{"t":"btwn","v":"135","vt":"num","v2":"310","v2t":"num"},{"t":"btwn","v":"225","vt":"num","v2":"360","v2t":"num"}],"checkall":"true","repair":false,"outputs":4,"x":1110,"y":220,"wires":[["48455c17efbb3e0a"],["1c577843af2b6990"],["95dc2e2eb8aa9796"],["fedb75e04a727314"]]},{"id":"89db626549d2ec01","type":"api-call-service","z":"d4683cb00fc074f4","name":"Close Z-O (tuin-zijde)","server":"c7b344be.584158","version":5,"debugenabled":false,"domain":"cover","service":"close_cover","areaId":[],"deviceId":[],"entityId":["cover.screens_zuidoost"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1480,"y":140,"wires":[[]]},{"id":"4b6509238501cc3c","type":"api-call-service","z":"d4683cb00fc074f4","name":"Close Z-W (garage-zijde)","server":"c7b344be.584158","version":5,"debugenabled":false,"domain":"cover","service":"close_cover","areaId":[],"deviceId":[],"entityId":["cover.screens_zuidwest"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1490,"y":200,"wires":[[]]},{"id":"d5acf8da55c9d484","type":"api-call-service","z":"d4683cb00fc074f4","name":"Close N-W (stallen-zijde)","server":"c7b344be.584158","version":5,"debugenabled":false,"domain":"cover","service":"close_cover","areaId":[],"deviceId":[],"entityId":["cover.screens_noordwest"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1490,"y":260,"wires":[[]]},{"id":"fedb75e04a727314","type":"api-current-state","z":"d4683cb00fc074f4","name":"If open","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"open","halt_if_type":"str","halt_if_compare":"is","entity_id":"cover.screens_noordwest","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"20","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1270,"y":260,"wires":[["d5acf8da55c9d484"],[]]},{"id":"a45dc9a49dad2d62","type":"time-range-switch","z":"d4683cb00fc074f4","name":"","lat":"0.0000","lon":"0.0000","startTime":"sunrise","endTime":"sunset","startOffset":"30","endOffset":"-45","x":400,"y":40,"wires":[["6207a5c49ae9721e"],[]]},{"id":"6207a5c49ae9721e","type":"api-current-state","z":"d4683cb00fc074f4","name":"Irradiance?","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"500","halt_if_type":"num","halt_if_compare":"gt","entity_id":"sensor.buienradar_irradiance","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":40,"wires":[["4df0f8a258afbbd0"],[]]},{"id":"4df0f8a258afbbd0","type":"api-current-state","z":"d4683cb00fc074f4","name":"MaxTemperature?","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"14","halt_if_type":"num","halt_if_compare":"gt","entity_id":"sensor.buienradar_temperature_1d","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":830,"y":40,"wires":[["24257193cc4ec1c5"],[]]},{"id":"95dc2e2eb8aa9796","type":"api-current-state","z":"d4683cb00fc074f4","name":"If open","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"open","halt_if_type":"str","halt_if_compare":"is","entity_id":"cover.screens_zuidwest","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"20","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1270,"y":200,"wires":[["4b6509238501cc3c"],[]]},{"id":"1c577843af2b6990","type":"api-current-state","z":"d4683cb00fc074f4","name":"If open","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"open","halt_if_type":"str","halt_if_compare":"is","entity_id":"cover.screens_zuidoost","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"20","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1270,"y":140,"wires":[["89db626549d2ec01"],[]]},{"id":"48455c17efbb3e0a","type":"api-current-state","z":"d4683cb00fc074f4","name":"If open","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"open","halt_if_type":"str","halt_if_compare":"is","entity_id":"cover.screens_noordoost","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"20","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1270,"y":80,"wires":[["305b07639a24ec54"],[]]},{"id":"ef136633e4a08ea0","type":"api-current-state","z":"d4683cb00fc074f4","name":"CurTemperatureOutside?","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"17.5","halt_if_type":"num","halt_if_compare":"gt","entity_id":"sensor.ell_temperature","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":770,"y":120,"wires":[["bb961d4450efbb88"],[]]},{"id":"bb961d4450efbb88","type":"api-current-state","z":"d4683cb00fc074f4","name":"Azimuth?","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"0","halt_if_type":"num","halt_if_compare":"gt","entity_id":"sensor.azimuth","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":980,"y":160,"wires":[["3d8b9ea5323e70ba"],[]]},{"id":"7b9dd76d17cf5444","type":"api-call-service","z":"d4683cb00fc074f4","name":"Open N-O (weg-zijde)","server":"c7b344be.584158","version":5,"debugenabled":false,"domain":"cover","service":"open_cover","areaId":[],"deviceId":[],"entityId":["cover.screens_noordoost"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1480,"y":440,"wires":[[]],"icon":"node-red-contrib-sun-position/blind-white.svg"},{"id":"e11227ecaeaa375b","type":"switch","z":"d4683cb00fc074f4","name":"","property":"payload","propertyType":"msg","rules":[{"t":"lt","v":"50","vt":"num"},{"t":"gt","v":"150","vt":"num"},{"t":"lt","v":"75","vt":"num"},{"t":"gt","v":"225","vt":"num"},{"t":"lt","v":"135","vt":"num"},{"t":"gt","v":"310","vt":"num"},{"t":"lt","v":"225","vt":"num"}],"checkall":"true","repair":false,"outputs":7,"x":910,"y":320,"wires":[["ded16fd405efd300"],["ded16fd405efd300"],["37c1e0e1ef2cc51a"],["37c1e0e1ef2cc51a"],["3fd05c1a302b0110"],["3fd05c1a302b0110"],["39f7912578b015af"]]},{"id":"55cb6349ca59198a","type":"api-call-service","z":"d4683cb00fc074f4","name":"Open Z-O (tuin-zijde)","server":"c7b344be.584158","version":5,"debugenabled":false,"domain":"cover","service":"open_cover","areaId":[],"deviceId":[],"entityId":["cover.screens_zuidoost"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1480,"y":500,"wires":[[]]},{"id":"46e79b13d9ba1dee","type":"api-call-service","z":"d4683cb00fc074f4","name":"Open Z-W (garage-zijde)","server":"c7b344be.584158","version":5,"debugenabled":false,"domain":"cover","service":"open_cover","areaId":[],"deviceId":[],"entityId":["cover.screens_zuidwest"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1490,"y":560,"wires":[[]]},{"id":"8a1a1d1496daee67","type":"api-call-service","z":"d4683cb00fc074f4","name":"Open N-W (stallen-zijde)","server":"c7b344be.584158","version":5,"debugenabled":false,"domain":"cover","service":"open_cover","areaId":[],"deviceId":[],"entityId":["cover.screens_noordwest"],"data":"","dataType":"jsonata","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1490,"y":620,"wires":[[]]},{"id":"39f7912578b015af","type":"api-current-state","z":"d4683cb00fc074f4","name":"If closed","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"closed","halt_if_type":"str","halt_if_compare":"is","entity_id":"cover.screens_noordwest","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"20","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1280,"y":620,"wires":[["8a1a1d1496daee67"],[]]},{"id":"3fd05c1a302b0110","type":"api-current-state","z":"d4683cb00fc074f4","name":"If closed","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"closed","halt_if_type":"str","halt_if_compare":"is","entity_id":"cover.screens_zuidwest","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"20","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1280,"y":560,"wires":[["46e79b13d9ba1dee"],[]]},{"id":"37c1e0e1ef2cc51a","type":"api-current-state","z":"d4683cb00fc074f4","name":"If closed","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"closed","halt_if_type":"str","halt_if_compare":"is","entity_id":"cover.screens_zuidoost","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"20","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1280,"y":500,"wires":[["55cb6349ca59198a"],[]]},{"id":"ded16fd405efd300","type":"api-current-state","z":"d4683cb00fc074f4","name":"If closed","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"closed","halt_if_type":"str","halt_if_compare":"is","entity_id":"cover.screens_noordoost","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"20","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":1280,"y":440,"wires":[["7b9dd76d17cf5444"],[]]},{"id":"49274db46054b15d","type":"api-current-state","z":"d4683cb00fc074f4","name":"Azimuth based closure when sun not in window","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"0","halt_if_type":"num","halt_if_compare":"gt","entity_id":"sensor.azimuth","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":500,"y":400,"wires":[["e11227ecaeaa375b"],[]]},{"id":"7394c23751df7d84","type":"api-current-state","z":"d4683cb00fc074f4","name":"Irradiance low?","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"60","halt_if_type":"num","halt_if_compare":"lte","entity_id":"sensor.buienradar_irradiance","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":400,"y":460,"wires":[["8dffe0f8ad4a3023"],[]]},{"id":"24257193cc4ec1c5","type":"api-current-state","z":"d4683cb00fc074f4","name":"CurWindforce?","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"5","halt_if_type":"num","halt_if_compare":"lt","entity_id":"sensor.buienradar_wind_force","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":520,"y":160,"wires":[["ef136633e4a08ea0","4d0425f10e3fdfc0"],[]]},{"id":"47f11daa742f5498","type":"api-current-state","z":"d4683cb00fc074f4","name":"Wind strong?","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"5","halt_if_type":"num","halt_if_compare":"gte","entity_id":"sensor.buienradar_wind_force","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":390,"y":520,"wires":[["ded16fd405efd300","37c1e0e1ef2cc51a","3fd05c1a302b0110","39f7912578b015af"],[]]},{"id":"633f8be5dc880278","type":"api-current-state","z":"d4683cb00fc074f4","name":"Winter?","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"winter","halt_if_type":"str","halt_if_compare":"is_not","entity_id":"sensor.season","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":"0","forType":"num","forUnits":"minutes","override_topic":false,"state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","x":200,"y":40,"wires":[["a45dc9a49dad2d62"],[]]},{"id":"1701874e1cc8a8e5","type":"comment","z":"d4683cb00fc074f4","name":"Buienradar codes","info":"https://www.home-assistant.io/integrations/buienradar/\n\nOK, OMLAAG\na: sunny/clear\nb: Mix of clear and medium or low clouds\nj: Mix of clear and high clouds\no/r: Partly cloudy (increasing character increases the condition)\nc: Heavily clouded\np: Cloudy\nd: Alternating cloudy with local fog\nn: Clear and local mist or fog\nu: Cloudy with light snow\ni/v: Heavily clouded with light snowfall (increasing character increases the condition)\nt: (Heavy snowfall)\ng: (Clear with (possibly) some heavy lightning)\n\n\n\nOMHOOG\nf: Alternatingly cloudy with some light rain\nh/k/l: rainy (increasing character increases the condition)\nq: Heavily clouded with rain\nw: Heavily clouded with rain and winter precipitation\nm: Heavily clouded with some light rain\ns: (Cloudy with (possibly) some heavy (thunderstorms) showers)","x":400,"y":580,"wires":[]},{"id":"9714cedfcbcee877","type":"api-current-state","z":"d4683cb00fc074f4","name":"Buienradar Condition Code?","server":"c7b344be.584158","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.buienradar_condition_code","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":440,"y":620,"wires":[["94888d099232744d"]]},{"id":"94888d099232744d","type":"function","z":"d4683cb00fc074f4","name":"Raining?","func":"var msg = msg.payload;\nvar msg2 = { payload: \"raining\" };\nvar msg3 = { payload: \"dry\" };\n\nif (msg == \"f\") {\n    return [msg2];\n} else if (msg == \"h\") {\n    return [msg2];\n} else if (msg == \"k\") {\n    return [msg2];\n} else if (msg == \"l\") {\n    return [msg2];\n} else if (msg == \"q\") {\n    return [msg2];\n} else if (msg == \"w\") {\n    return [msg2];\n} else if (msg == \"m\") {\n    return [msg2];\n} else if (msg == \"s\") {\n    return [msg2];\n} else {\n    return [msg3];\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":660,"y":620,"wires":[["6ae440504399de8b"]]},{"id":"6ae440504399de8b","type":"switch","z":"d4683cb00fc074f4","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"raining","vt":"str"},{"t":"eq","v":"dry","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":810,"y":620,"wires":[["ded16fd405efd300","37c1e0e1ef2cc51a","3fd05c1a302b0110","39f7912578b015af"],[]]},{"id":"4d0425f10e3fdfc0","type":"api-current-state","z":"d4683cb00fc074f4","name":"CurTemperatureInside?","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"21.5","halt_if_type":"num","halt_if_compare":"gt","entity_id":"sensor.aanwezigheid_woonkamer_air_temperature","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":770,"y":200,"wires":[["bb961d4450efbb88"],[]]},{"id":"8dffe0f8ad4a3023","type":"time-range-switch","z":"d4683cb00fc074f4","name":"","lat":"0.0000","lon":"0.0000","startTime":"sunrise","endTime":"sunset","startOffset":"0","endOffset":"-60","x":580,"y":460,"wires":[["ded16fd405efd300","37c1e0e1ef2cc51a","3fd05c1a302b0110","39f7912578b015af"],[]]},{"id":"4134b9235fa8ed74","type":"comment","z":"d4683cb00fc074f4","name":"Triggers open","info":"Azimuth - per raam\nWind - allemaal\nRegen - allemaal\nTemperatuur - allemaal","x":390,"y":340,"wires":[]},{"id":"89a655a647a5bff3","type":"trigger-state","z":"d4683cb00fc074f4","name":"","server":"c7b344be.584158","version":2,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityid":"sun.sun","entityidfiltertype":"exact","debugenabled":false,"constraints":[{"targetType":"this_entity","targetValue":"","propertyType":"current_state","propertyValue":"new_state.state","comparatorType":"is","comparatorValueDatatype":"str","comparatorValue":"below_horizon"}],"inputs":0,"outputs":2,"customoutputs":[],"outputinitially":false,"state_type":"str","enableInput":false,"x":760,"y":680,"wires":[["ded16fd405efd300","37c1e0e1ef2cc51a","3fd05c1a302b0110","39f7912578b015af"],[]]},{"id":"8079e9af5b6c4830","type":"api-current-state","z":"d4683cb00fc074f4","name":"Automatisering AAN?","server":"c7b344be.584158","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"input_boolean.zonwering_automatisering_onoff","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":120,"y":260,"wires":[["633f8be5dc880278","49274db46054b15d","7394c23751df7d84","47f11daa742f5498","9714cedfcbcee877"],[]]},{"id":"c7b344be.584158","type":"server","name":"Home Assistant","addon":true}]

  • born2tweak
  • Registratie: November 2002
  • Laatst online: 20:41
Woohooo schreef op vrijdag 12 mei 2023 @ 14:21:
Wij hadden last van een geest hier in huis die elke keer het badkamer licht aan deed, vooral overdag. Aldus mn vriendin :+

Had een Aqara switch hangen in de badkamer (WXKG11LM) die op basis van een click de state aanpast

[Afbeelding]

[Afbeelding]

Best wel ff moeten zoeken maar de state van die Aqara switch stond dus zo;

[Afbeelding]

Een paar keer per dag valt de verbinding kennelijk weg en kreeg ik een unknown state, daarna ging het licht aan voor een uurtje |:(
Wat er ook gebeurd is dat als je met de schakelaar je licht uit doet, de 1h ook getriggerd wordt en hij na een uur weer aan gaat? Of zit daar nog een filter op?
Pagina: 1 ... 28 29 30 Laatste


Tweakers maakt gebruik van cookies

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

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

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

Functioneel en analytisch

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

janee

    Relevantere advertenties

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

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

    Ingesloten content van derden

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

    janee