No description
Find a file
2026-07-04 17:06:22 +02:00
.gitignore Initial commit 2026-07-04 17:04:09 +02:00
docker-compose.yml first commit 2026-07-04 17:06:22 +02:00
dockerfile first commit 2026-07-04 17:06:22 +02:00
notify_check.txt first commit 2026-07-04 17:06:22 +02:00
notify_main.txt first commit 2026-07-04 17:06:22 +02:00
notify_simple.txt first commit 2026-07-04 17:06:22 +02:00
python_veml7700.py first commit 2026-07-04 17:06:22 +02:00
README.md first commit 2026-07-04 17:06:22 +02:00
start first commit 2026-07-04 17:06:22 +02:00

FHEM MQTT VEML7700 - Einfache Lösung

Frischer Start mit einer einfachen, zuverlässigen Notify-Lösung


📋 Übersicht

Diese Dokumentation enthält eine einfache, getestete Lösung für dein FHEM-System mit:

  • VEML7700 Lichtsensor über MQTT
  • Dauerlicht-Modus mit Display-Steuerung
  • Bewegungslogik für Display
  • Lux-Logik für Lichtsteuerung
  • KEINE komplexen Verzögerungen oder Check-Notify-Blöcke

🚀 Einfache Notify-Lösung

define n_HausgangLicht_Einfach notify (IT_1527x2d936|IT_1527x62f30|HausgangDauerlicht) {
  # Sensorwerte auslesen
  my $MelderBalkon    = Value("IT_1527x2d936");;
  my $MelderHausgang  = Value("IT_1527x62f30");;
  my $Dauerlicht      = Value("HausgangDauerlicht");;
  my $RaspDispStatus  = Value("Raspberry_Display");;

  # Robustere Wertauslesung mit Fehlerbehandlung
  my $Lux             = ReadingsNum("Hausgang_Lux_VEML7700","lux",9999);;
  my $Suppressed      = ReadingsVal("Hausgang_Lux_VEML7700","suppressed","true");;

  # Falls Lux-Wert 9999 ist, versuche last_valid_lux
  if ($Lux == 9999) {
    $Lux = ReadingsNum("Hausgang_Lux_VEML7700","last_valid_lux",9999);;
    Log 3, "HausgangLicht: Lux-Wert war 9999, verwende last_valid_lux=$Lux";
  }

  # Debug-Ausgabe für Fehlersuche
  Log 3, "HausgangLicht: Lux=$Lux, Suppressed=$Suppressed, MelderBalkon=$MelderBalkon, MelderHausgang=$MelderHausgang";

  my $Bewegung        = ($MelderBalkon eq "on" || $MelderHausgang eq "on");;
  my $LuxGrenze       = 80;;  # Viel niedriger als deine 800!
  my $hm              = sprintf("%02d:%02d", $hour, $min);;
  my $Tagbetrieb      = ($hm gt "06:30" && $hm lt "22:00");;

  if ($Dauerlicht eq "on")
  {
    Log 3, "HausgangLicht: Dauerlicht aktiv - Licht an, Display an";
    fhem('delete at_HausgangDisplayOff');;
    fhem('set HUEGroup2 pct 100');;
    fhem('set HUEGroup2 on');;

    if ($RaspDispStatus eq "off")
    {
      fhem('set Raspberry_Display on');;
    }
    return;;
  }

  if ($Bewegung)
  {
    Log 3, "HausgangLicht: Bewegung erkannt - Display an, Timer setzen";
    fhem('delete at_HausgangDisplayOff');;
    if ($RaspDispStatus eq "off")
    {
      fhem('set Raspberry_Display on');;
    }
    fhem('define at_HausgangDisplayOff at +00:01:35 set Raspberry_Display off');;
  }

  # DIE WICHTIGE LUX-LOGIK - NUR WENN NICHT SUPPRESSED UND LUX VERFÜGBAR!
  if ($Bewegung && $Suppressed eq "false" && $Lux < $LuxGrenze && $Lux != 9999)
  {
    Log 3, "HausgangLicht: Lux-Bedingung erfüllt ($Lux < $LuxGrenze) - Licht einschalten";
    if ($Tagbetrieb)
    {
      fhem('set HUEGroup2 pct 100');;
      fhem('set HUEGroup2 on-for-timer 90');;
    }
    else
    {
      fhem('set HUEGroup2 pct 10');;
      fhem('set HUEGroup2 on-for-timer 90');;
    }
  }
  else
  {
    Log 3, "HausgangLicht: Lux-Bedingung NICHT erfüllt (Suppressed=$Suppressed, Lux=$Lux, Grenze=$LuxGrenze)";
  }
}

🎯 Funktionsweise

1. Dauerlicht-Modus (EIN)

  • Licht: 100% Helligkeit
  • Display: Bleibt AN (wird nicht ausgeschaltet)
  • Timer: Alle Timer werden gelöscht
  • Lux-Erfassung: Deaktiviert (durch return)

2. Dauerlicht-Ausschalten

  • Display: Wird AUSgeschaltet
  • Lux-Erfassung: Wird wieder aktiv

3. Normalbetrieb (kein Dauerlicht)

  • Bewegung erkannt: Display AN + Timer für Ausschalten (95s)
  • Bewegung + dunkel: Licht EIN (tags 100%, nachts 10%)
  • Lux-Grenze: 80 (optimal für Innenräume)

SO GEHST DU VOR:

  1. Ersetze dein aktuelles Notify mit dieser Version
  2. Schau in das FHEM-Log (Level 3), um zu sehen, welche Werte tatsächlich ausgelesen werden
  3. Du wirst sehen, ob der Lux-Wert korrekt ist und warum die Bedingung nicht auslöst

🔧 PROBLEMLÖSUNG: Lux-Wert zeigt 9999 an

Falls der Lux-Wert 9999 anzeigt, obwohl er eigentlich anders sein sollte:

1. Überprüfe das MQTT2_DEVICE:

get Hausgang_Lux_VEML7700 readings

Falls das "lux"-Reading fehlt, ist das Device nicht richtig konfiguriert.

2. Überprüfe die MQTT-Verbindung:

get Hausgang_Lux_VEML7700 debug

Schau ob MQTT-Nachrichten ankommen.

3. Alternative Notify-Version mit besserer Fehlerbehandlung:

Die oben gezeigte Version enthält bereits:

  • Robustere Wertauslesung mit ReadingsNum()
  • Automatischen Fallback auf last_valid_lux wenn Lux-Wert 9999 ist
  • Debug-Logausgaben für Fehlersuche
  • Prüfung $Lux != 9999 in der Lux-Logik

📊 Empfohlene Einstellungen

Parameter Wert Beschreibung
LuxGrenze 80 Optimal für Innenräume
Tag-Helligkeit 100% Volle Helligkeit am Tag
Nacht-Helligkeit 10% Gedimmtes Licht in der Nacht
Display-Timeout 95s Display bleibt 95s an

Checkliste für die Inbetriebnahme

  1. Notify n_HausgangLicht_Einfach in FHEM definieren
  2. Test: Dauerlicht EIN/AUS
  3. Test: Bewegungserkennung
  4. Test: Lux-Erfassung
  5. Logs prüfen (Log-Level 3)

🎉 Fertig! Einfache, zuverlässige Lösung ohne Komplexität!

Bei Fragen: Die Dokumentation enthält alle notwendigen Informationen für Fehlersuche und Anpassungen.