PlummersSoftwareLLC / NightDriverStrip

NightDriver client for ESP32
https://plummerssoftwarellc.github.io/NightDriverStrip/
GNU General Public License v3.0
1.28k stars 210 forks source link

Feature: Stock Ticker #341

Closed davepl closed 1 month ago

davepl commented 1 year ago

We need a stock ticker effect. It should use an API that is free and for which the user can sign up for their own key, so that everyone is not using the same API key, unless it's unlimited (even bettter!).

Ticker should cycle through the specified stocks at some interval. It would be nice if it showed current and change, used color to indicate up vs down, and so on. Look at other stock tickers to see what functionality is included (but don't overtly copy anyone's design!).

rbergen commented 1 year ago

This looks like a duplicate/evolution of #289. The difference is that #289 describes an effect that shows the stock price for one listing, and this issue describes a ticker that cycles through multiple.

@davepl Would you agree that one stock price/ticker effect would be enough? If so, would I be correct that this issue reflects your current thoughts on how it should work?

davepl commented 1 year ago

Yes, one should be closed as duplicate, my bad!

On Jul 4, 2023, at 1:01 AM, Rutger van Bergen @.***> wrote:

This looks like a duplicate/evolution of #289 https://github.com/PlummersSoftwareLLC/NightDriverStrip/issues/289. The difference is that #289 https://github.com/PlummersSoftwareLLC/NightDriverStrip/issues/289 describes an effect that shows the stock price for one listing, and this issue describes a ticker that cycles through multiple.

@davepl https://github.com/davepl Would you agree that one stock price/ticker effect would be enough? If so, would I be correct that this issue reflects your current thoughts on how it should work?

— Reply to this email directly, view it on GitHub https://github.com/PlummersSoftwareLLC/NightDriverStrip/issues/341#issuecomment-1619735941, or unsubscribe https://github.com/notifications/unsubscribe-auth/AA4HCF3LNR373PFFXRHZ6D3XOPEVZANCNFSM6AAAAAAZ4652RI. You are receiving this because you were mentioned.

rbergen commented 1 year ago

No worries. I've closed issue #289 in favor of this one.

mggates39 commented 1 year ago

Sweet, I was going to ask if this was going to be planned as I had already thought of a couple of ways to do it.
My one question is do we want each ticker item to be a separate parameter, or just an array or comma separated list of items?

mggates39 commented 1 year ago

I already have the code for a single item compiling. I have not tested it yet. I will start planning for this model now.

rbergen commented 12 months ago

My one question is do we want each ticker item to be a separate parameter, or just an array or comma separated list of items?

@mggates39 I just realized I thought of a reply when I read this, but never actually typed it in. Apologies for the delay.

As I understand it, stock symbols are usually composed of a few capital letters, optionally prefixed with a similar number of letters and a colon to indicate the stock exchange they are listed at: NASDAQ:ABNB for AirBNB, AMS:PHIA for Philips (listed at the Amsterdam exchange). To me, these stock symbols look like like tokens that can quite easily be combined into one comma-separated string/parameter.

davepl commented 12 months ago

You MIGHT need the exchange info but I think most quote services can do it off the ticker only, but you won’t know until you check the actual data service being used.

Like the Apple Stock widget, it would be nice to have the ticker symbol, current price, change in red/green percent, and a little intra-day grap!

On Jul 12, 2023, at 12:17 AM, Rutger van Bergen @.***> wrote:

My one question is do we want each ticker item to be a separate parameter, or just an array or comma separated list of items?

@mggates39 https://github.com/mggates39 I just realized I thought of a reply when I read this, but never actually typed it in. Apologies for the delay.

As I understand it, stock symbols are usually composed of a few capital letters, optionally prefixed with a similar number of letters and a colon to indicate the stock exchange they are listed at: NASDAQ:ABNB for AirBNB, AMS:PHIA for Philips (listed at the Amsterdam exchange). To me, these stock symbols look like like tokens that can quite easily be combined into one comma-separated string/parameter.

— Reply to this email directly, view it on GitHub https://github.com/PlummersSoftwareLLC/NightDriverStrip/issues/341#issuecomment-1631978498, or unsubscribe https://github.com/notifications/unsubscribe-auth/AA4HCFYI5TV2HKCKCFRXEWLXPZFRTANCNFSM6AAAAAAZ4652RI. You are receiving this because you were mentioned.

mggates39 commented 11 months ago

@davepl and @rbergen Comma seperated list it is. Do you want a maximum number or just grab the necessary number data sets with smart pointers? The service I am using, https://finnhub.io/docs/api/introduction, works across many exchanges and the data returned includes the exchange name along with the company's full name. I should have something for review this weekend. I have not been able to run what I have, but it does compile.

mggates39 commented 9 months ago

@davepl I am at a point where I really need a mesmerizer board to test. I have a 32x64 LED Matrix but nothing to drive it. I have kept my fork up to date and can share my development branch if someone wants to pull the code and run it. Please send pictures if you do this.

robertlipe commented 9 months ago

Not to detract from the point, but as a possible workaround: Has anyone had luck with the COLORDATA_SERVER_ENABLED server that starts on port 12,000 (not $c001 as documented) and been able to pull pixel data from the board and display it in a web browser, SDL, Qt, or some other kind of universal "splash pixels into a window on a Real Computer" mode?

I tried it once (admittedly some time ago and didn't debug it) and despite the simplicity of the server at https://github.com/PlummersSoftwareLLC/NightDriverStrip/blob/fdd79e3f02b27058b98eb91fe1e3f327c7e61e3a/src/network.cpp#L656, I couldn't get a number of RGB values that matched height x width. Successive packets were all of differing sizes, though I couldn't find compression or anything in the path.

For a whole lot of my development, I'd be pretty happy with a configurable (e.g. a Spectrum shouldn't be a single row of 768 pixels, it should be three 8x8 clumps; Mesmerizer should be exactly what's in the first couple bytes of a header, etc.) visualization tool over wiring up test fixtures and power supplies and all that goes with it.

One of your comments says you have a M5StickCPlus https://github.com/PlummersSoftwareLLC/NightDriverStrip/commit/611ce62948a8737ed94190a2d734b1689f952e3f. I understand that MOST panels, if you're running < a foot or two of wire, don't really need voltage shifters (i think I paid $3 for 20...), even with the 3.3V from the ESP32. Mesmerizer's pinouts are in https://github.com/PlummersSoftwareLLC/NightDriverStrip/blob/fdd79e3f02b27058b98eb91fe1e3f327c7e61e3a/include/MatrixHardware_ESP32_Custom.h#L117 so as long as the code and your own wiring match, you sould be able to wire one up. If you have a ribbon cable (picture, not endorsement) https://www.ribbon-cable.com/product/arduino-ribbon-cable-multicolored-dupont-wires/ that comes out into individual pins on both ends wiring would be fragile, but not terribly difficult. Remember that the panel requires serious current; you can't feed it from parasitic power on the data bus.

The code looks really interesting! I have some questions and suggestions (e.g. stringstream or ranges over bouncing back to C strings in ParseTS - heck,, getting rid of C strings as much as possible, make numberTickers a const and then size tickers from that, questions on whether that httpRequest() in getStockData() is blocking until it awaits a reply, etc.) I'd expect Rutget to have som input on those JsonDocument sizes since buffers WAY smaller than what you were using were patched this morning as they were causing chaos. Isnt' a test for no api key actually fatal, saving us from testing for it at 10Hz?

This looks like a lovely addition! When you're ready for more feedback, I'd welcome a chance to work together on it.

On Mon, Oct 9, 2023 at 5:13 PM Marshall G Gates @.***> wrote:

@davepl https://github.com/davepl I am at a point where I really need a mesmerizer board to test. I have a 32x64 LED Matrix but nothing to drive it. I have kept my fork up to date and can share my development branch https://github.com/mggates39/NightDriverStrip/tree/dev/mgg_Multi_Ticker if someone wants to pull the code and run it. Please send pictures if you do this.

— Reply to this email directly, view it on GitHub https://github.com/PlummersSoftwareLLC/NightDriverStrip/issues/341#issuecomment-1753964787, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACCSD3ZBUBPP7BXGO4MPD6DX6RZJ5AVCNFSM6AAAAAAZ4652RKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTONJTHE3DINZYG4 . You are receiving this because you are subscribed to this thread.Message ID: @.*** com>

mggates39 commented 9 months ago

Thank you for looking at the code.

I look forward to working with you too.

rbergen commented 9 months ago

@mggates39 Very nice to see you're still working on this, and making progress. I saw you mentioning the need for a Mesmerizer to test - I just wanted to check if you've been in touch with Dave via email about this?

mggates39 commented 9 months ago

As for my M5StickCPlus I have one that I am using to drive small LED Strips. I will try to snag another that I can pop open to get to all the I/O Pins. I also have an AdaFruit Matrix Portal that has the wiring to drive the power to the board. I have not figured a way to port the code to run on that M0 though. I do have wires for when I get another M5StickCPlus to play with.

mggates39 commented 9 months ago

@rbergen Yes, I have requested a board twice now. Once back at the first of June and again at the end of July. Received an e-mail back from Dave then saying that the next batch of boards had been DHL'd from the manufacturer.

I also just sent the two e-mails again with the output of a compile tonight of the Stock Ticker codebase.

rbergen commented 9 months ago

@mggates39 He won't be offended if you reach out to him again to let him know yours hasn't arrived yet. He may have some means to track the package and see if it got held up somewhere.

mggates39 commented 9 months ago

@rbergen I did reach out again tonight. Thank you.

robertlipe commented 9 months ago

Cool. I didn't really mean to start splitting hairs now. I just wanted you to know that people read your code and cared. :-)

Oh, you do have a collection of boards that's, um, yeah let's leave that with Dave.

That board is a convenient size for some tasks, but sure doesn't leave you with a lot of open GPIOs. Some of the newer chips (chips != boards) start with 45 GPIOs that have a big pin MUX on the front so you can assign about any function to about any physical pin. (I have another chip in my life with 80. Life is interesting when you're porting code that tries to keep status in 32-bit bitmasks.) If you're a hardware hacker, more pins (and a lower prices to allow for smoke. :-) ) is super handy. I'm growing fond of the ESP32-S3-Devkit (but with USB-C) clones or the LuaTOS boards but you have to be prepared to translate Chinese every now and then. :-) TBC: there's plenty of room for fun with all the boards and "make your own Mesmerizer, LOL!" isn't exactly a requirement. It's challenging in a crowd like this to know if you're being helpful or frustrating. The "Sure, I just got back my 100th design, featuring my home-grown RISC-V core, from JLCPB" crowd may find smack-talk like that inspiring while I totally get that it frustrates that person that bought their first soldering iron just to attach that wire to Pin 5 and survived the glboals.h gauntlet.

Funny you mention the Portal. Just this weekend, I came across its successor. It was born when the SAM part became unobtainable during chippagedeon. The guts of it are little more than an ESP-S3-WROOM strapped to a level shifter and brought to a HUB75 connector. Enough pins are available that you could probably tack a remote and mic to it and, with some fiddling, run very much the same code. Maybe they could ride along on that little Stemma connector that Adafruit uses. Limor likes the SAM SoC's, but they're not seemingly popular elsewhere. Since that hardware is discontinued, wading through the Platformio and FreeDOS stuff would just be pain with minimal reward. (Well, other than making cool software work on hardware you've already paid for which is far from a BAD goal - you just can't expect much help.)

The current code is pretty married to Arduino and STM32. I've had some hare-brained thoughts about breaking the project into pieces so you could run it on other small OSes that do more for you like Nuttx to run on a BL808, CV1800B, Pi, or something. It's a fun idea, but I don't know that it really moves the ball forward in an interesting way.

I, too, had thought about adding scrolling panes to Mesmerizer. Define corners, a scrolling region, an amount, a callback when the new rol/column is ready to be filled and a callback for the pixels that were just "shifted" out, ... Almost required for TUIs but could be useful for even some graphical effects. Implementing BIOS int 10 or VT-100 Set Scrolling Region isn't crazy now, is it? Actually, setting fonts, colors, and scrolling regions via escape codes isn't a totally terrible idea...)

Re: HTTP.Get() blocking. I don't know. It's always a challenge for me on anything Arduino to see how reckless any arbitrary library is to the rest of the system. So much of it is developed for those tiny ATMega parts that are, at best, a giant superloop and often blocking that I'm suspicious. I noticed early on that we depend on a package called "AsyncTCP" which immediately set off alarms for me. So let's see. https://github.com/amcewen/HttpClient makes no mention of sleeping or timeouts or blocking or any of those other Adult Neworking concepts. An Uno and a dual-core 32-bitter with many many MBs of RAM are just different. The IDF layer goes to pain to document the rules https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/protocols/esp_http_client.html#_CPPv423esp_http_client_perform24esp_http_client_handle_t we just have to figure out how they apply to us.

Oh, and this isn't just arbitrary chop-busting. This side of the code is similar to an effect I'd started on for Sports scores. It seemed to work, but I noticed the audio meter got a little spazzy when I made the request. I didn't try traffic-shaping it down to a 2G cell connection or something just to terrorize it. So this was something already on my mind to explore more.

There are so many fun and interesting possible ways to take this project!

On Mon, Oct 9, 2023 at 10:10 PM Marshall G Gates @.***> wrote:

@rbergen https://github.com/rbergen Yes, I have requested a board twice now. Once back at the first of June and again at the end of July. Received an e-mail back from Dave then saying that the next batch of boards had been DHL'd from the manufacturer.

— Reply to this email directly, view it on GitHub https://github.com/PlummersSoftwareLLC/NightDriverStrip/issues/341#issuecomment-1754269854, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACCSD37NJW4PAZFMZY6OLGDX6S4D5AVCNFSM6AAAAAAZ4652RKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTONJUGI3DSOBVGQ . You are receiving this because you commented.Message ID: @.***>

mggates39 commented 7 months ago

I got this running on my 4MB board like I did for the weather icon feature and I found several bugs that I am cleaning up. Then I need to rethink how I am doing the scrolling. The simple thing I did throws a lot of error logs for pixel out of bounds. Maybe after I get a matrix wired to it I can see how it looks and just live with the error logs until I have a better idea.

rbergen commented 7 months ago

I'm glad to hear you're still working on this, but we will to have to fix the errors you mention before we add this effect. Uncaught out-of-bound errors are known to cause crashes in certain situations, sometimes even intermittently.

GFXBase (a pointer to which is readily available in any LEDStripEffect subclass via g()) has a function called isValidPixel(x, y) that'll tell you if the coordinates you pass to it are valid. Preventing the out-of-bound errors can be just as simple as not drawing a pixel if isValidPixel() says its coordinates are false.

robertlipe commented 7 months ago

This summer, Rutger, right about the time I was landing SM, Dave committed changes to gfxbase that make it call isValidPixel to almost everything you an do in gfxbase that touches g()->leds and spews debugE messages if you've violated them. It's not quite as harsh as an assertion, but on failure, it slows things down so badly you'll almost wish for a coredump instead. It SHOULD be about impossible to generate an OOB access now using 'normal' primitives like getPixel, setPixel and such.

https://github.com/PlummersSoftwareLLC/NightDriverStrip/blob/3b796e5cdfe16d55fef306c7e998228ed9b174d6/include/gfxbase.h#L346

So I suspect that Marshall might have once gotten away with OOB accesses (I did) but there's a new sheriff in town that pretty aggressively checks and debug prints on an OOB access.

This is how I spent many days fixing bounds violations that were always there, but suddenly caught ... in code that landed on the floor. Remember? When I first submitted for review, the code was silently wrong, but "working", but while I was working on it, it became fatal errors that were then backed to debugE's "by popular demand".

We thus need to gradually trend to NOT casually callign iVP() in effects/ because gfxbase is going to anyway. In places like implementing a clipping mask, sure avoid the call and certainly avoid the error message, but the paranoia checks can safely go now. There are a few extra ones to learn about like DrawSafeCircle that lets you draw a potentially clipped circle by checking all the pixels in a way that a straight bounding box computation for the normal DSS() can't.

I do agree that we should not check in code that knowingly trips these errors.

On Thu, Nov 16, 2023 at 2:51 AM Rutger van Bergen @.***> wrote:

I'm glad to hear you're still working on this, but we will to have to fix the errors you mention before we add this effect. Uncaught out-of-bound errors are known to cause crashes in certain situations, sometimes even intermittently.

GFXBase (a pointer to which is readily available in any LEDStripEffect subclass via g()) has a function called isValidPixel(x, y) that'll tell you if the coordinates you pass to it are valid. Preventing the out-of-bound errors can be just as simple to not drawing a pixel if isValidPixel() says its coordinates are false.

— Reply to this email directly, view it on GitHub https://github.com/PlummersSoftwareLLC/NightDriverStrip/issues/341#issuecomment-1814023303, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACCSD33JFNRMSHAHGNV4UXDYEXHZXAVCNFSM6AAAAAAZ4652RKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMJUGAZDGMZQGM . You are receiving this because you commented.Message ID: @.***>

rbergen commented 7 months ago

The main thing is that I don't want code at higher levels in the stack to rely on lower levels doing the checking - it just might not happen there, or not until eternity. If we ever were to run into (general) performance problems that are sufficiently significant to fix, that sort of lower-level check could be one of the things to go. Being protective and supportive to our effect writers is a priority, but getting the pixels out there is a higher one.

I agree that in principle, the basic algorithm used should ensure that only pixels that actually exist are sent colors to, so the whole issue doesn't have to be checked for anywhere. That said, for me it's also ok if the effect writer chooses to use boundary check facilities provided by the framework, if they are willing to take any performance hit that comes with. In the case of a casual scroll on a ticker tape effect, that may just work out well enough.

mggates39 commented 7 months ago

Yeah, what I have up there now, just cycles between the three hard coded symbols, Apple, IBM, and Microsoft. If anyone wants to load it up and send me pictures of the matrix I would appreciate it.

I just have a few things outstanding:

robertlipe commented 7 months ago

I grabbed the code gh repo clone mggates39/NightDriverStrip copied my secrets.h, then flashed it to my board via ~/.platformio/penv/bin/pio run --target upload -e mesmerizer

... and I don't see symbols for parseticker or the strings IBM or Microsoft in new places. Strings like GetStockTickerAPIKey do not appear in the code.

Is it perhaps on a different tree or something now?

On Thu, Nov 16, 2023 at 1:30 PM Marshall G Gates @.***> wrote:

Yeah, what I have up there now, just cycles between the three hard coded symbols, Apple, IBM, and Microsoft. If anyone wants to load it up and send me pictures of the matrix I would appreciate it.

I just have a few things outstanding:

  • Process the actual list of symbols.
  • Remove bad symbols from the list.
  • Determine a reasonable maximum number of symbols or better yet make the ticket object list dynamic.
  • Design and build a better scrolling method.

— Reply to this email directly, view it on GitHub https://github.com/PlummersSoftwareLLC/NightDriverStrip/issues/341#issuecomment-1815181625, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACCSD326Z4APAEJ35JVDFD3YEZSVVAVCNFSM6AAAAAAZ4652RKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMJVGE4DCNRSGU . You are receiving this because you commented.Message ID: @.***>

robertlipe commented 7 months ago

OK, the instructions left off the branch

git checkout dev/mgg_Multi_Ticker

git status On branch dev/mgg_Multi_Ticker Your branch is up to date with 'origin/dev/mgg_Multi_Ticker'.

fails to build:

Compiling .pio/build/mesmerizer/src/jsonserializer.cpp.o In file included from include/systemcontainer.h:37, from src/deviceconfig.cpp:34: include/deviceconfig.h:81:32: error: 'cszStockTickerAPIKey' was not declared in this scope String stockTickerApiKey = cszStockTickerAPIKey; ^~~~~~~~ include/deviceconfig.h:81:32: note: suggested alternative: 'GetStockTickerAPIKey'

On Thu, Nov 16, 2023 at 1:51 PM Robert Lipe @.***> wrote:

I grabbed the code gh repo clone mggates39/NightDriverStrip copied my secrets.h, then flashed it to my board via ~/.platformio/penv/bin/pio run --target upload -e mesmerizer

... and I don't see symbols for parseticker or the strings IBM or Microsoft in new places. Strings like GetStockTickerAPIKey do not appear in the code.

Is it perhaps on a different tree or something now?

On Thu, Nov 16, 2023 at 1:30 PM Marshall G Gates @.***> wrote:

Yeah, what I have up there now, just cycles between the three hard coded symbols, Apple, IBM, and Microsoft. If anyone wants to load it up and send me pictures of the matrix I would appreciate it.

I just have a few things outstanding:

  • Process the actual list of symbols.
  • Remove bad symbols from the list.
  • Determine a reasonable maximum number of symbols or better yet make the ticket object list dynamic.
  • Design and build a better scrolling method.

— Reply to this email directly, view it on GitHub https://github.com/PlummersSoftwareLLC/NightDriverStrip/issues/341#issuecomment-1815181625, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACCSD326Z4APAEJ35JVDFD3YEZSVVAVCNFSM6AAAAAAZ4652RKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMJVGE4DCNRSGU . You are receiving this because you commented.Message ID: @.***>

robertlipe commented 7 months ago

Ah, you added a symbol to secrets.h that needs to be updated. Leaving it blank results in

[ 69949][E][WiFiClientSecure.cpp:144] connect(): start_ssl_client: -32512 (W) (updateTickerCode)(C1) Error fetching data for company of for ticker: AAPL (W) (UpdateStock)(C1) Failed to get Stock Ticker Info [ 70014][E][ssl_client.cpp:37] _handle_error(): [start_ssl_client():264]: (-32512) SSL - Memory allocation failed [ 70015][E][WiFiClientSecure.cpp:144] connect(): start_ssl_client: -32512 (W) (updateTickerCode)(C1) Error fetching data for company of for ticker: IBM (W) (UpdateStock)(C1) Failed to get Stock Ticker Info [ 70102][E][ssl_client.cpp:37] _handle_error(): [start_ssl_client():264]: (-32512) SSL - Memory allocation failed

Probably best to not even try to do the fetch if there's no API key defined.

Attempting to get a key from https://finnhub.io/register results in "Netw0rk Error".

Retrying several times succeeded. Pasting that key in...

No error, but it displays "No API key".

We see it indeed fails on the fetch:

(I) (ConnectToWiFi)(C1) Web Server begin called! (I) (loop)(C1) WiFi: WL_CONNECTED, IP: 192.168.2.165, Mem: 40176, LargestBlk: 31732, PSRAM Free: 421031/4173371, LED FPS: 23 Refresh: 60 Hz, Power: 1942 mW, Brite: 100%, Audio FPS: 43, MinVU: 218.5, PeakVU: 225.3, VURatio: 0.1 Buffer: 0/500, CPU: 089%, 094%, FreeDraw: 0.009 (W) (NotifyJSONWriterThread)(C1) >> Notifying JSON Writer Thread [ 8751][E][WiFiClient.cpp:517] flush(): fail on fd 54, errno: 11, "No more processes" (I) (UpdateSubscribers)(C1) Got YouTube subscriber count for channel Daves Garage (GUID 9558daa1-eae8-482f-8066-17fa787bc0e4) [ 8831][E][ssl_client.cpp:37] _handle_error(): [start_ssl_client():264]: (-32512) SSL - Memory allocation failed [ 8831][E][WiFiClientSecure.cpp:144] connect(): start_ssl_client: -32512 (W) (updateTickerCode)(C1) Error fetching data for company of for ticker: AAPL (W) (UpdateStock)(C1) Failed to get Stock Ticker Info [ 8885][E][ssl_client.cpp:37] _handle_error(): [start_ssl_client():264]: (-32512) SSL - Memory allocation failed [ 8886][E][WiFiClientSecure.cpp:144] connect(): start_ssl_client: -32512 (W) (updateTickerCode)(C1) Error fetching data for company of for ticker: IBM (W) (UpdateStock)(C1) Failed to get Stock Ticker Info [ 8947][E][ssl_client.cpp:37] _handle_error(): [start_ssl_client():264]: (-32512) SSL - Memory allocation failed [ 8948][E][WiFiClientSecure.cpp:144] connect(): start_ssl_client: -32512 (W) (updateTickerCode)(C1) Error fetching data for company of for ticker: MSFT (W) (UpdateStock)(C1) Failed to get Stock Ticker Info (I) (WriteCurrentEffectIndexFile)(C0) Number of bytes written to file /current.cfg: 2 (I) (loop)(C1) WiFi: WL_CONNECTED, IP: 192.168.2.165, Mem: 40016, LargestBlk: 31732, PSRAM Free: 419335/4173275, LED FPS: 10 Refresh: 60 Hz, Power: 2839 mW, Brite: 100%, Audio FPS: 43, MinVU: 229.1, PeakVU: 234.8, VURatio: 0.0 Buffer: 0/500, CPU: 047%, 018%, FreeDraw: 0.085 (I) (loop)(C1) WiFi: WL_CONNECTED, IP: 192.168.2.165, Mem: 40012, LargestBlk: 31732, PSRAM Free: 419335/4173275, LED FPS: 10 Refresh: 60 Hz, Power: 2838 mW, Brite: 100%, Audio FPS: 45, MinVU: 214.3, PeakVU: 231.3, VURatio: 0.0 Buffer: 0/500, CPU: 046%, 013%, FreeDraw: 0.090 (I) (loop)(C1) WiFi: WL_CONNECTED, IP: 192.168.2.165, Mem: 40012, LargestBlk: 31732, PSRAM Free: 419135/4173259, LED FPS: 10 Refresh: 60 Hz, Power: 2838 mW, Brite: 100%, Audio FPS: 41, MinVU: 242.0, PeakVU: 254.0, VURatio: 0.1 Buffer: 0/500, CPU: 045%, 012%, FreeDraw: 0.092 (I) (loop)(C1) WiFi: WL_CONNECTED, IP: 192.168.2.165, Mem: 39924, LargestBlk: 31732, PSRAM Free: 419663/4173275, LED FPS: 10 Refresh: 60 Hz, Power: 2842 mW, Brite: 100%, Audio FPS: 43, MinVU: 214.6, PeakVU: 237.2, VURatio: 0.1 Buffer: 0/500, CPU: 046%, 013%, FreeDraw: 0.090 (I) (loop)(C1) WiFi: WL_CONNECTED, IP: 192.168.2.165, Mem: 39924, LargestBlk: 31732, PSRAM Free: 419135/4173259, LED FPS: 10 Refresh: 60 Hz, Power: 2839 mW, Brite: 100%, Audio FPS: 45, MinVU: 204.5, PeakVU: 216.7, VURatio: 0.1 Buffer: 0/500, CPU: 046%, 013%, FreeDraw: 0.091 (I) (loop)(C1) WiFi: WL_CONNECTED, IP: 192.168.2.165, Mem: 39924, LargestBlk: 31732, PSRAM Free: 419663/4173275, LED FPS: 10 Refresh: 60 Hz, Power: 2838 mW, Brite: 100%, Audio FPS: 45, MinVU: 217.9, PeakVU: 225.3, VURatio: 0.0 Buffer: 0/500, CPU: 045%, 011%, FreeDraw: 0.091 [ 39006][E][ssl_client.cpp:37] _handle_error(): [start_ssl_client():264]: (-32512) SSL - Memory allocation failed [ 39007][E][WiFiClientSecure.cpp:144] connect(): start_ssl_client: -32512 (W) (updateTickerCode)(C1) Error fetching data for company of for ticker: AAPL (W) (UpdateStock)(C1) Failed to get Stock Ticker Info [ 39042][E][ssl_client.cpp:37] _handle_error(): [start_ssl_client():264]: (-32512) SSL - Memory allocation failed [ 39042][E][WiFiClientSecure.cpp:144] connect(): start_ssl_client: -32512 (W) (updateTickerCode)(C1) Error fetching data for company of for ticker: IBM (W) (UpdateStock)(C1) Failed to get Stock Ticker Info [ 39099][E][ssl_client.cpp:37] _handle_error(): [start_ssl_client():264]: (-32512) SSL - Memory allocation failed [ 39099][E][WiFiClientSecure.cpp:144] connect(): start_ssl_client: -32512 (W) (updateTickerCode)(C1) Error fetching data for company of for ticker: MSFT (W) (UpdateStock)(C1) Failed to get Stock Ticker Info

This is a stock mesmerizer board so it has 4MB of PSRAM and most of it is available. I'll bet this is a "wrong error" case and this tracks back to

[ 8751][E][WiFiClient.cpp:517] flush(): fail on fd 54, errno: 11, "No more processes"

But there's no file by that name in the tree, so we chase it into yet another of PlatformIO's secret hidey holes: @.*** /libraries/WiFi/src/WiFiClient.cpp

and we see that recv() is failing:

while(a){
    toRead =

(a>WIFI_CLIENT_FLUSH_BUFFER_SIZE)?WIFI_CLIENT_FLUSH_BUFFER_SIZE:a; res = recv(fd(), buf, toRead, MSG_DONTWAIT); if(res < 0) { log_e("fail on fd %d, errno: %d, \"%s\"", fd(), errno, strerror(errno)); stop();

(errno handling in UNIX was so dumb...)

Does that help any? Seems like there are at least a few actionalble items there.

On Thu, Nov 16, 2023 at 1:59 PM Robert Lipe @.***> wrote:

OK, the instructions left off the branch

git checkout dev/mgg_Multi_Ticker

git status On branch dev/mgg_Multi_Ticker Your branch is up to date with 'origin/dev/mgg_Multi_Ticker'.

fails to build:

Compiling .pio/build/mesmerizer/src/jsonserializer.cpp.o In file included from include/systemcontainer.h:37, from src/deviceconfig.cpp:34: include/deviceconfig.h:81:32: error: 'cszStockTickerAPIKey' was not declared in this scope String stockTickerApiKey = cszStockTickerAPIKey; ^~~~~~~~ include/deviceconfig.h:81:32: note: suggested alternative: 'GetStockTickerAPIKey'

On Thu, Nov 16, 2023 at 1:51 PM Robert Lipe @.***> wrote:

I grabbed the code gh repo clone mggates39/NightDriverStrip copied my secrets.h, then flashed it to my board via ~/.platformio/penv/bin/pio run --target upload -e mesmerizer

... and I don't see symbols for parseticker or the strings IBM or Microsoft in new places. Strings like GetStockTickerAPIKey do not appear in the code.

Is it perhaps on a different tree or something now?

On Thu, Nov 16, 2023 at 1:30 PM Marshall G Gates < @.***> wrote:

Yeah, what I have up there now, just cycles between the three hard coded symbols, Apple, IBM, and Microsoft. If anyone wants to load it up and send me pictures of the matrix I would appreciate it.

I just have a few things outstanding:

  • Process the actual list of symbols.
  • Remove bad symbols from the list.
  • Determine a reasonable maximum number of symbols or better yet make the ticket object list dynamic.
  • Design and build a better scrolling method.

— Reply to this email directly, view it on GitHub https://github.com/PlummersSoftwareLLC/NightDriverStrip/issues/341#issuecomment-1815181625, or unsubscribe https://github.com/notifications/unsubscribe-auth/ACCSD326Z4APAEJ35JVDFD3YEZSVVAVCNFSM6AAAAAAZ4652RKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMJVGE4DCNRSGU . You are receiving this because you commented.Message ID: @.***>

mggates39 commented 7 months ago

Now that Weather is stable, I am going to turn my attention back to this one.

mggates39 commented 7 months ago

I have a new milestone on my development branch.

I still need to do the following:

I have built and run it on my development board, but I still do not have my hardware set up to drive my matrix display. I need to clear out some workspace to do the hardware work. If someone could pull the branch down and run the code, I would appreciate a couple of images of the display.

The expected behavior, once you have an API key in your secrets file, will be be alternate between, Apple, IBM and Microsoft changing every 30 seconds. While it is showing the stock data, it should toggle between the high and low prices and the open and close prices every 5 seconds. The log indicates it is doing this, but I have not seen it yet.

rbergen commented 1 month ago

Resolved by #626.