Hauptmenü

DOIF erneutes Schalten

Begonnen von supergrobi, 16 November 2017, 13:05:51

Vorheriges Thema - Nächstes Thema

supergrobi

Hallo Forum,

ich stehe etwas auf dem Schlauch, vielleicht ist das Thema ja bereits schon mal aufgetaucht, aber mir fehlen die Suchbegriffe...

Ich schalte eine Lampe über einen PIR Bewegungsmelder mit der DOIF Funktion:
define di_Lampe (([ESPEasy_Lampe_Toilet_Lampe_WC:"PIR: on"]) and ... gekürzt...) (set ESPEasy_Lampe_Toilet_Lampe_WC on)
DOELSEIF (([ESPEasy_Lampe_Toilet_Lampe_WC:"PIR: off"] or ...gekürzt...)) (set ESPEasy_Lampe_Toilet_Lampe_WC off)

attr di_Lampe wait 0:300


dies funktioniert soweit auch ganz gut. Manchmal kommt es jedoch vor, das die Lampe wahrscheinlich aufgrund WLAN Verlust das OFF Signal nicht erhält. Beim einschalten ist das nicht so wild, da das ON bei häufiger Bewegung mehrmals gesendet wird.

Kann man das OFF irgendwie wiederholen, so lange, bis das Relais auch wirklich die Off Meldung zurück gibt?

lg
Thomas

der_da

Ich nehme an, es handelt sich bei dir nicht um ein bidirektionales Funkprotokoll wie z.B. bei HomeMatic. Dort sendet ja der Aktor eine Bestätigung zurück, dass er das (Ausschalt-)Signal empfangen und umgesetzt hat. Wenn es nicht bidirektional ist, kannst du nur hoffen, dass der Aktor tut, was er soll. Im Zweifel halt mehrfach senden. Aber auch das erhöht nur etwas die Wahrscheinlichkeit - eine sichere Rückmeldung gibt es da nicht.
Eventuell so (noch zwei mal im 10 Sekundenabstand "Aus" senden):
define di_Lampe (([ESPEasy_Lampe_Toilet_Lampe_WC:"PIR: on"]) and ... gekürzt...) (set ESPEasy_Lampe_Toilet_Lampe_WC on)
DOELSEIF (([ESPEasy_Lampe_Toilet_Lampe_WC:"PIR: off"] or ...gekürzt...)) (set ESPEasy_Lampe_Toilet_Lampe_WC off)  (set ESPEasy_Lampe_Toilet_Lampe_WC off)  (set ESPEasy_Lampe_Toilet_Lampe_WC off)

attr di_Lampe wait 0:300,10,10

?

Beta-User

Es könnte sich auch um eine Beschränkung des WLAN-AP handeln. Viele können nämlich nur eine begrenzte Zahl von Clients gleichzeitig bedienen ::) .

Von daher: Besser als irgendein Würgaround, der die Symptome bekämpft, wäre es, das Problem an der Wurzel zu lösen: An allen Handys das WLAN abschalten, richtige WLAN-AP-Hardware verwenden oder schlicht einen anderen Aktor-Typ nehmen ;) .

Just my2ct.

Gruß, Beta-User
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

supergrobi

Ok, ich vergaß zu erwähnen, es handelt sich um einen Sonoff (ESP8266), die Übertragung ist Bidirektional. D.h. ich bekomme den Schaltzustand zurück gemeldet. Mir ist nur nicht ganz klar, wie ich den verwenden kann um die Lampe beim Nicht-Schalten erneut auszuschalten.

Ich wusste nicht, dass man beim DOIF mehrere Schaltbefehle hintereinander setzen kann... Dies werd ich auf jeden Fall schon mal ausprobieren. vielen Dank. WLAN Hardware ist die Fritzbox + 3 Repeater, dies sollte eigentlich reichen.

der_da

Zitat von: supergrobi am 16 November 2017, 15:32:25
Ok, ich vergaß zu erwähnen, es handelt sich um einen Sonoff (ESP8266), die Übertragung ist Bidirektional. D.h. ich bekomme den Schaltzustand zurück gemeldet. Mir ist nur nicht ganz klar, wie ich den verwenden kann um die Lampe beim Nicht-Schalten erneut auszuschalten.
Ich kenne Sonoff nicht, aber bei HomeMatic bekommt mein Aktor (z.B. ein Schalter) nach dem Senden des Ausschaltbefehls erst mal den Status "set off" und erst wenn der Aktor (der HomeMatic-Schalter) die Bestätigung geschickt hat, setzt FHEM den Status des Aktors von "set off" auf "off". Ziehe ich z.B. die Stromversorgung des HomeMatik-Aktors ab, dann kann er weder Schalten noch bestätigen. FHEM zeigt mir dann ein "set off" (Icon: Lampe mit Fragezeichen) an - ohne weiteres Zutun meinerseits. Das sollte, wenn Sonoff auch bidirektional funktioniert, doch ähnlich sein!

Beta-User

Ob das mit den vielen Repeatern jetzt "eigentlich reichen" sollte oder nicht, ist so eine Sache. Zum einen ist die FB nicht unbedingt als Super-WLAN-AP berühmt, zum anderen kosten Repeater Bandbreite oder verursachen sonstige Probleme im WLAN. Weniger ist daher manchmal mehr ;) .

Ansonsten würde ich mir die Events mal ansehen, wenn der ESP bei einem Schaltbefehl nicht will bzw. nicht verfügbar ist. Solange er im Netz hängt, ist eine Wiederholung unnötig und sorgt im blödesten Fall dafür, dass jemand im Dunkeln auf dem Klo sitzt...

Aber ob Würgaround oder ordentliche Problemanalyse jetzt angesagt sind, muß jeder selber wissen...

Just my2ct ::) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

supergrobi

Danke Euch.

Die Repeater sind mit PowerLine per Steckdose verbunden, also stellt jeder Repeater sozusagen einen extra AP dar. Das Powerline nicht die beste Verbindung ist, weiß ich auch. Aber es soll hier nicht um die Qualität der WLAN oder Powerline Verbindungen gehen.
HomeMatic ist auch etwas gänzlich anderes.

Ich hatte mir vorgestellt, das ich anhand der Rückmeldung die ich beim schalten bekomme, bzw. nicht bekomme (Relais: On"), den Befehl nochmals ausführen kann. Eben so lange, bis ich die gewünschte Rückmeldung "Relais: Off" bekomme. Geht so etwas ?

pnewman

#7
Hallo Thomas,

ich hatte ein ähnliches Problem mit meinen PCA301 und habe im Forum jemanden gefunden der einen Watchdog erstellt hat.
Damit wird überwacht ob meine Steckdosen auch wirklich ein oder aus schalten.
Klappt prima.

Hier ein auszug aus meinem LOG:
2017.11.13 03:16:15 1: PCA301_check: Schaltsignal set-on zu SD_HeizungZirkulationspumpe gesendet
2017.11.13 03:16:15 1: PCA301_check: Rückmeldung on von SD_HeizungZirkulationspumpe erhalten
2017.11.13 03:17:15 1: PCA301_check: Schaltsignal set-off zu SD_HeizungZirkulationspumpe gesendet
2017.11.13 03:17:15 1: PCA301_check: Rückmeldung off von SD_HeizungZirkulationspumpe erhalten
2017.11.13 03:17:39 1: PCA301_check: Schaltsignal set-on zu SD_HeizungZirkulationspumpe gesendet
2017.11.13 03:17:39 1: PCA301_check: Rückmeldung on von SD_HeizungZirkulationspumpe erhalten
2017.11.13 03:18:55 1: PCA301_check: Schaltsignal set-off zu SD_HeizungZirkulationspumpe gesendet
2017.11.13 03:18:55 1: PCA301_check: Rückmeldung off von SD_HeizungZirkulationspumpe erhalten


Hier der Code für die 99_myUtils.pm
sub PCA301_check($$){
  my ($Name,$Event) = @_;

  #Reading warte auf acknowledge setzen
  if (($Event eq "set-on") or ($Event eq "set-off"))  {
    readingsSingleUpdate($defs{$Name}, "waitforACK", $Event,1);
    Log 1, ("PCA301_check: Schaltsignal $Event zu $Name gesendet");
  }

  #Rückmeldung Kontrollieren
  if ($Event eq "on") {
    if (ReadingsVal($Name, 'waitforACK', '') eq "set-on") {
      readingsSingleUpdate($defs{$Name}, "waitforACK", "ACK:on",1);
      Log 1, ("PCA301_check: Rückmeldung $Event von $Name erhalten");
    } elsif (ReadingsVal($Name, 'waitforACK', '') eq "set-off") {
      fhem ("sleep 1;set $Name off");
      Log 1, ("PCA301_check: Falsche Rückmeldung $Event von $Name erhalten");
    }
  } elsif ($Event eq "off") {
    if (ReadingsVal("$Name", 'waitforACK', '') eq "set-off") {
      readingsSingleUpdate($defs{$Name}, "waitforACK", "ACK:off",1);
      Log 1, ("PCA301_check: Rückmeldung $Event von $Name erhalten");

    } elsif (ReadingsVal($Name, 'waitforACK', '') eq "set-on") {
     fhem ("sleep 1;set $Name on");
     Log 1, ("PCA301_check: Falsche Rückmeldung $Event von $Name erhalten");
    }   
  }
}
#


dazu noch ein Notify:

define PCA301.ntfy notify .*.(on|off|set-on|set-off) {if($TYPE eq 'PCA301') {PCA301_check($NAME,$EVENT)}}


vieleicht kannst Du ihn auf deine Anwendung abändern.



Gruß
Ralf
Raspberry Pi3B+ / Nano-Cul 868 - MAX!=Heizung, HM-Lan - Rollo+Licht, JeeLink-Clone 868 - LaCrosse, JeeLink-Clone 868 - PCA301, CUL 434 - IT-Steckdosen+Fernbedienung

supergrobi

puhhh

danke für für die Hilfe :)

für einen Anfänger ist das eine harte Nuss, aber wenigstens ein Ansatz :)