made it pretty clear that itās not another send and forget library. But I agree that I could have made it clearer. In the end, I just threw it in, in case it helps someone.
I did not go through the whole thread so idk about all the problems discussed. I did not run into any of the problems mentioned in the first post.
The project is tested against V3 and works fine for me. However I canāt guarantee that there are no bugs. Iāve been using it for two years now and for my use cases it works.
I created a fork at https://github.com/novag/SlimLoRa and prepared it for usage with the Arduino std library. It does not work yet since the timing related code has to be adapted to the Arduino libraries. I do not have much experience with Arduinos so this might take some time. Thereās still polishing work to do and, given the much looser memory requirements, lots of functionality can be added or rewritten. I will add issues for the things I remember. Since I am quite busy until the end of March, it may take some time.
Contributions welcome.
@rvdvoort This shouldnāt be too hard. Leave me a message with what does not work.
Iām sorry but in the context of this thread āimplemented large partsā¦ā has little weight and sounds no better than a statement/assertion such as the earlier
It likely would just as easily still not be LoRaWAN, though I am glad you have provided more information and the fact that it
Sounds promising, but TinyLoRa works for others so I would like to know e.g. whilst working for you does it cause problems for others such as triggering the download avalanche discussed and described earlierā¦do you have access to a gw? Does it indicate node misbehaviour? If not then sounds promising and I await reports back from other users with their assessments of if plays nicely with V3 please keep posting & help us fill in the blanksā¦
THANK YOU! You give me hope. Still trying to undestand MCCI LMIC code, TinyLoRa style is easier for me.
Already opened an issue with some PR from TinyLoRa thatās maybe helpful.
@Jeff-UK@cslorabox I donāt get the rush to criticize him. One click away is the repos. After reading his message, the first thing I did, was to click.
The libraryās name SlimLoRa is a bit misleading as it tries to target LoRaWAN, not LoRa.
SlimLoRaWAN looks more appropriate but the library is not (fully) LoRaWAN compliant.
If it (also) is based on LMIC then SlimLMIC might be a good candidate for a name.
[update]
Based on below responses SimpleLoRa is still the most suitable of the above three names.
Not to start a discussion here but not being (fully) compliant is usually easier. (e.g. mastering only half of the theory required for driving a car in public traffic is easier but will make you a poor driver.)
This library does not implement any kind of event handling. A call to the Join and SendData methods will block for several seconds until the end of the second receive window.
If there is no support for event handling then how do you handle (sequence of) downlinks?
If I remember correctly, when thereās pending data for a class A device, the device has to send another uplink packet to receive the pending data no? While thereās currently no pending data support it would be easy to notify the user of the pending data and ask him to queue for a second uplink packet.
How this exactly happens on protocol level Iām not sure.
When using LMIC and the node receives a sequence of queued downlinks, this will happen automatically without intervention of the application code. This is done by the library automatically (like handling of MAC command like Status request).
The application will handle al downlink messages (payload data) via an event handler. Therefore I was interested in how SimpleLoRa handles downlink messages without supporting event handling.
The author said the code āwill block for several seconds until the end of the second receive window.ā.
Thus it handles downlinks by not doing anything else while they are possible.
Since TTN only supports class A, a downlink is only possible in direct response to an uplink. Even the FPending bit is just an invitation to send another uplink so that an additional downlink can follow, the additional downlink wonāt be sent on its own.
Itās presumably handled by this library too. Though not handling it would not really cause an issue, because the network canāt do anything until the node sends another uplink, and its free to make that minutes, hours, or days later at its discretion.
Perhaps some of the confusion is coming from the way some other codebases try to create a sort of interface between library and application (LMiC does so in a very unclear way, LoRaMAC does so not just there but between layers of itself in a way abstracted nearly to the point of absurdity); I suspect this one is flatter and more directly coupled.
After changing the sleep commands to the correct ATTiny84 version and selecting the correct port for tne RFM95 NSS I only had 1 error during compiling regarding the timer TIMSK in the timing.cpp file.
I made the following change in timing.cpp file
TIMSK |= (1 << OCIE0A); ====> TIMSK0 |= (1 << OCIE0A);
After that I was able to compile but no result when trying to connect to TTN
This resulted into 1 activation message as per below. So I believe it has something to do with how the timer has been set-up. However I am not familiar with how to correctly set-up the timer for the ATTiny84 using registers. Maybe you can help me setting up this part of the code correctly.
On my fork / branch: try-to-compile I adapted some code and compiles with arduino IDE.
Only the first time I had a successfull join (!) and afterwards an uplink. I was excited and moved forward and added SetPower, SetDataRate, debugging options, but after that I never joined again. Tested with V3. I abandoned OTAA and tried ABP. It works since it does need downlinks, but it seems that also the downlinks are not working.
In other words, it seems that the timing creates problem with downlinks. I didnāt investigate it further. I have the impression that instead of 5 seconds it opens the window at approx 1 sec.
TTN V3 absolutely requires proper downlink and MAC command support, even for ABP.
The reality is that trying to make a minimal LoRaWan implementation which actually works correctly is extremely hard, because LoRaWan is not a simple protocol at all.
Thereās been talk / an effective feature request that TTN have a way to register nodes with only partial LoRaWan support, but so far it does not - unless or until such a thing is added āincompleteā nodes must not be registered on TTN. because they will trick the network into sending unanswered downlinks over and over and over again, each of which blocks the gatewayās ability to receive other properly functioning nodes.
I know. Thatās the reason for my report and my effort to port it to arduino. To enable support for downlinks. At current state itās the same with TinyLoRa.
Today I saw two examples for timing. I hope I will try those days.
Forgot to add, that maybe the problem is with my GW. Thatās one more reason I want people to test SlimLoRa. Maybe itās already listening for downlinks at right time (default 5 secs to my understanding).