diverse Sensoren an FHEM anbinden OHNE Funk

Begonnen von flipse, 03 Juli 2019, 08:34:32

Vorheriges Thema - Nächstes Thema

flipse

ok, Auswahl "OLD BOOTLOADER" hat funktioniert

Beta-User

#16
Da du nur einen Arduino hast (?) und keinen nRF24 oder anderen Transceiver dran, mußt du das als GW nutzen.

Auf die Schnelle habe ich das auf Basis deines Codes mal zum GW gemacht. Der folgende Code läßt sich kompilieren, mehr habe ich nicht getestet. Du mußt den Arduino dann als GW in FHEM einbinden, sonst hast du vermutlich keinen sinnvollen output an der seriellen Schnittstelle.

Es sollte dann automatisch ein MYSENSORS_DEVICE erstellt werden (ggf. autocreate an und inclusion mode am GW an), über das du dann das Relay schalten kannst:

/*
* The MySensors Arduino library handles the wireless radio link and protocol
* between your home built sensors/actuators and HA controller of choice.
* The sensors forms a self healing radio network with optional repeaters. Each
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
* network topology allowing messages to be routed to nodes.
*
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
* Copyright (C) 2013-2018 Sensnology AB
* Full contributor list: https://github.com/mysensors/MySensors/graphs/contributors
*
* Documentation: http://www.mysensors.org
* Support Forum: http://forum.mysensors.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
*******************************
*
* REVISION HISTORY
* Version 1.0 - Henrik Ekblad
*
* DESCRIPTION
* Example sketch showing how to control physical relays.
* This example will remember relay state after power failure.
* http://www.mysensors.org/build/relay
*/

// Enable debug prints to serial monitor
#define MY_DEBUG

// Enable and select radio type attached
//#define MY_RADIO_RF24
//#define MY_RADIO_NRF5_ESB
//#define MY_RADIO_RFM69
//#define MY_RADIO_RFM95

// Enable repeater functionality for this node
//#define MY_REPEATER_FEATURE
// Enable serial gateway
#define MY_GATEWAY_SERIAL

// Enable inclusion mode
#define MY_INCLUSION_MODE_FEATURE

#include <MySensors.h>

#define RELAY_PIN 4  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
#define NUMBER_OF_RELAYS 1 // 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


void before()
{
  for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
    // Then set relay pins in output mode
    pinMode(pin, OUTPUT);
    // Set relay to last known state (using eeprom storage)
    digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
  }
}

void setup()
{

}

void presentation()
{
  // Send the sketch version information to the gateway and Controller
  sendSketchInfo("RelayGW", "1.0");

  for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
    // Register all sensors to gw (they will be created as child devices)
    present(sensor, S_BINARY);
  }
}


void loop()
{

}

void receive(const MyMessage &message)
{
  // We only expect one type of message from controller. But we better check anyway.
  if (message.type==V_STATUS) {
    // Change relay state
    digitalWrite(message.sensor-1+RELAY_PIN, message.getBool()?RELAY_ON:RELAY_OFF);
    // Store state in eeprom
    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());*/
  }
}

EDIT: Serielle Debug-Ausgaben deaktiviert (letzte 4 Anweisung in receive()); man kann auf diese Art bei einem GW nicht gut debuggen... (Ginge ggf. leichter mit einem 2. Arduino, der könnte (ohne Transceiver) am einfachsten via RS485 "angebunden" werden (aber nur einer))
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

flipse

Zitat von: Beta-User am 06 Juli 2019, 15:55:54
Da du nur einen Arduino hast (?) und keinen nRF24 oder anderen Transceiver dran, mußt du das als GW nutzen.

Auf die Schnelle habe ich das auf Basis deines Codes mal zum GW gemacht. Der folgende Code läßt sich kompilieren, mehr habe ich nicht getestet. Du mußt den Arduino dann als GW in FHEM einbinden, sonst hast du vermutlich keinen sinnvollen output an der seriellen Schnittstelle.

Es sollte dann automatisch ein MYSENSORS_DEVICE erstellt werden (ggf. autocreate an und inclusion mode am GW an), über das du dann das Relay schalten kannst:

/*
* The MySensors Arduino library handles the wireless radio link and protocol
* between your home built sensors/actuators and HA controller of choice.
* The sensors forms a self healing radio network with optional repeaters. Each
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
* network topology allowing messages to be routed to nodes.
*
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
* Copyright (C) 2013-2018 Sensnology AB
* Full contributor list: https://github.com/mysensors/MySensors/graphs/contributors
*
* Documentation: http://www.mysensors.org
* Support Forum: http://forum.mysensors.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
*******************************
*
* REVISION HISTORY
* Version 1.0 - Henrik Ekblad
*
* DESCRIPTION
* Example sketch showing how to control physical relays.
* This example will remember relay state after power failure.
* http://www.mysensors.org/build/relay
*/

// Enable debug prints to serial monitor
#define MY_DEBUG

// Enable and select radio type attached
//#define MY_RADIO_RF24
//#define MY_RADIO_NRF5_ESB
//#define MY_RADIO_RFM69
//#define MY_RADIO_RFM95

// Enable repeater functionality for this node
//#define MY_REPEATER_FEATURE
// Enable serial gateway
#define MY_GATEWAY_SERIAL

// Enable inclusion mode
#define MY_INCLUSION_MODE_FEATURE

#include <MySensors.h>

#define RELAY_PIN 4  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
#define NUMBER_OF_RELAYS 1 // 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


void before()
{
  for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
    // Then set relay pins in output mode
    pinMode(pin, OUTPUT);
    // Set relay to last known state (using eeprom storage)
    digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF);
  }
}

void setup()
{

}

void presentation()
{
  // Send the sketch version information to the gateway and Controller
  sendSketchInfo("RelayGW", "1.0");

  for (int sensor=1, pin=RELAY_PIN; sensor<=NUMBER_OF_RELAYS; sensor++, pin++) {
    // Register all sensors to gw (they will be created as child devices)
    present(sensor, S_BINARY);
  }
}


void loop()
{

}

void receive(const MyMessage &message)
{
  // We only expect one type of message from controller. But we better check anyway.
  if (message.type==V_STATUS) {
    // Change relay state
    digitalWrite(message.sensor-1+RELAY_PIN, message.getBool()?RELAY_ON:RELAY_OFF);
    // Store state in eeprom
    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());*/
  }
}

EDIT: Serielle Debug-Ausgaben deaktiviert (letzte 4 Anweisung in receive()); man kann auf diese Art bei einem GW nicht gut debuggen... (Ginge ggf. leichter mit einem 2. Arduino, der könnte (ohne Transceiver) am einfachsten via RS485 "angebunden" werden (aber nur einer))

Das war nur mein erstes Beispiel.
Ich möchte an sich gar kein Relay schalten, sondern nur erstmal digitale Inputs auslesen.
Upload deines Sketches hat geklappt.
Bisher wurden jedoch keine Nodes in FHEM gefunden.
Autocreate ist eingeschaltet
Inclusion Mode habe ich aktiviert
Verbindung zum Arduino ist connected und opened

Beta-User

Müßte ich auch erst mal austesten usw..

Ich gehe davon aus, FHEM ist aktuell?

Neue Nodes sieht man uU. erst, wenn man das Browserfenster aktualisiert, aber das hast du vermutlich auch gemacht.

Kannst du mal "list TYPE=MYS.*" in die Kommandozeile werfen und ggf. ein list von dem GW und von autocreate hier einstellen?
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

flipse

Zitat von: Beta-User am 06 Juli 2019, 22:19:46
Müßte ich auch erst mal austesten usw..

Ich gehe davon aus, FHEM ist aktuell?

Neue Nodes sieht man uU. erst, wenn man das Browserfenster aktualisiert, aber das hast du vermutlich auch gemacht.

Kannst du mal "list TYPE=MYS.*" in die Kommandozeile werfen und ggf. ein list von dem GW und von autocreate hier einstellen?

Internals:
   DEF        /dev/ttyUSB0@115200
   DeviceName /dev/ttyUSB0@115200
   FD         17
   FUUID      5d2102d9-f33f-4184-efba-6f38bd080661529c
   NAME       MyGateway_0
   NOTIFYDEV  global
   NR         45
   NTFY_ORDER 50-MyGateway_0
   PARTIAL   
   STATE      connected
   TYPE       MYSENSORS
   ack        1
   inclusion-mode 1
   outstandingAck 0
   READINGS:
     2019-07-06 22:23:45   connection      connected
     2019-07-06 22:23:45   state           opened
Attributes:
   autocreate 1
   requestAck 1
   stateFormat connection



Internals:
   DEF        /dev/ttyUSB0@115200
   DeviceName /dev/ttyUSB0@115200
   FD         17
   FUUID      5d2102d9-f33f-4184-efba-6f38bd080661529c
   NAME       MyGateway_0
   NOTIFYDEV  global
   NR         45
   NTFY_ORDER 50-MyGateway_0
   PARTIAL   
   STATE      connected
   TYPE       MYSENSORS
   ack        1
   inclusion-mode 1
   outstandingAck 0
   READINGS:
     2019-07-06 22:23:45   connection      connected
     2019-07-06 22:23:45   state           opened
Attributes:
   autocreate 1
   requestAck 1
   stateFormat connection


Ein Fehler konnte ich gerade schon beheben. Da es ein Testsystem ist, hat mein Heizungsdevice auch auf USB0 gelauscht. Das habe ich nun gelöscht

Beta-User

Dann definiere beide mal mit "by-id" (Wiki: mehrere USB-Geräte...)

Vermutlich ist das Heizungs-Dongle auch auf der Baudrate?
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

flipse

#21
Zitat von: Beta-User am 06 Juli 2019, 22:58:21
Dann definiere beide mal mit "by-id" (Wiki: mehrere USB-Geräte...)

Vermutlich ist das Heizungs-Dongle auch auf der Baudrate?

habe den erstmal komplett gelöscht

Inzwischen wurde 1 Device angelegt in FHEM


list TYPE=MYS.*
MYSENSOR_0
MyGateway_0


list MYSENSOR_0

Internals:
   CFGFN     
   DEF        0
   FUUID      5d210615-f33f-4184-0557-5fade644378804c0
   IODev      MyGateway_0
   NAME       MYSENSOR_0
   NR         122
   STATE      ???
   TYPE       MYSENSORS_DEVICE
   ack        0
   radioId    0
   repeater   0
   version    2.3.1
   gets:
   readingMappings:
     1:
       17:
         name       power1
       2:
         name       status1
     2:
       17:
         name       power2
       2:
         name       status2
     3:
       17:
         name       power3
       2:
         name       status3
     4:
       17:
         name       power4
       2:
         name       status4
   retainedMessagesForRadioId:
   sensorMappings:
     0:
       receives:
       sends:
         16
         15
     1:
       receives:
       sends:
         16
         15
     10:
       receives:
       sends:
         6
         7
     11:
       receives:
       sends:
         11
     12:
       receives:
       sends:
         12
         14
     13:
       receives:
         24
       sends:
         17
         18
         54
         55
         56
         24
     14:
       receives:
       sends:
         45
         21
         0
         2
     15:
       receives:
       sends:
         13
         43
     16:
       receives:
       sends:
         23
         37
     17:
       receives:
       sends:
     18:
       receives:
       sends:
     19:
       receives:
         36
       sends:
         36
     2:
       receives:
       sends:
         16
         15
     20:
       receives:
         32
       sends:
         33
         50
         32
     21:
       receives:
         24
       sends:
         34
         35
         24
     22:
       receives:
       sends:
         37
         43
     23:
       receives:
         24
         25
         26
         27
         28
       sends:
         24
         25
         26
         27
         28
     24:
       receives:
       sends:
         37
         43
     25:
       receives:
       sends:
         19
         20
     26:
       receives:
         40
         17
         3
       sends:
         40
         17
         3
     27:
       receives:
         41
         17
         3
       sends:
         41
         17
         3
     28:
       receives:
         40
       sends:
         40
     29:
       receives:
       sends:
         2
         0
         45
         44
         21
         46
         22
     3:
       receives:
         2
         17
       sends:
         2
         17
     30:
       receives:
       sends:
         38
         39
         14
     31:
       receives:
       sends:
         2
         16
     32:
       receives:
       sends:
         16
         15
     33:
       receives:
       sends:
         37
         16
         15
     34:
       receives:
       sends:
         37
         16
         15
     35:
       receives:
       sends:
         37
         16
         15
     36:
       receives:
         47
       sends:
         47
     37:
       receives:
       sends:
         34
         35
     38:
       receives:
       sends:
         49
     39:
       receives:
       sends:
         0
         51
         52
         53
         2
     4:
       receives:
         2
         3
         17
       sends:
         2
         3
         17
     5:
       receives:
         29
         30
         31
         3
       sends:
         29
         30
         31
         3
     6:
       receives:
       sends:
         0
         42
     7:
       receives:
       sends:
         1
     8:
       receives:
       sends:
         4
         5
     9:
       receives:
       sends:
         8
         9
         10
   sets:
     clear      noArg
     flash      noArg
     fwType     
     power1     1
     power2     1
     power3     1
     power4     1
     reboot     noArg
     status1    off,on
     status2    off,on
     status3    off,on
     status4    off,on
     time       noArg
   typeMappings:
     0:
       type       temperature
     1:
       type       humidity
     10:
       type       direction
     11:
       type       uv
     12:
       type       weight
     13:
       type       distance
     14:
       type       impedance
     15:
       type       armed
       val:
         0          off
         1          on
     16:
       type       tripped
       val:
         0          off
         1          on
     17:
       type       power
     18:
       type       energy
     19:
       type       button_on
     2:
       type       status
       val:
         0          off
         1          on
     20:
       type       button_off
     21:
       type       hvacflowstate
     22:
       type       hvacspeed
     23:
       type       brightness
       range:
         max        100
         min        0
         step       1
     24:
       type       value1
     25:
       type       value2
     26:
       type       value3
     27:
       type       value4
     28:
       type       value5
     29:
       type       up
     3:
       type       percentage
       range:
         max        100
         min        0
         step       1
     30:
       type       down
     31:
       type       stop
     32:
       type       ir_send
     33:
       type       ir_receive
     34:
       type       flow
     35:
       type       volume
     36:
       type       lockstatus
       val:
         0          off
         1          on
     37:
       type       level
     38:
       type       voltage
     39:
       type       current
     4:
       type       pressure
     40:
       type       rgb
     41:
       type       rgbw
     42:
       type       id
     43:
       type       unitprefix
     44:
       type       hvacsetpointcool
     45:
       type       hvacsetpointheat
     46:
       type       hvacflowmode
     47:
       type       text
     48:
       type       custom
     49:
       type       position
     5:
       type       forecast
       val:
         0          stable
         1          sunny
         2          cloudy
         3          unstable
         4          thunderstorm
         5          unknown
     50:
       type       ir_record
     51:
       type       ph
     52:
       type       orp
     53:
       type       ec
     54:
       type       value
     55:
       type       va
     56:
       type       power_factor
     6:
       type       rain
     7:
       type       rainrate
     8:
       type       wind
     9:
       type       gust
Attributes:
   IODev      MyGateway_0
   mapReading_power1 1 power
   mapReading_power2 2 power
   mapReading_power3 3 power
   mapReading_power4 4 power
   mapReading_status1 1 status
   mapReading_status2 2 status
   mapReading_status3 3 status
   mapReading_status4 4 status
   mode       node
   room       MYSENSORS_DEVICE
   setReading_power1 1
   setReading_power2 1
   setReading_power3 1
   setReading_power4 1
   setReading_status1 off,on
   setReading_status2 off,on
   setReading_status3 off,on
   setReading_status4 off,on



Wenn ich jetzt PIN4 oder 5 oder 6 z.B. mit GND verbinde, um einen Türkontakt zu simulieren, erhalte ich leider keine Statusänderung in FHEM.
Werden alle PINS (Stati) in einem Device in FHEM vereint, oder kann ich irgendwie realisieren, dass die unterschiedlichen PINS auch eigene Devices erhalten?

Beta-User

OK, bitte alles der Reihe nach:
- Wenn du willst, dass FHEM was mitbekommt, muß das im Sketch stehen (als Sendeanweisung, optimalerweise vorneweg mit einer Presentation). Du nutzt grade einen Relais-Sketch, der detektiert keine Taster. Dafür gibt es andere Muster-Sketche...
Schau dir am besten erst mal den Fenster-Kontakt-Sketch an und versuche den mit dem GW-Sketch zu "verheiraten". Dann schau nochmal den Multi-Button/Relay-Sketch an. Dann wird das evtl. etwas klarer.

- Es sollte möglich sein, die Infos zu vereinzeln.
-- Was in jedem Fall geht, wäre ReadingsProxy.
-- Was vielleicht geht, wäre die ID zu klonen und jeweils ein (oder mehrere) Reading(s) auf einer eigenen MYSENSORS_DEVICE-Instanz zu haben (habe ich selbst praktisch keine Erfahrung mit, soll aber gehen...)

Aber bitte: eins nach dem anderen. Erst die Grundprinzipien, dann die Feinheiten, oder?
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

flipse

#23
Zitat von: Beta-User am 07 Juli 2019, 09:41:23
OK, bitte alles der Reihe nach:
- Wenn du willst, dass FHEM was mitbekommt, muß das im Sketch stehen (als Sendeanweisung, optimalerweise vorneweg mit einer Presentation). Du nutzt grade einen Relais-Sketch, der detektiert keine Taster. Dafür gibt es andere Muster-Sketche...
Schau dir am besten erst mal den Fenster-Kontakt-Sketch an und versuche den mit dem GW-Sketch zu "verheiraten". Dann schau nochmal den Multi-Button/Relay-Sketch an. Dann wird das evtl. etwas klarer.

- Es sollte möglich sein, die Infos zu vereinzeln.
-- Was in jedem Fall geht, wäre ReadingsProxy.
-- Was vielleicht geht, wäre die ID zu klonen und jeweils ein (oder mehrere) Reading(s) auf einer eigenen MYSENSORS_DEVICE-Instanz zu haben (habe ich selbst praktisch keine Erfahrung mit, soll aber gehen...)

Aber bitte: eins nach dem anderen. Erst die Grundprinzipien, dann die Feinheiten, oder?

Ja du hast Recht.
Also ich habe nun Komplexität herausgenommen und habe einen funktionierenden Contact hinbekommen.



// Enable debug prints to serial monitor
#define MY_DEBUG

// Enable serial gatewayō
#define MY_GATEWAY_SERIAL

// Enable inclusion mode
#define MY_INCLUSION_MODE_FEATURE

#include <MySensors.h>
#include <Bounce2.h>

Bounce debouncer = Bounce();
int oldValue=-1;

#define CHILD_ID 3
#define BUTTON_PIN  3  // Arduino Digital I/O pin for button/reed switch


// Change to V_LIGHT if you use S_LIGHT in presentation below
MyMessage msg(CHILD_ID,V_TRIPPED);


void setup() 

  // Setup the button
  pinMode(BUTTON_PIN,INPUT);
  // Activate internal pull-up
  digitalWrite(BUTTON_PIN,HIGH);

  // After setting up the button, setup debouncer
  debouncer.attach(BUTTON_PIN);
  debouncer.interval(5);

}

void presentation()
{
  // Send the sketch version information to the gateway and Controller
  sendSketchInfo("RelayGW", "1.0");

    // Register binary input sensor to sensor_node (they will be created as child devices)
    // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage.
    // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
    present(CHILD_ID, S_DOOR);
}

void loop()
{

  debouncer.update();
  // Get the update value
  int value = debouncer.read();

  if (value != oldValue) {
     // Send in the new value
     send(msg.set(value==HIGH ? 1 : 0));
     oldValue = value;
  }


}



Hiermit bekomme ich für PIN 3 nun zuverlässige Sensorstates.

Ist das der Fenster-Kontakt-Sketch den du meinst, oder gibt es noch einen anderen, bei dem mehrere Kontakte abgefragt werden?

flipse

Für 2 Sensoren klappt es nun auch


// Enable debug prints to serial monitor
#define MY_DEBUG

// Enable serial gatewayō
#define MY_GATEWAY_SERIAL

// Enable inclusion mode
#define MY_INCLUSION_MODE_FEATURE

#include <MySensors.h>
#include <Bounce2.h>

#define RELAY_ON 1
#define RELAY_OFF 0

#define SSR_A_ID 3   // Id of the sensor child for FHEM
#define SSR_B_ID 4   // Id of the sensor child for FHEM

#define SENSOR_PIN_A 3 // Pin for Sensor on ArdBoard
#define SENSOR_PIN_B 4 // Pin for Sensor on ArdBoard

const int relayPinA = 5; // Pin for Output on ArdBoard
const int relayPinB = 6; // Pin for Output on ArdBoard

int oldValueSensorA = -1;
int oldValueSensorB = -1;

bool stateA = false;
bool stateB = false;


Bounce debouncerA = Bounce();
Bounce debouncerB = Bounce();

MyMessage msgA(SSR_A_ID, V_TRIPPED);
MyMessage msgB(SSR_B_ID, V_TRIPPED);


void setup() 


  pinMode(SENSOR_PIN_A, INPUT); // Setup the button Activate internal pull-up
  pinMode(SENSOR_PIN_B, INPUT); // Setup the button Activate internal pull-up

  // Activate internal pull-up
  digitalWrite(SENSOR_PIN_A,HIGH);
  digitalWrite(SENSOR_PIN_B,HIGH);
 

  // Then set relay pins in output mode
  //pinMode(relayPinA, OUTPUT);
  //pinMode(relayPinB, OUTPUT);
 
  // After setting up the buttons, setup debouncer
  debouncerA.attach(SENSOR_PIN_A);
  debouncerA.interval(5);
  debouncerB.attach(SENSOR_PIN_B);
  debouncerB.interval(5);

  // Make sure relays are off when starting up
  //digitalWrite(relayPinA, RELAY_OFF);
  //digitalWrite(relayPinB, RELAY_OFF);

}

void presentation()
{
    // Send the sketch version information to the gateway and Controller
    sendSketchInfo("RelayGW", "1.0");

    // Register binary input sensor to sensor_node (they will be created as child devices)
    // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage.
    // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
    present(SSR_A_ID, S_DOOR);
    present(SSR_B_ID, S_DOOR);

}




/*
   Example on how to asynchronously check for new messages from gw
*/
void loop()
{
 
  debouncerA.update();
  // Get the update value
  int valueSensorA = debouncerA.read();
  if (valueSensorA != oldValueSensorA) {
    //send(msgA.set(stateA ? false : true), true); // Send new state and request ack back
    send(msgA.set(valueSensorA==HIGH ? 1: 0));

  }
  oldValueSensorA = valueSensorA;


  debouncerB.update();
  // Get the update value
  int valueSensorB = debouncerB.read();
  if (valueSensorB != oldValueSensorB) {
    //send(msgA.set(stateA ? false : true), true); // Send new state and request ack back
    send(msgB.set(valueSensorB==HIGH ? 1: 0));

  }
  oldValueSensorB = valueSensorB;

}




void receive(const MyMessage &message) {
 
  // We only expect one type of message from controller. But we better check anyway.
  if (message.type == V_STATUS) {
     
    switch (message.sensor) {
      case 1:
        stateA = message.getBool();
        digitalWrite(message.sensor + 4, stateA ? RELAY_ON : RELAY_OFF);
       
        break;
      case 2:
        stateB = message.getBool();
        digitalWrite(message.sensor + 4, stateB ? RELAY_ON : RELAY_OFF);
       
        break;
     
    }
   
      // Write some debug info
    Serial.print("Incoming change for sensor:");
    Serial.println(message.sensor);
    Serial.print("from node:");
    Serial.println(message.sender);
    Serial.print(", New status: ");
    Serial.println(message.getBool());
  }
}


Beta-User

Stichworte mobil u Kurz : array, Schleife, Pin 2 u 3 freihalten...
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

flipse

Zitat von: Beta-User am 07 Juli 2019, 13:30:04
Stichworte mobil u Kurz : array, Schleife, Pin 2 u 3 freihalten...

optimieren möchte ich, wenn ich erstmal die Werte überhaupt bekomme.
BEi den Türkontakten habe ich glaube ich nun verstanden, wie es funktioniert und die Werte passen.

Jetzt habe ich noch nen DS18B20 anschließen wollen und per OneWire auslesen wollen.
Erstmal auch hier, statisch nur 1 angeschlossen.

Rot = 5V, Schwarz = GND, Gelb = D10
Leider liefert er mir in FHEM immer nur -127.0
Die Beispiele habe ich von MySensors.org.

Was ich nicht habe, das ist der 4.7kOhm resistor. Wofür benötige ich den?
Hier mein Code



// Enable debug prints to serial monitor
#define MY_DEBUG

// Enable serial gatewayō
#define MY_GATEWAY_SERIAL

// Enable inclusion mode
#define MY_INCLUSION_MODE_FEATURE

#include <MySensors.h>
#include <Bounce2.h>


#define RELAY_ON 1
#define RELAY_OFF 0

#define SSR_A_ID 3   // Id of the sensor child for FHEM
#define SSR_B_ID 4   // Id of the sensor child for FHEM

#define SENSOR_PIN_A 3 // Pin for Sensor on ArdBoard
#define SENSOR_PIN_B 4 // Pin for Sensor on ArdBoard

const int relayPinA = 5; // Pin for Output on ArdBoard
const int relayPinB = 6; // Pin for Output on ArdBoard

int oldValueSensorA = -1;
int oldValueSensorB = -1;

bool stateA = false;
bool stateB = false;


Bounce debouncerA = Bounce();
Bounce debouncerB = Bounce();

MyMessage msgA(SSR_A_ID, V_TRIPPED);
MyMessage msgB(SSR_B_ID, V_TRIPPED);




// For one Wire TempSensor DS18B20
  #define SENSOR_TEMP_ID 22 // Sensor 2 / Dallas Temp
  #define SENSOR_TEMP_PIN 10 // Digi

  MyMessage msgTemp(SENSOR_TEMP_ID,V_TEMP);

  // Special Config for each Sensor
            // Dallas Temp Sensor
            #include <OneWire.h>
            #include <DallasTemperature.h>     
            OneWire oneWire(SENSOR_TEMP_PIN);
            DallasTemperature sensors(&oneWire);
            boolean receivedConfig = false;
            boolean metric = true;

    long int sensorInterval2 = 100000;           
    long int sI2 = sensorInterval2;
    float lastRead2;



void before()
{
  // Startup up the OneWire library
  //sensors.begin();
}



void setup() 


  pinMode(SENSOR_PIN_A, INPUT); // Setup the button Activate internal pull-up
  pinMode(SENSOR_PIN_B, INPUT); // Setup the button Activate internal pull-up

  // Activate internal pull-up
  digitalWrite(SENSOR_PIN_A,HIGH);
  digitalWrite(SENSOR_PIN_B,HIGH);
 

  // Then set relay pins in output mode
  //pinMode(relayPinA, OUTPUT);
  //pinMode(relayPinB, OUTPUT);
 
  // After setting up the buttons, setup debouncer
  debouncerA.attach(SENSOR_PIN_A);
  debouncerA.interval(5);
  debouncerB.attach(SENSOR_PIN_B);
  debouncerB.interval(5);

  // Make sure relays are off when starting up
  //digitalWrite(relayPinA, RELAY_OFF);
  //digitalWrite(relayPinB, RELAY_OFF);


  // requestTemperatures() will not block current thread
  //sensors.setWaitForConversion(false);
  sensors.begin();

}

void presentation()
{
    // Send the sketch version information to the gateway and Controller
    sendSketchInfo("RelayGW", "1.0");

    // Register binary input sensor to sensor_node (they will be created as child devices)
    // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage.
    // If S_LIGHT is used, remember to update variable type you send in. See "msg" above.
    present(SSR_A_ID, S_DOOR);
    present(SSR_B_ID, S_DOOR);


    // Dallas Temp Sensor
    present(SENSOR_TEMP_ID, S_TEMP);
   
}




/*
   Example on how to asynchronously check for new messages from gw
*/
void loop()
{
 
  debouncerA.update();
  // Get the update value
  int valueSensorA = debouncerA.read();
  if (valueSensorA != oldValueSensorA) {
    //send(msgA.set(stateA ? false : true), true); // Send new state and request ack back
    send(msgA.set(valueSensorA==HIGH ? 1: 0));

  }
  oldValueSensorA = valueSensorA;


  debouncerB.update();
  // Get the update value
  int valueSensorB = debouncerB.read();
  if (valueSensorB != oldValueSensorB) {
    //send(msgA.set(stateA ? false : true), true); // Send new state and request ack back
    send(msgB.set(valueSensorB==HIGH ? 1: 0));

  }
  oldValueSensorB = valueSensorB;

  // Temperaturen lesen
  //getTemperaturesFromSensors();


      // Sensor2 - Digital Temp Dallas
         if (sI2 == sensorInterval2){
           sI2 = 0;
           sensors.requestTemperatures();
           //float sensorRead2 = static_cast<float>(static_cast<int>((getControllerConfig().isMetric?sensors.getTempCByIndex(0):sensors.getTempFByIndex(0)) * 10.)) / 10.;
           float sensorRead2 = sensors.getTempCByIndex(0);
           //if (lastRead2 != sensorRead2){
             send(msgTemp.set(sensorRead2,1));
             lastRead2 = sensorRead2;
           //}
         }
 
}


/*
void getTemperaturesFromSensors()
{

  // Fetch temperatures from Dallas sensors
  sensors.requestTemperatures();

  // query conversion time and sleep until conversion completed
  int16_t conversionTime = sensors.millisToWaitForConversion(sensors.getResolution());
  // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater)
  sleep(conversionTime);


  // Read temperatures and send them to controller
  for (int i=0; i<numSensors && i<MAX_ATTACHED_DS18B20; i++) {

    // Fetch and round temperature to one decimal
    float temperature = static_cast<float>(static_cast<int>((getControllerConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.;

    // Only send data if temperature has changed and no error
    #if COMPARE_TEMP == 1
    if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) {
    #else
    if (temperature != -127.00 && temperature != 85.00) {
    #endif

      // Send in the new temperature
      send(msgTemp.setSensor(i).set(temperature,1));
      // Save new temperatures for next compare
      lastTemperature[i]=temperature;
    }
  }
  sleep(SLEEP_TIME);
}

*/

void receive(const MyMessage &message) {
 
  // We only expect one type of message from controller. But we better check anyway.
  if (message.type == V_STATUS) {
     
    switch (message.sensor) {
      case 1:
        stateA = message.getBool();
        digitalWrite(message.sensor + 4, stateA ? RELAY_ON : RELAY_OFF);
       
        break;
      case 2:
        stateB = message.getBool();
        digitalWrite(message.sensor + 4, stateB ? RELAY_ON : RELAY_OFF);
       
        break;
     
    }
   
      // Write some debug info
    Serial.print("Incoming change for sensor:");
    Serial.println(message.sensor);
    Serial.print("from node:");
    Serial.println(message.sender);
    Serial.print(", New status: ");
    Serial.println(message.getBool());
  }
}



Beta-User

Ohne pullup-Widerstand geht es nicht bei 1-wire. Sonst bleibt data auf Dauer-low...
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

flipse

#28
Zitat von: Beta-User am 07 Juli 2019, 14:38:06
Ohne pullup-Widerstand geht es nicht bei 1-wire. Sonst bleibt data auf Dauer-low...
ok. habe den nun zwischen gelb und d10 gesetzt.
aber immer noch nur -127.0 als Wert :/

Beta-User

D10 kommt mir unpassend vor. Bitte so machen, wie auf der build-Seite@mysensors.org
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