NEWS
[UPDATE] DOino / Arduino Mega 2560 als Multisensor-Node / All in One Node/ Mysensors
-
Hier Beschreibung (quick and dirty) von meinem sketch:
[UPDATE]
ES LÄUFT PRODUKTIV mit Wärmepumpe, Solar, Holzvergaser, Zirkulation, Pumpengeschwindigkeitssteuerung etc..)
Ich habe INO aufgeteilt, damit es übersichtlicher wird und damit Variablenspeicher nicht "überläuft"
~~![](</s><URL url=)http://up.picr.de/25928787et.jpg" />
Habe SERIAL1 , SERIAL2, SERIAL3 Eingebunden, damit man weitere nodes WIRED verbinden kann (Bei mir auf dem Dach und unter der Garage)
~~![](</s><URL url=)http://up.picr.de/25928809tr.png" />
My scope was:
"a" Node which i can connect what i want to and with a simple and smalest modifications, can run EVERYTHING!
it should be cheap!
it should be easy so even me as noob can understand that
4.it should be a standard protocol, which can be used with all of teh adapters
it should have updates in the future
6 can be used with node-red and ioBroker, because everything is integrated there
7 etc..
do's and dont's for me:
do not mess with child ID's and PIN's ->Use something easy
show to the server what you have (present) and show what it is!!!! Not just Child ID = 13 -> Send a discription to Server
do it universal, so everybody can use it !!!
Give it to the comunity to improve it !!!
My steps:
HERE THE USER SHOULD PUT HIS SENSORS IN THE TABLE
create a table with pins, so if you change configuration you do not have to mess around with PIN's:
~~![](</s><URL url=)http://up.picr.de/25928677ol.jpg" />
you can put all you attached sensors with S-Types and S_Variables
USER does not have to do enything!!!
present everything (all connected or IF YOU WANT unconnected pins too).
whole void presentation! so just easy and short "i think"
Setup (just look in samples of MYsensors and you will see if you need it or not
`void setup() { //Serial1.begin(2400); //Serial2.begin(2400); for (int i = 0; i` or next example `~~[code]~~void ds18b20_temp(int i) { #ifdef DS18B20 if ((iomodus[i].sensorType == S_TEMP) && (iomodus[i].sensorVersion == "DS18B20")) { if (millis() > next_Time[i]) { next_Time[i] = next_Time[i] + 10000; //onewire updates every 10s (10s is MINIMUM) sensor[i].requestTemperatures(); // query conversion time and sleep until conversion completed // int16_t conversionTime = sensor[i].millisToWaitForConversion(sensor[i].getResolution()); // sleep() call can be replaced by wait() call if node need to process incoming messages (or if node is repeater) wait(1000); for (int j = 1; j <= dsSensor_count; j++) { if (dsSensor[j].dsonPinNr == i) { unsigned int dsPin=(iomodus[i].Int_to_HLP + j); float tempC = sensor[i].getTempC(dsSensor[j].dsAdress); if (tempC == -127.00) { /* send(msg.setType(77).set("Error getting temperature"), false); Serial.println("Error getting temperature on Pin"); Serial.print(i); Serial.println("MySensors Pin Nr"); Serial.print(dsPin); Serial.println("Probe Nr."); Serial.print(j); */ } else { MyMessage msg(i, iomodus[i].variableType); send(msg.setSensor(dsPin).set(tempC, 2), false); last_dsTemp[j] = tempC; /* Serial.println("C: "); Serial.print(tempC); Serial.println(" F: "); Serial.print(DallasTemperature::toFahrenheit(tempC)); */ } // dsPin=0; } } } } #endif }` ! Done! ~~[color]~~Libraries hier(vom 16.06.2016):[/color] ![933_mysensors.zip](/assets/uploads/files/933_mysensors.zip) [/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/code][/i][/i][/i][/i][/i][/i] ```~~~~~~
-
nächste Version mit RELAY Szenen…
d.h. ich habe 16 relais, um die SCHNELL zu setzen, benutze ich BITs nicht BYTE's... damit spare ich mir Speicher und erhöhe die Geschwindigkeit beim setzen, daich den kompletten PORT (8 Ausgänge) mit einem Kommando sezen kann.
uint8_t relay_scenes[][2] = { {0b00001111, 0b01111100}, //Digital Pins 29,28,27,26,25,24,23,22, 30,31,32,33,34,35,36,37 {0b00000000, 0b00000000}, // here set your scenes {0b00000000, 0b00000000}, // {0b00000000, 0b00000000}, // {0b00000000, 0b00000000}, // {0b00000000, 0b00000000}, // {0b00000000, 0b00000000}, // {0b00000000, 0b00000000}, // {0b00000000, 0b00000000}, // {0b00000000, 0b00000000}, // {0b00000000, 0b00000000}, // {0b00000000, 0b00000000}, // {0b00000000, 0b00000000}, // {0b00000000, 0b00000000}, // {0b00000000, 0b00000000}, // {0b00000000, 0b00000000} // };
ich maskiere dann die Ausgänge , die ich nicht mit den Szenen ansprechen Darf (in meinem beisoiel alle Pins werden beeinflusst(können HIGH oder LOW gesetzt werden)
#define PORT_A_MASK 0xFF // Mask for Port A all if 0-Pin will NOT be affected whith PORTA=...function #define PORT_C_MASK 0xFF // Mask for Port C all if 0-Pin will NOT be affected whith PORTC=...function
0xFF bedeutet 1111 1111 binär
wenn Sie also 0x0F als MASK setzen würden als 0000 1111 dann werden bei bit nummern (12345678) die bits 5678 mit der SZENE 1111 1111 beeinflusst (können 0 oder 1 sein) 1234 werden nicht beeinflusst, da MASKe 0000. also ergebniss mit der maske 0000 1111 und der szene 1111 1111 ist dann 0000 1111
Libraries hier:
https://github.com/mysensors/Arduino/ar … opment.zip
933_mysensors_gatewayclient_work_v13.rar -
die Sekunde wurde in 5 Beriche mit jeweils 10 vollwellen geteilt und2 Pumpen können in 10 schritten (kann aber bis unendlich geändert werden) gesteuert werden.
933_mysensors_gatewayclient_work_v14.rar -
Hallo Maxtox,
ich habe auch viel mit mySensor probiert. Leider hatte ich die letzten Wochen nicht so viel Zeit dafür.
Ich verstehe noch nicht ganz Deine Einbindung von mysensor in iobroker.
Kann ich mir das so vorstellen:
Ein Arduino läuft als Gateway. Dieser hängt am Netzwerk (via LAN, WLAN?) in stehlt so die Verbindung zum iobroker her, via MQTT. Mit einem NRF24L01+ am Gateway wird der Kontakt zu den Sensoren aufgebaut.
Ist das so?
Ich würde da gern etwas unterstützen, wenn ich kann, zumindest sobal ich Deinen Aufbau verstanden habe. Was läuft z.B. auf den Sensoren, eine OTA Firmware?
Gruß
Tino
-
hi…gut wenn du mich unterstützen würdest...
as läuft zur zeit so:
Arduino mit sensors <->raspi mit iobroker
bis jetzt ohne nrf, da ich auf den "filter" für 3.3V warte...
-
okay, dann der Reihe nach.
Hardware, ich hab hier alles möglich rumliegen, Kiste voll. Würde erstmal Deinen Aufbau genau nachbauen, damit wir die gleiche Basis haben.
Arduino, welcher?
LAN/WLAN, welches Modul?
Sensor, welcher und an welchem PIN?
Sketch im Arduino, welcher?
Welche IDE?
Gruß
Tino
-
Arduino Mega 2560
IDE 1.6.7
LAN: W5100
Pins: Siehe Sketch
Hast du schon reingeschaut?
-
In den Sketch hatte ich schon geschaut.
Ich bau mir morgen mal die Teile zusammen. Hab mir aus meiner Kiste gerade einen Mega und das LAN Modul geholt.
Muss mir noch Deine Version der IDE einrichten, hab die noch nicht. Dazu hab ich heute keine Lust mehr, zu müde, sorry.
Musste eben in unseren Erdtank (Wasser) steigen, da war der Wasserstandsensor irgendwie mit Dreck zugeschmiert. Keine Ahnung wie der Mist da hin gekommen ist. Musste dann den Ultraschallsensor tauschen. Der Sensor meldet übrigens via ESP8266 oder mysensor NRF24 seine Aktivitäten ins Haus. Teste mit den beiden Methoden, welche für mich besser ist.
-
Kurzer Status. Komme damit nicht weiter, da ich noch am Hauptproblem bastel, "Stabilität von iobroker".
-
Hallo Maxtox,
habe einen 2560R3 mit 5100 Shield. Der Sketch von Funkleuchtturm läuft ohne Kompilierungsfehler. D.h. die Hardware und Netzkommunikation funktioniert. Dein Sketch unterstützt sogar MQTT.
Beim Compilieren habe ich einige Fehler gehabt. Fehlende Libraries habe ich hinzugefügt. Jetzt erhalte ich noch folgende Fehlermeldung:
Zeile 636: 'S_UNUSED' was not declared in this scope
In Zeile 442 wird der Mechanismus auch verwendet. Hier funktioniert er. Ich möchte acht Relais für eine Fussbodenheizung steuern. Du hast bereits 16 definiert. Somit brauche ich neben den IPs eigentlich nichts einstellen. Oder?
Gruß
akamia
-
kein problem, einfach im /core unterverzeichnis diese datei austauschen:
933_modifizierte_mymessage.h.rar
9364_vis.png -
! In file included from C:\Program Files (x86)\Arduino\libraries\MySensors/core/MySensorCore.h:27:0,
! from C:\Program Files (x86)\Arduino\libraries\MySensors/MySensor.h:28,
! from C:\Users\Helle\Documents_Projekte\HA_Arduino\Sketche\MySensors_V14\MySensors_V14.ino:132:
! C:\Program Files (x86)\Arduino\libraries\MySensors/core/MyMessage.h:158:2: error: expected '}' before 'V_UNKNOWN'
! V_UNKNOWN = 255, // <–- We don't know
! ^
! C:\Program Files (x86)\Arduino\libraries\MySensors/core/MyMessage.h:158:2: error: typedef 'V_UNKNOWN' is initialized (use decltype instead)
! C:\Program Files (x86)\Arduino\libraries\MySensors/core/MyMessage.h:159:1: error: expected unqualified-id before '}' token
! } mysensor_data;
! ^
! C:\Program Files (x86)\Arduino\libraries\MySensors/core/MyMessage.h:159:1: error: expected declaration before '}' token
! exit status 1
! Fehler beim Kompilieren. -
bist auf 1.6.7?
noch mal!
933_mymessage.rar -
Hallo Maxtox,
ja, bin auf der 1.6.7 und parallel teste ich auch die aktuelle Nightly Build. Die Libraries habe ich gemäß den Links im Sketch geladen. Die Aktualisierung für die neuesten Libraries habe ich durchgeführt. Jetzt hängt es noch an OneWire.
! Arduino: 1.6.7 (Windows 10), Board: "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
! MySensors_V14:333: error: no matching function for call to 'OneWire::OneWire()'
! OneWire ds18x20[oneWirePinsCount];
! ^
! C:\Users\Helle\Documents_Projekte\HA_Arduino\Sketche\MySensors_V14\MySensors_V14.ino:333:33: note: candidates are:
! In file included from C:\Users\Helle\Documents_Projekte\HA_Arduino\Sketche\MySensors_V14\MySensors_V14.ino:64:0:
! C:\Program Files (x86)\Arduino\libraries\OneWire/OneWire.h:265:5: note: OneWire::OneWire(uint8_t)
! OneWire( uint8_t pin);
! ^
! C:\Program Files (x86)\Arduino\libraries\OneWire/OneWire.h:265:5: note: candidate expects 1 argument, 0 provided
! C:\Program Files (x86)\Arduino\libraries\OneWire/OneWire.h:250:7: note: constexpr OneWire::OneWire(const OneWire&)
! class OneWire
! ^
! C:\Program Files (x86)\Arduino\libraries\OneWire/OneWire.h:250:7: note: candidate expects 1 argument, 0 provided
! C:\Program Files (x86)\Arduino\libraries\OneWire/OneWire.h:250:7: note: constexpr OneWire::OneWire(OneWire&&)
! C:\Program Files (x86)\Arduino\libraries\OneWire/OneWire.h:250:7: note: candidate expects 1 argument, 0 provided
! C:\Users\Helle\Documents_Projekte\HA_Arduino\Sketche\MySensors_V14\MySensors_V14.ino: In function 'void setup()':
! MySensors_V14:588: error: 'class OneWire' has no member named 'setPin'
! ds18x20__.setPin(i);
! ^
! exit status 1
! no matching function for call to 'OneWire::OneWire()'
! Dieser Report hätte mehr Informationen mit
! "Ausführliche Ausgabe während der Kompilierung"
! aktiviert in Datei > Einstellungen.__ -
Update to Productive
-
Hallo und guten Tag,
die Arbeit, die hinter diesem Projekt steckt, muss immens gewesen sein.
Ich würde gerne etwas davon profitieren, bin aber noch Anfänger, und habe daher noch einige Verständnisfragen.
1. Im Sketch sind Kennziffern erwähnt, mit denen man die Ein/Ausgänge definieren kann:
I/O-Kennung: hier wird die Funktion aller verwendbaren IOös mit einer Kennziffer festgelegt
//dabei haben alle IOös die Standardfunktionen plus spez. Sonderfunktionen
// Standardfunktionen sind STANDARD TYPE:
// '1' =MY_SystemPin; '2' =DS18B20; '3'=MAX31855; '4' =RELAY '5' =DHTxx; '6' =PWM, '7' =IMPULSEcount, '8'=NTC, '9'=BUTTON,
typedef struct s_iomodus
{
mysensor_sensor sensorType;
mysensor_data variableType;
const char* sensorDescription;
const char* sensorVersion;
const unsigned char Int_to_HLP;
} iomodus_t;
iomodus_t iomodus[] =
{
/*Please fill in the RIGH Sensor Type and Variable Type from the SERIAL API
http://www.mysensors.org/download/
{presentation, set/req, description}
*/
// SENSOR VARIABLE DESCRIPTION STANDARD TYPE OFFSET
// sensorType variableType sensorDescription sensorVersion Int_to_HLP
//Relay An / Relay Aus__________________________
{ S_UNUSED, V_UNKNOWN, "DESCRIPTIONS", "MY_SystemPin", 0}, //D0 DO NOT TOUCH
{ S_UNUSED, V_UNKNOWN, "DESCRIPTIONS", "MY_SystemPin", 0}, //D1 DO NOT TOUCH
In der darauf folgenden Liste finde ich aber keine der Zahlen wieder und auch keine Stelle, wo ich sie einsetzen könnte?
Wie geht das?
2.Gibt es auch eine abgespeckte Form, in der z.B. nur 5 oder 10 Sensoren/Aktoren auf die gleich Art und Weise eingebunden werden, wobei aber dann die Speicherkapazität eines Uno oder Mini ausreicht?
3. Ich bin etwas ratlos. Hinweis: Im Homeduino-Projekt ist etwas ähnliches umgesetzt, oder?
Vielen Dank im Voraus
jopebe
-
Schreib per PN deine rufnummer… Per Telefon ist es einfacher
-
Sorry, wenn ich eine Zeit lang still war. Ich hatte andere Probleme.
Mit DOino will ich mich später wieder beschäftigen, wenn ich mehr Grundlagen habe.
Hier wird sehr viel im Rahmen der Diskussionen erklärt. Ich vermisse manchmal "HowTos".
Im MySensor-Net ist es ähnlich. Dort sind die Grundlagen sehr dürftig erklärt und man muss Aufpassen, welche Version mit welchem Sketch läuft. Hinzu kommt, dass man sogar noch auf die Boards-Versionen in IDE achten muss.
Ich habe z.B. mit der neuesten Version kein lauffähiges Gateaway zu Stande gebracht. Das muss man erst einmal heraus finden.
Apropo Gateaway: Ich kriege das Original-Ethernet-Gateaway in IO-Broker nicht dazu, den Node mit dem Original.Temperatur-Sketch von Hek an zu zeigen. Ich finde auch keine aktuelle Anleitung.
Wenn hier einer einen Tipp hat.
Bis demnächst, wenn ich mir wieder etwas erkämpft habe.
-
sehe ich genau so… die, die programme schreiben brauchen es nicht, und die es installieren wollen es nicht mit den anderen teilen
-
Hallo zusammen,
ich bin seit einiger Zeit mit dem Thema iobroker unterwegs, beschäftige mich aber auch mit den Arduinoboards, die ich gerne in iobroker anbinden möchte. Diese Projekt ist m.E. hier sehr vielversprechend, aber mir fehlt auch ein bisschen mehr beschreibung … diese vermisse ich übrigens auf der mysensor Seite auch .. zumindest die für Anfänger.
Den gesamten Code von MaxTox habe ich runtergeladen und habe Productiv_V1 auch compilieren und auf meinen Mega aufspielen können. Die Einstellungen an Gateway, IP, etc. habe ich gemacht und ich sehe im Log des IO-brockers auch, dass es zu einer Verbindung kommt. Aber ich sehe keine Nodes / Sensoren ... Die entsprechende Sensoren (Array im Sketch) habe ich angepasst .. aber es tut sich nichts.
Was ist noch zu tun ? Muss ich ggf. noch was von der Codeauftreilung der verschiedenen *.ino Dateien etwas in den Hauptsketch übernehmen ? Über etwas Hilfe / Anleitung / how to wäre ich dankbar ... wenn das Ganze wirklich funtioniert was es verspricht scheint es relativ genial zu sein ...
Vielleicht kann MaxTox für etwas Anfänger know how transfer sorgen ?
Gruß
Bönne