Ansicht:   

#431240

MagicBird

Berlin,
30.03.2019, 14:18:42

http Fehler 302 (web.coding)

Hallöchen Forum,

nun wollte ich meine selbstgebastelte HomeControl durch RFID erweitern und habe mir ein ESP8266 und RF522 modul gekauft. Im web fand ich ein Script das ich mit Hilfe anderer User Bereich Arudino modifiziert habe. So das der ESP den gelesenen RFID Code an eine php Datei auf mein PI schickt. Diese Datei schaut ob der übergebene Code schon exestiert oder nicht.

Nun dachte ich, wie kann ich eine Aktion ausführen lassen die ich der RFID hinterlege.
Wenn ich die rfid.php?rfid=code im Browser ausführe laufen alle Weiterleitungen und ich sehe den veränderten wert. Aber Via ESP kommt der Fehler 302

rfid.cpp esp8266

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <Wire.h>
#include <MFRC522.h>
#include <SPI.h>
#define RST_PIN 5 // RST-PIN for RC522 - RFID - SPI - Module GPIO15 
#define SS_PIN  4 // SDA-PIN for RC522 - RFID - SPI - Module GPIO2

MFRC522 myCard(SS_PIN, RST_PIN);   // Create MFRC522 instance

#define USE_SERIAL Serial

ESP8266WiFiMulti WiFiMulti;

void setup()
  {
    USE_SERIAL.begin(115200);
    delay(3000);

    //WiFi.mode(WIFI_STA);
    WiFiMulti.addAP("IoT", "password88");
    
    SPI.begin();           //  SPI bus
    myCard.PCD_Init();     //  MFRC522
    
    pinMode(15,OUTPUT);
    
    USE_SERIAL.println("starting...");
    
    Serial.println("connect WLAN...");
    
    if (WiFiMulti.run() == WL_CONNECTED)
      {
        Serial.println("");
        Serial.println("connect WLAN handshake.");
        Serial.println("IP:");
        Serial.println(WiFi.localIP());
       }
  }
void loop()
  {
    
    if ( ! myCard.PICC_IsNewCardPresent()) //Wenn eine neue Karte nicht gelesen wird, kehren Sie zum Anfang zurück
      {
        delay(250);
        return;
      }
    
    if ( ! myCard.PICC_ReadCardSerial()) //Wählen Sie eine aus, wenn aktuell mehr als eine Karte verwendet wird (verhindert den Fehler).
      {
        delay(250);
        return;
      }
    String contenthex= "";
    for (byte i = 0; i < myCard.uid.size; i++) 
      {
        contenthex.concat(String(myCard.uid.uidByte[i], HEX));
      }
    contenthex.toUpperCase();
    myCard.PICC_HaltA(); //Kartenbezogene Verfahren
    Serial.println("Code of card " + contenthex);
    
    if((WiFiMulti.run() == WL_CONNECTED))
      {
        HTTPClient http;
        USE_SERIAL.print("[HTTP] post "+contenthex+" on Host.\n");
        contenthex.replace(" ", "");
    
        String url;
        url = String("http://192.168.5.90/smarthome/rfid/rfid.php?rfid="+contenthex);
        http.begin(url); //HTTP
        int httpCode = http.GET();
        
        if(httpCode > 0)
          {
            USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
          }
        else
          {
            USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
          }
        http.end();
      }
  }



rfid.php raspberry

<?php

require_once '../include/config.include.php';
require_once '../include/date_time.include.php';

if($_GET['rfid'] == true)
  {
    $statement = $pdo->prepare("SELECT COUNT(*) AS anzahl FROM $rfidtbl WHERE rfid = ?");
    $statement->execute(array($_GET['rfid']));  
    $row = $statement->fetch();
    if ($row['anzahl'] >= '1')
      {
        /* Lese Datenbankzeile für vorhandenen RFID Code und führe Aktion extern aus */
        $sql = "SELECT * FROM $rfidtbl WHERE rfid = '".$_GET['rfid']."'";
        $wert = $pdo->query($sql)->fetch();
        $wertaktion = $wert['aktion'];
        header("Location: http://192.168.5.90/smarthome/$wertaktion");
      }
     else
       {
         /* Schreibe neuen RFID Code in die Datenbank */
         $datumdmy = date("d.m.Y");
         $zeithi = date("H:i");
         $statement = $pdo->prepare("INSERT INTO $rfidtbl (rfid, datum, zeit, counter) VALUES  :)rfid, :datum, :zeit, :counter)");
         $statement->execute(array('rfid' => $_GET['rfid'], 'datum' => $datumdmy, 'zeit' => $zeithi, 'counter' => '0'));
       }
  }
else
  {
    echo "kein RFID vorhanden";
  }

?>



$wertaktion steht lediglich das nächste Verzeichnis/datei.php/variable=wert

In der Monitorfunktion von Arduino bekomme ich beim senden den fehler 302

danke Lars

#431244

MudGuard zur Homepage von MudGuard

München,
30.03.2019, 22:11:28

@ MagicBird

http Fehler 302

> Wenn ich die rfid.php?rfid=code im Browser ausführe laufen alle
> Weiterleitungen und ich sehe den veränderten wert. Aber Via ESP kommt der
> Fehler 302

HTTP-Status-Code 302 ist kein Fehler, es ist ein Redirect.

2xx sind die OK-Codes,
3xx sind die Redirects,
4xx die Client-Fehler,
5xx die Server-Fehler

Wenn Dein Client den 302 anzeigt, folgt er wohl nicht automatisch dem Redirect.
Es muß noch ein Location-Header vorhanden sein mit der URL, auf die weitergeleitet werden soll.
Wenn man den Auto-Redirect nicht konfigurieren kann, muß der Client das halt "manuell" machen ...

--
[image]
MudGuard
O-o-ostern

#431245

MagicBird

Berlin,
31.03.2019, 00:07:56

@ MudGuard

http Fehler 302

Hallo,

das habe ich auch heraus bekommen und noch nach weiteren beispielen gesucht. Ich muss den Header irgendwie in der rfid.cpp (besser genannt ino) beim senden mitschicken. Na das kann ja ein Spaß werden.

danke

Ansicht:   
Auf unserer Web-Seite werden Cookies eingesetzt, um diverse Funktionalitäten zu gewährleisten. Hier erfährst du alles zum Datenschutz