Skip to content

Commit da9acf8

Browse files
author
CK1
committed
Bugfix: Clear SendQueue, Optimization
1 parent a3f9e14 commit da9acf8

File tree

1 file changed

+25
-18
lines changed

1 file changed

+25
-18
lines changed

src/main.cpp

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,31 +9,40 @@
99
#include "settings.h"
1010

1111
long door_counter = -1;
12+
int sended_AlarmPackages = 0;
1213

1314
void resetToDefaultValues()
1415
{
15-
watchdog = 1; // Reset Watchdog
16-
door_state = digitalRead(PIN_DOOR_SWITCH); // Reset Doorstate
16+
watchdog = 1; // Reset Watchdog
17+
door_state = 1; // Reset Doorstate
18+
door_counter = -1; // Reset DoorCounter
1719
}
1820

1921
void CheckAlarm_SendAlarmLoraPackage()
2022
{
21-
if ((millis() - oldTime > minSendIntervall) && AlarmMode_Enabled) // Debouncing/Entprellung Switch - The millis() function will overflow (go back to zero), after approximately 50 days. (Max value = 4.294.967.295)
23+
if ((millis() - oldTime > minSendIntervall) && AlarmMode_Enabled) // Limit for sending Lora Packages - The millis() function will overflow (go back to zero), after approximately 50 days. (Max value = 4.294.967.295)
2224
{
2325
if (watchdog == 0) // Real Alarm?
2426
{
25-
LoRaWANDo(); // Run os_runloop_once() for LMIC OS
26-
27-
if (!os_queryTimeCriticalJobs(ms2osticks(500)))
27+
if (!os_queryTimeCriticalJobs(ms2osticks(300)))
2828
{
29-
// Queue Lora Package
30-
LoRaWANDo_send(&sendjob); // Send Alarm Message
29+
os_clearCallback(&sendjob); // Clear the SendQueue
30+
LoRaWANDo_send(&sendjob); // Queue Lora Package - Send Alarm Message
31+
LoRaWANDo(); //Run os_runloop_once() for LMIC OS
32+
33+
Serial.println("Alarm Package queued!!"); // Debug
3134

32-
// Debug
33-
Serial.println("Alarm Package queued!!");
35+
oldTime = millis(); // Remember last run time.
36+
sended_AlarmPackages++; // Counter for sended Alarm Packages
3437

35-
oldTime = millis(); // Remember last run time.
36-
minSendIntervall = 600000; // Intervall to Send Alarm Pakages in ms 600000=10min - From here on, an alarm message is only sent every x ms.
38+
if (sended_AlarmPackages <= 2) // Send n AlarmPackages to TTN with fast Intervall
39+
{
40+
minSendIntervall = 30000; // Fast Intervall 30 Sek
41+
}
42+
else
43+
{
44+
minSendIntervall = 600000; // If the door remains permanently open: Intervall to Send Alarm Pakages in ms 600000=10min - From here on, an alarm message is only sent every x ms.
45+
}
3746
}
3847
}
3948
}
@@ -47,16 +56,15 @@ void CheckDoorStateForAlarm()
4756
}
4857
else // Door is closed
4958
{
50-
door_counter = -1;
51-
door_state = 1;
52-
minSendIntervall = 180000; // Intervall to Send Alarm Pakages in ms 180000=3min -> If door is closed reset to fast SendIntervall
59+
resetToDefaultValues();
60+
minSendIntervall = 180000; // Intervall to Send Alarm Pakages in ms 180000=3min -> If door is closed reset to normal SendIntervall
61+
sended_AlarmPackages = 0; // Rest Counter sended Alarm Packages
5362
}
5463

5564
if (door_counter >= 50000) // Door must opened for some time --> Debouncing
5665
{
57-
door_state = 0; // Door open
5866
watchdog = 0; // Real Alarm
59-
door_counter = -1; // Door Counter Reset
67+
door_state = 0; // Door open
6068

6169
Serial.println("Door open!");
6270

@@ -91,5 +99,4 @@ void loop() // Infinity Loop
9199
CheckDoorStateForAlarm();
92100
}
93101
LoRaWANDo();
94-
os_getTime(); //probably not needed.
95102
}

0 commit comments

Comments
 (0)