MySensors auf Arduino basis

Hallo zusammen,

habe mich hier und auf der Homepage etwas eingelesen, hört sich alles super an. Gerade weil mein HMS Sensor den Geist aufgegeben hat und die Sensoren einfach maßlos überteuert sind…

Hardware ist soweit klar, allerdings wie ist das jetzt mit der ID Vergabe…Ich würde gerne die Sensoren an dem Gateway „abhören“, ohne zusätzlichen Controller…Funktioniert das mittlerweile an ips? Wenn man einfach manuelle IDs an den Sensoren vergeben muss, wäre natürlich auch nicht schlimm.

Vielen Dank schon mal!

Liebe Grüße Sebastian

Nee, leider nicht. Du musst einmal ein gateway controller laufen lassen, die hardware und sensors einbinden. Wenn du das einmal für allesbgemacht hast, dann sind id’s vergeben und gut ist

Wie man die ID vergibt und was sinst noch geschrieben werden muss ist mir leoder nicht ganz klar.

Hallo,

im Prinzip schon hat alles nur andere Namen.
Wie bei allen sensoren bei IPS brauchst du ein Gerät welches die Sender Empfäng, Das heißt bei Mysensor Gateway.
ID’s musste ich noch nicht vergeben, vielleicht weil ich sie vorher an einer anderen software hatte.
Das war es eigentlich schon dann kann IPS die Daten schon Empfangen.

Schöne Grüße
Thomas

Ich habe jetzt auch vom Serial Gateway auf ein Ethernet Gateway mit ENC28J60 gewechselt. Das Gateway kann ich pingen. Was ich aber komisch finde ist dass im ClientSocket unter Debug nichts ankommt. Als Port habe ich 5003 angeben. Gibt es einen Weg um zu testen ob IP-Symcon das Problem ist oder ob das Gateway keine Daten über LAN schickt?

Hallo,

du kannst in der seriellen console beim Gateway den debug sehen.
Und mit Wireshark auf dem ips Rechner den Datenverkehr.
Vielleicht müssen die Sensoren auch zurück gesetzt werden. Die Sensor Verwaltung liegt ja auf dem seriellen Gateway.

Nachtrag: die richtige Ethernet library benutzt du?
Nachtrag2: mit nmap kannst du noch testen ob du Port 5003 von deinen Rechner erreichst, unter Windows vielleicht die Firewall.

Schöne Grüße
Thomas

Hallo,

ich habe noch einmal nach gesehen der Controller vergibt die ID, aber nur wenn man dem Sensor nicht schon bei der Programmierung eine ID zugewiesen hat.
Hat der Sensor erst einmal seine ID braucht es keinen Controller mehr, er sendet den die Daten an die offene Socket Verbindung.
Im Sketch das gw.begin() gegen gw.begin(NULL, 5) austauschen und der Sensor sollte die ID 5 haben.
Es sind allerdings mehrere Wege beschrieben.

Schöne Grüße
Thomas

So mittlerweile habe ich es zum laufen bekommen. Mein Gateway hat keine IDs vergeben. Die habe ich dann manuel vergeben wie von ThomasD beschrieben. Nun kommunizieren Node und Gateway richtig miteinander. Allerdings bekomme ich im Symcon noch folgenden Fehler:

03.05.2016 22:03:52*| Register Variable*| 5;1;1;0;0;23.3
Node:5 - Child:1 - Func:set - ACK:0 - Sub-Type:V_TEMP - Payload:23.3
unknown node id5- skipping

Hallo,

ich habe mir eure Skripte noch nicht angesehen, aber zum Empfang der Daten nutze ich dieses, es verteilt einfach die Daten nach dem Mysensor String.


<?
if ($_IPS['SENDER'] == "RegisterVariable")
{

    $data = $_IPS['VALUE'];

 
        $datasets = explode(';', $data);
		  $sensor = $datasets[0].$datasets[1].$datasets[2].$datasets[3].$datasets[4];


		  // MMA8452 Terrassentuer
		  If ($sensor == 511037)
		  {
		  SetValue(42948 /*[MySensor\Terrassentuer\X-Achse]*/, $datasets[5]);
		  }
		  If ($sensor == 521037)
		  {
		  SetValue(43414 /*[MySensor\Terrassentuer\Y-Achse]*/, $datasets[5]);
		  }
		  If ($sensor == 531037)
		  {
		  SetValue(15000 /*[MySensor\Terrassentuer\Z-Achse]*/, $datasets[5]);
		  }
		  
        // Batterie Test
		  If ($sensor == 601038)
		  {
		  SetValue(46439 /*[MySensor\Batterie Test\BattBATT]*/, $datasets[5]);
		  }
		  If ($sensor == 611038)
		  {
		  SetValue(55710 /*[MySensor\Batterie Test\BattVcc]*/, $datasets[5]);
		  }
		  
		  // AirQuality
		  If ($sensor == 411038)
		  {
		  $sensor1 = 0.4781 + $datasets[5];
		  SetValue(13959 /*[MySensor\Airquality\Sensor 1]*/, $sensor1);
		  }
		  If ($sensor == 421038)
		  {
		  SetValue(40505 /*[MySensor\Airquality\Sensor 3]*/, $datasets[5]);
		  }
		  If ($sensor == 431038)
		  {
		  $sensor2 = 0.4224 + $datasets[5];
		  SetValue(19393 /*[MySensor\Airquality\Sensor 2]*/, $sensor2);
		  }

		  // Luftdruck
		  If ($sensor == 10104 /*[Objekt #10104 existiert nicht]*/)
		  {
		  $druckold = GetValue(56854 /*[MySensor\Wetter\Luftdruck1]*/);
		  $druckdiff = ($druckold - $datasets[5]) * 10;
		  SetValue(56854 /*[MySensor\Wetter\Luftdruck1]*/, $datasets[5]);
		  SetValue(39426 /*[MySensor\Wetter\Diff Druck]*/, $druckdiff);
		  }
  
}
?>

Dem Skript ist noch ein cutter vor geschaltert der einfach bei jeden LF abschneidet.

Schöne Grüße
Thomas

Hallo zusammen,

ich bin nun auch etwas weiter. Folgende Hardware will ich für einen Temp/Feuchte Sensor benutzen:

1x Arduino Pro Mini 8Mhz 3,3V
1x Temp/Feuchte Sensor DHT 22
1x NRF24L01+

Auf diesen wurde der MySensors Standard Sketch per USB/TTL Wandler aufgespielt.

Als Gateway benutze ich:

1x Arduino Nano 16Mhz 5V
1x NRF24L01+

Dieses ist per USB am ips System angeschlossen. Damit der Sensor eine ID erhält, habe ich einmalig die MYS Software gestartet und das hat auch sofort geklappt.

Ich erhalte nun folgende Rohdaten über das Gateway:

0;0;3;0;9;read: 1-1-0 s=255,c=3,
t=15,pt=2,l=2,sg=0:0<LF>1;255;3;0;15;0<LF>0;0;3;0;9;read: 1-1-0 s=255,c=0,t=17,pt=0,l=5,sg=0:1.5.4<LF>1;255;0;0;17;1.5.4<LF>0;0;3;0;9;read: 1-1-0 s=255,c=3,
t=6,pt=1,l=1,sg=0:0<LF>1;255;3;0;6;0<LF>
0;0;3;0;9;read: 1-1-0 s=255,c=3,t=11,pt=0,l=8,sg=0:Humidity<LF>1;255;3;0;11;Humidity<LF>
0;0;3;0;9;read: 1-1-0 s=255,c=3,t=12,pt=0,l=3,sg=0:1.0<LF>1;255;3;0;12;1.0<LF>0;0;3;0;9;read: 1-1-0 s=0,c=0,t=7,pt=0,l=0,sg=0:<LF>1;0;0;0;7;<LF>
0;0;3;0;9;read: 1-1-0 s=1,c=0,t=6,pt=0,l=0,sg=0:<LF>1;1;0;0;6;<LF>
0;0;3;0;9;read: 1-1-0 s=1,c=1,t=0,pt=7,l=5,sg=0:23.4<LF>1;1;1;0;0;23.4<LF>0;0;3;0;9;read: 1-1-0 s=0,c=1,t=
1,pt=7,l=5,sg=0:53.2<LF>1;0;1;0;1;53.2<LF>

Das wäre zB der erste Meldeschwall, wenn ich den Sensor resette. Wenn ich jetzt per Cutter 0A als rechtes Trennzeichen dekklariere, kommt dieses trotzdem manchmal mit:

Buffer: 0;0;3;0;9;read: 1-1-0 s=255,c=3,t=15,pt=2,l=2,sg=0:0<LF>1;255;3;0;15;0<LF>0;0;3;0;9;read: 1-1-0 s=255,c=0,t=17,pt=0,l=5,sg=0:1.5.4<LF>1;255;0;0;17;1.5.4<LF>0;0;3;0;9;read: 1-1-0 s=255,c=3,
SEND: 1;255;3;0;15;0<LF>0;0;3;0;9;read: 1-1-0 s=255,c=0,t=17,pt=0,l=5,sg=0:1.5.4<LF>1;255;0;0;17;1.5.4<LF>0;0;3;0;9;read: 1-1-0 s=255,c=3,

Habe ich da einen Denkfehler, oder sollte es nicht anders aussehen? Das Muster ist auch irgendwie bei jedem Sendestring anders. Ich bekomme auch kein Skript damit zum Laufen.

Edit: Ich habe das Timeout vom Cutter auf 100ms gesetzt, nun scheint es zu funktionieren!

Gruß Sebastian

Hallo, ich bin mir nicht sicher ob das so geht, zumindestens bekommst du über die USB Verbindung auch die debug Daten. Somit solltest du das debug abschalten. Da musst du mal auf MySensor nachschauen wie das gemacht wird. Über das Ethernet Gateway kommt bei mir nur der Sensor string.

Nachtrag: Hast du am NRF24L01 den beschriebenen Kondensator. Mit sind so einige merkwürdigkeiten plötzlich weg.

Schöne Grüße
Thomas

Also ich habe den Cutter jetzt so eingestellt, dass es funktioniert (Anfang und Ende HEX 0A). Habe auch die Sendebefehle umgeschrieben auf die serial, aber ob die funktionieren weiss ich noch nicht. Wenn jetzt noch die Batterien lange halten, bin ich zufrieden. Werde bestimmt noch andere Sensoren aufbauen.
Ohne Kondensator ging weder das auslesen des Sensors, noch gescheit zu senden…der ist wohl obligatorisch ^^

Hallo,

zum Batteriebetrieb mache ich gerade einen Test. Einen nicht modifizierten Mini Pro 3.3V mit DC/DC Wandler an 2 Mignon und alle 15 min. sendet er seine Batteriespannung.

Schöne Grüße
Thomas

Interessant. Habe beim Pro Mini die LED entfernt und den Spannungswandler. Die 2 Mignons habe ich ohne DC/DC Wandler angeschlossen, mal sehen wie lange das läuft. Bei 90s Sendeabstand wahrscheinlich zu kurz ^^

Hallo Zusammen,

danke Euch für diese wertvollen Hinweise hier im Thread. Endlich hatte ich heute wieder Zeit für das Thema und es funktioniert jetzt bei mir auch mit einem Serial Gateway (Arduino Nano) unter Raspberry Pi 3 auf dem auch IP Symcon 4.0 selbst lauft. Das mit der ID Vergabe war der entscheidende Hinweis und auch das mit dem Cutter war mir vorher so nicht bewusst.

Ich habe zuerst das Serial Gateway (das mit USB betrieben wird mit Arduino Nano) auf dem PC angesteckt und den MYSController installiert (MYSController | MySensors - Create your own Connected Home Experience). Dadurch wurden IDs vergeben.

Als Script habe ich folgendes von diesem Thread hier am Laufen MySensors auf Arduino basis - Seite 3
Unter Kommentar gesetzt habe ich das mit dem ClientSocket und jene Stellen wo die Variable mysensors_client_socket dann aufgerufen wird. Das reicht mir jetzt erstmal so für das Serial Gateway (im ersten Schritt lese ich eh nur von Sensoren aus)

LG
Thiemo

PS: Hier noch die Screenshots falls diese jemand braucht

1_SerialPort.png

Hallo, so langsam werde ich wirklich auch scharf auf das Thema auch wenn ich bisher nie der große Platinenbastler gewesen bin. Als erstes stellt sich mit bei den ganzen Gateways und Controllern erstmal die Frage:

Was brauche ich um drahtlos die Temperatur zu messen und per IPS das Signal entweder per USB oder LAN weiter zu verarbeiten? Ich würde mit dem Temperatur/Feuchtesensor DHT22 oder mit dem DS18b20.

Auch wenn die MySensors Seite auch schon vorgefertigte Einkaufslisten anbietet frage ich mich immer, was ich wirklich genau brauche.

In Zukunft möchte ich mir über diese Variante vielleicht eigene batteriebetriebene Taster bauen können.

Somit könnte ich mir das Geld für den teuren 6-Fach Taster von Homematic sparen und der Installationsaufwand wäre extrem gering.

Hallo,

Hier eine kurze Liste was du brauchst.
Für das Gateway per Lan:

Ein Arduino Microkontroller, z.B. UNO oder Nano
Ein NRF24L01+ Funkmodul
ein Ethernet module, z.B. W5100
Zum Programmieren ein passendes USB Kabel für den Arduino
Ein Steckernetzteil mit USB Ausgang.
Wenn du nicht viel löten willst soltest du dir noch Dupont jumper Kabel besorgen, je nach dem welcher Arduino brauchst du F/F oer F/M

Für deinen Sensor brauchst du:

Ein Arduino Microkontroller, z.B. UNO oder Nano
Ein NRF24L01+ Funkmodul
Dann natürlich den DHT22
Zum Programmieren ein passendes USB Kabel für den Arduino
Ein Steckernetzteil mit USB Ausgang.
Und wieder:
Wenn du nicht viel löten willst soltest du dir noch Dupont jumper Kabel besorgen, je nach dem welcher Arduino brauchst du F/F oer F/M

Schöne Grüße
Thomas

Achsoo jeder Sensor benötigt nochmal eine Art eigenen Arduino. Dann wäre also die ESP8266 Variante doch die mit weniger Frickelei oder?

Strommässig sind die ESP8266 aber nicht gerade stromspar Weltmeister :wink:

Ich denke die arduinos sind da sparsamer evtl. Sogar Batterie tauglich.

Gesendet von meinem Redmi Note 2 mit Tapatalk

Hallo,
nicht jeder Sensor braucht einen. Jeder Arduino kann 255 Signale senden. Sie müssen halt am selben angeschlossen werden. Also z. B. Wettersensoren im Garten brauchen nur einen.

Schöne Grüße
Thomas

Gesendet von meinem LIFETAB_P831X mit Tapatalk

Hat sich rein zufällig jemand schon einen eigenen Taster mit dieser Arduino Variante gebaut?

Ich würde mir gerne einen 6 oder 8 Fach Taster bauen. Zu beginn würde mir genügen eigene Taster anzuschließen und diese in IPS auszuwerten. Ganz nett wäre es natürlich noch, wenn ich dazu Status LED’s hätte (im besten Fall RGB)

Gibt es schon Unterputztaster, hinter welche ich solch eine Installation basteln kann?