NodeMCU lauscht 433MHz und bei empfang sendet an server

Hallo Forum,

in meinem Netzwerk läuft ein Pi m it Buster da drauf ist Apache, MySQL, FTP, Openhab2, Grafana, MQTT und so weiter aber auch eine Datenbank aus meinen alten 433MHz Zeiten.

inzwischen habe ich die für uns wichtigen 433MHz Funksteckdosen gegen WLAN Dosen gewechselt mit entsprechend Tasmota.

Es gibt aber noch einige Funksteckdosen die wir z.b. im Sommer für die Ventilatoren verwenden.
Früher hatte ich dafür ein PI1 (700MHz) das Ninjablock und in der rc.local stand dann der Pfad zur rcsniffer und hat das empfangende Signal und an einen php Datei auf dem Webserver geschickt. Dadurch wurde dann der Status in der Tabelle verändert. Mein Problem war das der PI manchmal irgendwie nicht auf empfang war oder wenn ich von meinen Webserver aus gesendet habe ging das signal an den PI1 und dort war dann die exec_shell codesend php datei und der Pi hat gesendet.

Jetzt möchte ich aber das ganze gerne auf einen NodeMCU zum laufen bringen aber irgendwie habe ich da eine denkblockade.

Das empfangen der 433MHz Fernbedienung und senden an den PI Server klappt hervorrangend aber wie kann ich den ESP aus einer PHP datei ansprechen sagen code und sende x mal?
z.b. http://192.168.5.234/txcode=1234567&intens=2 oder was auch immer.

Ich lese immer nur http.get und aber ich will ja nicht vom esp anfragen und dann senden sondern der ESP bekommt was und soll senden.

Vielleicht kann mir da jemand nur ein anhalspunkt liefern damit ich im web besser suchen kann.

vielen dank

Indem Du auf dem ESP einen Webserver einrichtest und Dich mit dem vom PHP verbindest.

Gruß Tommy

OK...

also Webserver(80)
.bla.
.bla
.bla

und auf dem Pi mache ich dann ein sende an IP mit meinen Variablen?

Lars

Wenn Du das so programmierst - ja.

Gruß Tommy

:slight_smile: irgendwie so.

in diesem Script

will ich das senden vor dem empfang setzten, damit ich auch sicher sein kann, das was ich gesendet habe passt zu meinen werten in der Tabelle und dann den Status richtig ändern.

Danke

Aktuell habeich noch nicht so ganz verstanden, was du erreichen möchtest.
Allerdings könnte ich mir vorstellen, dass du deine Steuerung auch mit UDP erledigen kannst. Vom RPI ein UDP-Datensatz senden und der wird vom ESP umgesetzt.

Auch das würde möglich sein. Dazu müssten wir aber die Beschreibungen des TO verstehen, was bei mir nicht eintritt.
Ich denke, der TO sollte nochmal verständlich beschreiben, was er eigentlich machen will.
Ich habe http gewählt, wel er etwas von http.get() geschrieben hatte.

Gruß Tommy

OK. das beschreiben meines wollens ich vielleicht nicht immer top.

Der ESP soll meine 433MHz empfangenden Daten an eine PHP Seite senden (siehe Sketch) und soll das kommando meines Webserver PI's auf dem 433MHz modul senden.

danke

Da sehe ich immer noch UDP in beide Richtungen.
RPI <> ESP8266

Oder die Website auf den ESP und alles darüber steuern. So steuere ich meine Funksteckdosen und anderes Licht.

dann ist der ESP ein Client der an den Pi (Server) sendet.
Wenn du das mit HTTP machen willst, dann könntest du mittels HTTP-POST Daten an den Pi übermitteln.

dann ist der Pi Client und du brauchst am ESP einen Server.
Wenn du das mit HTTP machen willst, dann könntest du mittels HTTP-POST Daten an den ESP übermitteln.

Und ja - es ist kein Problem, dass der ESP sowohl Server als auch Client ist.

ich fand nun diese vorlage
https://makesmart.net/esp8266-get-variablen-auslesen/

wegen UDP müsste man(n) sich belesen

UDP ist easy, sehr gute Infos findest du hier
Und warum schreibst du deine Erklärung zum Projekt nicht hier, dann hätten alle den selben Stand.

Moin,

gestern nach der Spätschicht habe ich mich erstmal damit befasst mittels GET eine VAriable auf den ESP zu bekommen. Das hat auch super geklappt nach der Vorlage...

nun stehe ich vor der Hochzeit würde ich mal meinen...
RX empfängt super und TX sendet perfekt aber wenn TX sendet hört der RX nicht zu.

//https://makesmart.net/esp8266-get-variablen-auslesen/#:~:text=Beim%20Aufruf%20der%20URL%20des,Webbrowser%20und%20im%20seriellen%20Monitor.
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <RCSwitch.h>

ESP8266WebServer server(80);
RCSwitch mySwitch = RCSwitch();

const char* ssid = "Mit Sicherheit Fort Knox";
const char* password = "%5jHghBF6634957$%$*******************";
String serverName = "http://192.168.5.100/smarthome/auswerten/rf_receive.php";

void setup() {
  Serial.begin(115200);
  mySwitch.enableTransmit(D3);
  mySwitch.enableReceive(D4);
  Serial.println("ESP Gestartet");
  IPAddress ip(192, 168, 5, 101);
  IPAddress gateway(192, 168, 5, 10);
  IPAddress subnet(255, 255, 255, 0);
  IPAddress dns(192, 168, 5, 10);
  WiFi.hostname("ESP8266-Gateway");
  WiFi.config(ip, dns, gateway, subnet);
  WiFi.begin(ssid, password);
  Serial.print("Verbindung wird hergestellt ...");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Verbunden! IP-Adresse: ");
  Serial.println(WiFi.localIP());
  server.onNotFound([]() {
    get_hook();
  }
);
  server.begin();
  Serial.println("Webserver gestartet.");
}
void loop() {
  server.handleClient();
  WiFiClient client;
  HTTPClient http;                            //Object of class HTTPClient
  if (mySwitch.available()) {                 // Wenn ein Code Empfangen wird...
    Serial.println("RFID-Tag empfangen");
    int value = mySwitch.getReceivedValue();  // Empfangene Daten werden unter der Variable "value" gespeichert.
    if (value == 0) {                         // Wenn die Empfangenen Daten "0" sind, wird "Unbekannter Code" angezeigt.
      Serial.println("Unbekannter Code");
    } 
    else { // Wenn der Empfangene Code brauchbar ist, wird er hier an den Serial Monitor gesendet.
      Serial.print("Via 433MHz Empfaengener RFID-Tag: ");
      Serial.println( mySwitch.getReceivedValue() );
      Serial.println();
    }
    int inrfid = mySwitch.getReceivedValue(); //Variable inrfid wird beschrieben
    mySwitch.resetAvailable(); // Hier wird der 433 MHz-Empfänger "resettet"
    String serverPath = serverName + "?rfcode=" += inrfid;
    Serial.print("Serveranfrage, ");
    Serial.print(serverPath);
    Serial.println(" gestellt.");
    http.begin(client, serverPath.c_str());
    int httpResponseCode = http.GET();
    if (httpResponseCode>0) {
      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
      String payload = http.getString();
      Serial.println(payload);
    }
    else {
      Serial.print("Error code: ");
      Serial.println(httpResponseCode);
    }
  }
}

void get_hook() {
  if(server.hasArg("txcode")) {
    Serial.println("Variable 'txcode' mit " + server.arg("txcode") + " übergeben!");
    if(server.arg("txcode") != "") {
      String s = server.arg("txcode");
      int txcodesend = atoi( &s[ 0 ] );
      mySwitch.send(txcodesend, 24);
      Serial.print("Sende auf 433MHz folgenden Code... ");
      Serial.println(txcodesend);
      delay(1000);  
      mySwitch.send(txcodesend, 24);
      Serial.print("Sende auf 433MHz folgenden Code... ");
      Serial.println(txcodesend);
      delay(1000);
      server.send(200, "text/plain", "");
    }
    else {
      Serial.println("Variable ist da, ohne Inhalt!");
      server.send(200, "text/plain","");
    }
  }
  else {
    Serial.println("Es wurden keine Variablen übergeben!"); 
    server.send(200, "text/plain", ""); 
  }
}

habe schon versucht "mySwitch.getReceivedValue();" bei nach myswitch.send hinter zuklemmen aber da passierte nichts...
genauso ein fehler wenn ich "String serverPath = serverName + "?rfcode=" += inrfid;" hinter der myswitch.send setzte.

dann habe ich die zeilen ab int inrfid = mySwitch.getReceivedValue(); mit else hinter myswitch.send gesetzt aber auch nichts. fehler in HTTP

wie müsste ich das nun wieder umsetzten?

danke

Das verstehe ich nicht.
Wie kommst du drauf, das der RX nicht zuhört, wenn der TX sendet.
Ein RX muss immer zuhören, anders funktioniert die Technik nicht.

Also sagen wir es mal so, der ESP lauscht schon die ganze Zeit aber ich dachte mir nun, wenn der ESP sendet, hört er auch gleich zu und schickt mein TX Code als empfangssignal wieder zurück.

Jedenfalls wäre das mein Wunsch.

Lars

Was soll er empfangen können wenn er gerade mit senden beschäftigt ist?
Was soll er denn hören wenn er gerade sendet (außer sich selber)?
Welches Modul und welche Lib verwendest du? --> verlinken.

Jetzt wird es spannend.
Mal schreibst du von 433 MHz und dann mal von ESP8266.

Du solltest dir zwingend angewöhnen, eindeutige Bezeichnungen zu nutzen.
Ein RX ist z.B. ein 433MHz Empfänger, so ist es eindeutig.
Dann versteht auch jeder was du meinst.

Und sicher ist, wenn ein Sender sendet, kann der Empfänger nicht gleichzeitig empfangen. So ist es zumindest bei den eindeutigen Transceivern, wo beides in einem Board integriert ist. Ausnahmen sind die weit verbreiteten Handys, da arbeitet der RX auf einer anderen Frequenz gegenüber dem TX. Dann geht es gleichzeitig.

ich glaube so kommen wir am besten weiter.

Raspberry - > ESP -> TX
RX -> ESP -> Raspberry

Transceiver logisch, habsch mehrere.
aber warum konnte der PI das, mist.

Mir geht es ja um das von mir erzeugte Signal mit zulesen ob es wirklich das ist, welches ich möchte. ok also zum test, 2.ESP beschreiben.