Hilfe bei MySensor Sketch benötigt // LED Treppenbeleuchtung

Begonnen von tklein, 18 Juni 2017, 12:02:28

Vorheriges Thema - Nächstes Thema

tklein

Hallo zusammen,

habe mir auf Empfehlung (https://forum.fhem.de/index.php/topic,72169.0.html, speziellen Dank an tiwo85) diese LED-Treppenbeleuchtung gekauft:
https://www.openhardware.io/view/366/Automatic-stairs-led-lighting-arduino-shield

Das klappt auch super. Nun ist meine Frage, wie/ob ich zusätzliche "Sensoren"
in dem Sketch setzen kann, so dass es mir möglich ist auch die Beleuchtung per FHEM zu starten, oder die Anzahl der Stufen oder die Dimmwerte zu konfigurieren.

Nur habe ich von dieser Art zu programmieren (noch) gar keine Ahnung und die Beispiele für andere Sensoren auf https://www.mysensors.org/ sagen mi auch nicht so viel.
Es wäre klasse, wenn mir da jemand weiterhelfen könnte.

Hier der Sketch:




#define MY_RADIO_NRF24
#define MY_REPEATER_FEATURE
#include <SPI.h>
#include <MySensors.h>
boolean sensor;
boolean MysenSor;


#define SHIFTPWM_NOSPI                           
const int ShiftPWM_dataPin = 6;                   //  Do not change!!!
const int ShiftPWM_clockPin = 7;                  //  Do not change!!!
const int ShiftPWM_latchPin = 8;                  //  Do not change!!!
#include <ShiftPWM.h>
const bool ShiftPWM_invertOutputs = false;         
const bool ShiftPWM_balanceLoad = false;         
#define sensorLight_PIN A0                        // Light sensor  Do not change!!!
#define sensorBottom_PIN A1                       // Bottom sensor Do not change!!!                     
#define sensorUpper_PIN A2                        // Upper sensor  Do not change!!!
unsigned char maxBrightness = 120;                // Here you set the number of brightness levels. Adjust(0-255)!!
unsigned char pwmFrequency = 75;                  // These values affect the load of ShiftPWM
unsigned int numRegisters = 3;                    // Number of shift registers Do not change!!!
unsigned int numOutputs = numRegisters * 8;
unsigned int numRGBLeds = numRegisters * 8 / 3;
unsigned int fadingMode = 1;                      // start with all LED's off.
boolean sensorUpperActive;
boolean sensorBottomActive;
int numberOfstairs=6;                           // Setup Number of Your stairs. Adjust up to 24 !!!!
int pause=500;                                    // Setup delay ON/OFF  Adjust!!!
byte faidoutSpeed=6;                              // How fast to fadeout     Adjust!!!
byte faidinSpeed=6;                               // How fast to fadein      Adjust!!!


void before() {
    MysenSor=loadState(sensor);                   // Set relay to last known state (using eeprom storage)
}
 
void presentation() {
     present(sensor, S_LIGHT);
}

void receive(const MyMessage &message) {          // We only expect one type of message from controller. But we better check anyway.
                                                     
  if (message.type==V_LIGHT) {
    MysenSor=message.getBool();
     // Store state in eeprom
     saveState(message.sensor, message.getBool());
  }
}
void setup() {

// initialize serial communication at 9600 bits per second:
//  Serial.begin(9600);
 
  ShiftPWM.SetAmountOfRegisters(numRegisters);
  ShiftPWM.Start(pwmFrequency, maxBrightness);
  pinMode(sensorBottom_PIN, INPUT);
  pinMode(sensorUpper_PIN, INPUT);
  pinMode(sensorLight_PIN, INPUT);
 
 
}


void loop() {

                               
  if  ( MysenSor!=0) {                             // Adjust photocell cencivity. (val<10 dark.....val>800 bright..)    !!!!!!!!
                                                   
    BottomTriggerFire();                           //Checking bottom sensor
    UpperTrigerFire();                             //Checking upper sensor
    switchONOFFfromdown();                         //Stairs on/off from down to up
    switchONOFFfromUp();                           //Stairs on/off from up to down
//    Serial.println(sensorBottomActive);
//    Serial.println("huhu");
  }
}

void BottomTriggerFire() {

  if (analogRead (sensorBottom_PIN) >= 50 ) {      //Depend of the sensor type, if 0 when triggered ,than change the comparison to opposite value.
    sensorBottomActive = true;
   
  }
}

void UpperTrigerFire() {

  if (analogRead(sensorUpper_PIN) >= 50) {          //Depend of the sensor type, if 0 when triggered ,than change the comparison to opposite value.
    sensorUpperActive = true;
  }
}


void switchONOFFfromdown() {
  if (sensorBottomActive==true && sensorUpperActive==false){
   

        for(int i=0; i<numberOfstairs; i++){
          for(int a=0; a<maxBrightness; a++){
          ShiftPWM.SetOne(i,a);
          delay(faidoutSpeed);
           }
          }
         
        delay(pause);

        for(int i=0; i<numberOfstairs; i++){
          for(int a=maxBrightness;a>=0;a--){
          ShiftPWM.SetOne(i,a);
          if(a==0){
          ShiftPWM.SetOne(i,0); 
          }
          delay(faidinSpeed);
           }
          }
        sensorBottomActive = false ; 
  }
}
         
void switchONOFFfromUp () {
    if ( sensorUpperActive==true && sensorBottomActive==false) {


        for(int i=numberOfstairs; i>=0; i--){
          Serial.print(i);
          for(int a=0; a<maxBrightness; a++){
          ShiftPWM.SetOne(i,a);
          delay(faidoutSpeed);
           }
          }
         
        delay(pause);

         
        for(int i=numberOfstairs; i>=0; i--){
          //Serial.print(i);
          for(int a=maxBrightness;a>=0;a--){
          ShiftPWM.SetOne(i,a);
          if(a==0){
          ShiftPWM.SetOne(i,0); 
          }
          delay(faidinSpeed);
           }
          }
        sensorUpperActive= false ; 
  }
}


und hier das Listing des Mysensor in FHEM:


defmod MYSENSOR_1 MYSENSORS_DEVICE 1
attr MYSENSOR_1 IODev MySensor
attr MYSENSOR_1 mapReading_power 0 power
attr MYSENSOR_1 mapReading_status 0 status
attr MYSENSOR_1 mode repeater
attr MYSENSOR_1 requestAck 1
attr MYSENSOR_1 room MySensor
attr MYSENSOR_1 setReading_power 1
attr MYSENSOR_1 setReading_status off,on
attr MYSENSOR_1 version 2.1.1


Obwohl der mode repeater ist, kann ich steuern, ob die Schaltung aktiv oder passiv sein soll.

Grüße
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

tiwo85

Ich habe leider keine Schieberegister hier, um das mal auszuprobieren.
Du möchtest gerne von Fhem aus, die Konfiguration ändern, ohne den Sketch neu hochladen zu müssen?
Das müsste mit Custom Variable gehen(heißt ggf anders). Du müsstest im Sketch die Custom Variable deklarien, dann in der message Schleife abfangen und dementsprechend im eeprom speichern. Im Setup lädst du vorher die Variable aus dem Eeprom. So habe ich das mit dem Dim-Sketch gemacht um die Dim-Zeit zu ändern.

Gesendet von meinem VKY-L09 mit Tapatalk


tklein

das klingt gut.  ;)
Soweit die Theorie. Nur wie muss ich das Coden?
Gibt es evtl. ein Beispiel an dem ich mich endlanghangeln kann?
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

tiwo85

Ich schau morgen mal nach, evtl hab ich das noch gespeichert.

Gesendet von meinem VKY-L09 mit Tapatalk


tklein

das wäre klasse. Es geht mir ja auch nur um das Prinzip. Daher brauchst du ja auch keine Schieberegister. :-)

Grüße
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

tiwo85

Ich füge hier mal meine beiden Sketches ein. Der DimableLed basiert auf dem normalen Mysensors-DimableLed-Sketch. Ich habe ihn aber um eine "V-Var" erweitert um die Fade-Zeit einzustellen. Das ganze habe ich dann über die MySYSController Software aus dem Mysensors Forum gemacht.

Der TampHumLuxMotion basiert auf dem MultisensorSketch von Hexenmeister https://github.com/hexenmeister/MySensors_MyDevices.

Bei Fragen, einfach melden.

tklein

Hallo,

besten Dank, leider verstehe ich den Code nicht so wirklich.

Kann mich einer in die richtigen Richtung schubsen und mir evtl. einen Codeschnipsel zur Verfügung stellen?

Ich würde z.B. gerne:
- das Triggern von unten/oben mit einem set per FHEM vornehmen können
- Den Luxwert per set setzen können
- über ein Reading das Triggern von den Sensoren in FHEM mitbekommen
- mit einer neuen Funktion switch_all (on/off) per FHEM alle LED gleichzeitig ansteuern

Vielleicht hat das jemand mittlerweile in ähnlicher Form vorgenommen und ist so nett, das hier zu posten :-)

Viele Grüße
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

PeMue

Hallo Thomas,

verschiebst Du den Thread bitte in den MySensors Bereich? Da ist die Chance größer, dass die Experten mitlesen.

Gruß Peter
RPi3Bv1.2 rpiaddon 1.66 6.0 1xHM-CC-RT-DN 1.4 1xHM-TC-IT-WM 1.1 2xHB-UW-Sen-THPL-O 0.15 1x-I 0.14OTAU  1xCUNO2 1.67 2xEM1000WZ 2xUniroll 1xASH2200 3xHMS100T(F) 1xRFXtrx 90 1xWT440H 3xTFA30.3150 5xFA21
RPi1Bv2 LCDCSM 1.63 5.8 2xMAX HKT 1xMAX RT V200KW1 Heizung Wasser

tklein

Hallo Peter,

danke für den Hinweis, den ich gerne umsetzt habe. :-)

Grüße
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

Hier noch die aktualisierten Listings aus FHEM

Hier noch die aktualisierten Lisings dazu:


defmod MySensor MYSENSORS 192.168.0.68:5003
attr MySensor autocreate 1
attr MySensor group Sensorik
attr MySensor icon cul
attr MySensor room Actions,MySensor,System
attr MySensor stateFormat connection
attr MySensor verbose 4

setstate MySensor startup complete
setstate MySensor 2019-08-17 20:25:49 connection startup complete
setstate MySensor 2019-08-17 20:30:50 heartbeat alive
setstate MySensor 2019-08-17 20:25:49 state opened



Sensor 0:


defmod MYSENSOR_0 MYSENSORS_DEVICE 0
attr MYSENSOR_0 IODev MySensor
attr MYSENSOR_0 mode repeater
attr MYSENSOR_0 requestAck 1
attr MYSENSOR_0 room MySensor
attr MYSENSOR_0 version 2.2.0-beta

setstate MYSENSOR_0 2019-08-17 20:30:50 heartbeat alive



Sensor 1


defmod MYSENSOR_1 MYSENSORS_DEVICE 1
attr MYSENSOR_1 IODev MySensor
attr MYSENSOR_1 mapReading_power 0 power
attr MYSENSOR_1 mapReading_status 0 status
attr MYSENSOR_1 mode repeater
attr MYSENSOR_1 requestAck 1
attr MYSENSOR_1 room MySensor
attr MYSENSOR_1 setReading_.+ luxwert
attr MYSENSOR_1 setReading_power 1
attr MYSENSOR_1 setReading_status off,on
attr MYSENSOR_1 version 2.1.1

setstate MYSENSOR_1 routingtable cleared
setstate MYSENSOR_1 2017-06-18 11:22:01 parentId 0
setstate MYSENSOR_1 2017-06-17 19:09:48 power 1
setstate MYSENSOR_1 2017-06-17 19:11:22 state routingtable cleared
setstate MYSENSOR_1 2017-06-18 11:59:13 status on
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

Beta-User

Puh, ohne eigene Einarbeitung in das Coden wird da kaum was gehen...

Vielleicht solltest du Schritt für Schritt vorgehen, damit die dahinter liegenden Mechanismen etwas klarer werden:

Also erst mal den Luxwert an die Node senden. Da ist m.E. schon auf der FHEM-Seite ein Fehler drin, das sollte (in etwa) so heißen:
attr MYSENSOR_1 setReading_luxwert 1In etwa soll heißen: die 1 ist keine absolute Vorgabe, sondern die ChildID, unter der die Angabe an die Node gesendet werden soll; dort gibt es aber bislang keine Auswertelogik dazu... Also erst mal da ansetzen. Bevor du es aber nicht geschafft hast, dazu wenigstens eine serielle Ausgabe des erhaltenen Werts zu generieren (z.B. auf Basis des Beispiels von tiwo85) , macht es m.E. wenig Sinn, hier von meiner Seite weiter zu unterstützen. Dann sollte das jemand übernehmen, der dasselbe Ziel hat.


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

tklein

Danke erstmal dafür. Leider muss ich jetzt an einer anderen Stelle ein Problem lösen. Irgendwie funktioniert der Sketch mit der MySensor Erweiterung gar nicht bei mir. Sobald ich die Version ohne MySensor uploade klappt es wieder.

Evtl. löse ich das Problem, indem ich ein Wemos D1 mini mit ESP Easy zur Kommunikation nutze. Das Signal der Pirs gehen in das ASL Board und in einen Eingang beim Wemos. Über Relais an den Wemos angeschlossen, kann ich das Pir Signal simulieren.

Grüße
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