[Mikrocontroller]

Geschwindigkeitsradar im Hausflur - Home Assistant Integration

/geschwindigkeitsradar-im-hausflur-home-assistant-integration
Geschwindigkeitsradar im Hausflur - Home Assistant Integration

Wie schnell läuft man wohl jeden Tag durch seinen Hausflur – und variiert dies vielleicht im Tagesverlauf?

Oder wer parkt schneller in der heimischen Garage ein?

Es wäre doch praktisch, das aufzuzeichnen und auszuwerten – und genau darum geht es in diesem Post.


Hintergrund

In der Vergangenheit haben wir uns bereits die Geschwindigkeit von Personen und Objekten direkt in der Konsole ausgeben lassen.

Heute kümmern wir uns darum, dass die Daten via MQTT an Home Assistant gesendet werden.

Was ihr dann damit anstellt, bleibt natürlich euch überlassen.


Programmieren des Mikrocontrollers

Der Code sollte auf allen üblichen Mikrocontrollern laufen – Hauptsache, sie haben WLAN-Funktionalität.

Es spielt keine Rolle, ob Arduino, ESP32 oder sonstige Alternativen.

Voraussetzung:
MQTT ist bereits in Home Assistant eingerichtet.

Das ursprüngliche Skript wurde um WLAN- und MQTT-Funktionalität ergänzt.

Die Variablen im Code müsst ihr für euer Netzwerk anpassen.

Falls ihr keine besonders komplexe Home-Assistant-Installation habt, entspricht der MQTT-Server in der Regel eurem Home-Assistant-Server.

Dafür braucht ihr einen Benutzer in Home Assistant – es lohnt sich, hierfür einen eigenen MQTT-User zu erstellen.


Beispielcode

```cpp

include

include

// WLAN-Konfiguration
const char ssid = "DEIN_WLAN_SSID"; // WLAN-SSID
const char
password = "DEIN_WLAN_PASSWORT"; // WLAN-Passwort

// MQTT-Server-Konfiguration
const char mqttServer = "DEIN_MQTT_SERVER";
const int mqttPort = 1883;
const char
mqttUser = "DEIN_MQTT_USER";
const char mqttPassword = "DEIN_MQTT_PASSWORT";
const char
mqttTopic = "homeassistant/sensor/speed_sensor/state";

WiFiClient espClient;
PubSubClient client(espClient);

const int sensorPin = 26;
const float frequency = 10.525e9;
const float c = 3e8;
const int measureDuration = 100;
const int numMeasurements = 10;

volatile unsigned long pulseCount = 0;

void IRAM_ATTR handlePulse() {
pulseCount++;
}

void setup() {
Serial.begin(115200);
pinMode(sensorPin, INPUT);
attachInterrupt(digitalPinToInterrupt(sensorPin), handlePulse, RISING);

// WLAN verbinden
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Verbinde mit WLAN...");
}
Serial.println("Mit WLAN verbunden");

// MQTT verbinden
client.setServer(mqttServer, mqttPort);
while (!client.connected()) {
Serial.println("Verbinde mit MQTT-Server...");
if (client.connect("ESP32Client", mqttUser, mqttPassword)) {
Serial.println("Mit MQTT-Server verbunden");
} else {
Serial.print("Fehler beim Verbinden mit MQTT: ");
Serial.println(client.state());
delay(2000);
}
}

// Home Assistant Discovery
String configTopic = "homeassistant/sensor/speed_sensor/config";
String configPayload = "{\"name\": \"Speed Sensor\", \"state_topic\": \""
+ String(mqttTopic) + "\", \"unit_of_measurement\": \"km/h\", \"value_template\": \"{{ value }}\"}";
client.publish(configTopic.c_str(), configPayload.c_str(), true);
}

void loop() {
float totalSpeed = 0.0;
unsigned long startTime = millis();

for (int i = 0; i < numMeasurements; i++) {
unsigned long measurementStartTime = millis();
pulseCount = 0;

// Messung (100 ms)
delay(measureDuration);

unsigned long duration = millis() - measurementStartTime;
unsigned long pulses = pulseCount;

float pulseFrequency = (float)pulses / duration * 1000;
float speed_m_s = pulseFrequency * c / (2 * frequency);
float speed_km_h = speed_m_s * 3.6;

totalSpeed += speed_km_h;

}

float averageSpeed = totalSpeed / numMeasurements;

Serial.print("Durchschnittliche Geschwindigkeit: ");
Serial.print(averageSpeed);
Serial.println(" km/h");

if (client.connected()) {
String payload = String(averageSpeed);
client.publish(mqttTopic, payload.c_str());
}

client.loop();

unsigned long endTime = millis();
unsigned long loopDuration = endTime - startTime;
if (loopDuration < 1000) {
delay(1000 - loopDuration);
}
}
````


Debugging

Wer prüfen möchte, ob alles funktioniert, kann einen Blick in die Konsole des Mikrocontrollers werfen.

Dort sollten WLAN- und MQTT-Fehler sichtbar sein.

Noch detaillierter wird es mit einem MQTT Explorer:

Damit lässt sich genau verfolgen, welche Daten der ESP/Arduino an den MQTT-Server übermittelt.


Home Assistant Integration

Wenn du das MQTT-Topic im Skript nicht angepasst hast, erkennt Home Assistant die Entität automatisch via MQTT Discovery.

Nach wenigen Minuten sollte die Entität „Speed Sensor“ in Home Assistant erscheinen.


Feintuning

Falls die Messwerte ungenau sind oder der Sensor nicht zuverlässig reagiert:

  • Ausrichtung prüfen
  • Drehregler am Sensor für Sensibilität einstellen

Bei meinen Tests habe ich auf 3–5 Metern Entfernung brauchbare Ergebnisse erhalten.

Ob die Messung absolut präzise ist, kann ich nicht garantieren – aber für meine Zwecke reicht es völlig.

Anzeige

/comments0 Einträge

Kommentare

> NO_COMMENTS_FOUND

> INITIATE_COMMENT_PROTOCOL

MARKDOWN_SUPPORT: ENABLED
CHARS: 0