HM-SEC-MDIR anpassen zum Nachtlicht

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Alveran
Beiträge: 206
Registriert: 07.08.2018, 20:17
Hat sich bedankt: 35 Mal
Danksagung erhalten: 19 Mal

HM-SEC-MDIR anpassen zum Nachtlicht

Beitrag von Alveran » 17.03.2020, 16:04

Hallo,
ich brächte mal euer Schwarmwissen. Ich würde gern ein Nachtlicht bauen. Dazu müsste der Sketch so angepasst werden. Das am Atmega ein Ausgang geschaltet wird(für eine Zeit X) wenn ein gewisser Helligkeitswert unterschritten wird und eine Bewegung erkannt wird.
Ich kenne mich zwar mit 3D Druck gut aus aber am Sketch schreiben scheitert es. Vielleicht hat jemand Lust da was gemeinsam zu machen.

jp112sdl
Beiträge: 4699
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 150 Mal
Danksagung erhalten: 325 Mal
Kontaktdaten:

Re: HM-SEC-MDIR anpassen zum Nachtlicht

Beitrag von jp112sdl » 17.03.2020, 18:04

Der Sketch ist ja nur die halbe Miete.
Du wirst sicher nicht bei jeder Umkonfiguration (Anpassen des Helligkeitswerts) den Sketch neu flashen wollen und auch in der CCU sehen, ob der Aktorkanal gerade EIN oder AUS ist...
Es müsste also zudem ein Custom Device für die CCU erstellt werden, mit dem Aktorkanal und konfigurierbaren Einstellungen

VG,
Jérôme

Alveran
Beiträge: 206
Registriert: 07.08.2018, 20:17
Hat sich bedankt: 35 Mal
Danksagung erhalten: 19 Mal

Re: HM-SEC-MDIR anpassen zum Nachtlicht

Beitrag von Alveran » 17.03.2020, 18:45

Tatsächlich würde mir ein "dummes" Nachtlicht reichen. Also keinen extra Anpassungen für die CCU notwendig. Kann ruhig so aussehen wie ein normaler Bewegungsmelder.
Es reicht die Zeit und die Helligkeit im Sketch einmal festzulegen. Soll ja wirklich nur als Nachtlicht in absoluter Dunkelheit arbeiten.

jp112sdl
Beiträge: 4699
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 150 Mal
Danksagung erhalten: 325 Mal
Kontaktdaten:

Re: HM-SEC-MDIR anpassen zum Nachtlicht

Beitrag von jp112sdl » 17.03.2020, 19:01

machst im setup() ein pinMode(AKTORPIN, OUTPUT);
und im loop() digitalWrite(AKTORPIN, sdev.channel(1).status() == 0);

Wenn ich es richtig sehe, dann liefert status() den Helligkeitswert als 0...255 Range zurück.
0 ist dann dunkel.

So lange Helligkeit = 0 ist wird der Pin auf HIGH geschaltet, sonst LOW

VG,
Jérôme

Alveran
Beiträge: 206
Registriert: 07.08.2018, 20:17
Hat sich bedankt: 35 Mal
Danksagung erhalten: 19 Mal

Re: HM-SEC-MDIR anpassen zum Nachtlicht

Beitrag von Alveran » 18.03.2020, 15:09

Ahh sorry hab mich wahrscheinlich doch noch etwas falsch ausgedrückt. Die Einschaltbedingung ist wenn Bewegung erkannt und wenn es dunkel ist für eine Zeit X einschalten.

jp112sdl
Beiträge: 4699
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 150 Mal
Danksagung erhalten: 325 Mal
Kontaktdaten:

Re: HM-SEC-MDIR anpassen zum Nachtlicht

Beitrag von jp112sdl » 18.03.2020, 20:43

Machs am besten mit einem direktverknüpften Aktor ^^
Diese Parameter kann man nämlich genau so in einer Direktverknüpfung angeben.
Aber vielleicht baut dir noch jemand das direkt in den MDIR ein

VG,
Jérôme

Alveran
Beiträge: 206
Registriert: 07.08.2018, 20:17
Hat sich bedankt: 35 Mal
Danksagung erhalten: 19 Mal

Re: HM-SEC-MDIR anpassen zum Nachtlicht

Beitrag von Alveran » 18.03.2020, 20:46

Stimmt gute Idee. Danke.

TomMajor
Beiträge: 857
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 44 Mal
Danksagung erhalten: 138 Mal
Kontaktdaten:

Re: HM-SEC-MDIR anpassen zum Nachtlicht

Beitrag von TomMajor » 23.03.2020, 00:05

Alveran hat mich gebeten da mal drauf zu schauen.
Und wegen seinen hervorragenden 3D Arbeiten konnte ich das nicht ablehnen. :)

Ich kenne aber den sketch nicht und bei AskSinPP habe ich auch lange nicht reingeschaut.
Also zum Verständnis, bei Bewegung wacht das Gerät nach der Stelle

Code: Alles auswählen

hal.activity.savePower<Sleep<>>(hal);
auf.

Jerome schreibt oben man bekommt die Helligkeit mit

Code: Alles auswählen

sdev.channel(1).status()
So weit so gut.
Jetzt brauchen wir z.B. noch einen Timer für die OnTime des Lichtes, oder?
papa hatte mal die timer in einem Thread erklärt, ich weiß aber nicht mehr wo.
In AlarmClock.h finde ich z.B. die add() Methode.
Wie kann man in loop() einen timer mit einer best. Zeit setzen und wie erfährt man wann er fertig ist?

So in etwa, aber wie genau?

Code: Alles auswählen

void LichtAus (AlarmClock& clock) {
  // io pin aus
}

loop() {
...
if (Dunkel) {
  sysclock.set(5min)
  sysclock.add(&LichtAus);
...
Viele Grüße,
Tom

jp112sdl
Beiträge: 4699
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 150 Mal
Danksagung erhalten: 325 Mal
Kontaktdaten:

Re: HM-SEC-MDIR anpassen zum Nachtlicht

Beitrag von jp112sdl » 23.03.2020, 06:32

TomMajor hat geschrieben:
23.03.2020, 00:05
Also zum Verständnis, bei Bewegung wacht das Gerät nach der Stelle
CODE: ALLES AUSWÄHLEN
hal.activity.savePower<Sleep<>>(hal);
auf.
Ja, aber auch wenn eine zyklische Meldung gesendet wird (z.B. Helligkeitswert), wenn die Batterie gemessen wird...
Es müsste also noch konkret BEWEGUNG erfasst werden.
Eigentlich müsste man den kompletten trigger() aus dem MotionChannel reinholen, um dort bei Bewegung ein weiteres Ereignis (Nachtlichttimer) zu starten.
TomMajor hat geschrieben:
23.03.2020, 00:05
Wie kann man in loop() einen timer mit einer best. Zeit setzen und wie erfährt man wann er fertig ist?
Die trigger() Methode wird aufgerufen, wenn die Zeit abgelaufen ist

Code: Alles auswählen

class LichtAusAlarm : public Alarm {
  public:
  LichtAusAlarm () : Alarm (0) {}
  virtual ~LichtAusAlarm () {}

  void trigger (AlarmClock& clock)  {
     //hier das Licht ausschalten
  }
  
} laa;

void loop() {
  if (Dunkel && NachtlichtEIN != false) {
    laa.set(seonds2ticks(300)); //5min 
    sysclock.add(laa);
  }
    ...
  }

VG,
Jérôme

papa
Beiträge: 428
Registriert: 22.05.2018, 10:23
Danksagung erhalten: 29 Mal

Re: HM-SEC-MDIR anpassen zum Nachtlicht

Beitrag von papa » 23.03.2020, 08:40

Es gab bisher keine Möglichkeit, den aktuellen Motion-Status am Channel abzufragen. Habe ich gerade in die Lib eingebaut. Bitte mal pullen.
Der Code für das Nachtlicht könnte dann so aussehen - wie immer nicht getestet - nur durch den Compiler geschickt.

Code: Alles auswählen

#define LIGHTPIN 6
class LightAlarm : public Alarm {
  public:
  LightAlarm() : Alarm(0) {
    pinMode(LIGHTPIN,OUTPUT);
    digitalWrite(LIGHTPIN,LOW);
  }
  virtual ~LightAlarm() {}

  void setOn () {
    digitalWrite(LIGHTPIN,HIGH);
    set(seconds2ticks(300));
    sysclock.add(*this);
  }

  virtual void trigger (__attribute__ ((unused)) AlarmClock& clock) {
    digitalWrite(LIGHTPIN,LOW);
  }
} nightlight;

void loop() {
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
  if( sdev.channel(1).isMotion() && sdev.channel(1).status() < 50 && nightlight.active()==false ) {
    nightlight.setOn();
  }
  if( worked == false && poll == false ) {
    .....
Anfragen zur AskSin++ werden nur im Forum beantwortet

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“