Balikovna

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
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.
Odpovědět
Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Balikovna

Příspěvek od Kony » 14 lis 2022, 20:32

Ahoj, pracuji na systemu otevírání 6ti kójí na vyzvedávání balíčků různým dopravcům.
Nyní mám hotový WEB GUI, kde mám 6 tlačítek, které mění hodnoty v DB u jednotlivých kójí (PIN,dopravce,stav)
PIN = PIN kód který musí dopravce vyťukat na klávesnici, dle toho PINu se mu otevře danná(é) kóje
dopravce = název dopravce
stav=hodnota 0 a 1, pokud je hodnota 1 znamená to že se otevře relay a to otevře elektromagnetický zámek

Nyní se snažím dát nějak dokupy kód do Ard.

Kód: Vybrat vše

#include "Wire.h"
#include "I2CKeyPad.h"
#include <ESP8266WiFi.h>

const uint8_t KEYPAD_ADDRESS = 0x20;
uint8_t lastKey;
uint32_t klavesy=0;
I2CKeyPad keyPad;

const char* ssid = "wifi";
const char* password = "heslo";
char server[] = "192.168.1.249";
WiFiClient client;
int klavesnice_rulez = 0; // 0 = čtečka postaru, cokoli jineho klavesnice rulez, čtečku ignorujeme

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);
  }
  // Pripojeni k Wi-Fi
 Serial.println();
 Serial.print("Pripojuji k ");
 Serial.println(ssid);
 WiFi.begin(ssid, password);

 // Dokud nejsem pripojeny k Wi-Fi,zapisuj do seriove linky tecky progressbaru
 while (WiFi.status() != WL_CONNECTED) {
 delay(100);
 Serial.print(".");
 }

 // Jsem pripojeny k Wi-Fi a mohu pokracovat
 Serial.println();
 Serial.println("WiFi pripojena!");

 // Napis IP adresu, kterou mikropocitac dostal
 Serial.print("Pouzij k pripojeni tuto adresu: ");
 Serial.print("http://");
 Serial.println(WiFi.localIP());
  pinMode(D3,OUTPUT);
  digitalWrite(D3,LOW);
  pinMode(D4,OUTPUT);
  digitalWrite(D4,LOW);
}

void nacti_stav1()
{
 if (client.connect(server, 80)) {  //starts client connection, checks for connection
        client.println("GET http://192.168.1.249/Balikovna/balikovna_koje1.php");
        client.println("Host: 192.168.1.249");
        client.println("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        client.println("Connection: close");
        client.println();
        delay(1000);
        while (client.connected()) {
      String line = client.readStringUntil('\n');
   //     Serial.println(line); //ak chceme vypísať HTTP header
        if (line == "\r") {
          break;
        }
      }
      String line = client.readStringUntil('\n');
      Serial.println("Nacitany payload response:");
      Serial.println(line); //odpoveď webservera - naše dáta
      if(line=="0"){
        digitalWrite(D3, LOW);
        Serial.println("Vypnuto");
        }
        else if(line=="1"){
        digitalWrite(D3, HIGH);
        Serial.println("Zapnuto");
       }
    } 
    else {
      Serial.println("Pripojenie na webserver sa nepodarilo");
    }
    client.stop();
} 

void loop()
{
  char keys[] = "123A456B789C*0#DNF";  // N = Nokey, F = Fail
  uint32_t idx = keyPad.getKey();
  if (idx) klavesnice_rulez=1; // po stisku první klávesy si to zprivatizujeme my a pustíme to až se nám zachce

  if (klavesnice_rulez) {
   // tady bude náš kód
   // kod_B
      // kod_B je tento kus
  if (idx){
  if (idx != lastKey & keys[idx] != 'N') {
    klavesy=(klavesy*10)+(keys[idx]-48);
    lastKey = idx;
    Serial.println(klavesy);
    if (klavesy > 999999) {klavesy = 0;};
    if (keys[idx] == '#') {klavesy=0;}
    if (klavesy == 123) {
        digitalWrite(D3,HIGH);
        delay(1000);
        digitalWrite(D3,LOW);
        klavesy=0;;
        }
    if (klavesy == 987) {
        digitalWrite(D4,HIGH);
        delay(1000);
        digitalWrite(D4,LOW);
        klavesy=0;;
        }
   }
     delay(100);
     klavesnice_rulez = 0;
     }
      return;
 };
 do {
   nacti_stav1();
   return;
 }
}
Nyní mi to hlásí chybu při kompilaci na posledním řádku:

Kód: Vybrat vše

expected 'while' before '}' token
nevím ale kde je chyba... a pak samozřejmě řeším problém, že potřebuji když se nemačká na klávesnici, tak aby Ard kontrolovalo DB na změnu hodnoty. To se provádí pomocí PHP který vrací hodnotu 0 nebo 1. Ale jakmile se zmáčkne tlačítko, tak aby přestal kontrolovat DB a naslouchal pouze klávesnici. Jakmile se s klávesnici neděje něco po dobu víc jak 30sekund tak aby zase přepl na kontrolu v DB.
Byl by někdo ochotný a pomohl mi s tím ?

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Balikovna

Příspěvek od ondraN » 14 lis 2022, 20:54

Kód: Vybrat vše

do {
   nacti_stav1();
   return;
 }while(podminka);
}
Chybí ti tam ten while, protože ti blok začíná do. Ale tak, jak je to napsané je to nesmyslné, protože máš return hned po prvním průběhu.

Kony
Příspěvky: 382
Registrován: 09 dub 2020, 11:43
Reputation: 0

Re: Balikovna

Příspěvek od Kony » 14 lis 2022, 21:02

A náprava ? aby to davalo smysl ?? je pravda, ze nyni to spis nefunguje jak funguje.... po hrozne dlouhy dobe po zapnuti zacne reagovat klavesnice a stav z DB si vubec nekontroluje

Pablo74
Příspěvky: 43
Registrován: 03 lis 2019, 17:00
Reputation: 0

Re: Balikovna

Příspěvek od Pablo74 » 14 lis 2022, 21:48

Já teda nevím, zda je tohle na fóru běžná věc, ale napočítal jsem pět (šest) vláken, kde rozebíráš dílčí problémy svýho projektu:
viewtopic.php?f=37&t=3199
viewtopic.php?f=37&t=3198
viewtopic.php?f=37&t=3193
viewtopic.php?f=42&t=3191
viewtopic.php?f=42&t=3189
a možná ještě tohle: viewtopic.php?f=24&t=3186

Není to nad tvoje síly?

Nejsem tu proto, abych tě kritizoval, na některý tvoje dotazy jsem odpovídal, občas to bylo bez odezvy z tvé strany, škoda, mohlo se to posunout dál.

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Balikovna

Příspěvek od kiRRow » 15 lis 2022, 14:18

Bez https to ani nerealizuj, je to příšerně náchylné na odposlechnutí komunikace a následné podvržení falešného příkazu k otevření libovolné skříňky.

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: Balikovna

Příspěvek od KamilV » 16 lis 2022, 12:40

@Pablo74, @kiRRow bohužel sdílím váš názor, už před rokem se tady rozebíral projekt, u kterého jsem upozorňoval na brutální bezpečnostní díry, díky kterým mohl kdykoliv pracovat neomezeně s celou databází - skoro by mne zajímalo, jestli se to po roce někam pohnulo... Je to asi na každém, do čeho se pustí.
Toto začalo interním výdejem věcí pro zaměstnance. OK, když se něco pokazí, vždy se to interně dá do pořádku. Pokud se ale nyní jedná o veřejně přístupné boxy, do kterých může někdo něco dát (ale taky vzít), je potřeba domýšlet hodně věcí dál (jinak se bude výhradně brát).

Že periodické dotazování se relátkem na 0/1 v databázi je cesta do pekel, jsem psal už u předchozího projektu, pokud to není ten samý. Naopak nemám pocit, že se v 6 vláknech řeší dílčí problémy, ale všude prakticky to samé...

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Balikovna

Příspěvek od kiRRow » 16 lis 2022, 15:42

Ale bylo by zajímavé si vedle takového projektu sednout s notebookem a chvilku tiše naslouchat na wifi ... vzhledem k tomu že je v plánu PIN v db ukládat nešifrovaný, stav relé je (ještě pořád) tam taky ... vsadím se o pivo, že tam půjde krásně SQL Injection ...

Kony : btw, to naťukání pinu jsi vyřešil už ? - tohle by měl být jako krok č1. Krok č2. postrádám jakoukoliv vazbu jako uživatel, že jsem úspěšně stisknul klávesu - piezopípák? displej? ... já jednou na přání zákazníka odpájel z ovládací klávesnice alarmu piezo, protože to budilo děti, když odarmovával 1NP ... za 3dny mi volal a lepili jsme do víka místo pieza LED, aby měl aspoň nějakou zpětnou vazbu

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 13 hostů