Flooding of the log file


#1

I just noticed that an error in the emoncms server address leads to a flooding of the log with “get input list failed, code: -4”. Guess this is not intentional.

5/21/18 20:10:45z EmonService: get input list failed, code: -4
5/21/18 20:11:12z EmonService: get input list failed, code: -4
5/21/18 20:11:39z EmonService: get input list failed, code: -4
5/21/18 20:12:05z EmonService: get input list failed, code: -4
5/21/18 20:12:32z EmonService: get input list failed, code: -4
5/21/18 20:12:59z EmonService: get input list failed, code: -4
5/21/18 20:13:26z EmonService: get input list failed, code: -4
5/21/18 20:13:53z EmonService: get input list failed, code: -4
5/21/18 20:14:20z EmonService: get input list failed, code: -4
5/21/18 20:14:46z EmonService: get input list failed, code: -4
5/21/18 20:15:15z EmonService: get input list failed, code: -4
5/21/18 20:15:42z EmonService: get input list failed, code: -4
5/21/18 20:16:08z EmonService: get input list failed, code: -4
5/21/18 20:16:35z EmonService: get input list failed, code: -4
5/21/18 20:17:01z EmonService: get input list failed, code: -4
5/21/18 20:17:27z EmonService: get input list failed, code: -4
5/21/18 20:17:54z EmonService: get input list failed, code: -4
5/21/18 20:18:20z EmonService: get input list failed, code: -4
5/21/18 20:18:47z EmonService: get input list failed, code: -4
5/21/18 20:19:13z EmonService: get input list failed, code: -4
5/21/18 20:19:40z EmonService: get input list failed, code: -4
5/21/18 20:20:07z EmonService: get input list failed, code: -4
5/21/18 20:20:33z EmonService: get input list failed, code: -4
5/21/18 20:20:59z EmonService: get input list failed, code: -4
5/21/18 20:21:25z EmonService: get input list failed, code: -4
5/21/18 20:21:51z EmonService: get input list failed, code: -4
5/21/18 20:22:18z EmonService: get input list failed, code: -4
5/21/18 20:22:44z EmonService: get input list failed, code: -4
5/21/18 20:23:11z EmonService: get input list failed, code: -4
5/21/18 20:23:37z EmonService: get input list failed, code: -4
5/21/18 20:24:04z EmonService: get input list failed, code: -4
5/21/18 20:24:30z EmonService: get input list failed, code: -4
5/21/18 20:24:56z EmonService: get input list failed, code: -4
5/21/18 20:25:22z EmonService: get input list failed, code: -4
5/21/18 20:25:49z EmonService: get input list failed, code: -4
5/21/18 20:26:16z EmonService: get input list failed, code: -4
5/21/18 20:26:42z EmonService: get input list failed, code: -4
5/21/18 20:27:09z EmonService: get input list failed, code: -4
5/21/18 20:27:35z EmonService: get input list failed, code: -4
5/21/18 20:28:02z EmonService: get input list failed, code: -4
5/21/18 20:28:28z EmonService: get input list failed, code: -4
5/21/18 20:28:54z EmonService: get input list failed, code: -4
5/21/18 20:29:20z EmonService: get input list failed, code: -4
5/21/18 20:29:47z EmonService: get input list failed, code: -4
5/21/18 20:30:14z EmonService: get input list failed, code: -4
5/21/18 20:30:41z EmonService: get input list failed, code: -4
5/21/18 20:31:08z EmonService: get input list failed, code: -4
5/21/18 20:31:35z EmonService: get input list failed, code: -4
5/21/18 20:32:02z EmonService: get input list failed, code: -4
5/21/18 20:32:29z EmonService: get input list failed, code: -4
5/21/18 20:32:56z EmonService: get input list failed, code: -4
5/21/18 20:33:23z EmonService: get input list failed, code: -4
5/21/18 20:33:50z EmonService: get input list failed, code: -4
5/21/18 20:34:17z EmonService: get input list failed, code: -4
5/21/18 20:34:44z EmonService: get input list failed, code: -4
5/21/18 20:35:11z EmonService: get input list failed, code: -4
5/21/18 20:35:38z EmonService: get input list failed, code: -4
5/21/18 20:36:05z EmonService: get input list failed, code: -4
5/21/18 20:36:32z EmonService: get input list failed, code: -4
5/21/18 20:36:58z EmonService: get input list failed, code: -4
5/21/18 20:37:24z EmonService: get input list failed, code: -4
5/21/18 20:37:51z EmonService: get input list failed, code: -4
5/21/18 20:38:17z EmonService: get input list failed, code: -4
5/21/18 20:38:44z EmonService: get input list failed, code: -4
5/21/18 20:39:11z EmonService: get input list failed, code: -4
5/21/18 20:39:38z EmonService: get input list failed, code: -4
5/21/18 20:40:05z EmonService: get input list failed, code: -4
5/21/18 20:40:32z EmonService: get input list failed, code: -4
5/21/18 20:40:59z EmonService: get input list failed, code: -4
5/21/18 20:41:26z EmonService: get input list failed, code: -4
5/21/18 20:41:53z EmonService: get input list failed, code: -4
5/21/18 20:42:20z EmonService: get input list failed, code: -4
5/21/18 20:42:47z EmonService: get input list failed, code: -4
5/21/18 20:43:14z EmonService: get input list failed, code: -4
5/21/18 20:43:41z EmonService: get input list failed, code: -4
5/21/18 20:44:08z EmonService: get input list failed, code: -4
5/21/18 20:44:35z EmonService: get input list failed, code: -4
5/21/18 20:45:02z EmonService: get input list failed, code: -4
5/21/18 20:45:30z EmonService: get input list failed, code: -4
5/21/18 20:45:56z EmonService: get input list failed, code: -4
5/21/18 20:46:23z EmonService: get input list failed, code: -4
5/21/18 20:46:49z EmonService: get input list failed, code: -4
5/21/18 20:47:16z EmonService: get input list failed, code: -4
5/21/18 20:47:43z EmonService: get input list failed, code: -4
5/21/18 20:48:10z EmonService: get input list failed, code: -4
5/21/18 20:48:37z EmonService: get input list failed, code: -4
5/21/18 20:49:04z EmonService: get input list failed, code: -4
5/21/18 20:49:30z EmonService: get input list failed, code: -4
5/21/18 20:49:57z EmonService: get input list failed, code: -4
5/21/18 20:50:23z EmonService: get input list failed, code: -4
5/21/18 20:50:50z EmonService: get input list failed, code: -4
5/21/18 20:51:17z EmonService: get input list failed, code: -4
5/21/18 20:51:43z EmonService: get input list failed, code: -4
5/21/18 20:52:09z EmonService: get input list failed, code: -4
5/21/18 20:52:35z EmonService: get input list failed, code: -4
5/21/18 20:53:01z EmonService: get input list failed, code: -4
5/21/18 20:53:27z EmonService: get input list failed, code: -4
5/21/18 20:53:53z EmonService: get input list failed, code: -4
5/21/18 20:54:19z EmonService: get input list failed, code: -4
5/21/18 20:54:45z EmonService: get input list failed, code: -4
5/21/18 20:55:12z EmonService: get input list failed, code: -4
5/21/18 20:55:38z EmonService: get input list failed, code: -4
5/21/18 20:56:05z EmonService: get input list failed, code: -4
5/21/18 20:56:32z EmonService: get input list failed, code: -4
5/21/18 20:56:59z EmonService: get input list failed, code: -4
5/21/18 20:57:26z EmonService: get input list failed, code: -4
5/21/18 20:57:53z EmonService: get input list failed, code: -4
5/21/18 20:58:20z EmonService: get input list failed, code: -4
5/21/18 20:58:47z EmonService: get input list failed, code: -4
5/21/18 20:59:15z EmonService: get input list failed, code: -4
5/21/18 20:59:42z EmonService: get input list failed, code: -4
5/21/18 21:00:09z EmonService: get input list failed, code: -4
5/21/18 21:00:36z EmonService: get input list failed, code: -4
5/21/18 21:01:03z EmonService: get input list failed, code: -4
5/21/18 21:01:30z EmonService: get input list failed, code: -4
5/21/18 21:01:57z EmonService: get input list failed, code: -4
5/21/18 21:02:24z EmonService: get input list failed, code: -4
5/21/18 21:02:50z EmonService: get input list failed, code: -4
5/21/18 21:03:17z EmonService: get input list failed, code: -4
5/21/18 21:03:43z EmonService: get input list failed, code: -4
5/21/18 21:04:10z EmonService: get input list failed, code: -4
5/21/18 21:04:37z EmonService: get input list failed, code: -4
5/21/18 21:05:04z EmonService: get input list failed, code: -4
5/21/18 21:05:31z EmonService: get input list failed, code: -4
5/21/18 21:05:58z EmonService: get input list failed, code: -4
5/21/18 21:06:25z EmonService: get input list failed, code: -4
5/21/18 21:06:52z EmonService: get input list failed, code: -4
5/21/18 21:07:18z EmonService: get input list failed, code: -4
5/21/18 21:07:45z EmonService: get input list failed, code: -4
5/21/18 21:08:12z EmonService: get input list failed, code: -4
5/21/18 21:08:39z EmonService: get input list failed, code: -4
5/21/18 21:09:06z EmonService: get input list failed, code: -4
5/21/18 21:09:33z EmonService: get input list failed, code: -4
5/21/18 21:09:59z EmonService: get input list failed, code: -4
5/21/18 21:10:26z EmonService: get input list failed, code: -4
5/21/18 21:10:53z EmonService: get input list failed, code: -4
5/21/18 21:11:20z EmonService: get input list failed, code: -4
5/21/18 21:11:47z EmonService: get input list failed, code: -4
5/21/18 21:12:13z EmonService: get input list failed, code: -4
5/21/18 21:12:40z EmonService: get input list failed, code: -4
5/21/18 21:13:07z EmonService: get input list failed, code: -4
5/21/18 21:13:34z EmonService: get input list failed, code: -4
5/21/18 21:14:01z EmonService: get input list failed, code: -4
5/21/18 21:14:27z EmonService: get input list failed, code: -4
5/21/18 21:14:54z EmonService: get input list failed, code: -4
5/21/18 21:15:21z EmonService: get input list failed, code: -4
5/21/18 21:15:48z EmonService: get input list failed, code: -4
5/21/18 21:16:15z EmonService: get input list failed, code: -4
5/21/18 21:16:42z EmonService: get input list failed, code: -4
5/21/18 21:17:09z EmonService: get input list failed, code: -4
5/21/18 21:17:36z EmonService: get input list failed, code: -4
5/21/18 21:18:03z EmonService: get input list failed, code: -4
5/21/18 21:18:30z EmonService: get input list failed, code: -4
5/21/18 21:18:57z EmonService: get input list failed, code: -4
5/21/18 21:19:24z EmonService: get input list failed, code: -4
5/21/18 21:19:51z EmonService: get input list failed, code: -4
5/21/18 21:20:18z EmonService: get input list failed, code: -4
5/21/18 21:20:44z EmonService: get input list failed, code: -4
5/21/18 21:21:10z EmonService: get input list failed, code: -4
5/21/18 21:21:36z EmonService: get input list failed, code: -4
5/21/18 21:22:02z EmonService: get input list failed, code: -4
5/21/18 21:22:28z EmonService: get input list failed, code: -4
5/21/18 21:22:55z EmonService: get input list failed, code: -4
5/21/18 21:23:22z EmonService: get input list failed, code: -4
5/21/18 21:23:48z EmonService: get input list failed, code: -4
5/21/18 21:24:14z EmonService: get input list failed, code: -4
5/21/18 21:24:40z EmonService: get input list failed, code: -4
5/21/18 21:25:06z EmonService: get input list failed, code: -4
5/21/18 21:25:32z EmonService: get input list failed, code: -4
5/21/18 21:25:58z EmonService: get input list failed, code: -4
5/21/18 21:26:24z EmonService: get input list failed, code: -4
5/21/18 21:26:50z EmonService: get input list failed, code: -4
5/21/18 21:27:16z EmonService: get input list failed, code: -4
5/21/18 21:27:42z EmonService: get input list failed, code: -4
5/21/18 21:28:09z EmonService: get input list failed, code: -4
5/21/18 21:28:35z EmonService: get input list failed, code: -4
5/21/18 21:29:02z EmonService: get input list failed, code: -4
5/21/18 21:29:28z EmonService: get input list failed, code: -4
5/21/18 21:29:54z EmonService: get input list failed, code: -4
5/21/18 21:30:23z EmonService: get input list failed, code: -4
5/21/18 21:30:49z EmonService: get input list failed, code: -4
5/21/18 21:31:15z EmonService: get input list failed, code: -4
5/21/18 21:31:41z EmonService: get input list failed, code: -4
5/21/18 21:32:08z EmonService: get input list failed, code: -4
5/21/18 21:32:34z EmonService: get input list failed, code: -4
5/21/18 21:33:00z EmonService: get input list failed, code: -4
5/21/18 21:33:26z EmonService: get input list failed, code: -4
5/21/18 21:33:52z EmonService: get input list failed, code: -4
5/21/18 21:34:18z EmonService: get input list failed, code: -4
5/21/18 21:34:44z EmonService: get input list failed, code: -4
5/21/18 21:35:10z EmonService: get input list failed, code: -4
5/21/18 21:35:36z EmonService: get input list failed, code: -4
5/21/18 21:36:03z EmonService: get input list failed, code: -4
5/21/18 21:36:29z EmonService: get input list failed, code: -4
5/21/18 21:36:56z EmonService: get input list failed, code: -4
5/21/18 21:37:23z EmonService: get input list failed, code: -4
5/21/18 21:37:49z EmonService: get input list failed, code: -4
5/21/18 21:38:16z EmonService: get input list failed, code: -4
5/21/18 21:38:42z EmonService: get input list failed, code: -4
5/21/18 21:39:08z EmonService: get input list failed, code: -4
5/21/18 21:39:34z EmonService: get input list failed, code: -4
5/21/18 21:40:00z EmonService: get input list failed, code: -4
5/21/18 21:40:26z EmonService: get input list failed, code: -4
5/21/18 21:40:52z EmonService: get input list failed, code: -4
5/21/18 21:41:18z EmonService: get input list failed, code: -4
5/21/18 21:41:44z EmonService: get input list failed, code: -4
5/21/18 21:42:10z EmonService: get input list failed, code: -4
5/21/18 21:42:37z EmonService: get input list failed, code: -4
5/21/18 21:43:03z EmonService: get input list failed, code: -4
5/21/18 21:43:30z EmonService: get input list failed, code: -4
5/21/18 21:43:56z EmonService: get input list failed, code: -4
5/21/18 21:44:23z EmonService: get input list failed, code: -4
5/21/18 21:44:49z EmonService: get input list failed, code: -4
5/21/18 21:45:15z EmonService: get input list failed, code: -4
5/21/18 21:45:42z EmonService: get input list failed, code: -4
5/21/18 21:46:08z EmonService: get input list failed, code: -4
5/21/18 21:46:34z EmonService: get input list failed, code: -4
5/21/18 21:47:01z EmonService: get input list failed, code: -4
5/21/18 21:47:27z EmonService: get input list failed, code: -4
5/21/18 21:47:53z EmonService: get input list failed, code: -4
5/21/18 21:48:19z EmonService: get input list failed, code: -4
5/21/18 21:48:45z EmonService: get input list failed, code: -4
5/21/18 21:49:11z EmonService: get input list failed, code: -4
5/21/18 21:49:37z EmonService: get input list failed, code: -4
5/21/18 21:50:03z EmonService: get input list failed, code: -4
5/21/18 21:50:29z EmonService: get input list failed, code: -4
5/21/18 21:50:56z EmonService: get input list failed, code: -4
5/21/18 21:51:22z EmonService: get input list failed, code: -4
5/21/18 21:51:48z EmonService: get input list failed, code: -4
5/21/18 21:52:14z EmonService: get input list failed, code: -4
5/21/18 21:52:41z EmonService: get input list failed, code: -4
5/21/18 21:53:07z EmonService: get input list failed, code: -4
5/21/18 21:53:34z EmonService: get input list failed, code: -4
5/21/18 21:54:00z EmonService: get input list failed, code: -4
5/21/18 21:54:26z EmonService: get input list failed, code: -4
5/21/18 21:54:52z EmonService: get input list failed, code: -4
5/21/18 21:55:19z EmonService: get input list failed, code: -4
5/21/18 21:55:45z EmonService: get input list failed, code: -4
5/21/18 21:56:11z EmonService: get input list failed, code: -4
5/21/18 21:56:38z EmonService: get input list failed, code: -4
5/21/18 21:57:04z EmonService: get input list failed, code: -4
5/21/18 21:57:30z EmonService: get input list failed, code: -4
5/21/18 21:57:56z EmonService: get input list failed, code: -4
5/21/18 21:58:22z EmonService: get input list failed, code: -4
5/21/18 21:58:49z EmonService: get input list failed, code: -4
5/21/18 21:59:16z EmonService: get input list failed, code: -4
5/21/18 21:59:42z EmonService: get input list failed, code: -4
5/21/18 22:00:09z EmonService: get input list failed, code: -4

** Restart **

SD initialized.
5/21/18 22:00:32z Real Time Clock is running. Unix time 1526940032 
5/21/18 22:00:32z Version 02_03_06
5/21/18 22:00:32z Reset reason: Exception
5/21/18 22:00:32z Trace:  18:3, 18:2, 18:3, 18:2, 18:3, 18:2, 18:3, 18:2, 18:3, 18:4, 18:5, 1:6, 1:1, 9:0, 9:1, 8:4, 8:6, 8:8, 9:3, 9:4, 9:5, 9:9, 1:2, 1:3, 1:4, 1:5, 1:6, 1:3, 1:4, 1:5, 3:0, 3:1
5/21/18 22:00:32z ESP8266 ChipID: 7283597
5/21/18 22:00:32z Local time zone: 0
5/21/18 22:00:32z device name: IotaWatt, version: 3
5/21/18 22:00:33z MDNS responder started
5/21/18 22:00:33z You can now connect to http://IotaWatt.local
5/21/18 22:00:33z HTTP server started
5/21/18 22:00:33z dataLog: service started.
5/21/18 22:00:34z dataLog: Last log entry: 1526940030
5/21/18 22:00:34z statService: started.
5/21/18 22:00:34z timeSync: service started.
5/21/18 22:00:34z WiFi connected. SSID: rexoweb, IP: 192.168.11.117
5/21/18 22:00:34z Updater: started.
5/21/18 22:00:34z historyLog: service started.
5/21/18 22:00:34z historyLog: Last log entry 1526940000
5/21/18 22:00:34z EmonService: started. url:192.168.11.76:80/emoncms,node:IotaWatt,interval:10, unsecure GET
5/21/18 22:00:36z EmonService: Start posting at 5/20/18 22:10:05 

#2

Not intentional. An oversight. What’s happening is that the service is trying to query Emoncms to determine the last post so that it can resume from there. The I/O is failing and is being retried 2 or three times per minute. It makes sense to keep retrying as there is no downside and it could be just a communications problem. What needs to happen is to only log the condition once and rely on the message that is issued on successful completion to indicate the situation resolved. I will do that.

Regarding the blank config file. Not enough info to diagnose definitively, but there is a window where this can happen. The configuration app rewrites the entire config file when a change is made. The typical way this is done is the write the new file under a temporary name, then delete the old and rename the new. Unfortunately the Arduino SD class doesn’t have a rename method, so the old one is deleted before the new one is uploaded. That’s creates a window of exposure. There are other ways to reduce the exposure, and I will look into it.

I am curious to know if the config was being updated through the VPN or directly on the local LAN. Doesn’t change the problem but I’ve not seen this before and curious to keep an eye out for some new issues with the remote access.

The datalog should be intact. I can’t see how the blank config could cause the inputs and outputs to be empty without the red-red-red codes, and I’d like to see the portion of the message log after you restored the config file until the “flooding” started. It should still be there as I calculate only about 1800 of those error messages at most, so changing the message display to go back 100K more should expose it:

http://iotawatt.local/iotawatt/iotamsgs.txt?textpos=-100000

Thanks Elias.


#3

Thanks for your answer, Bob!

In this case I believe that the problem is different and that the empty config file is only a side-effect. If I remember correctly, it was like this: I wanted to configure a new CT, so I went to the iotawatt page. Then I saw that the status page didn’t show any more inputs and outputs. Nevertheless I went to Setup->Inputs and created the new input. Afterwards the side did not react any more, so I pulled the plug briefly.
The inputs and outputs have continued to disappear, I think this is the real problem. But also this is no big deal, because I have a copy of the data on the server. Just curious about what happened here. Maybe an SD card problem after all?

P.S.: Access was local, not via VPN.

Here is the corresponding part from the log file. The thing with the flooding of the log file was with another device :slight_smile:

SD initialized.
5/21/18 11:18:24z Real Time Clock is running. Unix time 1526901504 
5/21/18 11:18:24z Power failure detected.
5/21/18 11:18:24z Version 02_03_06
5/21/18 11:18:24z Reset reason: External System
5/21/18 11:18:24z Trace:  120:157, 117:152, 252:90, 154:219, 54:95, 173:249, 21:246, 254:36, 199:77, 102:205, 250:156, 40:179, 102:221, 48:99, 239:67, 195:27, 13:130, 113:195, 160:19, 49:33, 175:173, 108:246, 111:51, 8:178, 251:35, 194:123, 239:72, 192:233, 94:78, 197:208, 150:163, 8:154
5/21/18 11:18:24z ESP8266 ChipID: 2329763
5/21/18 11:18:24z Config file parse failed.
5/21/18 11:18:24z Configuration failed
5/21/18 11:18:24z Program halted.

** Restart **

SD initialized.
5/21/18 21:32:53z Real Time Clock is running. Unix time 1526938373 
5/21/18 21:32:53z Power failure detected.
5/21/18 21:32:53z Version 02_03_06
5/21/18 21:32:53z Reset reason: External System
5/21/18 21:32:53z Trace:  120:29, 117:152, 252:90, 154:91, 54:87, 173:249, 149:246, 254:38, 199:76, 119:201, 250:156, 97:243, 103:221, 48:99, 107:67, 211:26, 13:130, 116:195, 161:1, 49:33, 47:141, 110:246, 111:51, 8:179, 235:35, 130:235, 239:72, 193:137, 94:66, 197:208, 150:195, 24:152
5/21/18 21:32:53z ESP8266 ChipID: 2329763
5/21/18 21:32:53z Local time zone: 0
5/21/18 21:32:53z device name: IotaWatt, version: 3
5/21/18 21:32:56z Connecting with WiFiManager.
5/21/18 21:33:01z MDNS responder started
5/21/18 21:33:01z You can now connect to http://IotaWatt.local
5/21/18 21:33:01z HTTP server started
5/21/18 21:33:01z dataLog: service started.
5/21/18 21:33:02z dataLog: Last log entry: 1526900740
5/21/18 21:33:02z statService: started.
5/21/18 21:33:02z timeSync: service started.
5/21/18 21:33:03z WiFi connected. SSID: rexoweb, IP: 192.168.11.83
5/21/18 21:33:03z Updater: started.
5/21/18 21:33:03z historyLog: service started.
5/21/18 21:33:04z historyLog: Last log entry 1526900700
5/21/18 21:33:02z timeSync: adjusting RTC by -2
5/21/18 21:33:04z Updater: Update from 02_03_06 to 02_02_30
5/21/18 21:33:04z Updater: download 02_02_30
5/21/18 21:33:35z Updater: Download failed HTTPcode 
5/21/18 22:33:36z Updater: Update from 02_03_06 to 02_02_30
5/21/18 22:33:36z Updater: download 02_02_30
5/21/18 22:33:52z Updater: Download failed HTTPcode 

#4

Maybe a problem with the SD file system, but I have a lot of respect for them and don’t necessarily believe the card is at fault

The datalog stopped at 1526900740 which is GMT: Monday, May 21, 2018 11:05:40 AM.

So it was logging when you pulled the plug. Not that it wasn’t the thing to do at that point, just establishing the device state. We’ll never really know if the config was an empty file or a corrupted file. I’m betting on a corrupted file. The symptoms you describe, ongoing loss of the config, suggest the block allocation tables are corrupted. So a new SD card would be worthwhile trying. You can copy the contents of the whole IoTaWatt directory to the new card and recover the history to the point of failure.

For me, the number one cause of these types of problems has been removing or inserting an SD card while the device is powered on. Sometimes it takes awhile to manifest itself, and I’ve all but forgotten the seemingly successful thing I did with the card. Not saying that’s what happened, could be a bad card, but you handle a lot of devices so I thought I’d pass along my hard learned lesson.

Let me know if problems persist.
Thanks

OH, I was going to ask, how many 35A CTs are you looking for? I’m stocked up with some eChun ECS10-50.

http://www.echun-elc.com/UploadFiles/2017111814236723.pdf

50A input/50ma output 10.2mm opening. I’ve also got eChun solid core ECOL09-20. I haven’t tested the high end, but the cores are supposed to be good for 50A and these are 1000 turns - so same as the ECS10-50 but more accurate because they are solid core. Both have TVS diodes, 1.5m leads with 3.5mm jacks. 10-50 is CE and UR, 09-20 are UL Listed.