Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. My Project
  3. ioBroker = Home automation/Node ALL in ONE/ for noobs https +Let's encrypt/MQTT/Node Red/

ioBroker = Home automation/Node ALL in ONE/ for noobs https +Let's encrypt/MQTT/Node Red/

Scheduled Pinned Locked Moved My Project
13 Posts 6 Posters 9.9k Views 8 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • maxtoxM Offline
    maxtoxM Offline
    maxtox
    wrote on last edited by maxtox
    #1

    Hello everybody,
    @michai: maybe you jump in and we make a PERFECT solution for everybody!?

    started this prject 2 weeks ago and didn't have time to post it yet. Additionaly came the issue with payload "clearing" which MOD's here resolved in about 24h !!! PERFECT!

    Ma scope was:

    1. "a" Node which i can connect what i want to and with a simple and smalest modifications, can run EVERYTHING! :-)
    2. it should be cheap!
    3. it should be easy so even me as noob can understand that
      4.it should be a stndard protocol, which can be used with all of teh adapters
    4. 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:

    1. do not mess with child ID's and PIN's ->Use something easy
    2. show to the server what you have (present) and show what it is!!!! Not just Child ID = 13 -> Send a discription to Server
    3. do it universal, so everybody can use it !!!
    4. Give it to the comunity to improve it !!!

    My steps:

    1. 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_UNUSED,V_UNKNOWN,"RX","MY_SystemPin" },//D0 DO NOT TOUCH
      { S_UNUSED,V_UNKNOWN,"TX","MY_SystemPin" },//D1 DO NOT TOUCH
     ...
      { S_DIMMER,V_PERCENTAGE,"Test PWM","PWM" }, //D7 : PWM?         
      { S_BINARY,V_STATUS,"RELAY D8","RELAY_1S" }, //D8 : PWM?                    
      ...
      { S_DOOR,V_ARMED,"Digital Ein","Schalter" }, //D11 : PWM?     
      { S_UNUSED,V_UNKNOWN,"free pin","tbd" }, //D12 : PWM?     
      { S_DIMMER,V_PERCENTAGE,"Test PWM","PWM" }, //D13 : PWM?     
     ...
      { S_UNUSED,V_UNKNOWN,"LEDS_BLINKING_FEATURE","MY_SystemPin" }, //D16/TX2 :   =ESP8266;
     ... 
      .
    };
    

    you can put all you attached sensors with S-Types and S_Variables

    1. USER does not have to do enything!!!

    present everything (all connected or IF YOU WANT unconnected pins too).
    whole vpid presentation! so just easy and short " i think"

    void presentation()
    {
      // Send the sketch version information to the gateway and Controller
      sendSketchInfo("MQTTduino by JR", "1.3");
      //all Ports
      for (int i = 0; i<iomodus_count; i++)
      { 
        MyMessage msg(i, iomodus[i].variableType);
    //    Serial.println(iomodus[i].sensorType);
    //    Serial.println(i);
        if (iomodus[i].description != "free pin") 
        {
          present(i, iomodus[i].sensorType, iomodus[i].description, false);
          //Send a et message which shows in controller where Warnings will come
          send(msg.setType(77).set("for Warnings"), false);
        }
      }
    }
    
    1. Setup (just look in samples of MYsensors and you will see if you need it or not
    void setup()
    {
    
      for (int i = 0; i<iomodus_count; i++) //search All Sensor system Ports and set them in the RIGHT way
      {
    
        while (iomodus[i].sensorVersion == "MY_SystemPin") { i++; }  //do not waste time to check MY_SystemPin's
        MyMessage msg(i, iomodus[i].variableType);
    
    //********************************Setup MAX31855*************************************** 
        if ((iomodus[i].description == "MAX31855") && (iomodus[i].sensorVersion == "CL_Ktype"))
        {
          clPin = i;
        }
        if ((iomodus[i].description == "MAX31855") && (iomodus[i].sensorVersion == "SO_Ktype"))
        {
          doPin = i;
        }
    
     //********************************Setup RELAY***************************************     
        if ((iomodus[i].sensorType == S_BINARY) && (iomodus[i].sensorVersion == "RELAY"))
        {
    
          pinMode(i, OUTPUT);
          // Set RELAY to last known state (using eeprom storage) 
          digitalWrite(i, loadState(i) ? RELAY_ON : RELAY_OFF);
    //      send(msg.set(relstate ? RELAY_ON : RELAY_OFF), false);
          send(msg.setSensor(i).set(loadState(i)==HIGH ? 1 : 0),false);
        }
        //********************************Setup FLOWmeter***************************************   
     
        //f=4.8* q( l/min) 450 Impulse/Liter,
        if ((iomodus[i].sensorType == S_WATER) && (iomodus[i].sensorVersion == "IMPULSEcount"))
        {
          if ((PULSEdivider[0] > 0) && (i == 2)) 
          {pinMode(2, INPUT_PULLUP); attachInterrupt(0, ISR_0, FALLING);}
          if ((PULSEdivider[1] > 0) && (i == 3)) 
          {pinMode(3, INPUT_PULLUP); attachInterrupt(1, ISR_1, FALLING);} 
          if ((PULSEdivider[2] > 0) && (i == 21)) 
          {pinMode(21, INPUT_PULLUP); attachInterrupt(2, ISR_2, FALLING);}
          if ((PULSEdivider[3] > 0) && (i == 20)) 
          {pinMode(20, INPUT_PULLUP); attachInterrupt(3, ISR_3, FALLING);}
          if ((PULSEdivider[4] > 0) && (i == 19)) 
          {pinMode(19, INPUT_PULLUP); attachInterrupt(4, ISR_4, FALLING);}
          if ((PULSEdivider[5] > 0) && (i == 18)) 
          {pinMode(18, INPUT_PULLUP); attachInterrupt(5, ISR_5, FALLING);}
        }
        
        //********************************Setup ONEWire***************************************
        if ((iomodus[i].sensorType == S_TEMP) && (iomodus[i].sensorVersion == "DS18B20"))
        { 
          DeviceAddress deviceAddress;
          ds18x20[i].setPin(i);
          sensor[i].setOneWire(&ds18x20[i]);
          // Startup up the OneWire library
          sensor[i].begin();
          if (sensor[i].getAddress(deviceAddress, 0)) sensor[i].setResolution(deviceAddress, 9);
    
        }
        //********************************Setup ANALOG INPUTS for READING VOLTAGE***************************************      
         if ((iomodus[i].sensorType == S_MULTIMETER) && (iomodus[i].sensorVersion == "VOLTAGE") && (i >= 54) && (i <= 69))//handling NTC Sensor
         {pinMode(55, INPUT_PULLUP);}
        
        //********************************Setup NEXT*************************************** 
       
      }
    
    }
    //*********************************************************************************************
    
    
    1. LOOP to check all connected (or if you want ALL ) pins i something happened (value changed)
        //*********************************************************************************************
        // NTC (Analog ONLY) INPUTS ON THE BOARD 
    
        if ((iomodus[i].sensorType == S_TEMP) && (iomodus[i].sensorVersion == "NTC") && (i >= 54) && (i <= 69))//handling NTC Sensor
        {
          if (millis() > next_Time[i])
          {
            next_Time[i] = next_Time[i] + 10000;  //Update Value every 10s 
            Rt = Rv / ((1024.0 / analogRead(i)) - 1.0);
            float tempNTC = (B_wert * Tn / (B_wert + (Tn * log(Rt / Rn)))) - Tn + 25.0 + Temp_offset[i];// Here Offset if needed
            
            if ((tempNTC > (last_float_value[i] + delta_ntc)) || (tempNTC < (last_float_value[i] - delta_ntc))
              || complete_loop)
            {
              //MyMessage msg(i, iomodus[i].variableType);
              Serial.println("tempNTC");
              Serial.println(i);
              Serial.println(tempNTC);
              send(msg.setSensor(i).set(tempNTC, 2), false);
    
              last_float_value[i] = tempNTC;
    
            }
          }
        }
    

    or next example

    //*********************************************************************************************
        // ONEWire with DALLAS
          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(500);
          float temperature=sensor[i].getTempCByIndex(0);
        Serial.print("Temperature for the sensor ");
        Serial.print(i);
        Serial.print(" is ");
        Serial.println(temperature);
          
          send(msg.setSensor(i).set(temperature, 2),false);
          last_float_value[i]=temperature;
            }}
    

    will post whole sketch at github if somebody wants!

    Done!

    Arduino Mega 2560 with iobroker.net (MQTT, node-red, etc..)

    1 Reply Last reply
    0
    • P Offline
      P Offline
      punter9
      wrote on last edited by punter9
      #2

      you know call me crazy but I have been thinking it is a bit surprising a simple windows/linux/etc GUI has not been made for mysensors. I know I have enjoyed learning to code but it would be nice at times to have a drop down

      select board type
      select devices (dht22, relay,etc)
      select pin device is on
      add option for repeater
      add option for sleep
      add option for wake every xxx minutes and take reading
      hit send

      1 Reply Last reply
      0
      • crankyC Offline
        crankyC Offline
        cranky
        wrote on last edited by
        #3

        I'm honestly torn on making Windows/Linux programs. I certainly get the idea why you would want something like that, but I'd much rather have an HTML5 website that does that instead of an x86 program...

        Web browsers are on everything, whereas the idea of fat binaries is still a very rare one.

        My underlying works revolve in making web APIs, so I can create websites and scripts that can do "stuff" without me even hitting buttons.

        For example, I'd like to have an IoT doorbell. Simple. When it triggers, a flow interrogates if there is anybody in the house. If yes, ring the doorbell. Also, when doorbell is triggered, take a photo from the door and run it through a facial recognizer and send to me.

        ... And that's just a doorbell.

        1 Reply Last reply
        1
        • P Offline
          P Offline
          pryning
          wrote on last edited by
          #4

          Hi,
          I have plans to do some of the same.
          Making some kind of default sensor-node.
          For me, i expect it to have the following attached to all my nodes:

          • Motion sensor
          • Temperature sensor
          • Relay
          • Push/door/window button

          And some other sensors individually as needed.

          I also has in mind to connect most of these to A0-A5 pins in order to have most of the 'usual' digital pins available for more sensors.

          And to set the sensor ID (not child ID) in the sketch and number my boxes with the same ID.
          Then i know which sketch is running at which sensor node.

          And as a last comment, i would create the sketch, so that a sensor only would be processed if the corresponding pin-variable was set.
          That way you could comment out the ones not attached .

          Hope you can use my input and looking forward to hear how you progress.

          Best Regards

          Rene

          1 Reply Last reply
          0
          • maxtoxM Offline
            maxtoxM Offline
            maxtox
            wrote on last edited by
            #5

            here is the last version of my node... it has everything you "need"...

            http://forum.iobroker.net/viewtopic.php?f=35&t=2084

            Will carry on, when the Dev has finished ioBroker adapter for mysesnosrs...

            Arduino Mega 2560 with iobroker.net (MQTT, node-red, etc..)

            1 Reply Last reply
            0
            • msevM Offline
              msevM Offline
              msev
              wrote on last edited by
              #6

              This is great! I love node-red its so easy to use even for non-programmers.

              Maxtox do you maybe know would it be possible to have esp8266 sensor nodes and a esp8266 gateway (so that the protocol would go via wifi). That would be really nice and cheap, and as a controller could be a raspberry pi.

              1 Reply Last reply
              0
              • maxtoxM Offline
                maxtoxM Offline
                maxtox
                wrote on last edited by maxtox
                #7

                [UPDATE]

                It runns PRODUCTIVE incl Heatpump, Solar, Wood stove etc..

                I devidesd INO apart, so it is easyer to read...

                ![http://up.picr.de/25928787et.jpg](image url)

                Included SERIAL1 , SERIAL2, SERIAL3 ...

                0_1466331812830_aufgeteilt.png

                0_1466331943500_serial.png

                ![http://up.picr.de/25928809tr.png](image url)

                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:
                

                0_1466331883576_sensoren beschreiben.png

                ![http://up.picr.de/25928677ol.jpg](image url)

                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<iomodus_count; i++) //search All Sensor system Ports and set them in the RIGHT way
                    {
                		while (iomodus[i].sensorVersion == "MY_SystemPin") { i++; }  //do not waste time to check MY_SystemPin's
                		MyMessage msg(i, iomodus[i].variableType);
                //*************************************************************************************
                //*************************************************************************************
                
                //********************************Setup RELAY***************************************
                		if (iomodus[i].sensorType == S_BINARY)
                        {
                #ifdef RELAY
                			if (iomodus[i].sensorVersion == "RELAY")
                			{
                				pinMode(i, OUTPUT);
                				// Set RELAY to last known state (using eeprom storage)
                				digitalWrite(i, loadState(i) ? RELAY_ON : RELAY_OFF);
                				send(msg.setSensor(i).set(loadState(i)==HIGH ? 1 : 0),false);
                			}
                #endif // RELAY
                
                //********************************Setup BUTTON***************************************
                #ifdef BUTTON
                			if (iomodus[i].sensorVersion == "BUTTON")
                			{
                				pinMode(i, INPUT_PULLUP);
                				// Set RELAY to last known state (using eeprom storage)
                				digitalWrite(i, loadState(i) ? 1 : 0);
                				send(msg.setSensor(i).set(loadState(i)==HIGH ? 1 : 0),false);
                			}
                #endif // BUTTON
                		}
                //********************************Setup 0-10V Output***************************************
                #ifdef PWM
                		if (iomodus[i].sensorType == S_DIMMER) 
                        {
                			pinMode(i, OUTPUT);
                			// Set RELAY to last known state (using eeprom storage)
                		}
                		
                		....
                

                or next example

                
                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!
                Libraries here(modified 16.06.2016):

                0_1466331530661_MySensors.zip

                All sketches:
                0_1466331582101_PRODUKTIV_V1.zip

                Arduino Mega 2560 with iobroker.net (MQTT, node-red, etc..)

                1 Reply Last reply
                0
                • maxtoxM Offline
                  maxtoxM Offline
                  maxtox
                  wrote on last edited by
                  #8

                  and here a video how to use MySensors with ioBroker to CONTROL and get the Information from EVERYWHERE:

                  https://www.youtube.com/watch?v=V3cpQ6ZSp2A

                  Arduino Mega 2560 with iobroker.net (MQTT, node-red, etc..)

                  1 Reply Last reply
                  0
                  • maxtoxM Offline
                    maxtoxM Offline
                    maxtox
                    wrote on last edited by
                    #9

                    couple screenshots from the WEB interface ioBroker.web

                    0_1466332638261_2016-06-19 12_35_31-ioBroker - AUTOMATION OF EVERYTHING - Arduino, FHEM, Homatic, Raspi - YouTube.png

                    0_1466332645272_2016-06-19 12_36_17-ioBroker - AUTOMATION OF EVERYTHING - Arduino, FHEM, Homatic, Raspi - YouTube.png

                    Arduino Mega 2560 with iobroker.net (MQTT, node-red, etc..)

                    1 Reply Last reply
                    1
                    • maxtoxM Offline
                      maxtoxM Offline
                      maxtox
                      wrote on last edited by maxtox
                      #10

                      and screenshots from EDIT page of iobroker.flot:

                      0_1466343853815_flot edit.png

                      and picture of the Page when you click "OPEN":

                      0_1466343861824_flot.png

                      or if you choose AREA you'll see:

                      0_1466344029414_area.png

                      Arduino Mega 2560 with iobroker.net (MQTT, node-red, etc..)

                      1 Reply Last reply
                      0
                      • Arnav AryaA Offline
                        Arnav AryaA Offline
                        Arnav Arya
                        wrote on last edited by
                        #11

                        *you know call me crazy but I have been thinking it is a bit surprising a simple windows/linux/etc GUI has not been made for mysensors. I know I have enjoyed learning to code but it would be nice at times to have a drop down

                        select board type
                        select devices (dht22, relay,etc)
                        select pin device is on
                        add option for repeater
                        add option for sleep
                        add option for wake every xxx minutes and take reading
                        hit send*

                        Node-RED

                        1 Reply Last reply
                        0
                        • maxtoxM Offline
                          maxtoxM Offline
                          maxtox
                          wrote on last edited by maxtox
                          #12

                          Now i made a video to explain how to use TELEGRAM with iobroker and mysensors

                          look here

                          https://www.youtube.com/watch?v=iVUI-sJKU_c

                          Arduino Mega 2560 with iobroker.net (MQTT, node-red, etc..)

                          1 Reply Last reply
                          1
                          • maxtoxM Offline
                            maxtoxM Offline
                            maxtox
                            wrote on last edited by
                            #13

                            Hello colleagues,

                            i did not forget you ... just a new video showing how to get Let's encrypt certificate in "seconds" without coding etc.. just pressing couple buttons.

                            Its possible with ioBroker, look here:

                            https://www.youtube.com/watch?v=H9InPtesDOU

                            Arduino Mega 2560 with iobroker.net (MQTT, node-red, etc..)

                            1 Reply Last reply
                            0
                            Reply
                            • Reply as topic
                            Log in to reply
                            • Oldest to Newest
                            • Newest to Oldest
                            • Most Votes


                            15

                            Online

                            11.7k

                            Users

                            11.2k

                            Topics

                            113.0k

                            Posts


                            Copyright 2019 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                            • Login

                            • Don't have an account? Register

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • MySensors
                            • OpenHardware.io
                            • Categories
                            • Recent
                            • Tags
                            • Popular