Integration von MySensors in FHEM geplant?

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

Vorheriges Thema - Nächstes Thema

SvenJust

#570
Zitat von: Omega am 19 November 2015, 15:12:26
Eine Grundsatzfrage treibt mich aber noch um: am Anfang des nun doch etwas längeren Treads wird noch viel über MQTT gesprochen. In wie weit ist das überhaupt für diese Anwendung (MySensors) noch notwendig bzw. sinnvoll?
MQTT war zu Beginn der Integration von mysensors in ein FHEM System notwendig, da es eine Möglichkeit darstellt die Daten nach FHEM zu übertragen. Seit es die mysensors-Module in FHEM gibt, muss das MQTT Gateway nicht mehr verwendet werden. Damit ist eine Komponente (MQTT) weniger notwendig.

BTW: Ich nutze mysensors seit etwa einem halben Jahr, um den Luftdruck zu messen und an FHEM zu übertragen. Seit 5 Tagen ist eine Temperaturmessung mit vier 1Wire Temperatursensoren dazu gekommen. Als Gateway nutze ich ein EthernetGateway und alles ist absolut stabil, viel stabiler als WLAN-Strecken, die ich leider zur Heizung hin nutzen muss. Über die WLAN-Strecke nutze ich wiederrum MQTT, um die Daten der Heizung nach FHEM zu bekommen. Die MQTT Verbindung ist auch problemlos.

VG
Sven
FTUI, Raspberry PI/SSD, CUL CC1101, HMLAN, 10x HM-LC-Bl1PBU-FM, HM-LC-Sw4-WM (KWL Pluggit P300), HM-WDS30-OT2-SM (Sonnensensor), HM-Sec-SCo, LW-12 Wifi LED, CUL Selbstbau nanoCUL 433 (IT), Arduino (S0-Stromverbrauch), OW DS2480 (OWX_ASYNC) 8x DS18B20, MQTT (Fröling P4), MYSENSORS (Roto Rollläden)

Omega

NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

Peter_64

@SvenJust,

Eine Frage zu Deinem EthernetGateway, welche Hardware nutzt Du, und mit welcher Sketch – Version. Ich hab Probleme mit EthernetGateway, beide Versionen W5100 und ENC28J60 getestet mit UNU und Schild sowie NANO mit dem MINI W5100 Schild . Arduino 1.6.4, MySensor 1.5, aktuelle Module FHEM. Serial – Modul läuft stabil ohne Abbruch. EthernetGateway ENC28J60 würde stabil laufen, geht aber immer wieder auf disconnect. EthernetGateway W5100 startet auf der Arduino Konsole korrekt, aber keine Daten zu FHEM. Für das Sketch W5100 wurde SOFTSPI in der MyConfig.h aktiviert und die IP geändert, muss man da noch mehr ändern ?.

SvenJust

Zitat von: Peter_64 am 20 November 2015, 09:15:21
@SvenJust,

Eine Frage zu Deinem EthernetGateway, welche Hardware nutzt Du, und mit welcher Sketch – Version. Ich hab Probleme mit EthernetGateway, beide Versionen W5100 und ENC28J60 getestet mit UNU und Schild sowie NANO mit dem MINI W5100 Schild . Arduino 1.6.4, MySensor 1.5, aktuelle Module FHEM. Serial – Modul läuft stabil ohne Abbruch. EthernetGateway ENC28J60 würde stabil laufen, geht aber immer wieder auf disconnect. EthernetGateway W5100 startet auf der Arduino Konsole korrekt, aber keine Daten zu FHEM. Für das Sketch W5100 wurde SOFTSPI in der MyConfig.h aktiviert und die IP geändert, muss man da noch mehr ändern ?.

Hallo,

ich habe mir gerade den meinen Sketch angesehen, ich nutze bei der Hardware einen Arduino Nano mit dem W5100 Modul und NRF24L01+. MySensors 1.4.1, Arduino 2:1.0.5 unter Linux, SoftSPI, IP angepasst, keine weiteren Änderungen; aktuelle FHEM Module und wie geschrieben alles ist stabil.

VG
Sven
FTUI, Raspberry PI/SSD, CUL CC1101, HMLAN, 10x HM-LC-Bl1PBU-FM, HM-LC-Sw4-WM (KWL Pluggit P300), HM-WDS30-OT2-SM (Sonnensensor), HM-Sec-SCo, LW-12 Wifi LED, CUL Selbstbau nanoCUL 433 (IT), Arduino (S0-Stromverbrauch), OW DS2480 (OWX_ASYNC) 8x DS18B20, MQTT (Fröling P4), MYSENSORS (Roto Rollläden)

Hauswart

Zitat von: neonet am 19 November 2015, 13:14:10
Jetzt funktioniert es aber Fhem empfängt keine Werte bzw. immer nur 0 für jedes Level. Ich teste gleich mal nur den Sensor ohne MySensor.

Hast du schon Neuigkeiten? :) Wenn der Patch funktioniert, dann würde ich ihn in die offizielle MySensors Repo einchecken.
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

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

Peter_64

Zitat von: SvenJust am 20 November 2015, 14:31:38
Hallo Sven,
dank Dir für die Info



ich habe mir gerade den meinen Sketch angesehen, ich nutze bei der Hardware einen Arduino Nano mit dem W5100 Modul und NRF24L01+. MySensors 1.4.1, Arduino 2:1.0.5 unter Linux, SoftSPI, IP angepasst, keine weiteren Änderungen; aktuelle FHEM Module und wie geschrieben alles ist stabil.

VG
Sven

Omega

Hallo,

ich benutze als Gateway-Sketch die MyEsp8266Gateway.ino von Hexenmeister. Funktioniert auch einwandfrei. Allerdings würde ich gerne eine statische IP vergeben (über den Sketch und nicht über den Router unter Zuhilfenahme der MAC-Adresse). Nur ist mir leider nicht klar, wo und wie ich dabei eingreifen müsste).

Mit den Variablen (eingefügt im Include MySecret.h)

// Enable MY_IP_ADDRESS here if you want a static ip address (no DHCP)
#define MY_IP_ADDRESS 192,168,0,221

// If using static ip you need to define Gateway and Subnet address as well
#define MY_IP_GATEWAY_ADDRESS 192,168,0,1
#define MY_IP_SUBNET_ADDRESS 255,255,0,0

habe ich es schon probiert, es bleibt aber bei der per DHCP zugewiesenen IP.

Hat das schon einer gelöst?
NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

neonet

Zitat von: SvenJust am 19 November 2015, 13:41:04
Am Besten im Sensor das Debugging einschalten, dann gibt es die Ausgaben auf die serielle Console, auch die Sendeinformationen. Dazu in der Datei MyConfig.h das #define DEBUG nicht auskommentieren, also Kommentarzeichen entfernen.

VG
Sven


Hier mal ein Auszug aus der Konsole

LPG:221ppm    CO:1440ppm    SMOKE:119ppm
send: 102-102-0-0 s=0,c=1,t=37,pt=2,l=2,sg=0,st=ok:-17632
send: 102-102-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,st=ok:1813
send: 102-102-0-0 s=2,c=1,t=37,pt=2,l=2,sg=0,st=ok:3593
0
LPG:0ppm    CO:0ppm    SMOKE:0ppm
send: 102-102-0-0 s=0,c=1,t=37,pt=2,l=2,sg=0,st=ok:0
send: 102-102-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,st=ok:0
send: 102-102-0-0 s=2,c=1,t=37,pt=2,l=2,sg=0,st=ok:0
0
LPG:29460ppm    CO:0ppm    SMOKE:480ppm
send: 102-102-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,st=ok:-31198
send: 102-102-0-0 s=2,c=1,t=37,pt=2,l=2,sg=0,st=ok:2112
0
LPG:0ppm    CO:0ppm    SMOKE:0ppm
send: 102-102-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,st=fail:0
send: 102-102-0-0 s=2,c=1,t=37,pt=2,l=2,sg=0,st=fail:0
0
LPG:1ppm    CO:5ppm    SMOKE:4ppm
send: 102-102-0-0 s=0,c=1,t=37,pt=2,l=2,sg=0,st=ok:9
send: 102-102-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,st=ok:1
send: 102-102-0-0 s=2,c=1,t=37,pt=2,l=2,sg=0,st=ok:5

hexenmeister

Zitat von: Omega am 20 November 2015, 16:18:59
ich benutze als Gateway-Sketch die MyEsp8266Gateway.ino von Hexenmeister. Funktioniert auch einwandfrei. Allerdings würde ich gerne eine statische IP vergeben (über den Sketch und nicht über den Router unter Zuhilfenahme der MAC-Adresse). Nur ist mir leider nicht klar, wo und wie ich dabei eingreifen müsste).
Der Sketch ist ja von mir nur geringfügig aufgebohrt worden.  ;)

Zitat von: Omega am 20 November 2015, 16:18:59
Mit den Variablen (eingefügt im Include MySecret.h)

// Enable MY_IP_ADDRESS here if you want a static ip address (no DHCP)
#define MY_IP_ADDRESS 192,168,0,221

// If using static ip you need to define Gateway and Subnet address as well
#define MY_IP_GATEWAY_ADDRESS 192,168,0,1
#define MY_IP_SUBNET_ADDRESS 255,255,0,0

habe ich es schon probiert, es bleibt aber bei der per DHCP zugewiesenen IP.
Naja, diese müssen ja auch irgendwo irgendeine Bedeutung haben, um zu funktionieren ;)

Internet ist Dein Freund: https://www.arduino.cc/en/Reference/WiFiConfig
ZitatWiFi.config()
Description

WiFi.config() allows you to configure a static IP address as well as change the DNS, gateway, and subnet addresses on the WiFi shield.

Unlike WiFi.begin() which automatically configures the WiFi shield to use DHCP, WiFi.config() allows you to manually set the network address of the shield.

Calling WiFi.config() before WiFi.begin() forces begin() to configure the WiFi shield with the network addresses specified in config().

You can call WiFi.config() after WiFi.begin(), but the shield will initialize with begin() in the default DHCP mode. Once the config() method is called, it will change the network address as requested.
Syntax

WiFi.config(ip);
WiFi.config(ip, dns);
WiFi.config(ip, dns, gateway);
WiFi.config(ip, dns, gateway, subnet);

Scheinbar kenn die ESP-Lib nur eine davon:
void config(IPAddress local_ip, IPAddress gateway, IPAddress subnet);

Probiere meine letzte Version aus GitHub und setze USE_STATIC_IP auf 1
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

SvenJust

Zitat von: neonet am 20 November 2015, 19:45:52

Hier mal ein Auszug aus der Konsole

LPG:221ppm    CO:1440ppm    SMOKE:119ppm
send: 102-102-0-0 s=0,c=1,t=37,pt=2,l=2,sg=0,st=ok:-17632
send: 102-102-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,st=ok:1813
send: 102-102-0-0 s=2,c=1,t=37,pt=2,l=2,sg=0,st=ok:3593
0
LPG:0ppm    CO:0ppm    SMOKE:0ppm
send: 102-102-0-0 s=0,c=1,t=37,pt=2,l=2,sg=0,st=ok:0
send: 102-102-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,st=ok:0
send: 102-102-0-0 s=2,c=1,t=37,pt=2,l=2,sg=0,st=ok:0
0
LPG:29460ppm    CO:0ppm    SMOKE:480ppm
send: 102-102-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,st=ok:-31198
send: 102-102-0-0 s=2,c=1,t=37,pt=2,l=2,sg=0,st=ok:2112
0
LPG:0ppm    CO:0ppm    SMOKE:0ppm
send: 102-102-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,st=fail:0
send: 102-102-0-0 s=2,c=1,t=37,pt=2,l=2,sg=0,st=fail:0
0
LPG:1ppm    CO:5ppm    SMOKE:4ppm
send: 102-102-0-0 s=0,c=1,t=37,pt=2,l=2,sg=0,st=ok:9
send: 102-102-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,st=ok:1
send: 102-102-0-0 s=2,c=1,t=37,pt=2,l=2,sg=0,st=ok:5


Das MySensors-Device sendet Pakete mit Daten, erkennbar an dem ok in der Zeile send: 102-102-0-0 s=0,c=1,t=37,pt=2,l=2,sg=0,st=ok:9

Vermutlich werden die eingehenden Pakete in Fhem nicht den Readings zugeordnet. Voraussetzung ist, dass das MySensors-Gateway in Fhem funktioniert.

Die folgenden Mappings ordnen die eingehenden Werte den Reading val0, val1, val2 zu. Die Namen der Readings sind beliebig.
attr <DEVICENAME> mapReading_val0 0 level
attr <DEVICENAME> mapReading_val1 1 level
attr <DEVICENAME> mapReading_val2 2 level


Erläuterungen gibt es in der englischen Commandref zu den MySensors-Modulen.

VG
Sven
FTUI, Raspberry PI/SSD, CUL CC1101, HMLAN, 10x HM-LC-Bl1PBU-FM, HM-LC-Sw4-WM (KWL Pluggit P300), HM-WDS30-OT2-SM (Sonnensensor), HM-Sec-SCo, LW-12 Wifi LED, CUL Selbstbau nanoCUL 433 (IT), Arduino (S0-Stromverbrauch), OW DS2480 (OWX_ASYNC) 8x DS18B20, MQTT (Fröling P4), MYSENSORS (Roto Rollläden)

Omega

@Hexenmeister: Danke, du hast mir die richtigen Stichwörter geliefert.

Um eine statische IP zu erhalten, sind folgende Modifikationen in dem Sketch MyEsp8266Gateway.ino notwendig:

Nach der Zeile ,,const char *pass =  MY_WLAN_PASS; //"
kommen zunächst folgende Definitionen:


// Update these with values suitable for your network.
IPAddress ip(192,168,0,221);  //Node static IP
IPAddress dns(192,168,0,1);
IPAddress gateway(192,168,0,1);
IPAddress subnet(255,255,255,0);


Danach ist nur noch der Aufruf von ,,WiFi.config(ip, dns, gateway, subnet);" notwendig nach der Zeile
,,WiFi.begin(ssid, pass);"


  (void)WiFi.begin(ssid, pass);
        WiFi.config(ip, dns, gateway, subnet);
  while (WiFi.status() != WL_CONNECTED)


Ich benutze die IDE 1.6.5
In älteren Versionen werden wohl nur 3 Argumente übergeben (ip, gateway, subnet). Hier kann es daher zu Unterschieden kommen.
NUC6i3SYH (FHEM 5.8 in VM)
Homematic: HMLAN, HMUSB, HM-Sec-SD, HM-CC-RT-DN, HM-TC-IT, ... + diverse weitere
LaCrosseGateway, ESPEasy
ZWave

neonet

Zitat von: SvenJust am 20 November 2015, 21:23:35
Das MySensors-Device sendet Pakete mit Daten, erkennbar an dem ok in der Zeile send: 102-102-0-0 s=0,c=1,t=37,pt=2,l=2,sg=0,st=ok:9

Vermutlich werden die eingehenden Pakete in Fhem nicht den Readings zugeordnet. Voraussetzung ist, dass das MySensors-Gateway in Fhem funktioniert.

Die folgenden Mappings ordnen die eingehenden Werte den Reading val0, val1, val2 zu. Die Namen der Readings sind beliebig.
attr <DEVICENAME> mapReading_val0 0 level
attr <DEVICENAME> mapReading_val1 1 level
attr <DEVICENAME> mapReading_val2 2 level


Erläuterungen gibt es in der englischen Commandref zu den MySensors-Modulen.

VG
Sven


Die Readings kommen an, sind aber falsch. Als Beispiel:
LPG:221ppm    CO:1440ppm    SMOKE:119ppm
send: 102-102-0-0 s=0,c=1,t=37,pt=2,l=2,sg=0,st=ok:-17632
send: 102-102-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,st=ok:1813
send: 102-102-0-0 s=2,c=1,t=37,pt=2,l=2,sg=0,st=ok:3593

Er sendet nicht für SMOKE 119ppm sondern 3593. Das meinte ich mit Fehler.

Hauswart

Muss ich mir morgen oder am Montag mal anschauen. In FHEM kommen sie aber mittlerweile an? Auch wenn es die falschen Werte sind?
1. Installation:
KNX, Tasmota (KNX), Sonos, Unifi

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

dd_bauer

Hallo,

für alle die es noch interessiert...
DimmableLEDActuator läuft seit meinem letzten Post:

define WZ_dimmer MYSENSORS_DEVICE 104
attr WZ_dimmer IODev MS_gateway
attr WZ_dimmer group Licht
attr WZ_dimmer mapReading_percentage 0 percentage
attr WZ_dimmer mapReading_power 0 power
attr WZ_dimmer mapReading_status 0 status
attr WZ_dimmer mode node
attr WZ_dimmer room WZ
attr WZ_dimmer setReading_percentage slider,0,1,100
attr WZ_dimmer setReading_power 1
attr WZ_dimmer setReading_status on,off
attr WZ_dimmer stateFormat percentage
attr WZ_dimmer version 1.5
attr WZ_dimmer webCmd status:percentage
define WZ_dimmer_ico notify WZ_dimmer:percentage.* {\
  my $pctwz = int(%EVTPART1/10)*10;;\
  $pctwz = "00" if (!$pctwz);;\
  fhem("attr WZ_dimmer devStateIcon .*:light_light_dim_$pctwz");;\
}


Sany

Hallo neonet

ZitatDie Readings kommen an, sind aber falsch. Als Beispiel:
LPG:221ppm    CO:1440ppm    SMOKE:119ppm
send: 102-102-0-0 s=0,c=1,t=37,pt=2,l=2,sg=0,st=ok:-17632
send: 102-102-0-0 s=1,c=1,t=37,pt=2,l=2,sg=0,st=ok:1813
send: 102-102-0-0 s=2,c=1,t=37,pt=2,l=2,sg=0,st=ok:3593

Er sendet nicht für SMOKE 119ppm sondern 3593. Das meinte ich mit Fehler.

verwendest Du den Sketch aus Post #564?

Ich habe mir den mal angeschaut und würde dort ein paar Änderungen vornehmen:
so steht er auf Github:
void loop()     
{     
  uint16_t valMQ = MQGetGasPercentage(MQRead(MQ_SENSOR_ANALOG_PIN)/Ro,GAS_CO);
  //Start Test
  uint16_t valMQ2 = MQGetGasPercentage(MQRead(MQ_SENSOR_ANALOG_PIN)/Ro,GAS_LPG);
  uint16_t valMQ3 = MQGetGasPercentage(MQRead(MQ_SENSOR_ANALOG_PIN)/Ro,GAS_SMOKE);
  //Ende Test
  Serial.println(val);
 
   Serial.print("LPG:");
   Serial.print(MQGetGasPercentage(MQRead(MQ_SENSOR_ANALOG_PIN)/Ro,GAS_LPG) );
   Serial.print( "ppm" );
   Serial.print("    ");   
   Serial.print("CO:");
   Serial.print(MQGetGasPercentage(MQRead(MQ_SENSOR_ANALOG_PIN)/Ro,GAS_CO) );
   Serial.print( "ppm" );
   Serial.print("    ");   
   Serial.print("SMOKE:");
   Serial.print(MQGetGasPercentage(MQRead(MQ_SENSOR_ANALOG_PIN)/Ro,GAS_SMOKE) );
   Serial.print( "ppm" );
   Serial.print("\n");
 
  //Start Test
  if (valMQ != lastMQ) {
      gw.send(msg.set((int)ceil(valMQ)));
      lastMQ = ceil(valMQ);
  }
 
  if (valMQ2 != lastMQ2) {
      gw.send(msgLPG.set((int)ceil(valMQ2)));
      lastMQ2 = ceil(valMQ2);
  }
 
  if (valMQ3 != lastMQ3) {
      gw.send(msgSMOKE.set((int)ceil(valMQ3)));
      lastMQ3 = ceil(valMQ3);
  }
  //Ende Test

  gw.sleep(SLEEP_TIME); //sleep for: sleepTime
}


Am Anfang der Loop wird der Sensor ausgelesen und die ermittelten Werte in variablen geschrieben. Diese sind als unsigned int deklariert, also nur positive Ganzzahlen.
Gleich danach werden sie auf der Konsole ausgegeben, aber hier werden die Sensoren nochmals gelesen. Das macht keinen Sinn, denn 2 mal Sensor auslesen bringt ziemlich sicher 2 verschiedene Werte. Also besser:

  Serial.print("LPG:");
   Serial.print(GAS_LPG);
   Serial.print( "ppm" );
 

das druckt die den Inhalt der Variablen, die Du ja gerade mit dem Sensorwert gefüttert hast. Die anderen 2 Zeilen bitte entsprechend anpassen.

dann kommt der Sendeteil:
  if (valMQ != lastMQ) {
      gw.send(msg.set((int)ceil(valMQ)));
      lastMQ = ceil(valMQ);
  }


erste und letzte Zeile sorgen ja nur dafür, dass ein Wert, der sich nicht geändert hat, nicht gesendet wird. Evtl. nimmst Du das mal raus, damit jeder Wert gesendet wird, sonst wird es unübersichtlich beim testen.

in der Mitte wird es interessant:
ceil() dient zum runden von Fliesskommazahlen: es ermittelt von der Fliesskommazahl x die kleinste Ganzzahl (Integer) die größer als x ist. Also 1.1 wird 2.
Davor steht noch mal int(), was eigenlich eine beliebigen Datentyp zu int konvertiert.
Da die Variable aber ein unsigned int ist, also eine Ganzzahl zwischen 0 und 65xxx, macht weder int() noch ceil() einen Sinn, im Gegenteil, man kann vermutlich nicht sagen, was dabei herauskommt. Dieses wird aber an fhem übermittelt und Du wunderst Dich, dass die Werte nicht übereinstimmen.

also einfach
gw.send(msg.set(valMQ));
und gut ist.

Probier das mal, und dann wäre noch die Frage offen, ob denn in fhem jetzt was ankommt.

Viel Erfolg!

sany
fhem auf nipogi Mini PC als LXC auf Proxmox, weitere LXC mit ZigBee2MQTT, MariaDB und Grafana. Homematic, FS20, mySensors, MQTT2, Tasmota, Shelly, Z-Wave  ....