Michael, this is probably for you - but if anybody else can help please do… I am trying to see how hard it would be to do a web based interface to the RETOOLS system. Presumably this would appear in the menu as Tools / Reverse Engineering (or some such abbreviation if that is too long). The basic screen would look something like this: +----------------------------------------------------------------------------------------------------+ | | | +----------+ +------+-------+------------------------------------+------+ +--------------------+ | | | | | hdr1 | hdr2 | hdr3 | hdr4 | | | | | | | +------+-------+------------------------------------+------+ | | | | | Controls | | | | | | | Info | | | | | | col1 | col2 | col3 | col4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Status | | | | | | | | | | | | | | | TABLE | | | | | | | | | | | | | | Extra | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +------+-------+------------------------------------+------+ | | | +----------------------------------------------------------------------------------------------------+ The controls are just a set of controls - things that bring up dialogs for more information or perform actions. Like start/stop RE, switch modes, manipulate DBC files, etc. Left justified in the frame, and perhaps 10% of the width. Height can dynamically adjust with the text content. The Status, Info, and Extra panes are just a dynamically updated text panes. Main code needs to be able to send text here and have it shown in the appropriate pane. Right justified in the frame and perhaps 30% of the width. Height can dynamically adjust with the text content. The TABLE is a table. Probably 5 columns by many rows (anywhere from 20 to 200 or so). Either paged, scrolling, or just very tall. Paged is probably preferable. Would need a simple mechanism to dynamically add/update a row (identified by ‘key’ column and in sorted order), presumably using the web socket. Also need something to be able to dynamically clear the entire table. The RETOOLS code would use this to update the table in realtime (presumably over a web socket). It would be good if the table could do things like search filtering of displayed rows, column sorting, etc (all client side - something like datatables.net). For example, look at this output: OVMS# re dbc list key records ms last can1/100:0081 2 22000 01 02 03 04 05 | ..... can1/101 1 44000 01 02 03 04 | .... dbc/DI_Signal1: 129 km dbc/DI_Signal2: 1 km dbc/DI_Signal3: 130 kWh dbc/DI_Signal4: 122 Degrees The idea is to be able to show the key, records, ms, last, and ascii dump in the main table. Then, clicking on a row would show the statistics for that message in the Info pane, and DBC signals in the Extra pane. I can handle the RETOOLS side, but the javascript is beyond me. I also had a look at the ovms web server framework, but it doesn’t seem to be able to do the table part (yet)? Any idea how complex this is? Regards, Mark.
Great idea! Someone please make this soon, as I just got my new Kia e-Niro 🙂 Need to do some work on the e-Niro-support. Geir
13. feb. 2019 kl. 13:05 skrev Mark Webb-Johnson <mark@webb-johnson.net>:
Michael, this is probably for you - but if anybody else can help please do…
I am trying to see how hard it would be to do a web based interface to the RETOOLS system. Presumably this would appear in the menu as Tools / Reverse Engineering (or some such abbreviation if that is too long). The basic screen would look something like this:
+----------------------------------------------------------------------------------------------------+ | | | +----------+ +------+-------+------------------------------------+------+ +--------------------+ | | | | | hdr1 | hdr2 | hdr3 | hdr4 | | | | | | | +------+-------+------------------------------------+------+ | | | | | Controls | | | | | | | Info | | | | | | col1 | col2 | col3 | col4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Status | | | | | | | | | | | | | | | TABLE | | | | | | | | | | | | | | Extra | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +------+-------+------------------------------------+------+ | | | +----------------------------------------------------------------------------------------------------+
The controls are just a set of controls - things that bring up dialogs for more information or perform actions. Like start/stop RE, switch modes, manipulate DBC files, etc. Left justified in the frame, and perhaps 10% of the width. Height can dynamically adjust with the text content.
The Status, Info, and Extra panes are just a dynamically updated text panes. Main code needs to be able to send text here and have it shown in the appropriate pane. Right justified in the frame and perhaps 30% of the width. Height can dynamically adjust with the text content.
The TABLE is a table. Probably 5 columns by many rows (anywhere from 20 to 200 or so). Either paged, scrolling, or just very tall. Paged is probably preferable. Would need a simple mechanism to dynamically add/update a row (identified by ‘key’ column and in sorted order), presumably using the web socket. Also need something to be able to dynamically clear the entire table. The RETOOLS code would use this to update the table in realtime (presumably over a web socket). It would be good if the table could do things like search filtering of displayed rows, column sorting, etc (all client side - something like datatables.net <http://datatables.net/>).
For example, look at this output:
OVMS# re dbc list key records ms last can1/100:0081 2 22000 01 02 03 04 05 | ..... can1/101 1 44000 01 02 03 04 | .... dbc/DI_Signal1: 129 km dbc/DI_Signal2: 1 km dbc/DI_Signal3: 130 kWh dbc/DI_Signal4: 122 Degrees
The idea is to be able to show the key, records, ms, last, and ascii dump in the main table. Then, clicking on a row would show the statistics for that message in the Info pane, and DBC signals in the Extra pane.
I can handle the RETOOLS side, but the javascript is beyond me. I also had a look at the ovms web server framework, but it doesn’t seem to be able to do the table part (yet)?
Any idea how complex this is?
Regards, Mark.
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
Hi Geir, Have you considered looking at openpilot for the Kia e-Niro. Since e-Niro has controllable steering and brakes (adaptive cruise control), it is a perfect candidate for openpilot. Rob On 2019-02-13 10:40 AM, Geir Øyvind Vælidalo wrote:
Great idea! Someone please make this soon, as I just got my new Kia e-Niro 🙂 Need to do some work on the e-Niro-support.
Geir
13. feb. 2019 kl. 13:05 skrev Mark Webb-Johnson <mark@webb-johnson.net <mailto:mark@webb-johnson.net>>:
Michael, this is probably for you - but if anybody else can help please do…
I am trying to see how hard it would be to do a web based interface to the RETOOLS system. Presumably this would appear in the menu as Tools / Reverse Engineering (or some such abbreviation if that is too long). The basic screen would look something like this:
+----------------------------------------------------------------------------------------------------+ | | | +----------+ +------+-------+------------------------------------+------+ +--------------------+ | | | | | hdr1 | hdr2 | hdr3 | hdr4 | | | | | | | +------+-------+------------------------------------+------+ | | |
| | Controls | | | | | | | Info | | | | | | col1 | col2 | col3 | col4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Status | | | | | | | | | | | | | | | TABLE | | | | | | | | | | | | | | Extra | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| +------+-------+------------------------------------+------+ | | | +----------------------------------------------------------------------------------------------------+
The controls are just a set of controls - things that bring up dialogs for more information or perform actions. Like start/stop RE, switch modes, manipulate DBC files, etc. Left justified in the frame, and perhaps 10% of the width. Height can dynamically adjust with the text content.
The Status, Info, and Extra panes are just a dynamically updated text panes. Main code needs to be able to send text here and have it shown in the appropriate pane. Right justified in the frame and perhaps 30% of the width. Height can dynamically adjust with the text content.
The TABLE is a table. Probably 5 columns by many rows (anywhere from 20 to 200 or so). Either paged, scrolling, or just very tall. Paged is probably preferable. Would need a simple mechanism to dynamically add/update a row (identified by ‘key’ column and in sorted order), presumably using the web socket. Also need something to be able to dynamically clear the entire table. The RETOOLS code would use this to update the table in realtime (presumably over a web socket). It would be good if the table could do things like search filtering of displayed rows, column sorting, etc (all client side - something like datatables.net <http://datatables.net/>).
For example, look at this output:
OVMS# re dbc list key records ms last can1/100:0081 2 22000 01 02 03 04 05 | ..... can1/101 1 44000 01 02 03 04 | .... dbc/DI_Signal1: 129 km dbc/DI_Signal2: 1 km dbc/DI_Signal3: 130 kWh dbc/DI_Signal4: 122 Degrees
The idea is to be able to show the key, records, ms, last, and ascii dump in the main table. Then, clicking on a row would show the statistics for that message in the Info pane, and DBC signals in the Extra pane.
I can handle the RETOOLS side, but the javascript is beyond me. I also had a look at the ovms web server framework, but it doesn’t seem to be able to do the table part (yet)?
Any idea how complex this is?
Regards, Mark.
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
Geir, I tried emailing you directly, didn't work -- can you send me your latest email address at robert@cotran.ca? Thanks! Rob On 2019-02-13 10:40 AM, Geir Øyvind Vælidalo wrote:
Great idea! Someone please make this soon, as I just got my new Kia e-Niro 🙂 Need to do some work on the e-Niro-support.
Geir
13. feb. 2019 kl. 13:05 skrev Mark Webb-Johnson <mark@webb-johnson.net <mailto:mark@webb-johnson.net>>:
Michael, this is probably for you - but if anybody else can help please do…
I am trying to see how hard it would be to do a web based interface to the RETOOLS system. Presumably this would appear in the menu as Tools / Reverse Engineering (or some such abbreviation if that is too long). The basic screen would look something like this:
+----------------------------------------------------------------------------------------------------+ | | | +----------+ +------+-------+------------------------------------+------+ +--------------------+ | | | | | hdr1 | hdr2 | hdr3 | hdr4 | | | | | | | +------+-------+------------------------------------+------+ | | |
| | Controls | | | | | | | Info | | | | | | col1 | col2 | col3 | col4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Status | | | | | | | | | | | | | | | TABLE | | | | | | | | | | | | | | Extra | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| +------+-------+------------------------------------+------+ | | | +----------------------------------------------------------------------------------------------------+
The controls are just a set of controls - things that bring up dialogs for more information or perform actions. Like start/stop RE, switch modes, manipulate DBC files, etc. Left justified in the frame, and perhaps 10% of the width. Height can dynamically adjust with the text content.
The Status, Info, and Extra panes are just a dynamically updated text panes. Main code needs to be able to send text here and have it shown in the appropriate pane. Right justified in the frame and perhaps 30% of the width. Height can dynamically adjust with the text content.
The TABLE is a table. Probably 5 columns by many rows (anywhere from 20 to 200 or so). Either paged, scrolling, or just very tall. Paged is probably preferable. Would need a simple mechanism to dynamically add/update a row (identified by ‘key’ column and in sorted order), presumably using the web socket. Also need something to be able to dynamically clear the entire table. The RETOOLS code would use this to update the table in realtime (presumably over a web socket). It would be good if the table could do things like search filtering of displayed rows, column sorting, etc (all client side - something like datatables.net <http://datatables.net/>).
For example, look at this output:
OVMS# re dbc list key records ms last can1/100:0081 2 22000 01 02 03 04 05 | ..... can1/101 1 44000 01 02 03 04 | .... dbc/DI_Signal1: 129 km dbc/DI_Signal2: 1 km dbc/DI_Signal3: 130 kWh dbc/DI_Signal4: 122 Degrees
The idea is to be able to show the key, records, ms, last, and ascii dump in the main table. Then, clicking on a row would show the statistics for that message in the Info pane, and DBC signals in the Extra pane.
I can handle the RETOOLS side, but the javascript is beyond me. I also had a look at the ovms web server framework, but it doesn’t seem to be able to do the table part (yet)?
Any idea how complex this is?
Regards, Mark.
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
Mark, I haven't seen the necessity for a complex plugin just for table views up to now. Normally it's pretty simple to make dynamic tables just using HTML5 and jQuery. For example, see the file selector widget I created. That uses a table to display the file entries, it's dynamic, sortable & responsive with just a few lines of code. DataTables adds a lot of features and simplifies manipulations of the data. I like the automatic responsive drilldown shown here: https://datatables.net/extensions/responsive/examples/styling/bootstrap.html It's got some weight of course (about half of the charts lib with just the most basic extensions), so we would add it as an optional asset. On a first look it will need some customization for us, as it uses the glyphicons for the bootstrap 3 variant, which we don't include for size reasons. What do others think? And which of the extensions should be included? Overall, the UI as drafted shouldn't be hard to implement. I'll see if I can create a first version, but probably won't have the time before next weekend. Regards, Michael Am 13.02.19 um 13:05 schrieb Mark Webb-Johnson:
Michael, this is probably for you - but if anybody else can help please do…
I am trying to see how hard it would be to do a web based interface to the RETOOLS system. Presumably this would appear in the menu as Tools / Reverse Engineering (or some such abbreviation if that is too long). The basic screen would look something like this:
+----------------------------------------------------------------------------------------------------+ | | | +----------+ +------+-------+------------------------------------+------+ +--------------------+ | | | | | hdr1 | hdr2 | hdr3 | hdr4 | | | | | | | +------+-------+------------------------------------+------+ | | |
| | Controls | | | | | | | Info | | | | | | col1 | col2 | col3 | col4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Status | | | | | | | | | | | | | | | TABLE | | | | | | | | | | | | | | Extra | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| +------+-------+------------------------------------+------+ | | | +----------------------------------------------------------------------------------------------------+
The controls are just a set of controls - things that bring up dialogs for more information or perform actions. Like start/stop RE, switch modes, manipulate DBC files, etc. Left justified in the frame, and perhaps 10% of the width. Height can dynamically adjust with the text content.
The Status, Info, and Extra panes are just a dynamically updated text panes. Main code needs to be able to send text here and have it shown in the appropriate pane. Right justified in the frame and perhaps 30% of the width. Height can dynamically adjust with the text content.
The TABLE is a table. Probably 5 columns by many rows (anywhere from 20 to 200 or so). Either paged, scrolling, or just very tall. Paged is probably preferable. Would need a simple mechanism to dynamically add/update a row (identified by ‘key’ column and in sorted order), presumably using the web socket. Also need something to be able to dynamically clear the entire table. The RETOOLS code would use this to update the table in realtime (presumably over a web socket). It would be good if the table could do things like search filtering of displayed rows, column sorting, etc (all client side - something like datatables.net <http://datatables.net>).
For example, look at this output:
OVMS# re dbc list key records ms last can1/100:0081 2 22000 01 02 03 04 05 | ..... can1/101 1 44000 01 02 03 04 | .... dbc/DI_Signal1: 129 km dbc/DI_Signal2: 1 km dbc/DI_Signal3: 130 kWh dbc/DI_Signal4: 122 Degrees
The idea is to be able to show the key, records, ms, last, and ascii dump in the main table. Then, clicking on a row would show the statistics for that message in the Info pane, and DBC signals in the Extra pane.
I can handle the RETOOLS side, but the javascript is beyond me. I also had a look at the ovms web server framework, but it doesn’t seem to be able to do the table part (yet)?
Any idea how complex this is?
Regards, Mark.
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
Thanks, Michael. I can handle the RE side of things - just haven’t done a lot of work in JavaScript (too many people better at it than me at my day job, so I leave it to them). I can also probably extend it once the basics are working. Just need a basic UI framework, and some way to push the data from RE. No hurry. Regards, Mark
On 16 Feb 2019, at 8:43 PM, Michael Balzer <dexter@expeedo.de> wrote:
Mark,
I haven't seen the necessity for a complex plugin just for table views up to now. Normally it's pretty simple to make dynamic tables just using HTML5 and jQuery. For example, see the file selector widget I created. That uses a table to display the file entries, it's dynamic, sortable & responsive with just a few lines of code.
DataTables adds a lot of features and simplifies manipulations of the data. I like the automatic responsive drilldown shown here: https://datatables.net/extensions/responsive/examples/styling/bootstrap.html
It's got some weight of course (about half of the charts lib with just the most basic extensions), so we would add it as an optional asset. On a first look it will need some customization for us, as it uses the glyphicons for the bootstrap 3 variant, which we don't include for size reasons.
What do others think? And which of the extensions should be included?
Overall, the UI as drafted shouldn't be hard to implement. I'll see if I can create a first version, but probably won't have the time before next weekend.
Regards, Michael
Am 13.02.19 um 13:05 schrieb Mark Webb-Johnson:
Michael, this is probably for you - but if anybody else can help please do…
I am trying to see how hard it would be to do a web based interface to the RETOOLS system. Presumably this would appear in the menu as Tools / Reverse Engineering (or some such abbreviation if that is too long). The basic screen would look something like this:
+----------------------------------------------------------------------------------------------------+ | | | +----------+ +------+-------+------------------------------------+------+ +--------------------+ | | | | | hdr1 | hdr2 | hdr3 | hdr4 | | | | | | | +------+-------+------------------------------------+------+ | | | | | Controls | | | | | | | Info | | | | | | col1 | col2 | col3 | col4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Status | | | | | | | | | | | | | | | TABLE | | | | | | | | | | | | | | Extra | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +------+-------+------------------------------------+------+ | | | +----------------------------------------------------------------------------------------------------+
The controls are just a set of controls - things that bring up dialogs for more information or perform actions. Like start/stop RE, switch modes, manipulate DBC files, etc. Left justified in the frame, and perhaps 10% of the width. Height can dynamically adjust with the text content.
The Status, Info, and Extra panes are just a dynamically updated text panes. Main code needs to be able to send text here and have it shown in the appropriate pane. Right justified in the frame and perhaps 30% of the width. Height can dynamically adjust with the text content.
The TABLE is a table. Probably 5 columns by many rows (anywhere from 20 to 200 or so). Either paged, scrolling, or just very tall. Paged is probably preferable. Would need a simple mechanism to dynamically add/update a row (identified by ‘key’ column and in sorted order), presumably using the web socket. Also need something to be able to dynamically clear the entire table. The RETOOLS code would use this to update the table in realtime (presumably over a web socket). It would be good if the table could do things like search filtering of displayed rows, column sorting, etc (all client side - something like datatables.net).
For example, look at this output:
OVMS# re dbc list key records ms last can1/100:0081 2 22000 01 02 03 04 05 | ..... can1/101 1 44000 01 02 03 04 | .... dbc/DI_Signal1: 129 km dbc/DI_Signal2: 1 km dbc/DI_Signal3: 130 kWh dbc/DI_Signal4: 122 Degrees
The idea is to be able to show the key, records, ms, last, and ascii dump in the main table. Then, clicking on a row would show the statistics for that message in the Info pane, and DBC signals in the Extra pane.
I can handle the RETOOLS side, but the javascript is beyond me. I also had a look at the ovms web server framework, but it doesn’t seem to be able to do the table part (yet)?
Any idea how complex this is?
Regards, Mark.
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26 _______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
Side note: starting the RE server from the web shell currently consistently results in a crash from xQueueReceive() that looks like our "old friend", the memory corruption. Starting from the async console or ssh or via MP works. No idea yet how that could make a difference for xQueueReceive(), I'll assume it's the PSRAM bug for now. D (38792) webcommand: HttpCommandStream[0x3fa2c358] init: handler=0x3fa2f6a0 command='re start' verbosity=65535 I (38812) webcommand: HttpCommandStream[0x3fa2c358]: 1996204 bytes free, executing: re start *assertion "res == coreID || res == portMUX_FREE_VAL" failed: file "/home/balzer/esp/esp-idf/components/freertos/portmux_impl.inc.h", line 105, function: vPortCPUAcquireMutexIntsDisabledExtram* abort() was called at PC 0x40112f67 on core 1 Backtrace: 0x40091188:0x3ffea650 0x40091383:0x3ffea670 0x40112f67:0x3ffea690 0x40093ce3:0x3ffea6c0 0x40095ac0:0x3ffea6f0 0x4016c08a:0x3ffea730 0x4016c0c1:0x3ffea770 Rebooting... balzer@leela:~/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3> a2l 0x40091188 0x40091383 0x40112f67 0x40093ce3 0x40095ac0 0x4016c08a 0x4016c0c1 Using elf file: /home/balzer/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/build/ovms3.elf 0x40091188 is in invoke_abort (/home/balzer/esp/esp-idf/components/esp32/panic.c:140). 135 #endif 136 while (1) { 137 if (esp_cpu_in_ocd_debug_mode()) { 138 __asm__ ("break 0,0"); 139 } 140 *((int *) 0) = 0; 141 } 142 } 143 144 void abort() 0x40091383 is in abort (/home/balzer/esp/esp-idf/components/esp32/panic.c:149). 144 void abort() 145 { 146 #if !CONFIG_ESP32_PANIC_SILENT_REBOOT 147 ets_printf("abort() was called at PC 0x%08x on core %d\r\n", (intptr_t)__builtin_return_address(0) - 3, xPortGetCoreID()); 148 #endif 149 invoke_abort(); 150 } 151 152 153 static const char *edesc[] = { 0x40112f67 is in __assert_func (../../../.././newlib/libc/stdlib/assert.c:63). 0x40093ce3 is in vTaskEnterCritical (/home/balzer/esp/esp-idf/components/freertos/portmux_impl.inc.h:105). 100 return false; 101 } 102 } 103 } while (1); 104 *105 assert(res == coreID || res == portMUX_FREE_VAL); /* any other value implies memory corruption or uninitialized mux */* 106 assert((res == portMUX_FREE_VAL) == (mux->count == 0)); /* we're first to lock iff count is zero */ 107 assert(mux->count < 0xFF); /* Bad count value implies memory corruption */ 108 109 /* now we own it, we can increment the refcount */ 0x40095ac0 is in xQueueGenericReceive (/home/balzer/esp/esp-idf/components/freertos/queue.c:1455). 1450 statements within the function itself. This is done in the interest 1451 of execution time efficiency. */ 1452 1453 for( ;; ) 1454 { 1455 taskENTER_CRITICAL(&pxQueue->mux); 1456 { 1457 /* Is there data in the queue now? To be running the calling task 1458 must be the highest priority task wanting to access the queue. */ 1459 if( pxQueue->uxMessagesWaiting > ( UBaseType_t ) 0 ) 0x4016c08a is in re::Task() (/home/balzer/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/components/retools/src/retools.cpp:243). 238 { 239 CAN_frame_t frame; 240 241 while(1) 242 { 243 if (xQueueReceive(m_rxqueue, &frame, (portTickType)portMAX_DELAY)==pdTRUE) 244 { 245 if (MyRE != NULL) // Protect against MyRE not set (during init) 246 { 247 switch (m_mode) 0x4016c0c1 is in RE_task(void*) (/home/balzer/esp/Open-Vehicle-Monitoring-System-3/vehicle/OVMS.V3/components/retools/src/retools.cpp:234). 229 #endif // #ifdef CONFIG_OVMS_SC_GPL_MONGOOSE 230 231 static void RE_task(void *pvParameters) 232 { 233 re *me = (re*)pvParameters; 234 me->Task(); 235 } 236 237 void re::Task() 238 { Am 16.02.19 um 14:00 schrieb Mark Webb-Johnson:
Thanks, Michael.
I can handle the RE side of things - just haven’t done a lot of work in JavaScript (too many people better at it than me at my day job, so I leave it to them). I can also probably extend it once the basics are working.
Just need a basic UI framework, and some way to push the data from RE.
No hurry.
Regards, Mark
On 16 Feb 2019, at 8:43 PM, Michael Balzer <dexter@expeedo.de <mailto:dexter@expeedo.de>> wrote:
Mark,
I haven't seen the necessity for a complex plugin just for table views up to now. Normally it's pretty simple to make dynamic tables just using HTML5 and jQuery. For example, see the file selector widget I created. That uses a table to display the file entries, it's dynamic, sortable & responsive with just a few lines of code.
DataTables adds a lot of features and simplifies manipulations of the data. I like the automatic responsive drilldown shown here: https://datatables.net/extensions/responsive/examples/styling/bootstrap.html
It's got some weight of course (about half of the charts lib with just the most basic extensions), so we would add it as an optional asset. On a first look it will need some customization for us, as it uses the glyphicons for the bootstrap 3 variant, which we don't include for size reasons.
What do others think? And which of the extensions should be included?
Overall, the UI as drafted shouldn't be hard to implement. I'll see if I can create a first version, but probably won't have the time before next weekend.
Regards, Michael
Am 13.02.19 um 13:05 schrieb Mark Webb-Johnson:
Michael, this is probably for you - but if anybody else can help please do…
I am trying to see how hard it would be to do a web based interface to the RETOOLS system. Presumably this would appear in the menu as Tools / Reverse Engineering (or some such abbreviation if that is too long). The basic screen would look something like this:
+----------------------------------------------------------------------------------------------------+ | | | +----------+ +------+-------+------------------------------------+------+ +--------------------+ | | | | | hdr1 | hdr2 | hdr3 | hdr4 | | | | | | | +------+-------+------------------------------------+------+ | | |
| | Controls | | | | | | | Info | | | | | | col1 | col2 | col3 | col4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Status | | | | | | | | | | | | | | | TABLE | | | | | | | | | | | | | | Extra | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| +------+-------+------------------------------------+------+ | | | +----------------------------------------------------------------------------------------------------+
The controls are just a set of controls - things that bring up dialogs for more information or perform actions. Like start/stop RE, switch modes, manipulate DBC files, etc. Left justified in the frame, and perhaps 10% of the width. Height can dynamically adjust with the text content.
The Status, Info, and Extra panes are just a dynamically updated text panes. Main code needs to be able to send text here and have it shown in the appropriate pane. Right justified in the frame and perhaps 30% of the width. Height can dynamically adjust with the text content.
The TABLE is a table. Probably 5 columns by many rows (anywhere from 20 to 200 or so). Either paged, scrolling, or just very tall. Paged is probably preferable. Would need a simple mechanism to dynamically add/update a row (identified by ‘key’ column and in sorted order), presumably using the web socket. Also need something to be able to dynamically clear the entire table. The RETOOLS code would use this to update the table in realtime (presumably over a web socket). It would be good if the table could do things like search filtering of displayed rows, column sorting, etc (all client side - something like datatables.net <http://datatables.net>).
For example, look at this output:
OVMS# re dbc list key records ms last can1/100:0081 2 22000 01 02 03 04 05 | ..... can1/101 1 44000 01 02 03 04 | .... dbc/DI_Signal1: 129 km dbc/DI_Signal2: 1 km dbc/DI_Signal3: 130 kWh dbc/DI_Signal4: 122 Degrees
The idea is to be able to show the key, records, ms, last, and ascii dump in the main table. Then, clicking on a row would show the statistics for that message in the Info pane, and DBC signals in the Extra pane.
I can handle the RETOOLS side, but the javascript is beyond me. I also had a look at the ovms web server framework, but it doesn’t seem to be able to do the table part (yet)?
Any idea how complex this is?
Regards, Mark.
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26 _______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
Mark, the crash was no memory corruption, it was a race condition in the RE init (the queue was created after the task). DataTables integration and the first draft of the RE tools web UI is now in the hub. It's already usable but far from finished, so I didn't include it as a standard page. Install "web/retools.htm" as a plugin to use & work on it. The layout is following your draft, and I've added some rules for small devices. I've added some control buttons and status output, the table stream updates and a detail call on row clicks. Btw: it may be better to send detail info to the browser using the stream updates (for example in hidden columns), so the browser doesn't need to request them. The table is mostly standard DataTable, I've only enabled the responsive plugin, that does dynamic hiding & drilldown of columns. I've included most of the plugins, so there are many additional options: * Included libraries: o DataTables 1.10.18, Buttons 1.5.4, Column visibility 1.5.4, ColReorder 1.5.0, FixedColumns 3.2.5, FixedHeader 3.1.4, KeyTable 2.5.0, Responsive 2.2.2, RowGroup 1.1.0, RowReorder 1.2.4, Scroller 1.5.0, Select 1.2.6 * see https://datatables.net/extensions/index The web UI listens to stream updates for the table and the text displays using this scheme: * Subtype "retools/list/set" → replace list by payload * Subtype "retools/list/update" → update/extend list by payload * Subtype "retools/<boxid>" → set payload as text content in box <boxid>, boxid e.g. "status", "info" or "extra" Example: notify raise text stream retools/extra "hi there" Text boxes are currently <samp> with monospace font & text to html conversion. If you'd like to display HTML, replace "$('<div/>').text(msg.value).html()" by just "msg.value" on line 175. Table updates are sent as JSON arrays with HTML markup for the changed/discovered highlighting. This currently uses <b> & <u>, which are styled accordingly. Command "re stream list" creates a message with all rows (no highlighting), "re stream changed" includes only changed rows (with highlighting). I've added a first stream sender on the per second ticker. That currently simply sends all changed rows and could be optimized to only send those changed since the last tx. It could also make sense to raise the update frequency then. The status box monitors some "retools" events I introduced, the stream ticker also updates the box -- if the stream subscription & updating is going to be permanent (as now), the event coupling can be removed. Regards, Michael Am 23.02.19 um 10:18 schrieb Michael Balzer:
Side note: starting the RE server from the web shell currently consistently results in a crash from xQueueReceive() that looks like our "old friend", the memory corruption.
Starting from the async console or ssh or via MP works. No idea yet how that could make a difference for xQueueReceive(), I'll assume it's the PSRAM bug for now.
D (38792) webcommand: HttpCommandStream[0x3fa2c358] init: handler=0x3fa2f6a0 command='re start' verbosity=65535 I (38812) webcommand: HttpCommandStream[0x3fa2c358]: 1996204 bytes free, executing: re start *assertion "res == coreID || res == portMUX_FREE_VAL" failed: file "/home/balzer/esp/esp-idf/components/freertos/portmux_impl.inc.h", line 105, function: vPortCPUAcquireMutexIntsDisabledExtram* abort() was called at PC 0x40112f67 on core 1
Backtrace: 0x40091188:0x3ffea650 0x40091383:0x3ffea670 0x40112f67:0x3ffea690 0x40093ce3:0x3ffea6c0 0x40095ac0:0x3ffea6f0 0x4016c08a:0x3ffea730 0x4016c0c1:0x3ffea770
Rebooting...
Am 16.02.19 um 14:00 schrieb Mark Webb-Johnson:
Thanks, Michael.
I can handle the RE side of things - just haven’t done a lot of work in JavaScript (too many people better at it than me at my day job, so I leave it to them). I can also probably extend it once the basics are working.
Just need a basic UI framework, and some way to push the data from RE.
No hurry.
Regards, Mark
On 16 Feb 2019, at 8:43 PM, Michael Balzer <dexter@expeedo.de <mailto:dexter@expeedo.de>> wrote:
Mark,
I haven't seen the necessity for a complex plugin just for table views up to now. Normally it's pretty simple to make dynamic tables just using HTML5 and jQuery. For example, see the file selector widget I created. That uses a table to display the file entries, it's dynamic, sortable & responsive with just a few lines of code.
DataTables adds a lot of features and simplifies manipulations of the data. I like the automatic responsive drilldown shown here: https://datatables.net/extensions/responsive/examples/styling/bootstrap.html
It's got some weight of course (about half of the charts lib with just the most basic extensions), so we would add it as an optional asset. On a first look it will need some customization for us, as it uses the glyphicons for the bootstrap 3 variant, which we don't include for size reasons.
What do others think? And which of the extensions should be included?
Overall, the UI as drafted shouldn't be hard to implement. I'll see if I can create a first version, but probably won't have the time before next weekend.
Regards, Michael
Am 13.02.19 um 13:05 schrieb Mark Webb-Johnson:
Michael, this is probably for you - but if anybody else can help please do…
I am trying to see how hard it would be to do a web based interface to the RETOOLS system. Presumably this would appear in the menu as Tools / Reverse Engineering (or some such abbreviation if that is too long). The basic screen would look something like this:
+----------------------------------------------------------------------------------------------------+ | | | +----------+ +------+-------+------------------------------------+------+ +--------------------+ | | | | | hdr1 | hdr2 | hdr3 | hdr4 | | | | | | | +------+-------+------------------------------------+------+ | | |
| | Controls | | | | | | | Info | | | | | | col1 | col2 | col3 | col4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Status | | | | | | | | | | | | | | | TABLE | | | | | | | | | | | | | | Extra | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| +------+-------+------------------------------------+------+ | | | +----------------------------------------------------------------------------------------------------+
The controls are just a set of controls - things that bring up dialogs for more information or perform actions. Like start/stop RE, switch modes, manipulate DBC files, etc. Left justified in the frame, and perhaps 10% of the width. Height can dynamically adjust with the text content.
The Status, Info, and Extra panes are just a dynamically updated text panes. Main code needs to be able to send text here and have it shown in the appropriate pane. Right justified in the frame and perhaps 30% of the width. Height can dynamically adjust with the text content.
The TABLE is a table. Probably 5 columns by many rows (anywhere from 20 to 200 or so). Either paged, scrolling, or just very tall. Paged is probably preferable. Would need a simple mechanism to dynamically add/update a row (identified by ‘key’ column and in sorted order), presumably using the web socket. Also need something to be able to dynamically clear the entire table. The RETOOLS code would use this to update the table in realtime (presumably over a web socket). It would be good if the table could do things like search filtering of displayed rows, column sorting, etc (all client side - something like datatables.net <http://datatables.net>).
For example, look at this output:
OVMS# re dbc list key records ms last can1/100:0081 2 22000 01 02 03 04 05 | ..... can1/101 1 44000 01 02 03 04 | .... dbc/DI_Signal1: 129 km dbc/DI_Signal2: 1 km dbc/DI_Signal3: 130 kWh dbc/DI_Signal4: 122 Degrees
The idea is to be able to show the key, records, ms, last, and ascii dump in the main table. Then, clicking on a row would show the statistics for that message in the Info pane, and DBC signals in the Extra pane.
I can handle the RETOOLS side, but the javascript is beyond me. I also had a look at the ovms web server framework, but it doesn’t seem to be able to do the table part (yet)?
Any idea how complex this is?
Regards, Mark.
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26 _______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
Michael, Looks good: I played a roadster crtd log back through it, using a DBC to control the message multiplexing. No crashes. I then added this live: BO_ 836 TPMS: 8 TPMS SG_ v_tp_fl_p : 0|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_fr_p : 16|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_rl_p : 32|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_rr_p : 48|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_fl_t : 8|8@0+ (1,-40) [-40|100] "C" TPMS SG_ v_tp_fr_t : 24|8@0+ (1,-40) [-40|100] "C" TPMS SG_ v_tp_rl_t : 40|8@0+ (1,-40) [-40|100] "C" TPMS SG_ v_tp_rr_t : 56|8@0+ (1,-40) [-40|100] "C" TPMS And got this: key records ms last can1/344 24 583 57 48 56 49 75 4d 76 4e | WHVIuMvN dbc/v_tp_fl_p: 31.5789 psi dbc/v_tp_fr_p: 31.2159 psi dbc/v_tp_rl_p: 42.4682 psi dbc/v_tp_rr_p: 42.8312 psi dbc/v_tp_fl_t: 32 C dbc/v_tp_fr_t: 33 C dbc/v_tp_rl_t: 37 C dbc/v_tp_rr_t: 38 C That looks good. Only issue so far is that when I switch to page #2, it immediately switches back to page #1. I guess it thinks there is new data, but the link was idle at the time. D (2097680) notify: Created entry type 'stream' subtype 'retools.status' size 269 has 1 readers pending D (2097680) notify: Created entry type 'stream' subtype 'retools.list.update' size 3 has 1 readers pending D (2098680) notify: Created entry type 'stream' subtype 'retools.status' size 269 has 1 readers pending D (2098690) notify: Created entry type 'stream' subtype 'retools.list.update' size 3 has 1 readers pending D (2099680) notify: Created entry type 'stream' subtype 'retools.status' size 269 has 1 readers pending D (2099680) notify: Created entry type 'stream' subtype 'retools.list.update' size 3 has 1 readers pending It seems re_stream_changed always sends “[]”, even if no changes. Easy to fix, but perhaps better to address in the Javascript. I’m going to continue with the live DBC editing commands now. That is the pain point for using this in the real world (as the current approach is onerous: (a) detaching the DBC from the CAN bus, (b) switching to editor, (c) editing the DBC, (d) switch to command and ‘dbc autoload’, then (e) re-attaching the DBC to the CAN bus). It can, however, all be done from the web interface. Also building up DBC files for Tesla Roadster, to see just how much can be done in that format. I think I also need to get my DBC implementation to support strings. Regards, Mark.
On 24 Feb 2019, at 9:38 PM, Michael Balzer <dexter@expeedo.de> wrote:
Mark,
the crash was no memory corruption, it was a race condition in the RE init (the queue was created after the task).
DataTables integration and the first draft of the RE tools web UI is now in the hub. It's already usable but far from finished, so I didn't include it as a standard page. Install "web/retools.htm" as a plugin to use & work on it.
The layout is following your draft, and I've added some rules for small devices.
I've added some control buttons and status output, the table stream updates and a detail call on row clicks. Btw: it may be better to send detail info to the browser using the stream updates (for example in hidden columns), so the browser doesn't need to request them.
The table is mostly standard DataTable, I've only enabled the responsive plugin, that does dynamic hiding & drilldown of columns. I've included most of the plugins, so there are many additional options: Included libraries: DataTables 1.10.18, Buttons 1.5.4, Column visibility 1.5.4, ColReorder 1.5.0, FixedColumns 3.2.5, FixedHeader 3.1.4, KeyTable 2.5.0, Responsive 2.2.2, RowGroup 1.1.0, RowReorder 1.2.4, Scroller 1.5.0, Select 1.2.6 see https://datatables.net/extensions/index <https://datatables.net/extensions/index> The web UI listens to stream updates for the table and the text displays using this scheme: Subtype "retools/list/set" → replace list by payload Subtype "retools/list/update" → update/extend list by payload Subtype "retools/<boxid>" → set payload as text content in box <boxid>, boxid e.g. "status", "info" or "extra" Example: notify raise text stream retools/extra "hi there"
Text boxes are currently <samp> with monospace font & text to html conversion. If you'd like to display HTML, replace "$('<div/>').text(msg.value).html()" by just "msg.value" on line 175.
Table updates are sent as JSON arrays with HTML markup for the changed/discovered highlighting. This currently uses <b> & <u>, which are styled accordingly. Command "re stream list" creates a message with all rows (no highlighting), "re stream changed" includes only changed rows (with highlighting).
I've added a first stream sender on the per second ticker. That currently simply sends all changed rows and could be optimized to only send those changed since the last tx. It could also make sense to raise the update frequency then.
The status box monitors some "retools" events I introduced, the stream ticker also updates the box -- if the stream subscription & updating is going to be permanent (as now), the event coupling can be removed.
Regards, Michael
Am 23.02.19 um 10:18 schrieb Michael Balzer:
Side note: starting the RE server from the web shell currently consistently results in a crash from xQueueReceive() that looks like our "old friend", the memory corruption.
Starting from the async console or ssh or via MP works. No idea yet how that could make a difference for xQueueReceive(), I'll assume it's the PSRAM bug for now.
D (38792) webcommand: HttpCommandStream[0x3fa2c358] init: handler=0x3fa2f6a0 command='re start' verbosity=65535 I (38812) webcommand: HttpCommandStream[0x3fa2c358]: 1996204 bytes free, executing: re start assertion "res == coreID || res == portMUX_FREE_VAL" failed: file "/home/balzer/esp/esp-idf/components/freertos/portmux_impl.inc.h", line 105, function: vPortCPUAcquireMutexIntsDisabledExtram abort() was called at PC 0x40112f67 on core 1
Backtrace: 0x40091188:0x3ffea650 0x40091383:0x3ffea670 0x40112f67:0x3ffea690 0x40093ce3:0x3ffea6c0 0x40095ac0:0x3ffea6f0 0x4016c08a:0x3ffea730 0x4016c0c1:0x3ffea770
Rebooting...
Am 16.02.19 um 14:00 schrieb Mark Webb-Johnson:
Thanks, Michael.
I can handle the RE side of things - just haven’t done a lot of work in JavaScript (too many people better at it than me at my day job, so I leave it to them). I can also probably extend it once the basics are working.
Just need a basic UI framework, and some way to push the data from RE.
No hurry.
Regards, Mark
On 16 Feb 2019, at 8:43 PM, Michael Balzer <dexter@expeedo.de <mailto:dexter@expeedo.de>> wrote:
Mark,
I haven't seen the necessity for a complex plugin just for table views up to now. Normally it's pretty simple to make dynamic tables just using HTML5 and jQuery. For example, see the file selector widget I created. That uses a table to display the file entries, it's dynamic, sortable & responsive with just a few lines of code.
DataTables adds a lot of features and simplifies manipulations of the data. I like the automatic responsive drilldown shown here: https://datatables.net/extensions/responsive/examples/styling/bootstrap.html <https://datatables.net/extensions/responsive/examples/styling/bootstrap.html>
It's got some weight of course (about half of the charts lib with just the most basic extensions), so we would add it as an optional asset. On a first look it will need some customization for us, as it uses the glyphicons for the bootstrap 3 variant, which we don't include for size reasons.
What do others think? And which of the extensions should be included?
Overall, the UI as drafted shouldn't be hard to implement. I'll see if I can create a first version, but probably won't have the time before next weekend.
Regards, Michael
Am 13.02.19 um 13:05 schrieb Mark Webb-Johnson:
Michael, this is probably for you - but if anybody else can help please do…
I am trying to see how hard it would be to do a web based interface to the RETOOLS system. Presumably this would appear in the menu as Tools / Reverse Engineering (or some such abbreviation if that is too long). The basic screen would look something like this:
+----------------------------------------------------------------------------------------------------+ | | | +----------+ +------+-------+------------------------------------+------+ +--------------------+ | | | | | hdr1 | hdr2 | hdr3 | hdr4 | | | | | | | +------+-------+------------------------------------+------+ | | | | | Controls | | | | | | | Info | | | | | | col1 | col2 | col3 | col4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Status | | | | | | | | | | | | | | | TABLE | | | | | | | | | | | | | | Extra | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +------+-------+------------------------------------+------+ | | | +----------------------------------------------------------------------------------------------------+
The controls are just a set of controls - things that bring up dialogs for more information or perform actions. Like start/stop RE, switch modes, manipulate DBC files, etc. Left justified in the frame, and perhaps 10% of the width. Height can dynamically adjust with the text content.
The Status, Info, and Extra panes are just a dynamically updated text panes. Main code needs to be able to send text here and have it shown in the appropriate pane. Right justified in the frame and perhaps 30% of the width. Height can dynamically adjust with the text content.
The TABLE is a table. Probably 5 columns by many rows (anywhere from 20 to 200 or so). Either paged, scrolling, or just very tall. Paged is probably preferable. Would need a simple mechanism to dynamically add/update a row (identified by ‘key’ column and in sorted order), presumably using the web socket. Also need something to be able to dynamically clear the entire table. The RETOOLS code would use this to update the table in realtime (presumably over a web socket). It would be good if the table could do things like search filtering of displayed rows, column sorting, etc (all client side - something like datatables.net <http://datatables.net/>).
For example, look at this output:
OVMS# re dbc list key records ms last can1/100:0081 2 22000 01 02 03 04 05 | ..... can1/101 1 44000 01 02 03 04 | .... dbc/DI_Signal1: 129 km dbc/DI_Signal2: 1 km dbc/DI_Signal3: 130 kWh dbc/DI_Signal4: 122 Degrees
The idea is to be able to show the key, records, ms, last, and ascii dump in the main table. Then, clicking on a row would show the statistics for that message in the Info pane, and DBC signals in the Extra pane.
I can handle the RETOOLS side, but the javascript is beyond me. I also had a look at the ovms web server framework, but it doesn’t seem to be able to do the table part (yet)?
Any idea how complex this is?
Regards, Mark.
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev <http://lists.openvehicles.com/mailman/listinfo/ovmsdev>
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26 _______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev <http://lists.openvehicles.com/mailman/listinfo/ovmsdev>
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev <http://lists.openvehicles.com/mailman/listinfo/ovmsdev>
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev <http://lists.openvehicles.com/mailman/listinfo/ovmsdev>
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26 _______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
Mark, the stream update of an empty array "[]" is meant to be that way, so the receiver gets a valid JSON array. I wasn't aware DataTables doesn't keep the user page when rows are updated. IMO that should only happen when the table is cleared. If it loses the page, it may also lose the sort order, page size and filter -- did you observe that behaviour? I'm totally new to DataTables so need to dig for a solution. Regards, Michael Am 25.02.19 um 14:18 schrieb Mark Webb-Johnson:
Michael,
Looks good:
I played a roadster crtd log back through it, using a DBC to control the message multiplexing. No crashes.
I then added this live:
BO_ 836 TPMS: 8 TPMS SG_ v_tp_fl_p : 0|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_fr_p : 16|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_rl_p : 32|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_rr_p : 48|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_fl_t : 8|8@0+ (1,-40) [-40|100] "C" TPMS SG_ v_tp_fr_t : 24|8@0+ (1,-40) [-40|100] "C" TPMS SG_ v_tp_rl_t : 40|8@0+ (1,-40) [-40|100] "C" TPMS SG_ v_tp_rr_t : 56|8@0+ (1,-40) [-40|100] "C" TPMS
And got this:
key records ms last can1/344 24 583 57 48 56 49 75 4d 76 4e | WHVIuMvN dbc/v_tp_fl_p: 31.5789 psi dbc/v_tp_fr_p: 31.2159 psi dbc/v_tp_rl_p: 42.4682 psi dbc/v_tp_rr_p: 42.8312 psi dbc/v_tp_fl_t: 32 C dbc/v_tp_fr_t: 33 C dbc/v_tp_rl_t: 37 C dbc/v_tp_rr_t: 38 C
That looks good.
Only issue so far is that when I switch to page #2, it immediately switches back to page #1. I guess it thinks there is new data, but the link was idle at the time.
D (2097680) notify: Created entry type 'stream' subtype 'retools.status' size 269 has 1 readers pending D (2097680) notify: Created entry type 'stream' subtype 'retools.list.update' size 3 has 1 readers pending D (2098680) notify: Created entry type 'stream' subtype 'retools.status' size 269 has 1 readers pending D (2098690) notify: Created entry type 'stream' subtype 'retools.list.update' size 3 has 1 readers pending D (2099680) notify: Created entry type 'stream' subtype 'retools.status' size 269 has 1 readers pending D (2099680) notify: Created entry type 'stream' subtype 'retools.list.update' size 3 has 1 readers pending
It seems re_stream_changed always sends “[]”, even if no changes. Easy to fix, but perhaps better to address in the Javascript.
I’m going to continue with the live DBC editing commands now. That is the pain point for using this in the real world (as the current approach is onerous: (a) detaching the DBC from the CAN bus, (b) switching to editor, (c) editing the DBC, (d) switch to command and ‘dbc autoload’, then (e) re-attaching the DBC to the CAN bus). It can, however, all be done from the web interface. Also building up DBC files for Tesla Roadster, to see just how much can be done in that format. I think I also need to get my DBC implementation to support strings.
Regards, Mark.
On 24 Feb 2019, at 9:38 PM, Michael Balzer <dexter@expeedo.de <mailto:dexter@expeedo.de>> wrote:
Mark,
the crash was no memory corruption, it was a race condition in the RE init (the queue was created after the task).
DataTables integration and the first draft of the RE tools web UI is now in the hub. It's already usable but far from finished, so I didn't include it as a standard page. Install "web/retools.htm" as a plugin to use & work on it.
The layout is following your draft, and I've added some rules for small devices.
I've added some control buttons and status output, the table stream updates and a detail call on row clicks. Btw: it may be better to send detail info to the browser using the stream updates (for example in hidden columns), so the browser doesn't need to request them.
The table is mostly standard DataTable, I've only enabled the responsive plugin, that does dynamic hiding & drilldown of columns. I've included most of the plugins, so there are many additional options:
* Included libraries: o DataTables 1.10.18, Buttons 1.5.4, Column visibility 1.5.4, ColReorder 1.5.0, FixedColumns 3.2.5, FixedHeader 3.1.4, KeyTable 2.5.0, Responsive 2.2.2, RowGroup 1.1.0, RowReorder 1.2.4, Scroller 1.5.0, Select 1.2.6 * see https://datatables.net/extensions/index
The web UI listens to stream updates for the table and the text displays using this scheme:
* Subtype "retools/list/set" → replace list by payload * Subtype "retools/list/update" → update/extend list by payload * Subtype "retools/<boxid>" → set payload as text content in box <boxid>, boxid e.g. "status", "info" or "extra"
Example: notify raise text stream retools/extra "hi there"
Text boxes are currently <samp> with monospace font & text to html conversion. If you'd like to display HTML, replace "$('<div/>').text(msg.value).html()" by just "msg.value" on line 175.
Table updates are sent as JSON arrays with HTML markup for the changed/discovered highlighting. This currently uses <b> & <u>, which are styled accordingly. Command "re stream list" creates a message with all rows (no highlighting), "re stream changed" includes only changed rows (with highlighting).
I've added a first stream sender on the per second ticker. That currently simply sends all changed rows and could be optimized to only send those changed since the last tx. It could also make sense to raise the update frequency then.
The status box monitors some "retools" events I introduced, the stream ticker also updates the box -- if the stream subscription & updating is going to be permanent (as now), the event coupling can be removed.
Regards, Michael
Am 23.02.19 um 10:18 schrieb Michael Balzer:
Side note: starting the RE server from the web shell currently consistently results in a crash from xQueueReceive() that looks like our "old friend", the memory corruption.
Starting from the async console or ssh or via MP works. No idea yet how that could make a difference for xQueueReceive(), I'll assume it's the PSRAM bug for now.
D (38792) webcommand: HttpCommandStream[0x3fa2c358] init: handler=0x3fa2f6a0 command='re start' verbosity=65535 I (38812) webcommand: HttpCommandStream[0x3fa2c358]: 1996204 bytes free, executing: re start *assertion "res == coreID || res == portMUX_FREE_VAL" failed: file "/home/balzer/esp/esp-idf/components/freertos/portmux_impl.inc.h", line 105, function: vPortCPUAcquireMutexIntsDisabledExtram* abort() was called at PC 0x40112f67 on core 1
Backtrace: 0x40091188:0x3ffea650 0x40091383:0x3ffea670 0x40112f67:0x3ffea690 0x40093ce3:0x3ffea6c0 0x40095ac0:0x3ffea6f0 0x4016c08a:0x3ffea730 0x4016c0c1:0x3ffea770
Rebooting...
Am 16.02.19 um 14:00 schrieb Mark Webb-Johnson:
Thanks, Michael.
I can handle the RE side of things - just haven’t done a lot of work in JavaScript (too many people better at it than me at my day job, so I leave it to them). I can also probably extend it once the basics are working.
Just need a basic UI framework, and some way to push the data from RE.
No hurry.
Regards, Mark
On 16 Feb 2019, at 8:43 PM, Michael Balzer <dexter@expeedo.de <mailto:dexter@expeedo.de>> wrote:
Mark,
I haven't seen the necessity for a complex plugin just for table views up to now. Normally it's pretty simple to make dynamic tables just using HTML5 and jQuery. For example, see the file selector widget I created. That uses a table to display the file entries, it's dynamic, sortable & responsive with just a few lines of code.
DataTables adds a lot of features and simplifies manipulations of the data. I like the automatic responsive drilldown shown here: https://datatables.net/extensions/responsive/examples/styling/bootstrap.html
It's got some weight of course (about half of the charts lib with just the most basic extensions), so we would add it as an optional asset. On a first look it will need some customization for us, as it uses the glyphicons for the bootstrap 3 variant, which we don't include for size reasons.
What do others think? And which of the extensions should be included?
Overall, the UI as drafted shouldn't be hard to implement. I'll see if I can create a first version, but probably won't have the time before next weekend.
Regards, Michael
Am 13.02.19 um 13:05 schrieb Mark Webb-Johnson:
Michael, this is probably for you - but if anybody else can help please do…
I am trying to see how hard it would be to do a web based interface to the RETOOLS system. Presumably this would appear in the menu as Tools / Reverse Engineering (or some such abbreviation if that is too long). The basic screen would look something like this:
+----------------------------------------------------------------------------------------------------+ | | | +----------+ +------+-------+------------------------------------+------+ +--------------------+ | | | | | hdr1 | hdr2 | hdr3 | hdr4 | | | | | | | +------+-------+------------------------------------+------+ | | |
| | Controls | | | | | | | Info | | | | | | col1 | col2 | col3 | col4 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Status | | | | | | | | | | | | | | | TABLE | | | | | | | | | | | | | | Extra | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +----------+ | | | | | +--------------------+ | | | | | | | | | | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| +------+-------+------------------------------------+------+ | | | +----------------------------------------------------------------------------------------------------+
The controls are just a set of controls - things that bring up dialogs for more information or perform actions. Like start/stop RE, switch modes, manipulate DBC files, etc. Left justified in the frame, and perhaps 10% of the width. Height can dynamically adjust with the text content.
The Status, Info, and Extra panes are just a dynamically updated text panes. Main code needs to be able to send text here and have it shown in the appropriate pane. Right justified in the frame and perhaps 30% of the width. Height can dynamically adjust with the text content.
The TABLE is a table. Probably 5 columns by many rows (anywhere from 20 to 200 or so). Either paged, scrolling, or just very tall. Paged is probably preferable. Would need a simple mechanism to dynamically add/update a row (identified by ‘key’ column and in sorted order), presumably using the web socket. Also need something to be able to dynamically clear the entire table. The RETOOLS code would use this to update the table in realtime (presumably over a web socket). It would be good if the table could do things like search filtering of displayed rows, column sorting, etc (all client side - something like datatables.net <http://datatables.net/>).
For example, look at this output:
OVMS# re dbc list key records ms last can1/100:0081 2 22000 01 02 03 04 05 | ..... can1/101 1 44000 01 02 03 04 | .... dbc/DI_Signal1: 129 km dbc/DI_Signal2: 1 km dbc/DI_Signal3: 130 kWh dbc/DI_Signal4: 122 Degrees
The idea is to be able to show the key, records, ms, last, and ascii dump in the main table. Then, clicking on a row would show the statistics for that message in the Info pane, and DBC signals in the Extra pane.
I can handle the RETOOLS side, but the javascript is beyond me. I also had a look at the ovms web server framework, but it doesn’t seem to be able to do the table part (yet)?
Any idea how complex this is?
Regards, Mark.
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26 _______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26 _______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
Turns out the DataTables draw() function has a parameter for this: $list.draw(false); → https://datatables.net/reference/api/draw() Change is pushed, please test. Regards, Michael Am 25.02.19 um 18:01 schrieb Michael Balzer:
Mark,
the stream update of an empty array "[]" is meant to be that way, so the receiver gets a valid JSON array.
I wasn't aware DataTables doesn't keep the user page when rows are updated. IMO that should only happen when the table is cleared. If it loses the page, it may also lose the sort order, page size and filter -- did you observe that behaviour?
I'm totally new to DataTables so need to dig for a solution.
Regards, Michael
Am 25.02.19 um 14:18 schrieb Mark Webb-Johnson:
Michael,
Looks good:
I played a roadster crtd log back through it, using a DBC to control the message multiplexing. No crashes.
I then added this live:
BO_ 836 TPMS: 8 TPMS SG_ v_tp_fl_p : 0|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_fr_p : 16|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_rl_p : 32|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_rr_p : 48|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_fl_t : 8|8@0+ (1,-40) [-40|100] "C" TPMS SG_ v_tp_fr_t : 24|8@0+ (1,-40) [-40|100] "C" TPMS SG_ v_tp_rl_t : 40|8@0+ (1,-40) [-40|100] "C" TPMS SG_ v_tp_rr_t : 56|8@0+ (1,-40) [-40|100] "C" TPMS
And got this:
key records ms last can1/344 24 583 57 48 56 49 75 4d 76 4e | WHVIuMvN dbc/v_tp_fl_p: 31.5789 psi dbc/v_tp_fr_p: 31.2159 psi dbc/v_tp_rl_p: 42.4682 psi dbc/v_tp_rr_p: 42.8312 psi dbc/v_tp_fl_t: 32 C dbc/v_tp_fr_t: 33 C dbc/v_tp_rl_t: 37 C dbc/v_tp_rr_t: 38 C
That looks good.
Only issue so far is that when I switch to page #2, it immediately switches back to page #1. I guess it thinks there is new data, but the link was idle at the time.
D (2097680) notify: Created entry type 'stream' subtype 'retools.status' size 269 has 1 readers pending D (2097680) notify: Created entry type 'stream' subtype 'retools.list.update' size 3 has 1 readers pending D (2098680) notify: Created entry type 'stream' subtype 'retools.status' size 269 has 1 readers pending D (2098690) notify: Created entry type 'stream' subtype 'retools.list.update' size 3 has 1 readers pending D (2099680) notify: Created entry type 'stream' subtype 'retools.status' size 269 has 1 readers pending D (2099680) notify: Created entry type 'stream' subtype 'retools.list.update' size 3 has 1 readers pending
It seems re_stream_changed always sends “[]”, even if no changes. Easy to fix, but perhaps better to address in the Javascript.
I’m going to continue with the live DBC editing commands now. That is the pain point for using this in the real world (as the current approach is onerous: (a) detaching the DBC from the CAN bus, (b) switching to editor, (c) editing the DBC, (d) switch to command and ‘dbc autoload’, then (e) re-attaching the DBC to the CAN bus). It can, however, all be done from the web interface. Also building up DBC files for Tesla Roadster, to see just how much can be done in that format. I think I also need to get my DBC implementation to support strings.
Regards, Mark.
On 24 Feb 2019, at 9:38 PM, Michael Balzer <dexter@expeedo.de <mailto:dexter@expeedo.de>> wrote:
Mark,
the crash was no memory corruption, it was a race condition in the RE init (the queue was created after the task).
DataTables integration and the first draft of the RE tools web UI is now in the hub. It's already usable but far from finished, so I didn't include it as a standard page. Install "web/retools.htm" as a plugin to use & work on it.
The layout is following your draft, and I've added some rules for small devices.
I've added some control buttons and status output, the table stream updates and a detail call on row clicks. Btw: it may be better to send detail info to the browser using the stream updates (for example in hidden columns), so the browser doesn't need to request them.
The table is mostly standard DataTable, I've only enabled the responsive plugin, that does dynamic hiding & drilldown of columns. I've included most of the plugins, so there are many additional options:
* Included libraries: o DataTables 1.10.18, Buttons 1.5.4, Column visibility 1.5.4, ColReorder 1.5.0, FixedColumns 3.2.5, FixedHeader 3.1.4, KeyTable 2.5.0, Responsive 2.2.2, RowGroup 1.1.0, RowReorder 1.2.4, Scroller 1.5.0, Select 1.2.6 * see https://datatables.net/extensions/index
The web UI listens to stream updates for the table and the text displays using this scheme:
* Subtype "retools/list/set" → replace list by payload * Subtype "retools/list/update" → update/extend list by payload * Subtype "retools/<boxid>" → set payload as text content in box <boxid>, boxid e.g. "status", "info" or "extra"
Example: notify raise text stream retools/extra "hi there"
Text boxes are currently <samp> with monospace font & text to html conversion. If you'd like to display HTML, replace "$('<div/>').text(msg.value).html()" by just "msg.value" on line 175.
Table updates are sent as JSON arrays with HTML markup for the changed/discovered highlighting. This currently uses <b> & <u>, which are styled accordingly. Command "re stream list" creates a message with all rows (no highlighting), "re stream changed" includes only changed rows (with highlighting).
I've added a first stream sender on the per second ticker. That currently simply sends all changed rows and could be optimized to only send those changed since the last tx. It could also make sense to raise the update frequency then.
The status box monitors some "retools" events I introduced, the stream ticker also updates the box -- if the stream subscription & updating is going to be permanent (as now), the event coupling can be removed.
Regards, Michael
Am 23.02.19 um 10:18 schrieb Michael Balzer:
Side note: starting the RE server from the web shell currently consistently results in a crash from xQueueReceive() that looks like our "old friend", the memory corruption.
Starting from the async console or ssh or via MP works. No idea yet how that could make a difference for xQueueReceive(), I'll assume it's the PSRAM bug for now.
D (38792) webcommand: HttpCommandStream[0x3fa2c358] init: handler=0x3fa2f6a0 command='re start' verbosity=65535 I (38812) webcommand: HttpCommandStream[0x3fa2c358]: 1996204 bytes free, executing: re start *assertion "res == coreID || res == portMUX_FREE_VAL" failed: file "/home/balzer/esp/esp-idf/components/freertos/portmux_impl.inc.h", line 105, function: vPortCPUAcquireMutexIntsDisabledExtram* abort() was called at PC 0x40112f67 on core 1
Backtrace: 0x40091188:0x3ffea650 0x40091383:0x3ffea670 0x40112f67:0x3ffea690 0x40093ce3:0x3ffea6c0 0x40095ac0:0x3ffea6f0 0x4016c08a:0x3ffea730 0x4016c0c1:0x3ffea770
Rebooting...
Am 16.02.19 um 14:00 schrieb Mark Webb-Johnson:
Thanks, Michael.
I can handle the RE side of things - just haven’t done a lot of work in JavaScript (too many people better at it than me at my day job, so I leave it to them). I can also probably extend it once the basics are working.
Just need a basic UI framework, and some way to push the data from RE.
No hurry.
Regards, Mark
On 16 Feb 2019, at 8:43 PM, Michael Balzer <dexter@expeedo.de <mailto:dexter@expeedo.de>> wrote:
Mark,
I haven't seen the necessity for a complex plugin just for table views up to now. Normally it's pretty simple to make dynamic tables just using HTML5 and jQuery. For example, see the file selector widget I created. That uses a table to display the file entries, it's dynamic, sortable & responsive with just a few lines of code.
DataTables adds a lot of features and simplifies manipulations of the data. I like the automatic responsive drilldown shown here: https://datatables.net/extensions/responsive/examples/styling/bootstrap.html
It's got some weight of course (about half of the charts lib with just the most basic extensions), so we would add it as an optional asset. On a first look it will need some customization for us, as it uses the glyphicons for the bootstrap 3 variant, which we don't include for size reasons.
What do others think? And which of the extensions should be included?
Overall, the UI as drafted shouldn't be hard to implement. I'll see if I can create a first version, but probably won't have the time before next weekend.
Regards, Michael
Am 13.02.19 um 13:05 schrieb Mark Webb-Johnson: > > Michael, this is probably for you - but if anybody else can help please do… > > I am trying to see how hard it would be to do a web based interface to the RETOOLS system. Presumably this would appear in the menu as Tools / Reverse > Engineering (or some such abbreviation if that is too long). The basic screen would look something like this: > > +----------------------------------------------------------------------------------------------------+ > | | > | +----------+ +------+-------+------------------------------------+------+ +--------------------+ | > | | | | hdr1 | hdr2 | hdr3 | hdr4 | | | | > | | | +------+-------+------------------------------------+------+ | | | > > | | Controls | | | | | | | Info | | > | | | | col1 | col2 | col3 | col4 | | | | > | | | | | | | | | | | > | | | | | | | | | | | > | | | | | | | | | | | > | +----------+ | | | | | +--------------------+ | > | | | | | | | > | +----------+ | | | | | +--------------------+ | > | | | | | | | | | | | > | | | | | | | | | | | > | | | | | | | | | | | > | | Status | | | | | | | | | > | | | | | | TABLE | | | | | > | | | | | | | | | Extra | | > | | | | | | | | | | | > | | | | | | | | | | | > | | | | | | | | | | | > | | | | | | | | | | | > | | | | | | | | | | | > | | | | | | | | | | | > | +----------+ | | | | | +--------------------+ | > | | | | | | | > | | | | | | | > > | | | | | | | > > | | | | | | | > > | | | | | | | > > | | | | | | | > > | | | | | | | > > | | | | | | | > > | | | | | | | > > | | | | | | | > > | +------+-------+------------------------------------+------+ | > | | > +----------------------------------------------------------------------------------------------------+ > > > The controls are just a set of controls - things that bring up dialogs for more information or perform actions. Like start/stop RE, switch modes, > manipulate DBC files, etc. Left justified in the frame, and perhaps 10% of the width. Height can dynamically adjust with the text content. > > The Status, Info, and Extra panes are just a dynamically updated text panes. Main code needs to be able to send text here and have it shown in the > appropriate pane. Right justified in the frame and perhaps 30% of the width. Height can dynamically adjust with the text content. > > The TABLE is a table. Probably 5 columns by many rows (anywhere from 20 to 200 or so). Either paged, scrolling, or just very tall. Paged is probably > preferable. Would need a simple mechanism to dynamically add/update a row (identified by ‘key’ column and in sorted order), presumably using the web > socket. Also need something to be able to dynamically clear the entire table. The RETOOLS code would use this to update the table in realtime > (presumably over a web socket). It would be good if the table could do things like search filtering of displayed rows, column sorting, etc (all client > side - something like datatables.net <http://datatables.net/>). > > For example, look at this output: > > OVMS# re dbc list > key records ms last > can1/100:0081 2 22000 01 02 03 04 05 | ..... > can1/101 1 44000 01 02 03 04 | .... > dbc/DI_Signal1: 129 km > dbc/DI_Signal2: 1 km > dbc/DI_Signal3: 130 kWh > dbc/DI_Signal4: 122 Degrees > > > The idea is to be able to show the key, records, ms, last, and ascii dump in the main table. Then, clicking on a row would show the statistics for that > message in the Info pane, and DBC signals in the Extra pane. > > I can handle the RETOOLS side, but the javascript is beyond me. I also had a look at the ovms web server framework, but it doesn’t seem to be able to do > the table part (yet)? > > Any idea how complex this is? > > Regards, Mark. > > > _______________________________________________ > OvmsDev mailing list > OvmsDev@lists.openvehicles.com > http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26 _______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26 _______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
Works well now. Very smooth. Regards, Mark.
On 26 Feb 2019, at 2:32 AM, Michael Balzer <dexter@expeedo.de> wrote:
Turns out the DataTables draw() function has a parameter for this:
$list.draw(false);
→ https://datatables.net/reference/api/draw() <https://datatables.net/reference/api/draw()>
Change is pushed, please test.
Regards, Michael
Am 25.02.19 um 18:01 schrieb Michael Balzer:
Mark,
the stream update of an empty array "[]" is meant to be that way, so the receiver gets a valid JSON array.
I wasn't aware DataTables doesn't keep the user page when rows are updated. IMO that should only happen when the table is cleared. If it loses the page, it may also lose the sort order, page size and filter -- did you observe that behaviour?
I'm totally new to DataTables so need to dig for a solution.
Regards, Michael
Am 25.02.19 um 14:18 schrieb Mark Webb-Johnson:
Michael,
Looks good:
I played a roadster crtd log back through it, using a DBC to control the message multiplexing. No crashes.
I then added this live:
BO_ 836 TPMS: 8 TPMS SG_ v_tp_fl_p : 0|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_fr_p : 16|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_rl_p : 32|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_rr_p : 48|8@0+ (0.362976,0) [0|1000] "psi" TPMS SG_ v_tp_fl_t : 8|8@0+ (1,-40) [-40|100] "C" TPMS SG_ v_tp_fr_t : 24|8@0+ (1,-40) [-40|100] "C" TPMS SG_ v_tp_rl_t : 40|8@0+ (1,-40) [-40|100] "C" TPMS SG_ v_tp_rr_t : 56|8@0+ (1,-40) [-40|100] "C" TPMS
And got this:
key records ms last can1/344 24 583 57 48 56 49 75 4d 76 4e | WHVIuMvN dbc/v_tp_fl_p: 31.5789 psi dbc/v_tp_fr_p: 31.2159 psi dbc/v_tp_rl_p: 42.4682 psi dbc/v_tp_rr_p: 42.8312 psi dbc/v_tp_fl_t: 32 C dbc/v_tp_fr_t: 33 C dbc/v_tp_rl_t: 37 C dbc/v_tp_rr_t: 38 C
That looks good.
Only issue so far is that when I switch to page #2, it immediately switches back to page #1. I guess it thinks there is new data, but the link was idle at the time.
D (2097680) notify: Created entry type 'stream' subtype 'retools.status' size 269 has 1 readers pending D (2097680) notify: Created entry type 'stream' subtype 'retools.list.update' size 3 has 1 readers pending D (2098680) notify: Created entry type 'stream' subtype 'retools.status' size 269 has 1 readers pending D (2098690) notify: Created entry type 'stream' subtype 'retools.list.update' size 3 has 1 readers pending D (2099680) notify: Created entry type 'stream' subtype 'retools.status' size 269 has 1 readers pending D (2099680) notify: Created entry type 'stream' subtype 'retools.list.update' size 3 has 1 readers pending
It seems re_stream_changed always sends “[]”, even if no changes. Easy to fix, but perhaps better to address in the Javascript.
I’m going to continue with the live DBC editing commands now. That is the pain point for using this in the real world (as the current approach is onerous: (a) detaching the DBC from the CAN bus, (b) switching to editor, (c) editing the DBC, (d) switch to command and ‘dbc autoload’, then (e) re-attaching the DBC to the CAN bus). It can, however, all be done from the web interface. Also building up DBC files for Tesla Roadster, to see just how much can be done in that format. I think I also need to get my DBC implementation to support strings.
Regards, Mark.
On 24 Feb 2019, at 9:38 PM, Michael Balzer <dexter@expeedo.de <mailto:dexter@expeedo.de>> wrote:
Mark,
the crash was no memory corruption, it was a race condition in the RE init (the queue was created after the task).
DataTables integration and the first draft of the RE tools web UI is now in the hub. It's already usable but far from finished, so I didn't include it as a standard page. Install "web/retools.htm" as a plugin to use & work on it.
The layout is following your draft, and I've added some rules for small devices.
I've added some control buttons and status output, the table stream updates and a detail call on row clicks. Btw: it may be better to send detail info to the browser using the stream updates (for example in hidden columns), so the browser doesn't need to request them.
The table is mostly standard DataTable, I've only enabled the responsive plugin, that does dynamic hiding & drilldown of columns. I've included most of the plugins, so there are many additional options: Included libraries: DataTables 1.10.18, Buttons 1.5.4, Column visibility 1.5.4, ColReorder 1.5.0, FixedColumns 3.2.5, FixedHeader 3.1.4, KeyTable 2.5.0, Responsive 2.2.2, RowGroup 1.1.0, RowReorder 1.2.4, Scroller 1.5.0, Select 1.2.6 see https://datatables.net/extensions/index <https://datatables.net/extensions/index> The web UI listens to stream updates for the table and the text displays using this scheme: Subtype "retools/list/set" → replace list by payload Subtype "retools/list/update" → update/extend list by payload Subtype "retools/<boxid>" → set payload as text content in box <boxid>, boxid e.g. "status", "info" or "extra" Example: notify raise text stream retools/extra "hi there"
Text boxes are currently <samp> with monospace font & text to html conversion. If you'd like to display HTML, replace "$('<div/>').text(msg.value).html()" by just "msg.value" on line 175.
Table updates are sent as JSON arrays with HTML markup for the changed/discovered highlighting. This currently uses <b> & <u>, which are styled accordingly. Command "re stream list" creates a message with all rows (no highlighting), "re stream changed" includes only changed rows (with highlighting).
I've added a first stream sender on the per second ticker. That currently simply sends all changed rows and could be optimized to only send those changed since the last tx. It could also make sense to raise the update frequency then.
The status box monitors some "retools" events I introduced, the stream ticker also updates the box -- if the stream subscription & updating is going to be permanent (as now), the event coupling can be removed.
Regards, Michael
Am 23.02.19 um 10:18 schrieb Michael Balzer:
Side note: starting the RE server from the web shell currently consistently results in a crash from xQueueReceive() that looks like our "old friend", the memory corruption.
Starting from the async console or ssh or via MP works. No idea yet how that could make a difference for xQueueReceive(), I'll assume it's the PSRAM bug for now.
D (38792) webcommand: HttpCommandStream[0x3fa2c358] init: handler=0x3fa2f6a0 command='re start' verbosity=65535 I (38812) webcommand: HttpCommandStream[0x3fa2c358]: 1996204 bytes free, executing: re start assertion "res == coreID || res == portMUX_FREE_VAL" failed: file "/home/balzer/esp/esp-idf/components/freertos/portmux_impl.inc.h", line 105, function: vPortCPUAcquireMutexIntsDisabledExtram abort() was called at PC 0x40112f67 on core 1
Backtrace: 0x40091188:0x3ffea650 0x40091383:0x3ffea670 0x40112f67:0x3ffea690 0x40093ce3:0x3ffea6c0 0x40095ac0:0x3ffea6f0 0x4016c08a:0x3ffea730 0x4016c0c1:0x3ffea770
Rebooting...
Am 16.02.19 um 14:00 schrieb Mark Webb-Johnson:
Thanks, Michael.
I can handle the RE side of things - just haven’t done a lot of work in JavaScript (too many people better at it than me at my day job, so I leave it to them). I can also probably extend it once the basics are working.
Just need a basic UI framework, and some way to push the data from RE.
No hurry.
Regards, Mark
On 16 Feb 2019, at 8:43 PM, Michael Balzer <dexter@expeedo.de <mailto:dexter@expeedo.de>> wrote:
> Mark, > > I haven't seen the necessity for a complex plugin just for table views up to now. Normally it's pretty simple to make dynamic tables just using HTML5 and jQuery. For example, see the file selector widget I created. That uses a table to display the file entries, it's dynamic, sortable & responsive with just a few lines of code. > > DataTables adds a lot of features and simplifies manipulations of the data. I like the automatic responsive drilldown shown here: > https://datatables.net/extensions/responsive/examples/styling/bootstrap.html <https://datatables.net/extensions/responsive/examples/styling/bootstrap.html> > > It's got some weight of course (about half of the charts lib with just the most basic extensions), so we would add it as an optional asset. On a first look it will need some customization for us, as it uses the glyphicons for the bootstrap 3 variant, which we don't include for size reasons. > > What do others think? And which of the extensions should be included? > > Overall, the UI as drafted shouldn't be hard to implement. I'll see if I can create a first version, but probably won't have the time before next weekend. > > Regards, > Michael > > > Am 13.02.19 um 13:05 schrieb Mark Webb-Johnson: >> >> Michael, this is probably for you - but if anybody else can help please do… >> >> I am trying to see how hard it would be to do a web based interface to the RETOOLS system. Presumably this would appear in the menu as Tools / Reverse Engineering (or some such abbreviation if that is too long). The basic screen would look something like this: >> >> +----------------------------------------------------------------------------------------------------+ >> | | >> | +----------+ +------+-------+------------------------------------+------+ +--------------------+ | >> | | | | hdr1 | hdr2 | hdr3 | hdr4 | | | | >> | | | +------+-------+------------------------------------+------+ | | | >> | | Controls | | | | | | | Info | | >> | | | | col1 | col2 | col3 | col4 | | | | >> | | | | | | | | | | | >> | | | | | | | | | | | >> | | | | | | | | | | | >> | +----------+ | | | | | +--------------------+ | >> | | | | | | | >> | +----------+ | | | | | +--------------------+ | >> | | | | | | | | | | | >> | | | | | | | | | | | >> | | | | | | | | | | | >> | | Status | | | | | | | | | >> | | | | | | TABLE | | | | | >> | | | | | | | | | Extra | | >> | | | | | | | | | | | >> | | | | | | | | | | | >> | | | | | | | | | | | >> | | | | | | | | | | | >> | | | | | | | | | | | >> | | | | | | | | | | | >> | +----------+ | | | | | +--------------------+ | >> | | | | | | | >> | | | | | | | >> | | | | | | | >> | | | | | | | >> | | | | | | | >> | | | | | | | >> | | | | | | | >> | | | | | | | >> | | | | | | | >> | | | | | | | >> | +------+-------+------------------------------------+------+ | >> | | >> +----------------------------------------------------------------------------------------------------+ >> >> The controls are just a set of controls - things that bring up dialogs for more information or perform actions. Like start/stop RE, switch modes, manipulate DBC files, etc. Left justified in the frame, and perhaps 10% of the width. Height can dynamically adjust with the text content. >> >> The Status, Info, and Extra panes are just a dynamically updated text panes. Main code needs to be able to send text here and have it shown in the appropriate pane. Right justified in the frame and perhaps 30% of the width. Height can dynamically adjust with the text content. >> >> The TABLE is a table. Probably 5 columns by many rows (anywhere from 20 to 200 or so). Either paged, scrolling, or just very tall. Paged is probably preferable. Would need a simple mechanism to dynamically add/update a row (identified by ‘key’ column and in sorted order), presumably using the web socket. Also need something to be able to dynamically clear the entire table. The RETOOLS code would use this to update the table in realtime (presumably over a web socket). It would be good if the table could do things like search filtering of displayed rows, column sorting, etc (all client side - something like datatables.net <http://datatables.net/>). >> >> For example, look at this output: >> >> OVMS# re dbc list >> key records ms last >> can1/100:0081 2 22000 01 02 03 04 05 | ..... >> can1/101 1 44000 01 02 03 04 | .... >> dbc/DI_Signal1: 129 km >> dbc/DI_Signal2: 1 km >> dbc/DI_Signal3: 130 kWh >> dbc/DI_Signal4: 122 Degrees >> >> The idea is to be able to show the key, records, ms, last, and ascii dump in the main table. Then, clicking on a row would show the statistics for that message in the Info pane, and DBC signals in the Extra pane. >> >> I can handle the RETOOLS side, but the javascript is beyond me. I also had a look at the ovms web server framework, but it doesn’t seem to be able to do the table part (yet)? >> >> Any idea how complex this is? >> >> Regards, Mark. >> >> >> >> _______________________________________________ >> OvmsDev mailing list >> OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> >> http://lists.openvehicles.com/mailman/listinfo/ovmsdev <http://lists.openvehicles.com/mailman/listinfo/ovmsdev> > > -- > Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal > Fon 02333 / 833 5735 * Handy 0176 / 206 989 26 > _______________________________________________ > OvmsDev mailing list > OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> > http://lists.openvehicles.com/mailman/listinfo/ovmsdev <http://lists.openvehicles.com/mailman/listinfo/ovmsdev>
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev <http://lists.openvehicles.com/mailman/listinfo/ovmsdev>
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev <http://lists.openvehicles.com/mailman/listinfo/ovmsdev>
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26 _______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev <http://lists.openvehicles.com/mailman/listinfo/ovmsdev>
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev <http://lists.openvehicles.com/mailman/listinfo/ovmsdev>
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
_______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com <mailto:OvmsDev@lists.openvehicles.com> http://lists.openvehicles.com/mailman/listinfo/ovmsdev <http://lists.openvehicles.com/mailman/listinfo/ovmsdev>
-- Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal Fon 02333 / 833 5735 * Handy 0176 / 206 989 26 _______________________________________________ OvmsDev mailing list OvmsDev@lists.openvehicles.com http://lists.openvehicles.com/mailman/listinfo/ovmsdev
participants (4)
-
Geir Øyvind Vælidalo -
Mark Webb-Johnson -
Michael Balzer -
Robert Cotran