Integration von MySensors in FHEM geplant?

Begonnen von fh555, 06 September 2014, 00:40:58

Vorheriges Thema - Nächstes Thema

Spezialtrick

#define CHILD_ID1 ist vollkommen richtig.

Bei Arduino wird mit // auskommentiert.

Was zeigt dein Gateway in Fhem unter dem State Connection an?
FHEM - Debmatic - Zigbee2MQTT - Homekit

hexenmeister

Mit #-Zeichen fangen Preprocessor-Anweisungen in C an. Es wird Dir helfen, zumindest die Grundlagen der C-Sprache anzusehen. ;)

Spezialtrick

#362
Zitat von: Franz Tenbrock am 04 Mai 2015, 07:42:12
Soll in eine Zisterne , reicht da 1x in der Stunde !

Die SleepTime des Sensors wird im Sketch nachfolgen definiert:

unsigned long SLEEP_TIME = 5000; // Sleep time between reads (in milliseconds)


Wenn du die 5000 in 3600000 änderst, wacht der Sensor nur Stündlich auf.
FHEM - Debmatic - Zigbee2MQTT - Homekit

Franz Tenbrock

Perl FHEM und jetzt noch C
grrrrrrrr
Spass beiseite,
Danke für eure Unterstützung, werde es heute mittag , das Ergebniss so als nachtisch servieren.
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Franz Tenbrock

#364
so jetzt läufts

hab einfach das Gateway falsch definiert ...

Die Infos liegen irgendwie weit verstreut.
Das hier irgendwie gefunden und damit hats dann endlich geklappt

http://forum.fhem.de/index.php/topic,28198.msg210752.html#msg210752

Commandref meist für mich einfach zu wenig Infos, mir fehlt da einfach Background wissen....

define gateway MYSENSORS /dev/ttyUSB0@115200

Habe also alles was ich in der cfg hatte gelöscht und von vorne angefangen, natürlich nach reboot....
mit dieserDefinition hat er dann auch recht schnell den Sensor entdeckt.
Werde das nun im pdf neu schreiben und dann klappts hoffentlich.
Werde nun auch die 2 Ardunios testen die am windows pc nicht mehr gehen...
werde bereichten....
nun hab ich 2 funktionierende Sensoren 8)   :D   8)

Warum ich das gateway falsch definiert hatte ?????

Das Dokument steht zur freien Verfügung und darf auch geändert werden., ich hoffe es hilft dem einen oder anderen
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Franz Tenbrock

15 mal geladen,
und so verständlich ??
Ich hoffe man kann es gebrauchen...
hoffentlich keine Fehler
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

digital.arts

Hallo Franz,

für das internal STATE kannst Du z.B. das attribut "stateFormat distance1 cm" setzen.
Wird aber dann (bei mir jedenfalls) immer nur aktualisiert, wenn die Website refreshed wird... (das reading "distance1" wird natürlich schon sofort aktualisiert)

VG
Karl
FHEM auf RPi; CUL868 für FHT; NanoCUL433 für IT und Revolt; Fhemduino für IT und Temp/Hum; RFXTRX433e für IT/FA20RF/Funkgong/HomeEasy; NanoFirmataEth für 1wire Temp

Franz Tenbrock

Hallo
warte nun erst mal auf einen wasserdichten/feuchtigkeitsgeeigneten Sensor bevor ich da weitermache.
Als nächstes möchte ich erst einmal 4 Taster haben die den Schaltzustand einer lampe die ich von FHEM schon steuern kann auf einem Testboard zum laufen bringen. Dazu muss ich erst mal viel viel lesen so wie ich gerade sehe grrrrr

Auf der mysensors Seite sind zwar reichlich Beispiele aber nicht so das man als absoluter Anfänger da schnell reinkommt.
FHEM hab ich auch schrittweise erlernt, so dass ich zuhause schon eine Menge steuern kann...
Da gibt es das Beispiel hier durch das ich mich gerade durchbeisse , um es zu verstehen....
// Example sketch showing how to control physical relays.
// This example will remember relay state even after power failure.

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

#define RELAY_1  3  // 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

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=RELAY_1; 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(pin, OUTPUT);   
    // Set relay to last known state (using eeprom storage)
    digitalWrite(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(message.sensor-1+RELAY_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());
   }
}



Es wäre halt schön und deutlich einfacher wenn die Kommentarfunktion die ja da ist ausführlciher benutzt werden würde :-(
#include <MySensor.h>
#include <SPI.h>

include ist klar, soll berücksichtigt werden, aber ein kurzer Hinweis was eigentlich mysensor.h ist wäre schon hilfreich...
klar irgendwo steht es, man kann auch in die Datei reinschauen, aber das dauert alles ewig....


#define RELAY_1  3  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)

das dann das 2. Relais so sein muss
#define RELAY_2  4    // Arduino Digital I/O pin number for second relay

#define NUMBER_OF_RELAYS 2 // Total number of attached relays
#define RELAY_ON 1  // GPIO value to write to turn on attached relay     was da passiert ???
#define RELAY_OFF 0 // GPIO value to write to turn off attached relay


Ich denke man versteht was ich sagen will, der Schluß von 1 bis 3 Relais wäre nachvollziehbar wenn eben 2.Relais mit aufgenommen wäre. Es nervt mich eigentlich immer wieder fragen zu müssen, eigentlich müsste ich mir fertige Schalter kaufen wenn es ums Geld ginge, aber ich würde es lieber lernen, aber die Zeit ist halt begrenzt
Ich schreibe ja auch immer alles auf, Schritt für Schritt damit ich es selber auch noch nach Monaten nachvollziehen kann..

wenn ich da weiter durch den code gehe

// 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");

Initialisierung des Sensors und Übermittlung das es sich um ein Relais mit Version 1.0 handelt. Da könnte man also beliebig was reinschreiben, nur Syntax halt beaachten?!

// Fetch relay status 
  for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
   
also den aktuellen Zustand erst einmal abholen
int sensor=1  ????
pin=Relay_1 wäre dann ja wohl 3
pin=Relay_2 wäre dann ja wohl 4
sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {       ????????

wie das nun für 2 Relais ausschauen muss ??? wenn nun in diesem Beispiel 2 Relais wären , könnte man problemlos auf das 3. und 4 schließen

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

Hier wird dann wohl alles erst einmal im Gateway registriert, wer ist was?
was bedeutet nun wieder child devices??

Einfaches Beispiel trotzdem gleich zig Fragen...halt wie bei FHEM am Anfang auch....

Aber ein Trost..
Es sind ja einige sofort lauffähige Beispiele dabei, und das kann ich ja nun mit links...
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

Franz Tenbrock

#368
so nun doch was gefunden, man muss halt nur lang genug suchen und es funktioniert...sowohl auf dem ardunio als auch in fhem :-)
Auch wenn ich Anfänger und alles andere als ein Programmierer bin. Wiki Artikel wäre doch wichtig, würde es auch versuchen den zu schreiben,
hab da schon mal was hochgeladen. Zisternen mit Ultraschallsensor
aber nur wenn es Unterstützung gibt, also wiki lesen und Fehler melden....
das suchen nach Infos ist einfach fürchterlich mühsam

war im Februar schon mal Thema.. (Link hier)
http://forum.fhem.de/index.php/topic,31663.msg263517.html#msg263517
Antw:MySensor Relay anbinden  « Antwort #12 am: 12 Januar 2015, 14:53:55 »


werde mich damit nun mal beschäftigen und dann heute abend dann was dazu schreiben..



// 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());
   }
}
cubi3, Cul 868, ESA2000WZ, EM1000GZ,  FS20, dashboard, 1-Wire, Max Thermos, Max Wandthermo, Max Lan, Fritzbox callmonitor, , nanocul, HM Led16, HM Bewegungsmelder, HM Schalter, RPi, banana, ESP8266, DoorPi

fh168

Ich habe das Gefühl, das der Repeater Sketch bei MySensors nicht funktioniert. Ich wollte den Repeater als "man in the middle" betreiben.
wenn ich ihn am USB hänge, sieht alles ok aus.

Zitatsend: 108-108-0-0 s=255,c=0,t=18,pt=0,l=5,st=ok:1.4.1
send: 108-108-0-0 s=255,c=3,t=6,pt=1,l=1,st=ok:0
read: 0-0-108 s=255,c=3,t=6,pt=0,l=1:M
send: 108-108-0-0 s=255,c=3,t=11,pt=0,l=13,st=ok:Repeater Node
send: 108-108-0-0 s=255,c=3,t=12,pt=0,l=3,st=ok:1.0
Muss man an den Nodes noch was einstellen, das er aktiviert wird? Ich glaube die Nodes umgehen den Repeater.
Sieht man irgendwo in Fhem-Log, das das Signal von einem Sensor über den Repeater gegangen ist?

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

Kuzl

Hat jemand schon eine Möglichkeit gefunden das Ethernet-Gateway auf dem ESP8266 zu betreiben? Dann könnte man das einfach da hinlegen wo man will ohne auf eine Ethernet- oder USB-Verbindung angewiesen zu sein.

Viele Grüße,
Markus

gloob

#371
Zitat von: fh168 am 03 Juli 2015, 19:44:38
Ich habe das Gefühl, das der Repeater Sketch bei MySensors nicht funktioniert. Ich wollte den Repeater als "man in the middle" betreiben.
wenn ich ihn am USB hänge, sieht alles ok aus.
Muss man an den Nodes noch was einstellen, das er aktiviert wird? Ich glaube die Nodes umgehen den Repeater.
Sieht man irgendwo in Fhem-Log, das das Signal von einem Sensor über den Repeater gegangen ist?

LG
/robin

Der Node muss erst 3 mal ohne Erfolg ein Paket verschicken um dann eine neue Route festzulegen und den Repeater zu nutzen. Hab ich letztens erst im MySensors Forum gelesen.

ZitatThe first time a new sensor boots up, it will determine the path to the gateway by sending out a special Help-me-find-my-way-home-message. The repeater-sensor nodes and gateway listen for these messages and will respond to a sensor's plea-for-help-message. Their reply will inform the sensor how far they are from the gateway so the newly born sensor can determine the shortest path to the gateway, be it directly to the gateway or through a repeater-sensor node which is the closest to the gateway. If the sensor node later loses contact with the gateway or a repeater-sensor node, it will automatically repeat this procedure to determine the best path to the gateway - a sensor node considers contact with the gateway to be lost if it fails to send 3 consecutive messages.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

fh168

Danke Gloob, probiere ich aus.

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

gloob

Kann man das Modul um die neuen Variablen der MySensor Version 1.5 erweitern?
Ich hätte Interesse an einem RGB Wert um Lampen anzusteuern.
Raspberry Pi 3 | miniCUL 433MHz | nanoCUL 868 MHz | nanoCUL 433 MHz | MySensors WLAN Gateway | LaCrosse WLAN Gateway | SignalESP 433 MHz | SignalESP 868 MHz | HM-MOD-UART WLAN Gateway | IR - 360 Grad WLAN Gateway

Hauswart

Zitat von: gloob am 13 August 2015, 14:26:16
Kann man das Modul um die neuen Variablen der MySensor Version 1.5 erweitern?
Ich hätte Interesse an einem RGB Wert um Lampen anzusteuern.
Der Maintainer des Moduls ist ntruchsess. Schreibe ihm doch vielleicht eine PN mit dem Link zu deinem Post?
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

2. Installation:
HM-CFG-USB, Unifi (, SIGNALduino 868, MySensors, SIGNALduino 433)