Adjusted logic to use new csv storage

This commit is contained in:
Jean Jacques Avril 2022-02-16 23:08:28 +01:00
parent 57a48839bc
commit fc44a3fd8d
7 changed files with 1275 additions and 56 deletions

File diff suppressed because it is too large Load Diff

10
data/userdb.csv.bak Normal file
View File

@ -0,0 +1,10 @@
1,Max1,Muster,RFID,12341,1
2,Max2,Muster,RFID,12342,1
3,Max3,Muster,RFID,12343,1
4,Max4,Muster,RFID,12344,1
5,Max5,Muster,RFID,12345,1
6,Max6,Muster,RFID,12346,1
7,Max7,Muster,RFID,12347,1
8,Max8,Muster,RFID,12348,1
9,Max9,Muster,RFID,12349,1
10,Max20,Muster,RFID,12340,1

View File

@ -84,7 +84,9 @@ void Keyboard::scanColumn(uint8_t *key_ptr, uint8_t start, uint8_t stop)
_timeElapsed = millis(); _timeElapsed = millis();
this->_lastKey = *key_ptr; this->_lastKey = *key_ptr;
this->_buffer.push_back(mapChr(*key_ptr)); this->_buffer.push_back(mapChr(*key_ptr));
#ifdef DEBUG
Serial.print(*key_ptr); Serial.print(*key_ptr);
#endif
return; return;
} }
} }

View File

@ -24,7 +24,7 @@ void Rfid::scan()
this->_rfid = ""; this->_rfid = "";
for (byte i = 0; i < this->_mfrc522.uid.size; i++) for (byte i = 0; i < this->_mfrc522.uid.size; i++)
{ {
this->_rfid += this->_mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "; this->_rfid += this->_mfrc522.uid.uidByte[i] < 0x10 ? "0" : "";
this->_rfid += String(this->_mfrc522.uid.uidByte[i], HEX); this->_rfid += String(this->_mfrc522.uid.uidByte[i], HEX);
} }
this->_rfid.trim(); this->_rfid.trim();
@ -32,7 +32,9 @@ void Rfid::scan()
if (this->_rfid != this->_lastRfid || millis() > this->_lastRfidScan + RFID_TIMEOUT) if (this->_rfid != this->_lastRfid || millis() > this->_lastRfidScan + RFID_TIMEOUT)
{ {
_status = 1; _status = 1;
#ifdef DEBUG
Serial.print(this->_rfid); Serial.print(this->_rfid);
#endif
this->_lastRfid = this->_rfid; this->_lastRfid = this->_rfid;
this->_lastRfidScan = millis(); this->_lastRfidScan = millis();
} }

View File

@ -48,24 +48,8 @@ User UserDb::user_by_uid(unsigned long cmp){
void UserDb::print_to_serial() void UserDb::print_to_serial()
{ {
Serial.println("Starting UserDB Test Read"); Serial.println("Starting UserDB Test Read");
// File userdb_file = LittleFS.open("userdb.csv","r"); for(Iterator it = begin(); it.has_next(); ++it){
// if (!userdb_file)
//{
// Serial.println("Failed to open file for reading");
// return;
// }
// unsigned int line = 0;
// while(userdb_file.available()){
// String temp = userdb_file.readStringUntil('\n');
// User res = read_csv_line(temp);
// Serial.println(res.toString());
// line++;
// }
Iterator it = begin();
do
{
User temp = *it; User temp = *it;
Serial.println(temp.toString()); Serial.println(temp.toString());
++it; }
} while (it.has_next());
} }

View File

@ -26,7 +26,7 @@ namespace userdb
mutable String last_name; mutable String last_name;
mutable String rfid_uid; mutable String rfid_uid;
mutable String user_pin; mutable String user_pin;
mutable bool enabled = true; mutable bool enabled = false;
bool operator<(const User &o) const { return uid < o.uid; } bool operator<(const User &o) const { return uid < o.uid; }
bool operator==(const User &o) const { return uid == o.uid; } bool operator==(const User &o) const { return uid == o.uid; }
String toString() String toString()
@ -53,7 +53,7 @@ namespace userdb
int str_length = instring.length() - 1; int str_length = instring.length() - 1;
for (int i = 0; i < str_length; i++) for (int i = 0; i < str_length; i++)
{ {
if (instring.charAt(i) == ',') if (instring.charAt(i) == ';')
{ {
locations[location_index] = i; locations[location_index] = i;
location_index++; location_index++;
@ -106,11 +106,11 @@ namespace userdb
} }
bool has_next() bool has_next()
{ {
return db_file.available(); return available;
} }
void next() void next()
{ {
if (has_next()) if (db_file.available())
{ {
String temp = db_file.readStringUntil('\n'); String temp = db_file.readStringUntil('\n');
current = read_csv_line(temp, line); current = read_csv_line(temp, line);
@ -118,6 +118,8 @@ namespace userdb
} }
else else
{ {
available=false;
current=User{};
db_file.close(); db_file.close();
} }
}; };
@ -125,6 +127,7 @@ namespace userdb
private: private:
File db_file; File db_file;
User current; User current;
bool available = true;
unsigned int line = 0; unsigned int line = 0;
}; };
Iterator begin() { return Iterator(LittleFS.open("userdb.csv", "r")); } Iterator begin() { return Iterator(LittleFS.open("userdb.csv", "r")); }

View File

@ -6,7 +6,7 @@
#include "Interface.h" #include "Interface.h"
#include <ESP8266WiFi.h> #include <ESP8266WiFi.h>
#include <vector> #include <vector>
#include "Users.h" //#include "Users.h"
#include "UserDb.h" #include "UserDb.h"
#include "Persistence.h" #include "Persistence.h"
// File persistence // File persistence
@ -27,46 +27,56 @@ IPAddress gateway(192, 168, 4, 9);
IPAddress subnet(255, 255, 255, 0); IPAddress subnet(255, 255, 255, 0);
// User DB // User DB
Users users(persistence); //Users users(persistence);
void setup() void setup()
{ {
Persistence::Configuration config = persistence.loadConfig(); Persistence::Configuration config = persistence.loadConfig();
users.ImportFromPersistence(); //users.ImportFromPersistence();
Serial.begin(9600); Serial.begin(9600);
Serial.print("Starting"); Serial.print("Starting");
Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!"); Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!");
Serial.println(WiFi.softAP(config.SSID) ? "Ready" : "Failed!"); if (strlen(config.PASS)>0)
Serial.println(WiFi.softAP(config.SSID, config.PASS) ? "Ready" : "Failed!");
else
Serial.println(WiFi.softAP(config.SSID) ? "Ready" : "Failed!");
delay(250);
#ifdef DEBUG
userdatabase.print_to_serial(); userdatabase.print_to_serial();
//delay(500); #endif
keyboard.begin(&Wire); keyboard.begin(&Wire);
rfid.begin(); rfid.begin();
iface.begin(&keyboard); iface.begin(&keyboard);
//while(users.countUsers()<100){
// users.addUser("Harry","Potter","","1234");
//}
Serial.println(userdatabase.user_by_pin("12348").toString());
//users.PrintAllToSerial();
//Serial.println(persistence.TestRead());
//users.ExportToPersistence();
//Serial.println(persistence.TestRead());
} }
void loop() void loop()
{ {
keyboard.scanAsync(); keyboard.scanAsync();
rfid.scan(); rfid.scan();
std::vector<Users::User> logon_users; userdb::User login_user;
if (iface.pinAvailable() && !users.checkPin(iface.getPin(), &logon_users)) if (iface.pinAvailable())
iface.showMessage("Login failed!", "-> Pin incorrect", 3000);
else if (rfid.available() && !users.checkRfid(rfid.getID(), &logon_users))
iface.showMessage("Login failed!", "-> Unkown Card", 3000);
else if (logon_users.size() > 0)
{ {
iface.greetUser(logon_users[0].first_name + " " + logon_users[0].last_name); login_user = userdatabase.user_by_pin(iface.getPin());
Serial.print(users.toString(&logon_users[0])); if (login_user.enabled == false)
logon_users.clear(); {
iface.showMessage("Login failed!", "-> Pin incorrect", 3000);
return;
}
}
else if (rfid.available())
{
login_user = userdatabase.user_by_rfid(rfid.getID());
if (login_user.enabled == false)
{
iface.showMessage("Login failed!", "-> Unkown Card", 3000);
return;
}
}
if (login_user.enabled == true)
{
iface.greetUser(login_user.first_name + " " + login_user.last_name);
Serial.println("Logon from User " + login_user.toString());
} }
iface.render(); iface.render();
} }