MQTT <-> 433MHz

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
MagicBird
Beiträge: 79
Registriert: 8. Jun 2020 17:31
Answers: 1

MQTT <-> 433MHz

Beitrag von MagicBird »

Hallo Forum,

immer wieder, habe ich das problem das der Raspberry PI3 welches als Zwischenglied arbeitet sein dienst aufgibt.
Dann muß ich alles erneuern, einspielen und weiter gehts.

Wir verwenden gerne die 433MHz Fernbedinung um mal schnell Licht in den einzelnen Räumen ein oder aus zuschalten.
Per App oder Alex ist mir manchmal zu umständlich.

Daher haben wir einen Wemos D1 mini der verfügt über ein Sende und Empfänger einheit für 433MHz.
Wenn ein Empfang vorliegt, sendet dieser an den Raspberry. Stimmen die Informationen mit dem Inhalt der DB überein, wird ein MQTT Signal gesendet und das Entsprechende Gerät wird ein oder aus geschaltet.
Möchte ich senden, habe ich auf dem PI ein kleines Sende script und die Informationen mit dem sendecode wird per udp an den wemos übertragen und der sendet das signal. (wird benötigt wenn ich etwas schalten mag und ich aber nicht zuhause bin)

Nun würde ich das ganze gerne irgendwie nach openhab 4 umlagern.
bekommt der Wemos ein signal sendet er das gleich per mqtt, dieser muß dann schauen ob der wert passt und schaltet dann die wlan steckdosen aus
aber auch andersherum möchte ich eine 433MHz steckdose schalten soll Openhab per mqtt den sendecode schicken an die IP des wemos und dieser führt einfach nur den sende befehl aus.

Ich hatte schonmal ein 433 mqtt brigde von sonoff aber die lief alles andere als top

danke Lars

Benutzeravatar
udo1toni
Beiträge: 15307
Registriert: 11. Apr 2018 18:05
Answers: 246
Wohnort: Darmstadt

Re: MQTT <-> 433MHz

Beitrag von udo1toni »

Ich bin nicht intensiv im Thema drin, aber mein erster Reflex wäre, Tasmota als Firmware zu nehmen.
Falls Du die Sonoff Bridge noch hast, kannst Du auch schauen, ob die mit Tasmota kompatibel ist (auf https://templates.blakadder.com/ gibt es eine Liste aller erfolgreich getesteten Geräte, teils mit genauen Informationen, wie man dort Tasmota zum Laufen bekommt) - oftmals funktionieren Geräte mit Tasmota zuverlässiger als mit der Originalfirmware - bei meist deutlich erweitertem Funktionsumfang.

Wenn ich es richtig verstehe, geht es um eine (oder ein paar) Steckdosen, die per 433 MHz Funk steuerbar sind. Du willst die Steckdosen mit der Originalfernbedienung steuern, ebenso von openHAB aus.
Grundsätzlich sollte es da kein Problem geben, wohl aber, wenn Du die Steckdose direkt über die Taste an der Steckdose schaltest, weil solche Systeme leider unidirektional arbeiten, heißt, die Steckdose empfängt, kann aber nicht senden, während die Fernbedienung sendet, aber nicht empfangen kann.
Einzig openHAB in Verbindung mit einem geeigneten Funkmodul kann sowohl senden als auch empfangen. openHAB hat also die Chance, den Schaltbefehl der Fernbedienung zu erkennen und das passende Item ein- oder auszuschalten. Ob der eigene Befehl bei der Steckdose ankommt, kann openHAB jedoch ebensowenig verifizieren, wie es den lokalen Tastendruck erfassen kann.

Was das Ganze mit dem Eingangssatz zu tun hat (Pi3 gibt seinen Dienst auf) erschließt sich mir nicht. Falls auf dem Pi das openHAB System läuft, wäre mein Vorschlag, einen anderen SBC zu nehmen, alternativ einen "richtigen" PC (in dem Sinne, dass es eben kein SingleBoardComputer im Reisepassformat ist, sondern z.B. ein (in der Bucht günstig gebraucht gekaufter) 1-Liter-PC, landläufig oft NUC genannt (das ist aber eher eine bestimmte Sorte dieser Gattung).
Falls Du in "neue" Hardware investierst, achte darauf, dass diese 64-Bit unterstützt, also z.B. ein Raspberry Pi4/5 oder eben ein amd64 (Intel 64-Bit-Prozessoren heißen bei Linux auch so...)
Falls der Pi nur ein zusätzliches System ist, um von Datum a zu Datum b zu kommen, wäre es naheliegend, diesen Job einfach auf der Plattform zu integrieren, auf der openHAB läuft.
Übrigens ist seit Ende letzten Monats openHAB5 stable, allerdings ist openHAB5 ein 64-Bit-only System, d.h. es muss auch ein 64-Bit-Java (21) installiert sein, und darunter muss ein 64-Bit OS laufen - deshalb auch der Hinweis bei "neuer" Hardware darauf zu achten.
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.3, LXC)

MagicBird
Beiträge: 79
Registriert: 8. Jun 2020 17:31
Answers: 1

Re: MQTT <-> 433MHz

Beitrag von MagicBird »

Ich muß mich mal wieder für meine fehlerhafte Problem Schilderung entschuldigen.

OH4 läuft super auf ein PI5 alles super.

mein Gateway Pi3 macht regelmäßig Probleme, wobei auf dem auch sehr viele kleine Projekte laufen. Irgenwann hat er nach paar Jahren keine Lust mehr und ich baue alles wieder neu auf. So läuft auf diesem auch meine eigene gebaute 433MHz Schaltwebseite und da ist im Hintergrund auch das gateway.php script. Der Wemos empfängt etwas, überträgt es an das gateway scrit, nun schaut diese in die mysql tabelle ob der code einer von mir ist, ist das so, läd es dann die mqtt daten und sendet an openhab das signal.

manchmal fällt eine der Wlan steckdosen aus, da habe ich die 433MHz vor geschaltet, kann diese dann aus- und an- schalten und starte so die Wlansteckdose neu. Die DHT22 für die Raumwerte sind manchmal weg.

Ich suche das kleine Gerät noch einmal oder bestelle ein neues.

danke

MagicBird
Beiträge: 79
Registriert: 8. Jun 2020 17:31
Answers: 1

Re: MQTT <-> 433MHz

Beitrag von MagicBird »

Guten Morgen,

ok ich glaube nun habe ich es. Auf dem PI war unteranderem Containerd installiert und dieser hat versucht immer wieder zu senden. Dadurch ist das swap file voll gelaufen und konnte keine anfragen mehr bearbeiten.

Die ganze Sache ist nun deinstalliert und der PI3 läuft nun bei 3% last 0k/500M Swap und 250/1000MB Ram.

Dennoch werde ich versuchen die ganze Sache zu verschlanken und KI hat mir da auch ein kleines Script ausgeben, nur hängt es gerade am Flashen

Code: Alles auswählen

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <RCSwitch.h>

// --- WLAN ---
const char* ssid = "DEIN_WIFI";
const char* password = "DEIN_WIFI_PASS";

// --- MQTT ---
const char* mqtt_server   = "IP_DES_MQTT_BROKERS";
const int   mqtt_port     = 1883;  // ggf. anpassen
const char* mqtt_user     = "DEIN_MQTT_USER";
const char* mqtt_pass     = "DEIN_MQTT_PASS";

// --- MQTT Topics ---
const char* topic_recv = "wemos433/received"; // Wemos → OpenHAB
const char* topic_send = "wemos433/send";     // OpenHAB → Wemos

WiFiClient espClient;
PubSubClient client(espClient);
RCSwitch mySwitch = RCSwitch();

void setup_wifi() {
  delay(10);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
}

void reconnect() {
  while (!client.connected()) {
    if (client.connect("WemosD1Mini", mqtt_user, mqtt_pass)) {
      client.subscribe(topic_send);
    } else {
      delay(5000);
    }
  }
}

void setup() {
  Serial.begin(115200);
  setup_wifi();
  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(callback);

  mySwitch.enableReceive(D2);  // Pin für 433MHz-Empfänger
  mySwitch.enableTransmit(D1); // Pin für Sender
}

void callback(char* topic, byte* payload, unsigned int length) {
  payload[length] = '\0'; // String terminieren
  String message = String((char*)payload);
  mySwitch.send(message.toInt(), 24); // 24-Bit-Code senden
}

void loop() {
  if (!client.connected()) {
    reconnect();
  }
  client.loop();

  if (mySwitch.available()) {
    unsigned long receivedCode = mySwitch.getReceivedValue();
    if (receivedCode != 0) {
      char msg[20];
      sprintf(msg, "%lu", receivedCode);
      client.publish(topic_recv, msg);
    }
    mySwitch.resetAvailable();
  }
}
und dann soll ich...

dann soll ich 2 items anlegen

Code: Alles auswählen

String Wemos433_Received "Empfangen" { channel="mqtt:topic:mybroker:wemos433received" }
String Wemos433_Send     "Senden"    { channel="mqtt:topic:mybroker:wemos433send" }
und regeln erstellen.

Code: Alles auswählen

rule "433 Code empfangen"
when
    Item Wemos433_Received received update
then
    val code = receivedCommand.toString
    if (code == "123456") {
        // Gerät einschalten
        MyLight.sendCommand(ON)
    }
end

Code: Alles auswählen

Wemos433_Send.sendCommand("123456")
na schauen wir uns mal an.

danke

Antworten