[gelöst] Frage zur Herangehensweise/ performante (Funktions)-Prog

Begonnen von tklein, 26 April 2017, 19:53:04

Vorheriges Thema - Nächstes Thema

tklein

Vielen Dank für eure Hilfe.

Damit ich jetzt richtig testen kann, muss ich herausfinden, warum der Wemos nach ein paar Minuten die Grätsche macht und neu bootet. Ziemlich blöd zum Testen.

Den Controller oder besser gesagt den etwas besseren Schalter/Dimmer habe ich als Dummy angelegt. Mein CUL433 MHz hat keine Signale empfangen. Der separate bei mir am Pi verbaute 433 MHz Empfänger/Sender hat die Befehle (toggle und dimm in jede Richttung) empfangen. Per codesend sende ich dann das/die Signale.

Z.B: StripeSchlafzimmer:down {for (my $i=1;$i!=10;$i++) {`/home/pi/433Utils/RPi_utils/codesend 15883554 &`}}


FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2

tklein

Hallo zusammen,

bin jetzt ein großes Stück weiter:


ESPEasy_Wemos_Bad:Switch:.on {
if ((ReadingsVal("ESPEasy_Wemos_Bad","Lux","")<205) and (ReadingsVal("ESPEasy_Wemos_Bad","Switch","") eq "on")) { # dunkel und Bewegung

           if(ReadingsVal("status_StripeBadezimmer","state","") eq "off"){                                      # Lampe ist auf off
                    fhem("set StripeBadezimmer toggle");                                                                     # anschalten/togglen da Lampe aus war
                    fhem("defmod at_ba_licht_off at +00:00:20 set StripeBadezimmer toggle");         # nach x sek toggeln --> auf aus
fhem("set StripeBadezimmer_merker on");      # merker auf on
{Log 1 , "------------------->\nBewegung initial erkannt: BAD AN ...";;    } # Logeintrag
               }
            else {                                                                                                                             # bei auslösung ist Lampe auf on
                if ((Value("StripeBadezimmer_merker") eq "on")){       # beim ersten Durchlauf darf at_ba_licht_off
fhem("delete at_ba_licht_off");       # gelöscht werden
{Log 2, "------------------->\nBewegung verlängert erkannt: 1. MAL --> gelöscht...";; }   # Logeintrag
}
                 
                 fhem("defmod at_ba_licht1_off at +00:00:20 set StripeBadezimmer toggle"); # nach x sek toggeln --> auf aus
fhem("set StripeBadezimmer_merker off"); # merker auf off damit bei der nächsten Verlängerung kein nicht vorhandener
{Log 3, "------------------->\nBewegung verlängert erkannt: BAD AN       --> nicht gelöscht....";;    }# at_ba_licht_off gelöscht werden würde --> eintrag im Log
                 }
   }
   #fhem("set ESPEasy_Wemos_Bad gpio 14 off");
}


Nur habe ich jetzt noch das Problem, dass wenn ich das erste mal auslöse und durch eine permanente Bewegung das PIR notify nicht zur Verlängerung auslöst (-->PIR.switch war die ganze Zeit auf "1")
Sobald ich "set ESPEasy_Wemos_Bad gpio 14 off" (manuelles setzen des PIR) einmal verwende, wird er nicht mehr durch den PIR automatisch korrekt gesetzt, sondern bleibt in der durch den Set-Befehl
gesetzten Wert.

BTW: Wie kann iich in Logeinträgen einen Zeilenumbruch einfügen? \n oder <br> hatte keinen Erfolg

Gruß
Thomas
FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2

bartman121

Hallo tklein ....

mir scheint, du weißt gar nicht, was du tust?

Hier ist das Datenblatt vom PIR-SC501: https://www.mpja.com/download/31227sc.pdf

Wer hat dir denn den Blödsinn eingeredet, dass du den PIR zurücksetzen musst?

Für das von dir gewünschte Verhalten des PIR musst "Time Delay Adjust" ganz nach links drehen (sehr kurze Zeit) und "Single Trigger" einstellen.

 

CoolTux

Zitat von: tklein am 08 Mai 2017, 16:00:43
Hallo zusammen,

bin jetzt ein großes Stück weiter:


ESPEasy_Wemos_Bad:Switch:.on {
if ((ReadingsVal("ESPEasy_Wemos_Bad","Lux","")<205) and (ReadingsVal("ESPEasy_Wemos_Bad","Switch","") eq "on")) { # dunkel und Bewegung

           if(ReadingsVal("status_StripeBadezimmer","state","") eq "off"){                                      # Lampe ist auf off
                    fhem("set StripeBadezimmer toggle");                                                                     # anschalten/togglen da Lampe aus war
                    fhem("defmod at_ba_licht_off at +00:00:20 set StripeBadezimmer toggle");         # nach x sek toggeln --> auf aus
fhem("set StripeBadezimmer_merker on");      # merker auf on
{Log 1 , "------------------->\nBewegung initial erkannt: BAD AN ...";;    } # Logeintrag
               }
            else {                                                                                                                             # bei auslösung ist Lampe auf on
                if ((Value("StripeBadezimmer_merker") eq "on")){       # beim ersten Durchlauf darf at_ba_licht_off
fhem("delete at_ba_licht_off");       # gelöscht werden
{Log 2, "------------------->\nBewegung verlängert erkannt: 1. MAL --> gelöscht...";; }   # Logeintrag
}
                 
                 fhem("defmod at_ba_licht1_off at +00:00:20 set StripeBadezimmer toggle"); # nach x sek toggeln --> auf aus
fhem("set StripeBadezimmer_merker off"); # merker auf off damit bei der nächsten Verlängerung kein nicht vorhandener
{Log 3, "------------------->\nBewegung verlängert erkannt: BAD AN       --> nicht gelöscht....";;    }# at_ba_licht_off gelöscht werden würde --> eintrag im Log
                 }
   }
   #fhem("set ESPEasy_Wemos_Bad gpio 14 off");
}


Nur habe ich jetzt noch das Problem, dass wenn ich das erste mal auslöse und durch eine permanente Bewegung das PIR notify nicht zur Verlängerung auslöst (-->PIR.switch war die ganze Zeit auf "1")
Sobald ich "set ESPEasy_Wemos_Bad gpio 14 off" (manuelles setzen des PIR) einmal verwende, wird er nicht mehr durch den PIR automatisch korrekt gesetzt, sondern bleibt in der durch den Set-Befehl
gesetzten Wert.

BTW: Wie kann iich in Logeinträgen einen Zeilenumbruch einfügen? \n oder <br> hatte keinen Erfolg

Gruß
Thomas

Mein Empfehlung.
Den ganzen Codewulzt als Funktion in eine 99_myUtils Datei und im Notify dann nur den Funktionsaufruf.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

tklein

@bartman121
DIe Zeitspanne hatte ich schon auf den kürzesten Wert eingestellt. Aber den Option mit dem Single Trigger hatte ich so nicht auf dem Schirm.
Damit sollte es so klappen.

ZitatWer hat dir denn den Blödsinn eingeredet, dass du den PIR zurücksetzen musst?
--> das ist auf meinem Mist gewachsen. War die einzige Möglichkeit, die ich gesehen habe, dass das notify (erneut) zur Verlängerung aufgerufen werden könnte

@CoolTux

da hast du recht, werde ich machen, sobald es richtig funktiniert.


Da ich den Jumper (nur Lötpunkte) für den Triggermode nicht habe, ist es jetzt interssant zu wissen, welcher Mode ohne Kontakte aktiv ist.

Grüße & Danke
Thomas
FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2

tklein

Die Einstellung "Single Trigger" scheint zu funktionieren. Werde das im Feldtest beobachten.

Grüße & Danke
Thomas
FHEM auf Pi 3, Echo (Plus, Dot und Connect), CUL868/433, HM Komponenten, Broadlink, Enigma (VU DUO2), Alexa/Homebridge, Sonoffs (POW, RF, Basic), Wemos D1 (IR, DHT, BH1750, OLED, BMP180), IT/Steckdosen, Fritzbox mit SIP, Wifilight, MQTT, Pilight, Xiaomi Flower Sensor, Spotify, Dooya, Shelly, Conbee2