MySensor Relay anbinden

Begonnen von Meister_Petz, 06 Januar 2015, 20:23:53

Vorheriges Thema - Nächstes Thema

Meister_Petz

Moin,

hab alle möglichen Attribute getestet, aber ich bekomm das Relais nicht zum Laufen. Auch ein Button funktioniert nicht.

Der Code des Relais ist: MySensors RelayActuator

Die automatische Definition für das MySensor Device ist:

define MYSENSOR_100 MYSENSORS_DEVICE 100
attr MYSENSOR_100 IODev gateway
attr MYSENSOR_100 mapReading_switch1 1 switch
attr MYSENSOR_100 mode repeater
attr MYSENSOR_100 setReading_switch1 on,off
attr MYSENSOR_100 version 1.4.1

Folgendes wird angezeigt:
CFGFN      
DEF                     100
IODev            gateway
I_SKETCH_NAME      Relay
I_SKETCH_VERSION           1.0
NAME            MYSENSOR_100
NR               28
STATE            ???
TYPE                    MYSENSORS_DEVICE
ack               0
protocol                 1.4.1
radioId            100
repeater                 1

Im Log meldet sich der Sensor mit:
2015.01.06 20:14:42 5: MYSENSORS gateway gateway: read: 100-100-0 s=1,c=0,t=3,pt=0,l=5:1.4.1
2015.01.06 20:14:42 5: MYSENSORS/RAW: 100;1;0;0;3/;1.4.1
2015.01.06 20:14:42 5: MYSENSORS Read: Rx: fr=100 ci=001 c=000(C_PRESENTATION) st=003(S_LIGHT         ) ack=0 '1.4.1'

Kann mir jemand einen Tipp geben?

Danke



hexenmeister

Sieht bei mir auch so ähnlich aus...
define MYSENSOR_127 MYSENSORS_DEVICE 127
attr MYSENSOR_127 IODev mysensors
attr MYSENSOR_127 mapReading_switch 1 switch
attr MYSENSOR_127 mode repeater
attr MYSENSOR_127 setCommands on:switch:off off:switch:on
attr MYSENSOR_127 setReading_switch on,off
attr MYSENSOR_127 version 1.4


Nur die Version ist eine ältere... Der gateway habe ich jedoch bereits auf 1.4.1 upgedated.
Es geht alles. Ich kann schalten mit
set MYSENSOR_127 on
set MYSENSOR_127 off


Bist Du sicher, dass Du kein Hardwareproblem hast?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

hexenmeister

#2
P.S. mein selbsterweitertes Sensor-Sketch mit Temp/Humidity/Motion/Distance(Ultrasonic)/Licht funktioniert auch.
define MYSENSOR_1 MYSENSORS_DEVICE 1
attr MYSENSOR_1 IODev mysensors
attr MYSENSOR_1 mapReading_brightness 3 brightness
attr MYSENSOR_1 mapReading_distance 2 distance
attr MYSENSOR_1 mapReading_humidity 0 humidity
attr MYSENSOR_1 mapReading_motion 4 tripped
attr MYSENSOR_1 mapReading_temperature 1 temperature
attr MYSENSOR_1 mode node
attr MYSENSOR_1 version 1.4


Ich sehe gerade, der Temperatursensor ist ausgefallen, ist aber kein Wunder bei dem monströsen Testaufbau (lag schon etwas länger hier run) ;)

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Meister_Petz

Danke für die Antwort! Jetzt klappts auch bei mir!

Jetzt fehlt mir nur noch, dass er mir den aktuellen Zustand anzeigt.

Kannst Du da auch helfen?

Danke

fh168

Hallo Hexenmeister,

ich sehe gerade, du hast einen multi-sensor sketch gezaubert.
Kann du es auch hinbekommen, das man aus dem TFK (mit sleep-modus) auch gleichzeitig den Batterie-Status [%] liefert, aber NUR bei einem Alarm (-also Fenster / tür auf zu, damit strom gespart wird) ?
Die Hardware mit dem Batterie-Status kann man ja im MySensors Forum sehen. Diese besteht ja nur aus einem Spannungsteiler.

LG
/robin
Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

hexenmeister

Zitat von: Meister_Petz am 07 Januar 2015, 10:31:00
Jetzt fehlt mir nur noch, dass er mir den aktuellen Zustand anzeigt.

mit
attr MY_SENSORS_127 stateFormat switch
sollte der Zustand im state angezeigt werden.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

hexenmeister

Zitat von: fh168 am 07 Januar 2015, 10:49:59
ich sehe gerade, du hast einen multi-sensor sketch gezaubert.
Ja, testweise um verschiedene Möglichkeiten auszuprobieren. War einfach.
Ich bastele jetzt aber an einem Device, das in eine UP-Dose rein muss. Soll Tür-Kontakt, Bewegungsmelder und Lichtsensor bekommen. Evtl. auch eine LED (am besten 2-farbig oder RGB) zur Statusanzeige. Batterien wird es nicht haben, da in der Dose 5 und 12 Volt liegen.

ZitatKann du es auch hinbekommen, das man aus dem TFK (mit sleep-modus) auch gleichzeitig den Batterie-Status [%] liefert, aber NUR bei einem Alarm (-also Fenster / tür auf zu, damit strom gespart wird) ?
Die Hardware mit dem Batterie-Status kann man ja im MySensors Forum sehen. Diese besteht ja nur aus einem Spannungsteiler.
Sollte kein Problem sein. Einfach messen (wann du es eben haben willst) und senden. Eine entsprechende Nachricht gibt es ja schon. Je nachdem, wie die Versorgung organisiert ist, kann man entweder interne Messung verwenden, oder wie z.B. in dem Dirks Universalsensor aufbauen. Ist in der Tat nur ein Spannungsteiler mit der Möglichkeit ihn abzuschalten (Strom sparen).
Wo genau liegt das Problem?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Meister_Petz

Zitat von: hexenmeister am 07 Januar 2015, 13:51:33
mit
attr MY_SENSORS_127 stateFormat switch
sollte der Zustand im state angezeigt werden.

Many Thanks! Jetzt klappt auch das. Zeitschaltuhr geht auch schon...

Danke

fh168

Hue, Lacrosse, PCA301, MySensors, V 1.67 CUL 868 V3.4, Lacrosse-WLAN-Gateway, Tasmota RF-

hexenmeister

Muss ich mir ansehen, dürfte nicht so schwer werden. Habe gerade aber haufen Baustellen gleichzeitig :(
Musst Du externen Strom-Teiler verwenden? Benutzt Du Spannungregler (also µC-Spannung ist nicht die Versorgungsspannung)?

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Meister_Petz

Mir ist noch was eingefallen... Wenn ich einen MySensor mit mehreren Relais habe. Wie kann man das realisieren, dass man verschiedene Relais schaltet?

Baue ich das in eine Definition oder baue ich dafür einzelne Devices

vieleicht so?:

define Relais1 MYSENSORS_DEVICE 127
attr Relais1 mapReading_switch 1 switch
attr...

define Relais2 MYSENSORS_DEVICE 127
attr Relais2 mapReading_switch 1 switch
attr...

Vielen Dank außerdem! Das ist wirklich eine Hilfe!

Petz

hexenmeister

Habe mit mehreren Relays nicht ausprobiert, aber eigentlich müsste alles in einem Device zusammen liegen.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

thunder1902

Damit kann ich dienen - hab mir mal einen 3-Fach-Relais-Schalter zusammengebastelt:

// Example sketch f�r a "light switch" where you can control light or something
// else from both vera and a local physical button (connected between digital
// pin 3 and GND).
// This node also works as a repeader for other nodes

#include <MySensor.h>
#include <SPI.h>
#include <Bounce2.h>

#define RELAY_PIN1  3  // Arduino Digital I/O pin number for relay
#define RELAY_PIN2  4  // Arduino Digital I/O pin number for relay
#define RELAY_PIN3  5  // Arduino Digital I/O pin number for relay
#define BUTTON_PIN1  6  // Arduino Digital I/O pin number for button
#define BUTTON_PIN2  7  // Arduino Digital I/O pin number for button
#define BUTTON_PIN3  8  // Arduino Digital I/O pin number for button

#define CHILD_ID 1   // Id of the sensor child
#define RELAY_ON 0
#define RELAY_OFF 1

Bounce debouncer1 = Bounce();
Bounce debouncer2 = Bounce();
Bounce debouncer3 = Bounce();
int oldValue1=0;
int oldValue2=0;
int oldValue3=0;
bool state1;
bool state2;
bool state3;
MySensor gw;
MyMessage msg1(1,V_LIGHT);
MyMessage msg2(2,V_LIGHT);
MyMessage msg3(3,V_LIGHT);

void setup() 

  gw.begin(incomingMessage, AUTO, true);

  // Send the sketch version information to the gateway and Controller
  gw.sendSketchInfo("Relay & Button", "1.0");

// Setup the button
  pinMode(BUTTON_PIN1,INPUT);
  pinMode(BUTTON_PIN2,INPUT);
  pinMode(BUTTON_PIN3,INPUT);
  // Activate internal pull-up
  digitalWrite(BUTTON_PIN1,HIGH);
  digitalWrite(BUTTON_PIN2,HIGH);
  digitalWrite(BUTTON_PIN3,HIGH);   
 
  // After setting up the button, setup debouncer
  debouncer1.attach(BUTTON_PIN1);
  debouncer2.attach(BUTTON_PIN2);
  debouncer3.attach(BUTTON_PIN3);
  debouncer1.interval(5);
  debouncer2.interval(5);
  debouncer3.interval(5);

  // Register all sensors to gw (they will be created as child devices)
  gw.present(1, S_LIGHT);
  gw.present(2, S_LIGHT);
  gw.present(3, S_LIGHT);

  // Make sure relays are off when starting up
  digitalWrite(RELAY_PIN1, RELAY_OFF);
  digitalWrite(RELAY_PIN2, RELAY_OFF); 
  digitalWrite(RELAY_PIN3, RELAY_OFF); 
  // Then set relay pins in output mode
  pinMode(RELAY_PIN1, OUTPUT);   
  pinMode(RELAY_PIN2, OUTPUT);   
  pinMode(RELAY_PIN3, OUTPUT);     
     
  // Set relay to last known state (using eeprom storage)
  state1 = gw.loadState(1);
  digitalWrite(RELAY_PIN1, state1?RELAY_ON:RELAY_OFF);
  state2 = gw.loadState(2);
  digitalWrite(RELAY_PIN2, state2?RELAY_ON:RELAY_OFF);
  state3 = gw.loadState(3);
  digitalWrite(RELAY_PIN3, state3?RELAY_ON:RELAY_OFF); 
}


/*
*  Example on how to asynchronously check for new messages from gw
*/
void loop()
{
  gw.process();
  debouncer1.update();
  debouncer2.update();
  debouncer3.update();
  // Get the update value
  int value1 = debouncer1.read();
  if (value1 != oldValue1 && value1==0) {
      gw.send(msg1.set(state1?false:true), true); // Send new state and request ack back
  }
  oldValue1 = value1;
 
  // Get the update value
  int value2 = debouncer2.read();
  if (value2 != oldValue2 && value2==0) {
      gw.send(msg2.set(state2?false:true), true); // Send new state and request ack back
  }
  oldValue2 = value2;

  // Get the update value
  int value3 = debouncer3.read();
  if (value3 != oldValue3 && value3==0) {
         
      gw.send(msg3.set(state3?false:true), true); // Send new state and request ack back
  }
  oldValue3 = value3; 
 
}

void incomingMessage(const MyMessage &message) {
  // We only expect one type of message from controller. But we better check anyway.
  if (message.isAck()) {
     Serial.println("This is an ack from gateway");
  }

  if (message.type == V_LIGHT) {
     // Change relay state
     if(message.sensor==1){
digitalWrite(RELAY_PIN1, message.getBool()?RELAY_ON:RELAY_OFF);
         state1=message.getBool();
}
if(message.sensor==2){
digitalWrite(RELAY_PIN2, message.getBool()?RELAY_ON:RELAY_OFF);
        state2=message.getBool();
}
if(message.sensor==3){
digitalWrite(RELAY_PIN3, message.getBool()?RELAY_ON:RELAY_OFF);
          state3=message.getBool();

}
     
// Store state in eeprom
      gw.saveState(message.sensor, message.getBool());

     // Write some debug info
     Serial.print("Incoming change for sensor:");
     Serial.print(message.sensor);
     Serial.print(", New status: ");
     Serial.println(message.getBool());
   }
}


Funktioniert auch. Mein Problem ist nur, wie lasse ich in Fhem 3 Glühbirnen-Symbole in einem Device anzeigen? Bisher kannte ich nur ein Glühlampen-Symbol (an/aus) pro Device...??

hexenmeister

Du kannst eine ReadingsGroup dafür erstellen. Damit kannst Du je schönere Bedienoberflächen bauen.
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

Porky666

Hallo zusammen,
hier ein Beispiel aus dem mysensors.org Forum ein Sketch für 8 Relais
funktioniert super über die 6 Analog Ausgänge und 2 Digital Ausgänge.
Hab ich heut mal getestet -- Prima Sache um sich eine 8 Fach Steckdosenleiste zusammen zu schrauben.

Nur Vorsicht mit der 230V Seite und nicht Überlasten.

  // Example sketch showing how to control physical relays.
  // This example will remember relay state even after power failure.
  // Using an Array to define the pin's

#include <MySensor.h>
#include <SPI.h>

const int RELAY[] = {A0, A1, A2, A3, A4, A5, 7, a8}; // I/O pins for the relays
#define NUMBER_OF_RELAYS 8 // Total number of attached relays
#define RELAY_ON 1  // GPIO value to write to turn on attached relay
#define RELAY_OFF 0 // GPIO value to write to turn off attached relay

MySensor gw;

void setup() 
{   
  // Initialize library and add callback for incoming messages
  gw.begin(incomingMessage, AUTO, true);
  // Send the sketch version information to the gateway and Controller
  gw.sendSketchInfo("Relay", "1.0");

  // Fetch relay status
  for (int sensor=1, pin=0; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
    // Register all sensors to gw (they will be created as child devices)
    gw.present(sensor, S_LIGHT);
    // Then set relay pins in output mode
    pinMode(RELAY[pin], OUTPUT);   
    // Set relay to last known state (using eeprom storage)
    digitalWrite(RELAY[pin], gw.loadState(sensor)?RELAY_ON:RELAY_OFF);
  }
}

void loop()
{
  // Alway process incoming messages whenever possible
  gw.process();
}

void incomingMessage(const MyMessage &message) {
  // We only expect one type of message from controller. But we better check anyway.
   if (message.type==V_LIGHT) {
     // Change relay state
     digitalWrite(RELAY[message.sensor-1], message.getBool()?RELAY_ON:RELAY_OFF);
     // Store state in eeprom
     gw.saveState(message.sensor, message.getBool());
     // Write some debug info
     Serial.print("Incoming change for sensor:");
     Serial.print(message.sensor);
     Serial.print(", New status: ");
     Serial.println(message.getBool());
   }
}


lg

Stefan
ODROID U3 1GB Ubuntu immer aktuell
FHEM immer das aktuellste Development
Defined modules:

COC; CULv3; HMLAN :HM-CC-SCD,HM-CC-TC,HM-LC-SW4-PCB,HM-LC-Sw1PBU-FM,HM-OU-LED16,HM-SCI-3-FM,HM-SEC-SC,HM-SEC-WIN,HM-WDS10-TH-O; ESA2000; FS20; HUEBridge; Huedevices; IT; JeeLink :PCA301 :panstamp: