-
Notifications
You must be signed in to change notification settings - Fork 206
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature: Stock Ticker #341
Comments
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? |
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 <#289>. The difference is that #289 <#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 <#341 (comment)>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AA4HCF3LNR373PFFXRHZ6D3XOPEVZANCNFSM6AAAAAAZ4652RI>.
You are receiving this because you were mentioned.
|
No worries. I've closed issue #289 in favor of this one. |
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. |
I already have the code for a single item compiling. I have not tested it yet. I will start planning for this model now. |
@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. |
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!
- Dave
… 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 <#341 (comment)>, or unsubscribe <https://github.com/notifications/unsubscribe-auth/AA4HCFYI5TV2HKCKCFRXEWLXPZFRTANCNFSM6AAAAAAZ4652RI>.
You are receiving this because you were mentioned.
|
@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. |
@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. |
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
<611ce62>.
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
<#341 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACCSD3ZBUBPP7BXGO4MPD6DX6RZJ5AVCNFSM6AAAAAAZ4652RKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTONJTHE3DINZYG4>
.
You are receiving this because you are subscribed to this thread.Message
ID: ***@***.***
com>
|
Thank you for looking at the code.
I look forward to working with you too. |
@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? |
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. |
@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. |
@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. |
@rbergen I did reach out again tonight. Thank you. |
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
<marquee><blink>TUIs</blink></marquee> 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
<#341 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACCSD37NJW4PAZFMZY6OLGDX6S4D5AVCNFSM6AAAAAAZ4652RKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTONJUGI3DSOBVGQ>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
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. |
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.
|
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
<#341 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACCSD33JFNRMSHAHGNV4UXDYEXHZXAVCNFSM6AAAAAAZ4652RKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMJUGAZDGMZQGM>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
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. |
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:
|
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
<#341 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/ACCSD326Z4APAEJ35JVDFD3YEZSVVAVCNFSM6AAAAAAZ4652RKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMJVGE4DCNRSGU>
.
You are receiving this because you commented.Message ID:
***@***.***>
|
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
> <#341 (comment)>,
> or unsubscribe
> <https://github.com/notifications/unsubscribe-auth/ACCSD326Z4APAEJ35JVDFD3YEZSVVAVCNFSM6AAAAAAZ4652RKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMJVGE4DCNRSGU>
> .
> You are receiving this because you commented.Message ID:
> ***@***.***>
>
|
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
>> <#341 (comment)>,
>> or unsubscribe
>> <https://github.com/notifications/unsubscribe-auth/ACCSD326Z4APAEJ35JVDFD3YEZSVVAVCNFSM6AAAAAAZ4652RKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMJVGE4DCNRSGU>
>> .
>> You are receiving this because you commented.Message ID:
>> ***@***.***>
>>
>
|
Now that Weather is stable, I am going to turn my attention back to this one. |
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. |
Resolved by #626. |
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!).
The text was updated successfully, but these errors were encountered: