Derivative time as property type issue

Excuse my lack of node red experience.
I have used this PID controller within a subflow to add some reusability for my project (mainly coupling it with PWM).
I was getting "Integral Locked" due to the process value being far from the setpoint - as expected - but this was dropping the output off so nothing ever happened (heating system). Eventually I realised that if I hard-coded the values into the PID node within my subflow, the output stays on as expected. After much experimentation, I found that the Derivative time was causing this if it was set to a number type. For now, setting it to a string type seems to fix this.
Presumably these variables should all expect a number as standard?
Thanks,
Kevin.

Yes, certainly it should work with numbers, I would be less surprised if you said it worked for numbers but not strings.  I am not entirely certain I understand exactly what you have done, can you post some screenshots showing the config for the good and the bad case please. You can paste images directly here.
Also please connect a debug node to the pid node output, set the debug node to output the complete message and show me what that gives for each case.
Also please what version of the pid node, what version of node-red and what version of nodejs?  node -v will tell you the nodejs version.

This is the subflow

These are the properties of the PID within the subflow, inputs mapped to properties of the subflow

These are the properties of the subflow itself. If D_SET is changed from string to number then the PID will give an output of zero when it is Integral Locked and so nothing ever happens. If I change just D_SET to number then it will work, even with all the others set to number.
I did all the updates before I debugged this, so its v2.0.0. I don't know where to enter node-v in my setup. I am running Nodered in Home Assistant. Home Assistant is running within an ESXI server. I have been using it for years but don't get much time to play with it.
I don't understand how to use debug nodes. When I have tried all I see is millions of messages flashing past too quickly to read. Happy to do it if you can guide me. I am working away for the next few days but can try logging in remotely and having a go if you can point me in the right direction.

I see you have enable set to false, is that how you have it set normally?  That should prevent the pid node from doing anything.

If D_SET is changed from string to number then the PID will give an output of zero when it is Integral Locked and so nothing ever happens. If I change just D_SET to number then it will work, even with all the others set to number.

I don't quite follow that. You say that it doesn't work with D_SET as a number, but then you say it does work with it as a number.
For the debug, add a Debug node to output 7 of the subflow.  Set it to output the complete message:

Each time the node sends a message it will appear in the debug pane.  To stop it sending to the debug pane you can click the button on the right hand end of the debug node, which will stop it sending, even without deploying again.  Then you can click in the debug pane and expand the contents of the message to make it all visible.
Can you share the subflow itself?  Configure one of the subflows so that it fails, then click that instance of it and, in the dropdown menu, select Export then Copy to Clipboard and paste it here between lines containing just three backticks, which will stop github from messing with the format. Like this
```
Paste it in here
```
Then I can test exactly your setup.
It is a pity you are using HA, that makes it difficult sometimes to see what is going on, but it should not be a factor in the problem

Thanks for trying, bear with me and when I get back home I will go through what you have asked. Strange that it works ok on one system and not another. Maybe its something odd about my installation. I will get back to you in a few days!

Any news on this? It would be good to get to the bottom of whatever is happening.

Sorry, its been mad. I will take a look this weekend.
Cheers!

This is the Debug with the POT setpoint at 30C as I am in there so already at ~21C. After setting everything to number type as you would expect it to be. (POT is nickname for the outbuilding).

This is the Debug with the POT setpoint at 30C as I am in there so already at ~21C. After setting everything to string type. At this point thing start working normally.

I tidied up the code a bit before I started the above tests, it is essentially the same just a bit easier for me to follow.
I have played with some different combinations of which variables are string and which are number.
D_SET does not seem to mind if it is a number or a string, contrary to what I said before.
I_INIT must be a string. As soon as it isn't, once the PID hits integral lock, zero output.
This is with all the inputs on the subflow itself set to number type. I have repeated the same test with Conservatory which also uses the PID subflow and it behaves exactly the same. I have screenshots of the subflow and the UI. I can send them as well but they just show what you would expect, saying integral locked and zero output.
I am fairly sure that I wasn't even taking I_INIT as an input to the subflow when I originally got the problem - I added it to eliminate a possible issue with it not being set! So I am now concerned that there is a consistency issue, or I reported the wrong variable in my haste!
I don't know what to suggest from here. Both POT and Conservatory are working perfectly with I_INIT set to string and everything else set to number. That is also with all the subflow inputs set to type number!
I hope I have explained this properly, I find it hard to describe!
Thanks!

This is the Debug with the POT setpoint at 30C as I am in there so already at ~21C. After setting everything to string type. At this point thing start working normally.

It isn't working as it should, in particular:

The integral term is Not a Number (NaN) which means something is not right.
I can manage to make things fail if I I have parameters set to String type in the subflow settings.  This is due to the fact that it is possible to enter invalid values into fields.  When you configure a PID node not in a subflow then there is validity checking to make sure that only numbers can be entered into number fields, so for example if you try to put blabla into the Initial Integral field it flags it as a config error.  When the node is used in a subflow then the validity checking in the node config is bypassed so it is possible to enter invalid values.  However, the symptom you are seeing is that it fails if the values are entered as number types, which doesn't make sense to me at the moment.
I have just noticed that you have Initial Integral set to 86400.  It should be a value between 0 and 1, it being the power output on
startup if the PV is on the SP.  That should not give NaN though.
If I were to create a version of the PID node that outputs additional debug would you be prepared to install it (that is very easy) so that I can work out what is going on?

Yes the NaN jumped straight out at me! I wasn't sure what a good initial value was and used the input value but that's in seconds so obviously not the same thing. Its just a default though (I assume) as I set it when I use the subflow to zero though I have now changed that to 0.5 in usage and the subflow as well, as it seems to be more reasonable? Again pretty sure I had this set to zero when I initially had the issue so I doubt that its related and you would know best if you say it wont be :)
Yes I can give your debug version a run. so you can get more debug feedback, that's no problem!
Kev.

I don't think it is likely to be an HA issue, this should not be interacting with HA at all.
You are right that the large value in initial integral should not cause the problems you are seeing, it would just make it slow to home in on the setpoint initially.
I have created a debug version.  Having said it would be easy to install I had forgotten you were running in HA, but hopefully that is not a big problem. In HA is node-red running in a docker container? If so then you will need to open a shell in the container and cd into the folder where the flows file is, I will do some googling for you if you don't know how to do that.  Once in there run
npm list node-red-contrib-pid
which should say something like
└──<EMAIL_ADDRESS>which confirms you are in the right place.  Then run
npm install colinl/node-red-contrib-pid#param_debug_branch
which will install the new version.
There might be a complication there, I don't know whether it is necessary to have git installed in the container to do the install, if it complains that git is not installed then come back and I will see if I can work out how to do that in HA
Assuming it went ok then restart node-red.  If the install failed then it should not have changed anything so it should keep working as before, without restarting node-red.
Then the debug node on the output should show the params.  Make sure you click the objects in the debug pane so they all get expanded, then you should see something like

Having done a bit of searching, then unfortunately I don't know if it even possible to install a branch version of the node when running in HA, so this may be a dead end.

Do you install node-red-contrib-pid under Option: npm packages as described here?
If so then try using colinl/node-red-contrib-pid#param_debug_branch as the package name, and include git under Option: system_packages

It was originally a vm in .ods format I think, which I imported into ESXI. It runs its own OS (HAOS). Yes it is installed under add-ons. HA has changed quite a bit since I originally installed it. I remember it breaking and having to fiddle about to fix it, couldn't tell you what I did to get it running now but it was basically stuck where several packages wouldn't update then I got some to update and it broke some others and so on. Everything has been working for over a year now. I generally find it surprisingly stable considering the amount of updates that happen. I don't work on it much, time is tight, so I just use what I have and don't change it very much other than updates.
These are the configuration options for the add-on, and below that, the PID package installed in Node Red, could you explain where I should put the above?

What is in the dropdowns system_packages and npm_packages?

Nothing, they are empty!

How did you tell it to install node-red-contrib-pid?

I believe I installed using Manage Palette | Install.
I don't know of any other way though I installed is a long time ago now.

OK, sorry, I am well outside my knowledge base on HA, so maybe we can't install the debug version.
Lets try a different tack.  Could you configure one of your instances so that it is failing then select it, Export it and paste it here please, so I can see if it fails for me.

Hi,
I was visiting family yesterday so I just got to this now.
OK so this is what happened today:

Conservatory is cold so I went to use this flow to get you your requested exported flow.
Changed I_INIT in the main flow to string type (everything else is already a number type including I_INIT in the subflow).
Took a screenshot of the flow running before it went into integral lock.
Took another screenshot once the flow had entered integral lock.
Double checked before exporting the flow, and the output was still on!!
Switched the system off and on (its just an enable flag from HA to enable the heating in that room), still working perfectly!
Turned up the setpoint in POT, switched I_INIT to number type in that, waited for integral lock, again, output remained on!

I don't know what else to say really! Clearly and as I had started to suspect before, there is some inconsistency - at least in my installation. I had narrowed it down to I_INIT on the main flow and double checked that last time I worked on this with you. Indeed that is why everything else is already set to number type! Also bearing in mind that I am pretty sure that I previously narrowed it down to SET_D, something odd is happening.
I did install all the updates after working on it the other day - Home assistant, Home assistant core and each of the nodes in the palette of Node-red. This broke the integration with HA ironically and I had to manually re-add the home assistant server node - just after I had told you that I never have problems with updates breaking things!
It doesn't look like there is anything you can do since it is now quite happily working with all the types set to number.
I am sorry this has taken up your time and a bit annoyed that it has also taken up (rather a lot) mine!
I feel like I am missing something but cant see what it could be, it just seems like its inconsistent.
Kevin.

To check everything is working ok, look in the debug output and check you do not see NaN for anything.
Investigating you problem has shown up that I could do better checks on some parameters (particularly initial integral) to make sure they are actually numbers.  The NaN probably indicates that one or more parameters had non-numeric characters in them.  What is difficult to understand is exactly how this was happening in your case.

OK, all looks normal to me?

Ill let it run for a while and see if it changes. I know POT does when its not locked at least.

Same - isn't it because its PID locked?

Here is POT when up to temperature:

Same - isn't it because its PID locked?

Yes, and I guess you have initial integral set to 0.  Once the loops starts working then the integral term should start to take control.

No, I have it set to 0.5!

The important thing is that the integral starts doing something when the process gets near the setpoint and the pid starts working.

It always seems to work when its not integral locked. The issue was if it wanted to integral lock it would not bring the output on so I think its very likely working fine. The only check I haven't done is check it now that it is working using everything as a number, from cold, as I already had the POT heated up and the Conservatory doesn't need heating right now. I will find that out tomorrow and report back.

Nothing to do with the problem with NaN that you have been having, but I am dubious about your derivative time of 200, that is a large derivative for an integral of 600, especially with a sample rate of 2 minutes (if I read the debug correctly). To make derivative work reliably at 200 seconds you would need a sample rate of about 20 seconds.  Do you not get large variations in power output from sample to sample with it at 300?  In fact even for the integral at 600 I would advise a sample rate of 60 seconds or faster.  Looking at your flow image, have you got smoothing on the temperature input?  If you added that to reduce fluctuations then I think you might be better to take the smoothing out and remove the derivative (set it at zero).  If possible sample the temperature at 1 minute intervals or faster. I think you may find that gives you a smoother power output and control just as good or better.

Thanks - I value your advice on configuration of the PID loop!
The update rate for the process variable is set to something like 20s. I dint recall exactly and not at machine right now.  When I configured the loop initially it was 1s (I am used to regulating things like flow rates on pumps with PID loops so I struggle working with stuff that reacts so very slowly!).
I found the reading ( process valie) very reactive since there is no smoothing built in so I added the smoothing to cater for draughts from entering the room, walking past the sensor etc.
I have found it fairly stable. It does overshoot the first time it gets to temperature which isn't surprising when the heat source is a gas boiler which builds up a core heat when running for a long while and then continues to dissipate the heat in its overrun mode. I have actually found this works fine for me as the building fabric is cold in the start up scenario which to me makes it feel colder than it actually is in the air so an initial boost helps to overcome that.
Always open to suggestions though so if you have further comments I would live to hear them!
I have found it challenging and time consuming dialling it in, its so different from a highly reactive load such as a pump on an invertor or a modulating valve! As I mention above its both slow to react and the boiler gives different responses depending on when it last fired. Electric heating would be much easier, I am sure!

Do you use something that allows you to keep a record of the response with different settings? I use influxdb and grafana.  That allows me to go back and compare the response with different settings.  Yes it can be frustrating, the fact that you may have to wait for hours for things to stabilise.
Are you using hot water radiators for the heating?

I have Grafana and Influxdb setup on HA. I'm  ot sure if it's recording the PID setpoints though. I will get onto that later.
Yes, hot water radiators. On the POT its a system with about 7 rads, 2 in the main room where the stat is and those TRVs wide open. Other rooms have TRVs set conservatively as usually not used, POT doors always closed.
On the Conservatory that it a split system (S plan I think it's called). So on that, my control system opens an EAV which has a boiler call connected to its open limit. That circuit has 2 other rads set fairly low on their TRVs. And the main one with the TRV wide open. The other circuit does another 7 rads controlled by a separate (wife friendly!) System - Schnieder/wiser. Connected to the second EAV with boiler call also on its open limit.
So, nothing very stable in either setup. I am realistic in my expectations! I just didn't want to have a simple switch with massive overshoots all the time and I like PID loops! I also like overcomplicated my daily life!!!

I can't work out what that is showing.  For tuning, what I like to see is the power output from the PID (the payload) and the temperature. That is for a fixed setpoint obviously.

As you can see, the output is all over the place.  I suggest you start by setting the derivative time to 0 (for the moment) and set the integral time to 30 minutes (1800) and see what happens.  I got the 30 mins by looking at the previous chart which seems to suggest a period of about 50 minutes or an hour.  If you still have smoothing on the temperature then take that off too, for the moment.

OK That is done for POT and Cons which are both currently on. Changes were made around 15:15. Will see what gets logged. Obviously these are not a cold start but it will be interesting to see how it regulates now.
Here is the graph up to this point. I have no idea why the current outputs of zero have not been plotted. I could do with spending a few hours learning how to use Grafana really!

OK so no heating got called - I got cold and checked up on it! P output went to NaN! If I add smoothing back in, it works again! For now, I have set smoothing to 1 sample so that the PID runs but there is no actual smoothing taking place.
Weird.

What is the difference between no smoothing and smoothing set to 1?  Was it the input to the pid node that went to NaN?

Perhaps I misunderstand what you mean by smoothing. Are you talking about smoothing outside the pid node, or the smoothing built into the node (which only affects derivative)

Smooth is set to mean and it was set to 10 samples that the mean is taken from, I have set it to 1 to effectively disable smoothing.
Sorry, I think I forgot to wait for Integral lock before as it was so slow to get into it due to temperature interval being 30...
Still no heating with NaN!
I have set the update interval of the temperature to 1 (was 15 this morning then 30 when I changed the other PID settings earlier). I have only set it to 1 as it makes the PID go into integral lock much quicker so enables me to test it in good time.
I have now eliminated smoothing, that was not the problem. I have managed to get it working again without smoothing. I had to set D_Set to string type!

If you can get it so that anything coming out is showing NaN then select that instance of the subflow, Export it, and paste it here. Then I can have a look at it.

POT seems to have stabilised though will have to see if it can get to setpoint from a cold start tomorrow.

If you can get it so that anything coming out is showing NaN then select that instance of the subflow, Export it, and paste it here. Then I can have a look at it.

I am not changing the subflow, only the parameters that are passed to it, so POT and CONS are using the same subflow, and I can break them individually by setting D_SET to a string in either the POT or the CONS flow. I will see if I can get CONS and subflow for you now as CONS is still calling hard (its struggling to catch up with all the wind on all the windows in there).

Here it is...
Settings before code copied:

CONS flow:
[{"id":"c5b37bdc.62ddc","type":"subflow","name":"PID PWM","info":"","category":"","in":[{"x":40,"y":260,"wires":[{"id":"57f96543.f90014"},{"id":"0d9b4bdf5390b3fa"}]}],"out":[{"x":1300,"y":100,"wires":[{"id":"ced7cf25.1a82c","port":0}]},{"x":1300,"y":160,"wires":[{"id":"ced7cf25.1a82c","port":1}]},{"x":1290,"y":240,"wires":[{"id":"f2327bd2.e4f88","port":0}]},{"x":1300,"y":300,"wires":[{"id":"60e50ce7.969a94","port":0}]},{"x":1300,"y":380,"wires":[{"id":"184f4b15e7537d74","port":0}]},{"x":1300,"y":40,"wires":[{"id":"3740c0e.02273c","port":0}]},{"x":600,"y":200,"wires":[{"id":"57f96543.f90014","port":0}]},{"x":850,"y":460,"wires":[{"id":"57f96543.f90014","port":0}]}],"env":[{"name":"SETPOINT","type":"num","value":"20"},{"name":"P_SET","type":"num","value":"1.4"},{"name":"I_SET","type":"num","value":"86400"},{"name":"D_SET","type":"num","value":"0"},{"name":"I_INIT","type":"num","value":"0.5"},{"name":"MAX_SAMP_INT","type":"num","value":"1200"},{"name":"D_SMOOTH","type":"num","value":"0"},{"name":"ENABLE","type":"bool","value":"false"},{"name":"OUT_POW_WHEN_DIS","type":"num","value":"0"}],"meta":{"module":"PID PWM","version":"1.0.0","desc":"PID with PWM developed for boiler heating"},"color":"#E9967A","inputLabels":["input"],"outputLabels":["switch_on","switch_off","duty_s","duty_%","PID_%","duty_call","PID_output_raw","PID_output"],"status":{"x":660,"y":520,"wires":[{"id":"b68243a88e7c3da2","port":0}]}},{"id":"f1a5fc43.3c97d","type":"range","z":"c5b37bdc.62ddc","minin":"0","maxin":"1","minout":"0.249","maxout":"1","action":"scale","round":false,"property":"payload","name":"Upper 75% prop","x":600,"y":280,"wires":[[]]},{"id":"3740c0e.02273c","type":"timeprop","z":"c5b37bdc.62ddc","name":"PWM","cycleTime":"300","deadTime":"30","triggerPeriod":"10","invert":false,"x":970,"y":140,"wires":[["ced7cf25.1a82c"]]},{"id":"ced7cf25.1a82c","type":"switch","z":"c5b37bdc.62ddc","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":1150,"y":140,"wires":[[],[]]},{"id":"f2327bd2.e4f88","type":"range","z":"c5b37bdc.62ddc","minin":"0","maxin":"1","minout":"0","maxout":"300","action":"scale","round":true,"property":"payload","name":"Duty (s)","x":1100,"y":240,"wires":[[]]},{"id":"60e50ce7.969a94","type":"range","z":"c5b37bdc.62ddc","minin":"0","maxin":"1","minout":"0","maxout":"100","action":"scale","round":true,"property":"payload","name":"Duty (%)","x":1100,"y":300,"wires":[[]]},{"id":"57f96543.f90014","type":"PID","z":"c5b37bdc.62ddc","name":"PID","setpoint":"${SETPOINT}","pb":"${P_SET}","ti":"${I_SET}","td":"${D_SET}","integral_default":"${I_INIT}","smooth_factor":"${D_SMOOTH}","max_interval":"${MAX_SAMP_INT}","enable":"${ENABLE}","disabled_op":"${OUT_POW_WHEN_DIS}","x":350,"y":260,"wires":[["2c949416e55c666c","6bd50dcf.510a2c"]]},{"id":"6bd50dcf.510a2c","type":"function","z":"c5b37bdc.62ddc","name":"under 10% cutoff","func":"var payload = msg.payload\nif(payload < 0.10)\n    {\n        payload = 0\n    }\nmsg.payload = payload \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":260,"wires":[["60e50ce7.969a94","f2327bd2.e4f88","3740c0e.02273c"]]},{"id":"2c949416e55c666c","type":"range","z":"c5b37bdc.62ddc","minin":"0","maxin":"1","minout":"0","maxout":"100","action":"scale","round":false,"property":"payload","name":"PID Duty (%)","x":590,"y":380,"wires":[["184f4b15e7537d74"]]},{"id":"b68243a88e7c3da2","type":"status","z":"c5b37bdc.62ddc","name":"","scope":null,"x":500,"y":520,"wires":[[]]},{"id":"184f4b15e7537d74","type":"change","z":"c5b37bdc.62ddc","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"op","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":770,"y":380,"wires":[[]]},{"id":"0d9b4bdf5390b3fa","type":"function","z":"c5b37bdc.62ddc","name":"on/off mode","func":"if (msg.payload < 20.0) { msg.payload = true; } else { msg.payload = false;}\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":60,"wires":[[]]},{"id":"b664267a.c56958","type":"tab","label":"Cons Heating","disabled":false,"info":""},{"id":"e61977f.737b708","type":"api-current-state","z":"b664267a.c56958","name":"Cons Check Off","server":"233f608c.720b3","version":3,"outputs":2,"halt_if":"true","halt_if_type":"bool","halt_if_compare":"is","entity_id":"switch.conszone","state_type":"habool","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":1060,"y":140,"wires":[["dfddaebd.1d5488"],[]]},{"id":"126d6d6f.f2c4e3","type":"api-current-state","z":"b664267a.c56958","name":"Cons Check On","server":"233f608c.720b3","version":3,"outputs":2,"halt_if":"false","halt_if_type":"bool","halt_if_compare":"is","entity_id":"switch.conszone","state_type":"habool","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":1060,"y":80,"wires":[["192021.5a8f97e"],[]]},{"id":"c2c1e628.907dd","type":"ui_gauge","z":"b664267a.c56958","name":"Cons Duty (%)","group":"625a03d2.fac744","order":1,"width":0,"height":0,"gtype":"gage","title":"Duty (%)","label":"%","format":"{{value}}","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","diff":false,"className":"","x":1060,"y":260,"wires":[]},{"id":"79704fa6.8f0b1","type":"ui_gauge","z":"b664267a.c56958","name":"Cons Duty (s)","group":"625a03d2.fac744","order":2,"width":0,"height":0,"gtype":"gage","title":"Duty (s)","label":"s","format":"{{value}}","min":0,"max":"300","colors":["#ffb3b3","#ff6464","#ff0000"],"seg1":"150","seg2":"450","diff":false,"className":"","x":1060,"y":200,"wires":[]},{"id":"d114c595.c4658","type":"ui_gauge","z":"b664267a.c56958","name":"Cons Setpoint","group":"b790fcb.29c628","order":1,"width":0,"height":0,"gtype":"gage","title":"Setpoint","label":"°C","format":"{{value}}","min":"5","max":"30","colors":["#80ff80","#80ff80","#ff0000"],"seg1":"","seg2":"","diff":false,"className":"","x":460,"y":340,"wires":[]},{"id":"83372335.f9dbb8","type":"ui_switch","z":"b664267a.c56958","name":"","label":"Boiler Call","tooltip":"","group":"b790fcb.29c628","order":4,"width":0,"height":0,"passthru":true,"decouple":"false","topic":"","topicType":"str","style":"","onvalue":"1","onvalueType":"num","onicon":"","oncolor":"","offvalue":"0","offvalueType":"num","officon":"","offcolor":"","animate":true,"className":"","x":1050,"y":20,"wires":[[]]},{"id":"dfddaebd.1d5488","type":"api-call-service","z":"b664267a.c56958","name":"Cons Boiler Off","server":"233f608c.720b3","version":5,"debugenabled":true,"domain":"switch","service":"turn_off","areaId":[],"deviceId":[],"entityId":["switch.conszone"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","output_location":"","output_location_type":"none","x":1260,"y":140,"wires":[[]]},{"id":"192021.5a8f97e","type":"api-call-service","z":"b664267a.c56958","name":"Cons Boiler On","server":"233f608c.720b3","version":5,"debugenabled":true,"domain":"switch","service":"turn_on","areaId":[],"deviceId":[],"entityId":["switch.conszone"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","output_location":"","output_location_type":"none","x":1260,"y":80,"wires":[[]]},{"id":"302e5c0a.0ab83c","type":"poll-state","z":"b664267a.c56958","name":"sensor.consstat_bme280_temperature","server":"233f608c.720b3","version":3,"exposeAsEntityConfig":"","updateInterval":"30","updateIntervalType":"num","updateIntervalUnits":"seconds","outputInitially":true,"outputOnChanged":true,"entityId":"sensor.consstat_bme280_temperature","stateType":"num","ifState":"","ifStateType":"str","ifStateOperator":"is","outputs":1,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":170,"y":280,"wires":[["3bbde4eb.ec2894","a97d48ca4f88a374","4b0b7924.e0ce38"]]},{"id":"c484621b.28a1f8","type":"change","z":"b664267a.c56958","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"enable","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":160,"wires":[["4b0b7924.e0ce38"]]},{"id":"6eab321c.c98c24","type":"server-state-changed","z":"b664267a.c56958","name":"input_number.var_setpoint_heating_cons","server":"233f608c.720b3","version":5,"outputs":1,"exposeAsEntityConfig":"","entityId":"input_number.var_setpoint_heating_cons","entityIdType":"exact","outputInitially":true,"stateType":"num","ifState":"","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":180,"y":220,"wires":[["b9a4e326.66f5","d114c595.c4658"]]},{"id":"b9a4e326.66f5","type":"change","z":"b664267a.c56958","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"setpoint","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":220,"wires":[["4b0b7924.e0ce38"]]},{"id":"3bbde4eb.ec2894","type":"ui_gauge","z":"b664267a.c56958","name":"Cons Temperature","group":"b790fcb.29c628","order":2,"width":0,"height":0,"gtype":"gage","title":"Temperature","label":"°C","format":"{{value}}","min":"5","max":"30","colors":["#00ffff","#80ff80","#ff0000"],"seg1":"18","seg2":"23","diff":false,"className":"","x":450,"y":400,"wires":[]},{"id":"44fb632f.5b46e4","type":"ui_text","z":"b664267a.c56958","group":"625a03d2.fac744","order":4,"width":0,"height":0,"name":"Cons I Current Value","label":"I Current Value","format":"{{msg.integral}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1080,"y":500,"wires":[]},{"id":"fd4c1831.46b6b","type":"ui_text","z":"b664267a.c56958","group":"625a03d2.fac744","order":5,"width":0,"height":0,"name":"Cons D Current Value","label":"D Current Value","format":"{{msg.derivative}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1080,"y":540,"wires":[]},{"id":"22a17f22.b05088","type":"ui_text","z":"b664267a.c56958","group":"625a03d2.fac744","order":3,"width":0,"height":0,"name":"Cons P Current Value","label":"P Current Value","format":"{{msg.proportional}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1080,"y":460,"wires":[]},{"id":"4b0b7924.e0ce38","type":"subflow:c5b37bdc.62ddc","z":"b664267a.c56958","name":"Cons PID","env":[{"name":"P_SET","value":"1.5","type":"num"},{"name":"I_SET","value":"1800","type":"num"},{"name":"D_SMOOTH","value":"5","type":"num"},{"name":"P","value":"8","type":"num"},{"name":"I","value":"30","type":"num"},{"name":"D","value":"15","type":"num"}],"x":720,"y":200,"wires":[["126d6d6f.f2c4e3"],["e61977f.737b708"],["79704fa6.8f0b1","7ed9f2146c9c1de5"],["c2c1e628.907dd","56e8b2f92d264137"],["769cf9e8.a45b78"],["83372335.f9dbb8"],["4b06d485d777a72d","22a17f22.b05088","44fb632f.5b46e4","fd4c1831.46b6b","87cb4190056bc6a8"],["abfd24b4d6bd83bb"]]},{"id":"769cf9e8.a45b78","type":"ui_text","z":"b664267a.c56958","group":"625a03d2.fac744","order":7,"width":0,"height":0,"name":"Cons PID % Value","label":"PID % Value","format":"{{msg.payload}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1070,"y":420,"wires":[]},{"id":"759145dcfd72049f","type":"server-state-changed","z":"b664267a.c56958","name":"input_boolean.var_enable_heating_cons","server":"233f608c.720b3","version":5,"outputs":1,"exposeAsEntityConfig":"","entityId":"input_boolean.var_enable_heating_cons","entityIdType":"exact","outputInitially":true,"stateType":"habool","ifState":"","ifStateType":"str","ifStateOperator":"is","outputOnlyOnStateChange":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":180,"y":160,"wires":[["c484621b.28a1f8"]]},{"id":"4b06d485d777a72d","type":"ha-sensor","z":"b664267a.c56958","name":"cons_heating_pid.proportional","entityConfig":"c016d6db.f544e8","version":0,"state":"msg.proportional","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1110,"y":320,"wires":[["cd199b93f8e2882c"]]},{"id":"7ed9f2146c9c1de5","type":"ha-sensor","z":"b664267a.c56958","name":"cons_heating_pid.duty_sec","entityConfig":"e3cd0e1f.810fb","version":0,"state":"payload","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1300,"y":200,"wires":[[]]},{"id":"56e8b2f92d264137","type":"ha-sensor","z":"b664267a.c56958","name":"cons_heating_pid.duty_perc","entityConfig":"a8c71251.de1fe","version":0,"state":"payload","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1300,"y":260,"wires":[[]]},{"id":"cd199b93f8e2882c","type":"ha-sensor","z":"b664267a.c56958","name":"cons_heating_pid.integral","entityConfig":"d459b977.4e1438","version":0,"state":"msg.integral","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1370,"y":320,"wires":[["5d25ea8c1eda8ba2"]]},{"id":"5d25ea8c1eda8ba2","type":"ha-sensor","z":"b664267a.c56958","name":"cons_heating_pid.derivative","entityConfig":"324c01b7.769426","version":0,"state":"msg.derivative","stateType":"msg","attributes":[],"inputOverride":"allow","outputProperties":[],"x":1620,"y":320,"wires":[[]]},{"id":"87cb4190056bc6a8","type":"debug","z":"b664267a.c56958","name":"Cons Debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1050,"y":380,"wires":[]},{"id":"a97d48ca4f88a374","type":"smooth","z":"b664267a.c56958","name":"","property":"payload","action":"mean","count":"1","round":"2","mult":"single","reduce":true,"x":480,"y":460,"wires":[["50bef3f58e396c1b"]]},{"id":"50bef3f58e396c1b","type":"ui_gauge","z":"b664267a.c56958","name":"Cons Temperature Smoothed","group":"b790fcb.29c628","order":3,"width":0,"height":0,"gtype":"gage","title":"Temperature Smoothed","label":"°C","format":"{{value}}","min":"5","max":"30","colors":["#00ffff","#80ff80","#ff0000"],"seg1":"18","seg2":"23","diff":false,"className":"","x":720,"y":460,"wires":[]},{"id":"abfd24b4d6bd83bb","type":"ui_text","z":"b664267a.c56958","group":"625a03d2.fac744","order":6,"width":0,"height":0,"name":"Cons PID Output","label":"PID Output","format":"{{msg.payload}}","layout":"row-spread","className":"","style":false,"font":"","fontSize":"","color":"#000000","x":1070,"y":580,"wires":[]},{"id":"233f608c.720b3","type":"server","name":"Home Assistant","version":5,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30,"areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true},{"id":"625a03d2.fac744","type":"ui_group","name":"Cons Heating Tuning","tab":"99074dd0.4271e8","order":4,"disp":true,"width":"6","collapse":false},{"id":"b790fcb.29c628","type":"ui_group","name":"Cons Heating","tab":"99074dd0.4271e8","order":3,"disp":true,"width":"6","collapse":false},{"id":"c016d6db.f544e8","type":"ha-entity-config","server":"233f608c.720b3","deviceConfig":"","name":"sensor config for cons_heating_pid.proportional","version":6,"entityType":"sensor","haConfig":[{"property":"name","value":"cons_heating_pid.proportional"},{"property":"device_class","value":"status"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"P"},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"resend":true},{"id":"e3cd0e1f.810fb","type":"ha-entity-config","server":"233f608c.720b3","deviceConfig":"","name":"sensor config for cons_heating_pid.duty_sec","version":6,"entityType":"sensor","haConfig":[{"property":"name","value":"cons_heating_pid.duty_sec"},{"property":"device_class","value":"status"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"s"},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"resend":true},{"id":"a8c71251.de1fe","type":"ha-entity-config","server":"233f608c.720b3","deviceConfig":"","name":"sensor config for cons_heating_pid.duty_perc","version":6,"entityType":"sensor","haConfig":[{"property":"name","value":"cons_heating_pid.duty_perc"},{"property":"device_class","value":"status"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"%"},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"resend":true},{"id":"d459b977.4e1438","type":"ha-entity-config","server":"233f608c.720b3","deviceConfig":"","name":"sensor config for cons_heating_pid.integral","version":6,"entityType":"sensor","haConfig":[{"property":"name","value":"cons_heating_pid.integral"},{"property":"device_class","value":"status"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"I"},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"resend":true},{"id":"324c01b7.769426","type":"ha-entity-config","server":"233f608c.720b3","deviceConfig":"","name":"sensor config for cons_heating_pid.derivative","version":6,"entityType":"sensor","haConfig":[{"property":"name","value":"cons_heating_pid.derivative"},{"property":"device_class","value":"status"},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"D"},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"resend":true},{"id":"99074dd0.4271e8","type":"ui_tab","name":"Home","icon":"dashboard","order":1,"disabled":false,"hidden":false}]

PID Subflow
[{"id":"c5b37bdc.62ddc","type":"subflow","name":"PID PWM","info":"","category":"","in":[{"x":40,"y":260,"wires":[{"id":"57f96543.f90014"},{"id":"0d9b4bdf5390b3fa"}]}],"out":[{"x":1300,"y":100,"wires":[{"id":"ced7cf25.1a82c","port":0}]},{"x":1300,"y":160,"wires":[{"id":"ced7cf25.1a82c","port":1}]},{"x":1290,"y":240,"wires":[{"id":"f2327bd2.e4f88","port":0}]},{"x":1300,"y":300,"wires":[{"id":"60e50ce7.969a94","port":0}]},{"x":1300,"y":380,"wires":[{"id":"184f4b15e7537d74","port":0}]},{"x":1300,"y":40,"wires":[{"id":"3740c0e.02273c","port":0}]},{"x":600,"y":200,"wires":[{"id":"57f96543.f90014","port":0}]},{"x":850,"y":460,"wires":[{"id":"57f96543.f90014","port":0}]}],"env":[{"name":"SETPOINT","type":"num","value":"20"},{"name":"P_SET","type":"num","value":"1.4"},{"name":"I_SET","type":"num","value":"86400"},{"name":"D_SET","type":"num","value":"0"},{"name":"I_INIT","type":"num","value":"0.5"},{"name":"MAX_SAMP_INT","type":"num","value":"1200"},{"name":"D_SMOOTH","type":"num","value":"0"},{"name":"ENABLE","type":"bool","value":"false"},{"name":"OUT_POW_WHEN_DIS","type":"num","value":"0"}],"meta":{"module":"PID PWM","version":"1.0.0","desc":"PID with PWM developed for boiler heating"},"color":"#E9967A","inputLabels":["input"],"outputLabels":["switch_on","switch_off","duty_s","duty_%","PID_%","duty_call","PID_output_raw","PID_output"],"status":{"x":660,"y":520,"wires":[{"id":"b68243a88e7c3da2","port":0}]}},{"id":"f1a5fc43.3c97d","type":"range","z":"c5b37bdc.62ddc","minin":"0","maxin":"1","minout":"0.249","maxout":"1","action":"scale","round":false,"property":"payload","name":"Upper 75% prop","x":600,"y":280,"wires":[[]]},{"id":"3740c0e.02273c","type":"timeprop","z":"c5b37bdc.62ddc","name":"PWM","cycleTime":"300","deadTime":"30","triggerPeriod":"10","invert":false,"x":970,"y":140,"wires":[["ced7cf25.1a82c"]]},{"id":"ced7cf25.1a82c","type":"switch","z":"c5b37bdc.62ddc","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"1","vt":"str"},{"t":"eq","v":"0","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":1150,"y":140,"wires":[[],[]]},{"id":"f2327bd2.e4f88","type":"range","z":"c5b37bdc.62ddc","minin":"0","maxin":"1","minout":"0","maxout":"300","action":"scale","round":true,"property":"payload","name":"Duty (s)","x":1100,"y":240,"wires":[[]]},{"id":"60e50ce7.969a94","type":"range","z":"c5b37bdc.62ddc","minin":"0","maxin":"1","minout":"0","maxout":"100","action":"scale","round":true,"property":"payload","name":"Duty (%)","x":1100,"y":300,"wires":[[]]},{"id":"57f96543.f90014","type":"PID","z":"c5b37bdc.62ddc","name":"PID","setpoint":"${SETPOINT}","pb":"${P_SET}","ti":"${I_SET}","td":"${D_SET}","integral_default":"${I_INIT}","smooth_factor":"${D_SMOOTH}","max_interval":"${MAX_SAMP_INT}","enable":"${ENABLE}","disabled_op":"${OUT_POW_WHEN_DIS}","x":350,"y":260,"wires":[["2c949416e55c666c","6bd50dcf.510a2c"]]},{"id":"6bd50dcf.510a2c","type":"function","z":"c5b37bdc.62ddc","name":"under 10% cutoff","func":"var payload = msg.payload\nif(payload < 0.10)\n    {\n        payload = 0\n    }\nmsg.payload = payload \nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":260,"wires":[["60e50ce7.969a94","f2327bd2.e4f88","3740c0e.02273c"]]},{"id":"2c949416e55c666c","type":"range","z":"c5b37bdc.62ddc","minin":"0","maxin":"1","minout":"0","maxout":"100","action":"scale","round":false,"property":"payload","name":"PID Duty (%)","x":590,"y":380,"wires":[["184f4b15e7537d74"]]},{"id":"b68243a88e7c3da2","type":"status","z":"c5b37bdc.62ddc","name":"","scope":null,"x":500,"y":520,"wires":[[]]},{"id":"184f4b15e7537d74","type":"change","z":"c5b37bdc.62ddc","name":"","rules":[{"t":"set","p":"topic","pt":"msg","to":"op","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":770,"y":380,"wires":[[]]},{"id":"0d9b4bdf5390b3fa","type":"function","z":"c5b37bdc.62ddc","name":"on/off mode","func":"if (msg.payload < 20.0) { msg.payload = true; } else { msg.payload = false;}\nreturn msg;\n","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":60,"wires":[[]]},{"id":"4b0b7924.e0ce38","type":"subflow:c5b37bdc.62ddc","z":"b664267a.c56958","name":"Cons PID","env":[{"name":"P_SET","value":"1.5","type":"num"},{"name":"I_SET","value":"1800","type":"num"},{"name":"D_SMOOTH","value":"5","type":"num"},{"name":"P","value":"8","type":"num"},{"name":"I","value":"30","type":"num"},{"name":"D","value":"15","type":"num"}],"x":720,"y":200,"wires":[["126d6d6f.f2c4e3"],["e61977f.737b708"],["79704fa6.8f0b1","7ed9f2146c9c1de5"],["c2c1e628.907dd","56e8b2f92d264137"],["769cf9e8.a45b78"],["83372335.f9dbb8"],["4b06d485d777a72d","22a17f22.b05088","44fb632f.5b46e4","fd4c1831.46b6b","87cb4190056bc6a8"],["abfd24b4d6bd83bb"]]}]

Sadly I can't make that fail.  Was it actually showing NaN when you exported it?

Also could you add a debug node to the Poll state node feeding the pid and check that there is nothing unnexpected coming from there.  Check the topic as well as the pv.
I thought you had to put the smooth node back in, but I see it is not in the pid feed in the flow you exported.

Sadly I can't make that fail. Was it actually showing NaN when you exported it?

Yes it was.

Also could you add a debug node to the Poll state node feeding the pid and check that there is nothing unnexpected coming from there. Check the topic as well as the pv. I thought you had to put the smooth node back in, but I see it is not in the pid feed in the flow you exported.

See below, I think this is what you wanted. All I have done is add the extra Debug and change D_SET to number type. I thought removing the smoothing was helping but I was just being impatient, forgetting it takes longer to get integral locked with the process value updating less frequently.
So basically, I still cannot put my finger on what is triggering the problem, it seems to move around as I change other things. At the moment it can be triggered by setting D_SET to a number and will work if that is changed back to a String, but this isn't always the case. The worst kind of issue!

Do you know how to open a command window into the node-red container.  I think you would do
sudo docker ps
which would show you all the containers.  The hex  string is the id of the container, note the one for node red then run
sudo docker exec -it  hex_id_here   bash
If that complains the bash is not recognised then try sh instead.  exit will close the shell.
Let me know if that works.

Yes, after a bit of messing around with HassOS security I am in, let me know what I need to do in there:

First we have to find the folder where you flows file is, I think that is /data.  So if you run
cd /data
ls -l
you should see a flows.json file dated the last time you updated the flows, and there should also be a package.json and a node_modules folder (those are different ones to those in the image you posted, which are for node-red itself rather than your flows).  If you do see those then you run
npm install colinl/node-red-contrib-pid#param_debug_branch
If that complains that git is not installed then add it to system_packages as described here and restart the node-red container, or reboot, and try the npm install ... again.  You will have to get the container id again as it will change each time the container is restarted. If it installs this time then restart node-red and hopefully it will now be using my debug version which has additional debug in the payload sent out.  So if you can get it to the stage where something there is showing NaN then fully expand the debug output and show us what you get.
If you don't see the flows file in /data then run
find / --name flows.json
and see if that finds the right folder.

OK its in  /config which makes sense and has 01/01/2024 which seems right. I will run a backup and then attempt installing your debug version!

Ok Installed.

Battling with this at the moment, don't know how to step the version back and don't really need to as the server is always on so going to wait for the next update but annoying as every time I restart node-red I have to reinstall the package!
https://community.home-assistant.io/t/warning-do-not-update-websocket-to-0-61-1-with-add-on-version-16-0-2/653887
I am not convinced that it is using the debug version unless you kept the version details the same?

I am not running it with settings that Fault it at the moment but I am pretty sure this is not your debug version. back to work tomorrow so I will have less time, especially with catching up from the break.

Yes it is, I have added the params object which contains the config values.

I didn't spot that! Here's showing params:

Excellent, now we are getting somewhere. As you can see the TD is NaN, the question is why is it not a number?
I have added some more debug, if you run the install again it will pick up the new version and the debug should also now include a property configParams which should shows the actual values being picked up from the subflow settings.

Great OK I will try to do this tomorrow. What time zone are you in, I am UK not sure if there is a best time of day for me to look or if we are running at a similar time anyway?
Cheers.

I am in the UK too (mid Wales), but retired so don't have set times generally.  Playing table tennis tomorrow morning, at home in the afternoon, but it should be dry tomorrow, at last, so lots of catching up to do outside.

I know what you mean about catching up outside, it seemed like the rain would never end. We are in a wet part of Devon/Cornwall as it is so even the "dry days" have had showers but so much better than it has been today at lease!

Well, I wasn't expecting that.
As you can see, some of the parameters are not being substituted with the actual values, so when the pid node picks them up they are most definately Not a Number.
How are the subflow values configured now? In terms of strings or numbers I mean.
Can you expand the params object too please?
Do you know how to get a node-red startup log?  I don't know how to do that when running in HA, but it is possible.  It would be good to see that as there is something very odd going on.

Also could you show what is coming out of the other subflow, I am interested in whether it is the same params that are not getting substituted.

Also please right click on the background in the editor, and a context menu should popup, select Show Action List and search for System and you should find Show System Info.  Select that and the resulting window has a Copy To Clipboard at the top.  Do that and paste it here please.

Well, I wasn't expecting that. As you can see, some of the parameters are not being substituted with the actual values, so when the pid node picks them up they are most definately Not a Number. How are the subflow values configured now? In terms of strings or numbers I mean. Can you expand the params object too please?
Do you know how to get a node-red startup log? I don't know how to do that when running in HA, but it is possible. It would be good to see that as there is something very odd going on.

Totally agree that substitution is the issue here! Un fortunately I wouldn't have the first clue why.
Everything is sent to the subflows as a number, changing D_SET to string allows me to use the PID loop.
Here is what you asked for, first one with D_SET as number (bugged) and second with D_SET as string, so running.
I will have a dig around for Node Red startup log. Must be available somewhere.

Also could you show what is coming out of the other subflow, I am interested in whether it is the same params that are not getting substituted.

Sure here is the POT:

Also please right click on the background in the editor, and a context menu should popup, select Show Action List and search for System and you should find Show System Info. Select that and the resulting window has a Copy To Clipboard at the top. Do that and paste it here please. I have started a thread on the node red forum hoping that someone can suggest what might be going on. https://discourse.nodered.org/t/subflow-parameters-not-being-substituted/84321

Here you go. I will follow the other thread as well, thanks!
{
    "report": "diagnostics",
    "scope": "basic",
    "time": {
        "utc": "Fri, 05 Jan 2024 17:16:27 GMT",
        "local": "1/5/2024, 5:16:27 PM"
    },
    "intl": {
        "locale": "en-US",
        "timeZone": "Europe/London"
    },
    "nodejs": {
        "version": "v18.18.2",
        "arch": "x64",
        "platform": "linux",
        "memoryUsage": {
            "rss": 165093376,
            "heapTotal": 107151360,
            "heapUsed": 95435104,
            "external": 20398513,
            "arrayBuffers": 19092419
        }
    },
    "os": {
        "containerised": true,
        "wsl": false,
        "totalmem":<PHONE_NUMBER>,
        "freemem":<PHONE_NUMBER>,
        "arch": "x64",
        "loadavg": [
            0.01,
            0.05,
            0.06
        ],
        "platform": "linux",
        "release": "6.1.63-haos",
        "type": "Linux",
        "uptime": 173839.38,
        "version": "#1 SMP PREEMPT_DYNAMIC Mon Dec  4 15:31:27 UTC 2023"
    },
    "runtime": {
        "version": "3.1.0",
        "isStarted": true,
        "flows": {
            "state": "start",
            "started": true
        },
        "modules": {
            "node-red": "3.1.0",
            "node-red-contrib-actionflows": "2.1.2",
            "node-red-contrib-bigtimer": "2.8.5",
            "node-red-contrib-cast": "0.2.17",
            "node-red-contrib-counter": "0.1.6",
            "node-red-contrib-influxdb": "0.6.1",
            "node-red-contrib-interval-length": "0.0.6",
            "node-red-contrib-modbus": "5.27.2",
            "node-red-contrib-moment": "5.0.0",
            "node-red-contrib-sunevents": "3.1.1",
            "node-red-contrib-time-range-switch": "1.2.0",
            "node-red-dashboard": "3.6.2",
            "node-red-node-base64": "0.3.0",
            "node-red-node-email": "2.1.0",
            "node-red-node-feedparser": "0.3.0",
            "node-red-node-ping": "0.3.3",
            "node-red-node-random": "0.4.1",
            "node-red-node-serialport": "2.0.2",
            "node-red-node-smooth": "0.1.2",
            "node-red-node-suncalc": "1.1.0",
            "node-red-node-twitter": "1.2.0",
            "node-red-contrib-pid": "2.0.0",
            "node-red-contrib-timeprop": "1.0.1",
            "node-red-contrib-simple-gate": "0.5.2",
            "node-red-contrib-bool-gate": "1.0.2",
            "node-red-contrib-queue-gate": "1.5.5",
            "node-red-contrib-message-gate": "0.1.0",
            "node-red-contrib-google-action": "1.2.1",
            "node-red-contrib-google-home-notifier-offline": "1.1.1",
            "node-red-contrib-google-home-notify": "0.0.7",
            "node-red-contrib-google-translate": "0.0.5",
            "node-red-contrib-google-tts": "1.1.1",
            "node-red-contrib-castv2": "4.3.0",
            "node-red-contrib-simplecast": "1.0.8",
            "node-red-contrib-alexa-smart-home": "0.4.68",
            "node-red-contrib-alexa-remote2": "3.10.4",
            "node-red-contrib-alexa-local": "0.3.24",
            "node-red-contrib-persistent-fsm": "1.2.1",
            "node-red-contrib-amazon-echo-oztourer": "0.1.12",
            "node-red-contrib-home-assistant-websocket": "0.59.0"
        },
        "settings": {
            "available": true,
            "apiMaxLength": "UNSET",
            "disableEditor": false,
            "contextStorage": {
                "store": {
                    "module": "localfilesystem"
                },
                "default": {
                    "module": "memory"
                }
            },
            "debugMaxLength": 1000,
            "editorTheme": {
                "projects": {
                    "enabled": false
                }
            },
            "flowFile": "flows.json",
            "mqttReconnectTime": 15000,
            "serialReconnectTime": 15000,
            "socketReconnectTime": "UNSET",
            "socketTimeout": "UNSET",
            "tcpMsgQueueSize": "UNSET",
            "inboundWebSocketTimeout": "UNSET",
            "runtimeState": "UNSET",
            "adminAuth": "UNSET",
            "httpAdminRoot": "/",
            "httpAdminCors": "UNSET",
            "httpNodeAuth": "SET",
            "httpNodeRoot": "/endpoint/",
            "httpNodeCors": "UNSET",
            "httpStatic": "UNSET",
            "httpStaticRoot": "UNSET",
            "httpStaticCors": "UNSET",
            "uiHost": "SET",
            "uiPort": "SET",
            "userDir": "SET",
            "nodesDir": "SET"
        }
    }
}

"node-red": "3.1.0",

There have been a couple of releases since that version (now 3.1.3). None of the issues in the release notes specifically fit your problem, but there have been changes in that area of the code.  Are you able to upgrade to the latest?

I don't think that I can until they release a newer home assistant version. I have updated everything that I can on my HA but Node Red didn't have an update.

Do you have to use HA?  Many node red users think it just complicates things and prefer to use node red to do everything.

I wonder whether one can upgrade node-red within the container.  What does this command show, from the shell inside the container, where you ran the npm command to install the pid node?
npm list node-red
also, for comparison
npm list node-red-contrib-pid

I wonder whether one can upgrade node-red within the container. What does this command show, from the shell inside the container, in the folder where you ran the npm command to install the pid node? npm list node-red also, for comparison npm list node-red-contrib-pid

Do you have to use HA? Many node red users think it just complicates things and prefer to use node red to do everything.

A good point. The short answer is yes, for now....
I had all sorts of ideas for automating things when I first installed Home Assistant - and I also dabbled with OpenHab. I discovered Node-red quite a bit later. The reality is that I don't get much time to play with it so it has pretty much left as is.
Ultimately, it provides me with a simple solution to control the two rooms heating and do a couple of other odds and ends. I don't have the time to go further with it currently or in the foreseeable future, and in fact had I to remove the controllers from the living room lights as I was fed up with them coming on randomly and wasting electricity - and getting stuck on overriding the manual switches, and the dimmers where rubbish anyway as LED lights really don't dim well unless you spend a fortune on them. I spent hours researching why this was happening and tried various things and in the end just gave up (sure maybe I should have also dropped the faceplates off and soldered on some pullup/pulldown resistors and tried that but it had stopped being fun by then!).
The family isn't interested in using it so I just carry on using it to control the heating in those two rooms!
Perhaps I should just get rid of it altogether but there is no point in spending money on new heating controllers when it is installed and working and the one thing that really is useful is being able to pre-heat the outbuilding which takes about an hour so it makes the room much more usable in winter.
Having said all that, I appreciate your work and effort to sort this and there obviously is an issue there, so I am happy to keep bashing away at it when I get chance to help get the problem sorted.
In reality I can just set that one variable to string and use it as it is, so let me know if this isn't important to you and I wont waste any more of your time on it.
Again, thanks for all the effort on this. Let me know what you want to do going forward!

I downgraded one of my systems and am now seeing exactly the same symptom as you are.  I think probably the best thing is just for you to configure the inputs to strings and check in the debug output that there are no NaNs in configParams or params.  Then it should all work as expected.  The ones that seem to problematic are derivative time, output power when disabled and Enable.  Make them all strings.  For Enable set it to string 0 to disable or 1 to enable.  You don't need to change the value you feed in to dynamically enable/disable as that is not affected by the bug.
Once the next release of the node red addon is available then the problem should go away (but it will continue to work with strings anyway.

OK so it turns out to be some issue with older versions of Node Red then?
Thanks for all this, I really appreciate you spending the time to look at it with me!

Investigating the problem has pointed out that I should do better validation of some of the properties, so certainly not a waste of time on my part.


Build fails on enum import

🐞 Bug report
Command (mark with an x)

[ ] new
[x] build
[ ] serve
[ ] test
[ ] e2e
[ ] generate
[ ] add
[ ] update
[ ] lint
[ ] xi18n
[ ] run
[ ] config
[ ] help
[ ] version
[ ] doc

Is this a regression?
No
Description
Build fails when importing an enum. strangely enough, there are other enum that are used and do not fail
🔬 Minimal Reproduction
Use the following repository:
https://github.com/IsraelHikingMap/Site/tree/be645e653d5e1b67fb6afe9cc1243c9a2939ea22
run npm install and npm run build:watch
Uncomment the commented out code here in this service:
https://github.com/IsraelHikingMap/Site/blob/be645e653d5e1b67fb6afe9cc1243c9a2939ea22/IsraelHiking.Web/sources/application/services/geo-location.service.ts#L125
(also in the import section).
--> compilation fails

🔥 Exception or Error

export 'BackgroundGeolocationAccuracy' was not found

🌍 Your Environment

```
     _                      _                 ____ _     ___
    / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
   / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
  / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
 /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
                |___/

Angular CLI: 8.3.22
Node: 10.15.3
OS: win32 x64
Angular: 8.2.14
... animations, common, compiler, compiler-cli, core, forms
... language-service, platform-browser, platform-browser-dynamic
... router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.803.22
@angular-devkit/build-angular     0.803.22
@angular-devkit/build-optimizer   0.803.22
@angular-devkit/build-webpack     0.803.22
@angular-devkit/core              8.3.22
@angular-devkit/schematics        8.3.22
@angular/cdk                      8.2.3
@angular/cli                      8.3.22
@angular/flex-layout              8.0.0-beta.27
@angular/material                 8.2.3
@ngtools/webpack                  8.3.22
@schematics/angular               8.3.22
@schematics/update                0.803.22
rxjs                              6.5.2
typescript                        3.4.5
webpack                           4.39.2
```

Anything else relevant?

This appears to be an issue with the package @ionic-native/background-geolocation.  The enum BackgroundGeolocationAccuracy is declared but never defined.  This is in contrast to the BackgroundGeolocationLocationProvider enum which has a definition.
The type of the desiredAccuracy property also appears to have a number type and not the enum.  This aligns with the example provided at the documentation site for the plugin found here so this may be intentional.

@clydin thanks a lot for the super quick response and investigation!!
I failed to notice that there was a difference between the declare enum and regular enum.
I have opened an issue for the ionic team as well here:
https://github.com/ionic-team/ionic-native/issues/3342
I think that this is not intentional but a bug in their code as I have used the plugin without their wrapper and the plugin offers enums and not numbers (which is better, I believe).
Thanks again!


Harmonize JSON key name convention

Right now, we are using underscores in Python and camelCase in JS, as per standard for these languages.
Naming of keys in JSON dictionary is currently mixed. Since those are mainly exposed to the JS side, my suggestion it to harmonize thus to camelCase.
Note: This will require rerunning all analyses to regenerate the JSON files.
@mcrot - any thought on this?

I had rather kept the underscore syntax of Python everywhere in JSON, because I find it more readable and it underlines that it's the same thing. For me it feels needlessly complicated to change the syntax in the data because we cross a language barrier.

Let's discuss that in person. Maybe I overlook where these names are used in JS and create an inconsistent sight of the code.

It may not be possible to this, as analysis results are JSONs that are stored in the S3. Renaming things would mean recalculating all analyses. We are past the point where this is feasible.

That said, we could automatically mangle snake_case into camelCase when reading JSONs. I'll keep this issue open, but I am unsure if it is worth the effort.

Part of the code is now using camelCase. However, others (for example Bokeh and legacy JSON file) use snake_case. I am not sure we can resolve this issue. We should try to stay truer to the standard coding conventions on either side, but completely resolving These issues will not be possible.


Custom outputted file name

Is it possible to have a fixed outputted file name? For example, I have my main.scss and I want to save it as style.css.

Sorry for the delay, not been very well.

I'm afraid this isn't available, sorry.


Any way to get cookies from shared app group?

In my iOS app, I have a share extension (built using https://github.com/meedan/react-native-share-menu). The main app and share extension are in the same App Group, however when I call CookieManager.get in my extension, it comes up empty, in the main app it works fine. I'm guessing that's because it's trying to get cookies that were stored in the extension but I need it to get cookies stored in the main app.
Since both the main app and extension are in the same app group, they should both have access to the same data. Something like this looks promising: https://github.com/KjellConnelly/react-native-shared-group-preferences However I'd rather not have to load the cookies in the main app and then store them somewhere else just so that the extension has access to it.
Is there any way we could define an app group or something with the cookies component?

hi @kodie
Have you found a solution yet?

Hi @kodie and @thanhnvpk01168, did any of you find a solution to this?

@eakenbor @thanhnvpk01168 Unfortunately, no, I never found a solution. 😞


Track search results when filtered by organisation

When a user filters the search results by organisation, trigger a new GA
event to record the search results on the filtered results page.
Story: https://trello.com/c/NuwDBZEz

This looks good.  Is there some way we could test this?  Perhaps by adding something to test/javascripts/unit/live-search-test.js?

I think this should be done as a callback to the updating of the results rather than an event listener on the inputs. That way we can be sure there are new/updated results before we sent the analytics beacon.

This looks good. Is there some way we could test this?

My initial attempt at this used a callback to run the GA event. Then in the test the callback was replaced for another function, but that felt convoluted. I'll see if I can write a better test for this functionality.

I think this should be done as a callback to the updating of the results rather than an event listener on the inputs

I'll update it to do that :+1:

This now has tests and listens to an event from GOVUK.liveSearch instead of waiting for a checkbox to be checked/unchecked.


Convert KWRealObjectStubTest to ARC

See https://github.com/kiwi-bdd/Kiwi/pull/611#discussion_r29490635.

This would be nice, but not strictly necessary. I'd welcome a PR, in any case, provided all the tests passed.


globalcatalogv1.PricingGet: error unmarshalling property metrics -  property 'charge_unit_quantity'

Describe the bug
When attempting to retrieve the pricing information via GlobalCatalogV1.GetPricing API an unmarshalling exception is thrown :

error unmarshalling globalcatalogv1.PricingGet: error unmarshalling property 'metrics' as []globalcatalogv1.Metrics: error unmarshalling property 'charge_unit_quantity': json: cannot unmarshal number into Go value of type string

The cause seems to be that the payload from the REST API returns the charge_unit_quantity as a integer but the SDK is expecting that field to be a string.
To Reproduce
The sample code from the API doc reproduces the problem with either a kubernetes or postgresql value.  I
also attached this simple application : simple2.go.zip
$ go run simple2.go
panic: error unmarshalling globalcatalogv1.PricingGet: error unmarshalling property 'metrics' as []globalcatalogv1.Metrics: error unmarshalling property 'charge_unit_quantity': json: cannot unmarshal number into Go value of type string

goroutine 1 [running]:
main.main()
	/Users/user/temp/pricing/bug/simple2.go:39 +0x1c8
exit status 2

calling the REST API to retrieve the data
curl -H"Authentication: Bearer $TOKEN" -H"Accept: application/json" https://globalcatalog.cloud.ibm.com/api/v1/public.containers.kubernetes.b1c.32x128:ca-tor28613/pricing
produces a payload like :
{
  "deployment_id": "public.containers.kubernetes.b1c.32x128:ca-tor28613",
  "deployment_location": "ca-tor",
  "deployment_region": "DEFAULT",
  "origin": "pricing_catalog",
  "type": "Paid",
  "i18n": {},
  "starting_price": {},
  "effective_from": "2023-04-01T00:00:00Z",
  "effective_until": "2023-04-30T23:59:59.999Z",
  "metrics": [
    {
      "part_ref": "",
      "metric_id": "D1SL6LL",
      "tier_model": "Step Tier",
      "resource_display_name": "",
      "charge_unit_display_name": "",
      "charge_unit_name": "instance_hours",
      "charge_unit": "Instance-Hours",
      "charge_unit_quantity": 1,  <<<<<<<<<<<<<<<<<<<<< Note this is an integer
      "amounts": [

and the ChangeUnitQuantity in the Metrics definition is a string - see code https://github.com/IBM/platform-services-go-sdk/blob/main/globalcatalogv1/global_catalog_v1.go#L3219
Expected behavior
The application should not panic when retrieving the values.
Must gather (please complete the following information):

SDK Version : 0.35.1 and 0.36.0
Go Version : go1.19.8
Name of service that you're trying to use : globalcatalogv1
Name of operation that you're trying to invoke :PricingGet

This looks like a clear-cut case of the API definition being out of sync with the server implementation.  In the production version of the API definition (https://github.ibm.com/cloud-api-docs/resource-catalog/blob/production/global-catalog.json), the Metrics schema is defined with charge_unit_quantity defined as a string but looks like it should be an integer as that's what the server is returning.
To fix, the responsible service team will need to fix the API to match the server implementation, then re-gen the SDK code in each of the 4 SDKs.

@JohnPaulParkin, we've released a new version of the GC SDK for golang. Can you please verify the fix?

@dubee - thanks for quick turnaround on the fix - I can confirm this addresses the problem that I was hitting and this issue can be closed.


Write a Kotlin program to convert string to consonantcase

Description
Write a Kotlin program to convert string to consonantcase
Consonantcase is a style of writing in which all consonants are converted to uppercase and all vowels are converted to lowercase.
Input  : "hello world"
Output : "HeLLo WoRLD"

How to contribute

Save the solution in ConvertStringToConsonantcase.kt file
Add ConvertStringToConsonantcase.kt file in program/convert-string-to-consonantcase folder

!assign


koji_import: use get_orchestrator_build_logs in plugin

Make use of osbs-client's new get_orchestrator_build_logs api to acquire
orchestrator and per-arch log files when importing a build.
Signed-off-by: Jarod Wilson<EMAIL_ADDRESS>

So I had a suspicion I might not be putting this stuff in the right place. Not quite sure yet where to shoehorn this into koji_import at though -- possibly into get_output()?

Yes, get_output() is probably as good a place as any.

merge conflicts

Looks great! Needs some squashing, and still has '[wip]' in the PR title.

All squashed and fixed up to remove the [wip] prefixes.

I'm tempted to think this doesn't need release notes update. Let me know otherwise.


FEAT: Archive material

added old profile XML documents; and
added previous PDF specification documents.

Aren't we missing a profile and pdf version 2.0.3?

So officially we didn't release one.


Base64file uploading to cloudinary is not working

`
func uploadImageToCloudinary(base64str, name string) (*uploader.UploadResult, error) {
cloudinaryURL := os.Getenv("CLOUDINARY_URL")
cloudinaryClient, err := cloudinary.NewFromURL(cloudinaryURL)
if err != nil {
return nil, err
}
formattedString := fmt.Sprintf("data:image/jpeg;base64,%s", base64str)
uploadParams := uploader.UploadParams{
	PublicID:       name,
	UseFilename:    true,
	UniqueFilename: true,
}

// Upload the Base64 encoded content
result, err := cloudinaryClient.Upload.Upload(context.Background(), formattedString, uploadParams)
if err != nil {
	return nil, err
}

return &result, nil

}
`
I tried to do like this and also I tried many but just not working

Hi @bete7512 ,
Thanks for contacting Cloudinary.
I used the below code to upload and it worked fine. Can you please let us know what error are you facing?

func credentials() (*cloudinary.Cloudinary, context.Context) {
// Add your Cloudinary credentials, set configuration parameter
// Secure=true to return "https" URLs, and create a context
//===================
cld, _ := cloudinary.NewFromParams("", "", "")
cld.Config.URL.Secure = true
ctx := context.Background()
return cld, ctx
}

func uploadBase64Image(cld *cloudinary.Cloudinary, ctx context.Context) {
resp, err :=
cld.Upload.Upload(ctx, "data:image/png;base64,",
uploader.UploadParams{})
if err != nil {
fmt.Println("error")
}
// Log the delivery URL
fmt.Println("2. Upload an image\nDelivery URL:", resp.SecureURL)
}

Thanks,
Sree

Can u please assign this to me?

Working on this.


feat: new pattern

here's a new pattern that I think is nice and clean.
It takes advantage of psygnals new support for threads to leave it to the user to worry about where the callback is called (see the example)

hey @kephale  ... you still using this library?  I did like this final pattern and might want to use it elsewhere, so let me know if i should leave it here or put it somewhere else.  hope all is well!

I'm very slow on this repo at the moment. However, I'm actually needing to use these tools more now (to help with annotation curation), so I'm optimistic about spending more time here in the near future.


Show in visualisation whether sleeplog was used

At the moment visualisation assumes that sleeplog was used, which is confusing to user when sleep log was actually skipped.

Update: I have been working on this today. Made some progress, but sleep diary plots (page 2 of the pdf) remain problematic when there is missing data. Next step: Rewrite those plots to be more in line with the objects used for the other plots.


Add PostDeployment fields to metadata

This PR relevant to Playbook Templates Tab
Proposed Changes

For playbooks which have instructions after deployment, move these instructions from "prerequisites" to "postDeployment".
Delete duplicate screenshot and rename to dark/light screenshots in IdentityProtectionTeamsBotResponse playbook

@anki-narravula Can you please check and approve?

HI @lior-tamir  - Looks like this is very old PR. I am not sure you still want to merge these changes. If we need to merge, there are couple of conflicts that need to be resolved. Can you please take care. Thank you.

Hey @lior-tamir , will you please resolve the conflicts, thanks.

Hey @lior-tamir , will you please resolve the conflicts, thanks.

Hey @lior-tamir , will you please resolve the conflicts, thanks.

Hey @lior-tamir, We wanted to check on the status of this PR Add PostDeployment fields to metadata #3155. It is pending from more than 60 days. Let us know if any assistance is required for this PR. Per our standard operating procedures if no response is received in the next 7 business days we will close this PR. Thank you for your cooperation.

Hi @lior-tamir  Since we have not received response from last 7 days, we are closing your PR Add PostDeployment fields to metadata #3155 per our standard operating procedures. If you still need support for this issue you can re-open the PR at any time.
If you do re-open, we simply request that you ensure the PR has response to the last request. Thank you for your cooperation.


Update packages and close session correctly when still on event loop

Swift package is failing to work well (swift package update) as version requirements of cross dependencies are not compatible.
https://github.com/Kitura/SwiftyRequest/compare/master...mbarnach:SwiftyRequest:master

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.2 out of 3 committers have signed the CLA.:white_check_mark: lahariganti:white_check_mark: mbarnach:x: djones6You have signed the CLA already but the status is still pending? Let us recheck it.


erlang: added dirty scheduler support

Motivation for this change
Erlang R18 should be able to be compiled with dirty schedulers enabled, removing the scheduler stall that happens with NIFs in Erlang
Things done

[x] Tested using sandboxing
(nix.useSandbox on NixOS,
or option build-use-sandbox in nix.conf
on non-NixOS)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] Linux

[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[x] Tested execution of all binary files (usually in ./result/bin/)
[x] Fits CONTRIBUTING.md.

cc @the-kenny

This didn't cause any rebuilds right?

Are they enabled by default on 19?

@LnL7 , this shouldn't cause any rebuilds. @binarin , they are not. For this, I've opened up two other pull requests: one for R17, and one for R19. The dirty schedulers were introduced in R17

I should really finish #17240 sometime 😃


/user/friends/watching/{username} endpoint documentation says "Check if :username: is watching you" when it's actually the other way around

Can we get an API endpoint for what it actually says? Check if :username: is watching you.

up.
The only solution I can thing about is use the API endpoint /user/friends/search.

Closing this ticket due to its age. If this is still an issue, please feel free to reopen. Thanks!


Docs.MS Release Updates for azure_mgmt_storage

Update docs metadata and targeting for release of azure_mgmt_storage

Docs Build status updates of commit 5056c21:
:clock10: Full build: the average full build time is 174 min(s) 38 sec(s), this is based on the last 551 build(s) for this repository.

Docs Build status updates of commit 5056c21:
:clock10: Full build: the average full build time is 174 min(s) 38 sec(s), this is based on the last 551 build(s) for this repository.

Docs Build status updates of commit 5056c21:
:warning: Validation status: warnings

File
Status
Preview URL
Details

docs-ref-services/mgmt-storage-readme.md
:warning:Warning
View (azure-python)
Details

docs-ref-services/mgmt-storage-readme.md

Line 21: [Warning-multiple-h1s] Multiple H1s({0}) are not allowed. You can only have one top-level heading.
Line 27: [Warning-multiple-h1s] Multiple H1s({0}) are not allowed. You can only have one top-level heading.

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
Note: Your PR may contain errors or warnings unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching in the Docs contributor and Admin GuideSee the frequently asked questionsPost your question in the Docs support channel


Add more maintainers

It's evident by the many PRs that there's great enthusiasm in adding to this list. The current maintainers have done a great job, as this list has been a great resource that myself and many others turn to, again and again.
However, the long backlog, and lack of merges (only 1 in the past month) is also a sign that the current maintainers need a hand, and as such, I'd like to propose that more be added to spread the workload.
I recently attended VueConf Toronto, and the core team that was present really encouraged the community to contribute and participate. In the spirit of doing so, I'd like to volunteer to be a maintainer here, as have others. I would happily lend a few hours a week to assisting this project.
Please let us know how the community can help @kazupon @LinusBorg.

I'd also like to volunteer to help maintain this repo as @visnaut already suggested.
Let me know if there is anything I can do to help @LinusBorg @kazupon.

Hi! You can also help with either adding packages to https://awesomejs.dev/ or contributing to https://github.com/Akryum/awesomejs.dev (which replaces vue-curated).

I would like to help with the maintenance of this project.

@Akryum  Hi, I would like to help this repository

I can make some time to go over PRs as well

Who are the maintainers? It looks like no pr's are merged anymore, and I think some are closed by contributors due to lack of response , example: https://github.com/vuejs/awesome-vue/pull/3123

@LinusBorg @kazupon @Akryum ping ping ping

Okay, so here's the deal:

We don't really have the capacity to track this repo reliably anymore - obviously.
We realize we need some suport from y'all to make this go forward.
At the same time we are not comfortable giving merge privileges to people who we don't know well enough, yet.

So here's what we propose:

Those wanting to help moderate this, please speak up here again.
Start reviewing PRs, check wether they fulfill the criteria for being on the list (laid on here).
Kindly ask contributors whose PRs don't match those criteria to update them accordingly.
Approve PRs that do match the criteria
Ping us in said PRs and we will merge them.

Once you have shown yourself to be a nicer and reliable person we will give you merge permission so you can continue to do this work on your own.

At the same time we want to make something clear: We think the usefulness of this form of "awesome-list" declines after a certain scale of the ecosystem has been reached, and we think we are there already, pretty much.
So we think that in the future, such a list might be better handled on e.g. https://www.awesomejs.dev - we could put you there as moderators checking contributions as well.
But we aren't sure when and how we should deprecate this list right here in favour of said other tool, so options are welcome.

Those wanting to help moderate this, please speak up here again.

I am ready to help.

I strongly disagree with some of your statements.

We think the usefulness of this form of "awesome-list" declines after a certain scale of the ecosystem has been reached, and we think we are there already, pretty much.

As the ecosystem grows its more important to have an awesome list to be able to quickly get an overview of real good content in the community

So we think that in the future, such a list might be better handled on e.g. https://www.awesomejs.dev - we could put you there as moderators checking contributions as well.

I think the audience is mostly the open source community and developers in general. Those are familiar with github and the https://github.com/sindresorhus/awesome list. I think its important to keep it this way (for reasons discussed enough in the awesome repo) and not make it external. (point in case, the external link gives a 404 right now).

Thank you for the thoughtful response, @LinusBorg

At the same time we want to make something clear: We think the usefulness of this form of "awesome-list" declines after a certain scale of the ecosystem has been reached, and we think we are there already, pretty much.
So we think that in the future, such a list might be better handled on e.g. https://www.awesomejs.dev - we could put you there as moderators checking contributions as well.
But we aren't sure when and how we should deprecate this list right here in favour of said other tool, so options are welcome.

If this is how the maintainers feel, I'd be more in favour of just ripping off the band-aid, placing a deprecation notice on this repo, and moving all efforts to AwesomeJS.
However, I'd like to point out that of the three main categories in this list, Resources, Projects Using Vue.js, and Components & Libraries, AwesomeJS only covers the latter. And in that, it excels.
But I would argue that this list is very important for gauging the overall health of the ecosystem; not just the availability of packages, but for the training available, and for name-checking other successful uses of Vue in the real world; information that is hard to come by otherwise.
With that in mind, perhaps we can consider deprecating the Components & Libraries list, point people to AwesomeJS instead, and focus on the other sections of this list. I think that would provide a good balance of pointing people to the best resources available, and not duplicating maintainers' efforts.

Those wanting to help moderate this, please speak up here again.

Yes, I'm in 🙋🏻♂

(point in case, the external link gives a 404 right now).

@Jogai Try https://awesomejs.dev without the www.. Though I would agree that it should just work or redirect regardless.

@LinusBorg  sketched a sample checklist of criteria by which PR can be closed.
Checklist

[ ] time: not updated for more than 6 months
[ ] category: not in its category
[ ] lists: not the last on the list
[ ] docs: no documentation
[ ] docs: non-english documentation
[ ] project: dead project
[ ] project: does not accept donat
[ ] site: site with errors
[ ] site: not actively using vuejs
[ ] site: not original

more about CONTRIBUTING

It seems to me that you can give a chance for old PR sizes of 1 week, after which you can close the task if there is no movement on it.
It would be great to be able to put labels in order to mark already viewed or pending PR decisions.

@LinusBorg In relation to PR, we can use templates with checklist as I have done in the project https://github.com/post/post-static/blob/master/.github/pull_request_template.md
Regarding issue you can make blanks as in https://github.com/Scrum/slims/issues/new/choose

@LinusBorg  https://github.com/vuejs/awesome-vue/pull/3224

@LinusBorg @Akryum

So we think that in the future, such a list might be better handled on e.g. https://www.awesomejs.dev - we could put you there as moderators checking contributions as well.

I am ready to assist in the development of this project, naturally only after that I will do all the work on the current project.
Presumably I will create a structured date file with a list from the current project that can be used in https://www.awesomejs.dev

However, I'd like to point out that of the three main categories in this list, Resources, Projects Using Vue.js, and Components & Libraries, AwesomeJS only covers the latter. And in that, it excels.

We discussed redirecting effort to https://github.com/dobromir-hristov/vuecommunity about the sections other than Components & Libraries.

@Jogai Try https://awesomejs.dev without the www.. Though I would agree that it should just work or redirect regardless.

This is fixed! 🔧

I am ready to assist in the development of this project, naturally only after that I will do all the work on the current project.

Awesome! I don't have contributing documentation available yet though.

Presumably I will create a structured date file with a list from the current project that can be used in https://www.awesomejs.dev

This could help migrating data to AwesomeJS

Those wanting to help moderate this, please speak up here again.

I'd still like to help maintain this repo as already suggested @Akryum @LinusBorg.

@Akryum What do you think about this data format?
[
  {
    name: 'Level 1',
    children: [{
      name: 'Level 1.1',
      children: [{
        name: 'text link 1',
        path: 'https://url-link-1'
      },{
        name: 'text link 2',
        path: 'https://url-link-2'
      }]
    },{
      name: 'Level 1.2',
      description: '*Description leve 1.2*',
      children: [{
        name: 'text link 1',
        path: 'https://url-link-1'
      },{
        name: 'text link 2',
        path: 'https://url-link-2'
      }]
    }]
  }
]

@ajtruex As explained, start reviewing PRs and work with @Scrum to get them merged.
@Scrum you can ping me when you think I can add him so you have a backup / collaborator to share workload with.

@LinusBorg Accepted

@LinusBorg @Akryum Hi, I created an example of how to automatically generate data and readme in the format described above
let me know what you think about it

I'd also like to help @LinusBorg
I am constantly exploring the Vue.js ecosystem and constantly finding new things.
I would really like to add them to here & help much more people.
Thanks!

So we think that in the future, such a list might be better handled on e.g. https://awesomejs.dev - we could put you there as moderators checking contributions as well.

@LinusBorg @Akryum Hi, can I be added to the moderators for checking contributions?

This could help migrating data to AwesomeJS

In relation to this, I realized that it is necessary to develop api for the possibility of adding contributions

@LinusBorg Hi, unfortunately my action is not enough rights, is there any way to expand it?
https://github.com/vuejs/awesome-vue/runs/561916904?check_suite_focus=true
https://github.com/vuejs/awesome-vue/runs/557150040?check_suite_focus=true

@LinusBorg ping

I was going to suggest either JSONify'ing the markdown, or MD'ing the JSON of awesome projects. Could that make this far easier to maintain? To have the data, as it comes in populate the markdown. Criteria for auto-population could include a variety of metrics, such as Github star count, download count, awesomejs.dev bookmark count
I think the truth is, the Vue community will just keep on expanding and one can expect the list of awesome projects/components/libraries to grow at a pace that's faster than what a single human can keep up with manually. Suppose we encounter a "good problem": 1 billion more people want to use Vue tomorrow...pat on the back but...1% want to add awesome libraries...so a maintainer would manually fill out 1% of 1 billion items.

The bigger awesome lists do have some stuff in place to keep it manageable. Maybe thats needed, but the format of the list isnt an issue for other lists.

@richardeschloss Hi

if I could tap into awesomedev's API

https://awesomejs.dev/api/playground

@Scrum Yes! Thanks!

@LinusBorg Did I prove myself yet to be nice and reliable? Because I would like to get added as contributor in that case...

@LinusBorg Did I prove myself yet to be nice and reliable? Because I would like to get added as contributor in that case...

@LinusBorg I support this candidate, very useful and reliable.

Then welcome, and thanks for your work 👍🏻


chore: bdd-nh-1586278650 to 0.0.1

chore: Promote bdd-nh-1586278650 to version 0.0.1

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approvers:
If they are not already assigned, you can assign the PR to them by writing /assign  in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


My Bins is empty on local install

Hello.
I install local version of jsbin, start, register and login. Create new bin, save it. But My bins is empty…

Since I ran into the same problem today: All you need to do is delete jsbin.sqlite and then run jsbin again.


Support for live substitution

https://asciinema.org/a/92207

Tried to do that once, neovim would not let me modify the text of the buffer while the user is typing on the input.

How about using a virtual text ? 🤔

like on top of the original text? Or what do you have in mind?

like on top of the original text? Or what do you have in mind?

Yeah, virtual text can write over original text, with highlights and such too.
Basically my target is to replicate live substitution like : substitute command.

can virtual text move the rest of the text in a "natural way"? If I change awesome with awe will the rest of the line adapt to that?

Well, didn't think about it. I have a way, but it's kind of hacky.
Fetch the whole line, replace the text and then set that as virtual text as a whole line.
Probably highlights will be broken.

Fair enough.


Simplify logging logic

Simplify logging logic

Can you create a JIRA on https://issues.apache.org/jira/browse/HDFS and change the title of this PR  to link the JIRA here? See https://wiki.apache.org/hadoop/GithubIntegration for more information.
For the code, the DataNode logging has switched to slf4j. Please use placeholders and guard statement like if (LOG.isTraceEnabled()) is unnecessary. Please refer to https://issues.apache.org/jira/browse/HDFS-8971 for examples.


Drop name collision avoidance. Tweak ClassName API.

Name collision avoidance is difficult to do properly at this level
of abstraction. In particular, if we pick a different name for
something, it's awkward to surface that to the caller.
Also tweak the ClassName API. Use a single list for all simple
names, even the class' own simple name. This makes some of the
calling code simpler.

Just so you know, collision avoidance is absolutely critical to implementing ‡ and there must be equivalent functionality before this rewrite could be used there.  Do you have a plan for how we'll be able to handle this?  (And FWIW, surfacing it to the caller seemed pretty straightforward to me…)


Support for GeyserMC Skin API (Bedrock Edition)

I think if you guys added support for GeyserMC/Bedrock edition skins that would be incredibly pog. I have a way of getting the skins from bedrock edition, but I don't know how to render it myself through crafatar which is what I am trying to figure out.
To get Geyser/Bedrock Edition skins
Step 1: Using their api "https://api.geysermc.org/v1/skin/xuid" you can grab the texture id. (Example Link: https://api.geysermc.org/v1/skin/2535449110338826)
Note: Their api spits out some more info, and the "Texture id" is in the middle of it. (Here is an example id: "texture_id":"91ccdfb82d691076415bdac4d727046d2b6c047399ce86bc9dff3842c3e6e4ef")
Step 2: take the ID from the geyser api and put it into http://textures.minecraft.net/texture/ID
(Example: http://textures.minecraft.net/texture/91ccdfb82d691076415bdac4d727046d2b6c047399ce86bc9dff3842c3e6e4ef)
From there you could see the bedrock player skin.

There's a lot more people needing this now more than ever. If this was part of crafatar that would be extremely helpful for a lot of server owners/devs. (Approximately 12000 servers with geyser.) . Best luck to you if you attempt to try to add this to the crafatar API. If you want their discord to ask the devs questions or if you need something from them please feel free to ask. Good luck!

This is basically the same feature request as #54. I'll close this as a duplicate so we can track the feature there.


Get full name from contacts in conversation header

Parse and nicely display the phone number on mobile. Include a fake contact name.
Issue: Y2K-77

cc @keybase/y2ksquad this is ready. Added go changes include:

Make SyncedContactList available on G (by @zapu)
Find & plumb contact name through InboxUIItem to conversation header

Thanks @jzila + @mmaxim, addressed feedback PTAL


feat: catch-all route

Insight – this is a generalization of "child routes." I should be able to abstract some of that process accordingly.


Delete oldest x number of versions of a package but keep a minimum

Honestly this could probably be more easily accomplished with implementing https://github.com/actions/delete-package-versions/issues/5 (keep only N latest versions of package) but how would I keep a minimum number of versions of a package?
If I just use the example:
- uses: actions/delete-package-versions@v1
  with:
    package-name: 'test-package'
    num-old-versions-to-delete: 10

This would delete the 10 oldest versions. But what if I only have 8 versions?
What if I want to at least keep the last three versions around?

For people subscribed to this thread, someone already wrote a PR implementing this: https://github.com/actions/delete-package-versions/pull/29

My use case is always to keep few versions and never to delete a fixed number of versions whatever remains.
Then I have used https://github.com/marketplace/actions/remove-package-versions-from-github-packages although it runs on Linux only.

My use case is always to keep few versions and never to delete a fixed number of versions whatever remains.
Then I have used https://github.com/marketplace/actions/remove-package-versions-from-github-packages although it runs on Linux only.

This should be implemented in the latest version of this action. I think this can be closed.