Kontrola PINu v DB
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Kontrola PINu v DB
Ahoj, pracuji na projektu podobnemu AlzaBoxu, kde zamestnanci budou mit PINy, ktere se budou denne menit.
Tyto PINy slouzi k otevirani koji s materialem.
DB :
ID(koje) | jmeno | PIN. | otevreno
1. Tomas 123. 0
2. Martin. 345. 1
3
4
Potreboval bych jak udelat to, ze zamestnanec vytuka na klavesnici PIN, tento PIN se prekontroluje v DB jestli existuje a pokud ano, tak sepne relay zamku ty koje kde je PIN uveden...
ale muze nastat situace, ze budou dve koje se stejnym PINem, v tom pripade by se meli otevrit obe. Koje budou otevirany pomoci relay a elektromagnetickeho zamku.
Mohl by mi prosim nekdo pomoct?? Jiz mam udelany php backend na zapis PINu do DB a manualni otevreni zamku kde pomoci 0 a 1 budu urcovat jestli ma byt relay sepnuty a nebo vypnuty.
Takze vlastne nyni ukol :
Po zadani PINu lrojdi DB, pokud najdes shodny PIN nastav hodnotu sloupec u dane koje otevreno na 1.
Ale tohle je asi na reseni PHP scriptu, kterymu jen podstrcim PIN
Tyto PINy slouzi k otevirani koji s materialem.
DB :
ID(koje) | jmeno | PIN. | otevreno
1. Tomas 123. 0
2. Martin. 345. 1
3
4
Potreboval bych jak udelat to, ze zamestnanec vytuka na klavesnici PIN, tento PIN se prekontroluje v DB jestli existuje a pokud ano, tak sepne relay zamku ty koje kde je PIN uveden...
ale muze nastat situace, ze budou dve koje se stejnym PINem, v tom pripade by se meli otevrit obe. Koje budou otevirany pomoci relay a elektromagnetickeho zamku.
Mohl by mi prosim nekdo pomoct?? Jiz mam udelany php backend na zapis PINu do DB a manualni otevreni zamku kde pomoci 0 a 1 budu urcovat jestli ma byt relay sepnuty a nebo vypnuty.
Takze vlastne nyni ukol :
Po zadani PINu lrojdi DB, pokud najdes shodny PIN nastav hodnotu sloupec u dane koje otevreno na 1.
Ale tohle je asi na reseni PHP scriptu, kterymu jen podstrcim PIN
Re: Kontrola PINu v DB
"Ale tohle je asi na reseni PHP scriptu, kterymu jen podstrcim PIN" už jen z principu toho kdo má do DB přístup, tak ano ...
rozhodni se kolik skříněk maximálně může mít společný pin, nebo jestli vůbec ... dle toho musíš vytvořit dostatečně velký buffer na ID skříněk které chceš otevřít + místo pro zakončovací znak (howgh - domluvil jsem znak), a nebo mít i id 00 a posílat vždy pevný počet IDček stím že nevyužité budou 00 a neotevře to nic.
to jestli má být zámek otevřený nebo zavřený je primárně záležitostí kontroléru co ho kontroluje, ten by si to měl hlavně pamatovat, to že to budeš mít zapasné v DB je tak dobré max pro to, že kontrolující jednotka se po restartu může mrknout do DB a otevřít ty zámky, které byly otevřeny před restartem
takže jak ? ... zapneš to, po startu by si to mělo vytvořit pole skříněk dle jejich ID a u každé si držet stav zámku ... pak budeš potřebovat PHP script co projede DB a sdělí v jakém stavu zámky mají být a vygeneruje ... co já vím dejme tomu 3čísla oddělená mezerou, zpracuješ a předáš to funkci co ovládá relé ... a pin se bude ťukat jak ? ...
jako moc jsem z toho nepobral jako ...
rozhodni se kolik skříněk maximálně může mít společný pin, nebo jestli vůbec ... dle toho musíš vytvořit dostatečně velký buffer na ID skříněk které chceš otevřít + místo pro zakončovací znak (howgh - domluvil jsem znak), a nebo mít i id 00 a posílat vždy pevný počet IDček stím že nevyužité budou 00 a neotevře to nic.
to jestli má být zámek otevřený nebo zavřený je primárně záležitostí kontroléru co ho kontroluje, ten by si to měl hlavně pamatovat, to že to budeš mít zapasné v DB je tak dobré max pro to, že kontrolující jednotka se po restartu může mrknout do DB a otevřít ty zámky, které byly otevřeny před restartem
takže jak ? ... zapneš to, po startu by si to mělo vytvořit pole skříněk dle jejich ID a u každé si držet stav zámku ... pak budeš potřebovat PHP script co projede DB a sdělí v jakém stavu zámky mají být a vygeneruje ... co já vím dejme tomu 3čísla oddělená mezerou, zpracuješ a předáš to funkci co ovládá relé ... a pin se bude ťukat jak ? ...
jako moc jsem z toho nepobral jako ...
Re: Kontrola PINu v DB
Otevreni zamku je na cca 10sekund, otevrou se dvere. Pak jak se dvere uzavrou tak se zmeni PIN.
Takze co tak premyslim je to pouze o SQL a PHP, kterymu podstrcim adresu "xxx. php? PIN=1234"ten script php projede DB a u vsech zaznamu kde bude stejny PIN nastavi u zaznamu v kolonce" otevreno"na hodnotu 1. Tim relay se otevre, protoze si bude kontrolovat v DB stavy, jakmile najde 1 tak se sepne,. A pak pomoci arduina zmenim hodnotu v DB na 0.
Takze co tak premyslim je to pouze o SQL a PHP, kterymu podstrcim adresu "xxx. php? PIN=1234"ten script php projede DB a u vsech zaznamu kde bude stejny PIN nastavi u zaznamu v kolonce" otevreno"na hodnotu 1. Tim relay se otevre, protoze si bude kontrolovat v DB stavy, jakmile najde 1 tak se sepne,. A pak pomoci arduina zmenim hodnotu v DB na 0.
Re: Kontrola PINu v DB
Jenom jdu okolo...
Četl jsem tohle vlákno třikrát, ale jaksi se v tom ztrácím. Co je míněno tímhle?
Jak se budou řešit chybový stavy? Jak se vyřeší ověření, že fyzicky došlo k otevření/zavření? Jak se bude řešit výpadek proudu či HW chyba na straně toho zařízení?
Četl jsem tohle vlákno třikrát, ale jaksi se v tom ztrácím. Co je míněno tímhle?
Chápu to tak, že nějaký HW se bude periodicky dotazovat na stav databáze? Tj. se z ní bude neustále/opakovaně číst? A je nějak vyřešena možná (!) nekonzistence, kdy se bude v jeden okamžik do SQL zapisovat a současně z ní i číst?Tim relay se otevre, protoze si bude kontrolovat v DB stavy, jakmile najde 1 tak se sepne
Jak se budou řešit chybový stavy? Jak se vyřeší ověření, že fyzicky došlo k otevření/zavření? Jak se bude řešit výpadek proudu či HW chyba na straně toho zařízení?
Re: Kontrola PINu v DB
Toto si řeší sama snad každá rozumná SQL databáze. Předpokládám tam MySQL. Tam je chování trochu rozdílné podle typu úložiště, InnoDB implementuje MVCC, MyISAM dělá při insertu/update zámek a selecty jsou v aktivním čekání...
Ať tak či onak, toto by mne trápilo nejmíň. Vlastně vůbec.
Re: Kontrola PINu v DB
Jako bys nevděl, že něco takového se ve světě arduina většinou neřeší. Ono to nějak funguje a to stačí
Re: Kontrola PINu v DB
Vycházel jsem z předpokladu, že je-li něco směrem k zaměstnancům chráněno PINem, jde o vážnou věc.
Nevím, jak často se budou PINy měnit (pochopil jsem že po otevření boxu a vyzvednutí materiálu v něm), zda to bude jednou či víckrát za den pro stejného zaměstnance. Od toho se odvíjí i vhodná distribuce PIN směrem k zaměstanci.
Výše jsem psal dotaz na SQL: pokud to poběží na PC serveru, tak OK, tam je jistě implementace možných kolizí vyřešena.
Stejně se musí vyřešit technicky po stránce HW i SW spousta situací: komunikace server <---> Arduino (?), příkaz k odemknutí, příkaz k zamknutí, čtení z dB, zápis do dB a to zřejmě asynchronně. Odchycení a vyhodnocení chybových stavů; max. počet pokusů o zadání PINu, nefunkční komunikace server <---> Arduino, atd.
Pořád mi ale vrtá hlavou, jak se bude realizovat tohle:
Zaměstnanec naťuká PIN a k otevření (či identifikaci chyby v zadání PINu) by mělo dojít prakticky okamžitě, s minimální prodlevou. Takže se to musí implementovat inteligentně.
Ale jak říkám, jdu jen okolo a položil jsem tu pár postřehů a otázek, nic víc.
Nevím, jak často se budou PINy měnit (pochopil jsem že po otevření boxu a vyzvednutí materiálu v něm), zda to bude jednou či víckrát za den pro stejného zaměstnance. Od toho se odvíjí i vhodná distribuce PIN směrem k zaměstanci.
Výše jsem psal dotaz na SQL: pokud to poběží na PC serveru, tak OK, tam je jistě implementace možných kolizí vyřešena.
Stejně se musí vyřešit technicky po stránce HW i SW spousta situací: komunikace server <---> Arduino (?), příkaz k odemknutí, příkaz k zamknutí, čtení z dB, zápis do dB a to zřejmě asynchronně. Odchycení a vyhodnocení chybových stavů; max. počet pokusů o zadání PINu, nefunkční komunikace server <---> Arduino, atd.
Pořád mi ale vrtá hlavou, jak se bude realizovat tohle:
Tim relay se otevre, protoze si bude kontrolovat v DB stavy, jakmile najde 1 tak se sepne
Zaměstnanec naťuká PIN a k otevření (či identifikaci chyby v zadání PINu) by mělo dojít prakticky okamžitě, s minimální prodlevou. Takže se to musí implementovat inteligentně.
Ale jak říkám, jdu jen okolo a položil jsem tu pár postřehů a otázek, nic víc.
Re: Kontrola PINu v DB
Ona není moc šikovná myšlenka toho bitové sloupce v DB, kde se relátka podle 0/1 spínají.
Protože ardu, na kterém ta relátka budou, se bude muset periodicky dotazovat databázového API, zda náhodou něco nemá sepnout.
Asi bych to stavěl takto:
Ardu č. 1 - jsou na něm relátka a běží na něm http server, requestem na jeho IP s parametrem identifikujícím relátko se sepne
Ardu č. 2 - s klávesnicí odesílající request s PINem na PC server
PC server - s databází, pokud na něj dorazí request s validním PINem, odešle request na Ardu č. 1
Takhle se nikde nikdo nedotazuje na nic periodicky a nehrozí, že se mi něco rozhodí při výpadku proudu, kdy relátko bude rozeplé, ale v DB by vysela hodnota 1...
Protože ardu, na kterém ta relátka budou, se bude muset periodicky dotazovat databázového API, zda náhodou něco nemá sepnout.
Asi bych to stavěl takto:
Ardu č. 1 - jsou na něm relátka a běží na něm http server, requestem na jeho IP s parametrem identifikujícím relátko se sepne
Ardu č. 2 - s klávesnicí odesílající request s PINem na PC server
PC server - s databází, pokud na něj dorazí request s validním PINem, odešle request na Ardu č. 1
Takhle se nikde nikdo nedotazuje na nic periodicky a nehrozí, že se mi něco rozhodí při výpadku proudu, kdy relátko bude rozeplé, ale v DB by vysela hodnota 1...
Re: Kontrola PINu v DB
no ted resim ardu s klavesnici,
kde po zadani pinu a zmacknuti # by se mel provest nejaky ukon.
kde po zadani pinu a zmacknuti * by se mel provest nejaky ukon.
Zkousim to takto :
kde po zadani pinu a zmacknuti # by se mel provest nejaky ukon.
kde po zadani pinu a zmacknuti * by se mel provest nejaky ukon.
Zkousim to takto :
Kód: Vybrat vše
if (idx == '#') {
Serial.println("ENTER");
}
Re: Kontrola PINu v DB
Mám to nyní takto "
A to mi nechce fungovat, ve vysledku bych chtel docilit toho, ze kdyz zadam "1234" a potvrdim křížkem, tak se rozsvítí LED1, když "6547" + # tak LED2 atd.... a kdyz zmacknu "*" tak se zadani smaze a zacne odznovu.... Samozrejme ty cisla PINu bych tahal z DB
Kód: Vybrat vše
#include "Wire.h"
#include "I2CKeyPad.h"
const uint8_t KEYPAD_ADDRESS = 0x20;
uint8_t lastKey;
I2CKeyPad keyPad;
byte relay = 255;
const byte relay1 = D3;
const byte relay2 = D4;
const byte relay3 = D5;
const byte relay4 = D6;
void setup()
{
Serial.begin(9600);
Wire.begin();
Wire.setClock(400000);
if (keyPad.begin(KEYPAD_ADDRESS) == false)
{
Serial.println("\nERROR: cannot communicate to keypad.\nPlease reboot.\n");
while(1);
}
pinMode(D3, OUTPUT);
pinMode(D4, OUTPUT);
pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);
}
void loop()
{
char keys[] = "123A456B789C*0#DNF"; // N = Nokey, F = Fail
uint8_t idx = keyPad.getKey();
if (idx != lastKey & keys[idx] != 'N') {
Serial.println(keys[idx]);
lastKey = idx;
switch (idx)
{
//******************
case '1':
relay = relay1;
break;
case '2':
relay = relay2;
break;
case '3':
relay = relay3;
break;
case '4':
relay = relay4;
break;
//******************
case '#':
if (relay != 255)
{
digitalWrite(relay, HIGH);
}
break;
}
}
delay(100);
}}
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 40 hostů