• Categories
  • Recent
  • Tags
  • Popular
  • Register
  • Login
  • Categories
  • Recent
  • Tags
  • Popular
  • Register
  • Login

MyController 1.2.0-SNAPSHOT version with major provider changes and supports for ack

Scheduled Pinned Locked Moved Announcements
snapshotackprovider
28 Posts 4 Posters 6.8k Views 3 Watching
Loading More Posts
  • 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.
  • J Offline
    jkandasa @Daniele
    last edited by 7 Feb 2018, 14:55

    @daniele

    By the way, I suggest adding something in this page to expose the ack flag status:

    You mean ack enabled or disabled? Or something else?

    D 1 Reply Last reply 7 Feb 2018, 15:40 Reply Quote 0
    • D Offline
      Daniele @jkandasa
      last edited by 7 Feb 2018, 15:37

      @jkandasa That's exactly what's happening, I missed that change. Thanks!

      1 Reply Last reply Reply Quote 0
      • D Offline
        Daniele @jkandasa
        last edited by 7 Feb 2018, 15:40

        @jkandasa Actually without going in edit you don't have anything telling you if this GW uses ack. Enabled / disabled would be enough for me.

        J 1 Reply Last reply 7 Feb 2018, 16:24 Reply Quote 1
        • J Offline
          jkandasa @Daniele
          last edited by 7 Feb 2018, 16:24

          @daniele said in MyController 1.2.0-SNAPSHOT version with major provider changes and supports for ack:

          @jkandasa Actually without going in edit you don't have anything telling you if this GW uses ack. Enabled / disabled would be enough for me.

          Changes updated in SNAPSHOT build.
          changes: https://github.com/mycontroller-org/mycontroller/commit/0e7467e230927b67d8f664476f83e2f509d69010

          1 Reply Last reply Reply Quote 0
          • W Offline
            wanvo
            last edited by 7 Feb 2018, 16:44

            When registering nodes with a sensor of the "Motion" type in the old version of MyController, I created two variables "V_ARMED" and "V_TRIPPED". In the new version, only a variable of the type "V_TRIPPED" is created
            0_1518021880973_2018-02-07_19-35-13.png
            I'm still looking error in my sketch

            J 1 Reply Last reply 7 Feb 2018, 17:14 Reply Quote 0
            • W Offline
              wanvo
              last edited by 7 Feb 2018, 17:11

              Earlier, when I changed the variable "Armed" on a sleeping node
              0_1518023364992_2018-02-07_20-03-05.png
              MyController waited until the node came out of sleep and sent it the right message.
              Now when I try to change this variable, I get the following warning
              0_1518023386576_2018-02-07_20-02-04.png

              J 1 Reply Last reply 7 Feb 2018, 17:16 Reply Quote 0
              • J Offline
                jkandasa @wanvo
                last edited by 7 Feb 2018, 17:14

                @wanvo

                When registering nodes with a sensor of the "Motion" type in the old version of MyController, I created two variables "V_ARMED" and "V_TRIPPED". In the new version, only a variable of the type "V_TRIPPED" is created

                I guess the problem will be your node sketch presentation code?

                W 1 Reply Last reply 7 Feb 2018, 17:21 Reply Quote 0
                • J Offline
                  jkandasa @wanvo
                  last edited by 7 Feb 2018, 17:16

                  @wanvo said in MyController 1.2.0-SNAPSHOT version with major provider changes and supports for ack:

                  MyController waited until the node came out of sleep and sent it the right message.
                  Now when I try to change this variable, I get the following warning

                  Yes, I changed this approach as follows,

                  If you change anything for a sleeping node, simply it will be sent to the queue. Will not update into inventory/graph etc., Once it sent successfully to the sleeping node, it will be updated.

                  I will change this message to user friendly, also I will try to display message queue for a sleeping node.

                  1 Reply Last reply Reply Quote 0
                  • W Offline
                    wanvo @jkandasa
                    last edited by 7 Feb 2018, 17:21

                    @jkandasa said in MyController 1.2.0-SNAPSHOT version with major provider changes and supports for ack:

                    I guess the problem will be your node sketch presentation code?
                    This my presentation code

                    void presentation()  {
                    	sendSketchInfo(SKETCH_NAME, SKETCH_VERSION,true);
                    	present(ID_S_MOTION, S_MOTION, "Motion Sensor",true);
                    	present(ID_TIME_SLEEP, S_CUSTOM, "Time sleep",true);
                    }
                    
                    void loop()     
                    {
                    	if(first_start){
                    		first_start = false;
                    		DEBUG_PRINTLN("Start");
                    		send(msg_S_MOTION.set(false),true);
                    		send(msg_S_MOTION_ARM.set(s_armed),true);
                    		//send(msg_TIME_SLEEP.set(time_sleep));
                    		//sendRSSIReport();
                    		//sendBatteryReport(); 
                    		request(ID_TIME_SLEEP, V_VAR5); //запрос значения time_sleep```
                    
                    
                    

                    This all sketch

                    /*******************************************************************
                     * DEFINE SECTION
                     ********************************************************************/
                    // Enable debug prints
                    //#define MY_DEBUG
                    #define SER_DEBUG
                    #ifdef SER_DEBUG
                    #define DEBUG_SERIAL(x) Serial.begin(x)
                    #define DEBUG_PRINT(x) Serial.print(x)
                    #define DEBUG_PRINTLN(x) Serial.println(x)
                    #else
                    #define DEBUG_SERIAL(x)
                    #define DEBUG_PRINT(x) 
                    #define DEBUG_PRINTLN(x) 
                    #endif
                    #define ONE_DAY_TIME 86400000 //24 часа
                    #define ONE_HOUR_TIME 3600000 //1 час
                    
                    #define MY_SMART_SLEEP_WAIT_DURATION_MS (30000ul) //время прослушки эфира до ухода в сон
                    #define TIME_SLEEP_INIT 60000
                    #define RSSI_REPORT_INTERVAL 180000
                    #define BATTERY_REPORT_INTERVAL 600000
                    //#define BATTERY_REPORT_INTERVAL ONE_DAY_TIME
                    //#define MY_INDICATION_HANDLER
                    
                    
                     // Enable and select radio type attached
                    //#define MY_RADIO_NRF24
                    #define MY_RADIO_RFM69
                    //#define MY_RADIO_RFM95
                    //#define MY_RADIO_NRF5_ESB
                    
                    
                    #ifdef MY_RADIO_NRF24
                    //#define SKETCH_NAME "nrf24 gate"
                    #define MY_RF24_PA_LEVEL (RF24_PA_MAX)
                    #define MY_RF24_CHANNEL (124)
                    //#define MY_RF24_CHANNEL (125)
                    #endif
                    #ifdef MY_RADIO_RFM69
                    //#define SKETCH_NAME "rfm69 gate"
                    #define MY_IS_RFM69HW
                    #define MY_RFM69_NEW_DRIVER   // ATC on RFM69 works only with the new driver (not compatible with old=default driver)
                    #define MY_RFM69_ATC_MODE_ENABLED
                    #define MY_RFM69_ATC_TARGET_RSSI_DBM (-70)  // target RSSI -70dBm
                    #define MY_RFM69_MAX_POWER_LEVEL_DBM (20)   // max. TX power 10dBm = 10mW
                    //#define MY_DEBUG_VERBOSE_RFM69
                    //#define MY_RFM69_ENABLE_ENCRYPTION
                    #endif
                    //**** Message signing settings
                    
                    /*#define MY_SIGNING_SOFT
                    #define MY_SIGNING_SOFT_RANDOMSEED_PIN 7
                    #define MY_SIGNING_REQUEST_SIGNATURES*/
                    
                    #ifdef  MY_RADIO_RFM95
                    //#define SKETCH_NAME "rfm95 gate"
                    #define MY_RFM95_FREQUENCY RFM95_434MHZ
                    //#define MY_TRANSPORT_STATE_TIMEOUT_MS  (3*1000ul)
                    //#define RFM95_RETRY_TIMEOUT_MS  (3000ul) 
                    //#define MY_RFM95_MODEM_CONFIGRUATION  RFM95_BW125CR48SF4096
                    #define MY_RFM95_MODEM_CONFIGRUATION RFM95_BW125CR45SF128
                    #define MY_RFM95_ATC_TARGET_RSSI_DBM (-70)  // target RSSI -70dBm
                    #define MY_RFM95_MAX_POWER_LEVEL_DBM (30)   // max. TX power 30dBm = 1000mW
                    #endif
                    
                    #ifdef MY_RADIO_NRF5_ESB
                    //#define SKETCH_NAME "nrf5 gate"
                    #endif
                    
                    
                    #if defined(MY_RADIO_RFM69) || defined(MY_RADIO_RFM95) 
                    #define MY_SIGNAL_REPORT_ENABLED
                    #define MY_DEFAULT_RX_LED_PIN LED_BUILTIN
                    #endif
                    
                    // Set baud rate to same as optibot
                    #define MY_BAUD_RATE 9600
                    
                    #define MY_NODE_ID 3
                    #define SKETCH_NAME "Motion Sensor"
                    #define SKETCH_VERSION "1.0"
                    
                    #define ID_S_MOTION		1   // Id of the sensor child
                    #define ID_TIME_SLEEP  	2
                    #define ID_RSSI		  	3
                    
                    #define PIN_S_MOTION  	3   // The digital input you attached your motion sensor.  (Only 2 and 3 generates interrupt!)
                    #define PIN_PWR   		4   // Pin for power sensors in sleep.
                    #define VCC_MIN 		2.7
                    #define VCC_MAX 		3.9
                    
                    #include <MySensors.h>
                    #include <Vcc.h>
                    Vcc vcc;
                    
                    /*
                    //Отправить уровень батареи после стольких циклов передач.Максимальный интервал отчета также будет равен этому количеству дней.
                    int BATTERY_REPORT_BY_IRT_CYCLE = 10; 
                    // "false" will make the first loop disregard high output from HV-505 (from start-up) and make a battery report instead.  
                    bool interruptReturn = false;
                    */
                    
                    
                    #if defined(MY_RADIO_RFM69) || defined(MY_RADIO_RFM95)
                    MyMessage msg_RSSI(ID_RSSI,V_VAR5);//Создаем контейнер для измерителя RSSI
                    #endif
                    MyMessage msg_S_MOTION(ID_S_MOTION, V_TRIPPED);// Создаем контейнер для датчика
                    MyMessage msg_S_MOTION_ARM(ID_S_MOTION, V_ARMED);// Создаем контейнер для датчика
                    MyMessage msg_TIME_SLEEP(ID_TIME_SLEEP, V_VAR5);
                    
                    
                    
                    bool first_start;
                    bool s_armed; //режим работы сенсора - armed, bypassed
                    unsigned long time_sleep;
                    unsigned long lastSendRSSI = 0;
                    unsigned long lastSendBattery = 0;
                    unsigned long millis_in_sleep = 0;
                    unsigned long millis_total = 0;
                    int sleep_returt;
                    
                    
                    void setup()  
                    {  
                    	DEBUG_PRINTLN("Setup");
                    	first_start = true;
                    	s_armed = true;
                    	time_sleep = TIME_SLEEP_INIT;
                    	pinMode(PIN_PWR, OUTPUT);//Пин питающий датчики
                    	digitalWrite(PIN_PWR, HIGH);
                    	pinMode(PIN_S_MOTION, INPUT);      // Вход датчика
                    	//digitalWrite(PIN_S_DOOR, HIGH);  //подтяжка к плюсу для отладки
                    }
                    
                    void presentation()  {
                    	sendSketchInfo(SKETCH_NAME, SKETCH_VERSION,true);
                    	present(ID_S_MOTION, S_MOTION, "Motion Sensor",true);
                    	present(ID_TIME_SLEEP, S_CUSTOM, "Time sleep",true);
                    }
                    
                    void loop()     
                    {
                    	if(first_start){
                    		first_start = false;
                    		DEBUG_PRINTLN("Start");
                    		send(msg_S_MOTION.set(false),true);
                    		send(msg_S_MOTION_ARM.set(s_armed),true);
                    		//send(msg_TIME_SLEEP.set(time_sleep));
                    		//sendRSSIReport();
                    		//sendBatteryReport(); 
                    		request(ID_TIME_SLEEP, V_VAR5); //запрос значения time_sleep
                    
                    	}	
                    	millis_total = millis() + millis_in_sleep + MY_SMART_SLEEP_WAIT_DURATION_MS;
                    #if defined(MY_RADIO_RFM69) || defined(MY_RADIO_RFM95)
                    	if (millis_total - lastSendRSSI > RSSI_REPORT_INTERVAL) {
                    		lastSendRSSI = millis_total;
                    		sendRSSIReport();
                    	}
                    #endif
                    	if (millis_total - lastSendBattery > BATTERY_REPORT_INTERVAL) {
                    		lastSendBattery = millis_total;
                    		sendBatteryReport(); 
                    	}
                    
                    	//sendHeartbeat();
                    	sleep_returt = sleep(digitalPinToInterrupt(PIN_S_MOTION),CHANGE,time_sleep,true);
                    	if(sleep_returt != MY_WAKE_UP_BY_TIMER){ // проснулись по тревоге
                    		send(msg_S_MOTION.set(true),true);
                    		DEBUG_PRINTLN("ТРЕВОГА!!!");
                    	}
                    	else{
                    		millis_in_sleep = millis_in_sleep + time_sleep;
                    	}
                    	DEBUG_PRINT("ts = ");DEBUG_PRINTLN(time_sleep);
                    }
                    
                    /*********************FUNCTIONS**********************************/
                    //функция обработки входящих сообщений
                    void receive(const MyMessage &message) {
                        if (message.sensor == ID_S_MOTION) {		//проверяем, что именно этому сенсору
                    		if (message.type == V_ARMED) {		//проверяем тип переменной
                    			s_armed = message.getBool();	//получаем значение V_ARMED
                    			DEBUG_PRINT("V_ARMED received: ");DEBUG_PRINTLN(s_armed);
                    			if(s_armed){
                    				DEBUG_PRINTLN("Power On");
                    				digitalWrite(PIN_PWR, HIGH); //включаем питание
                    				//digitalWrite(PIN_PWR, LOW); //для отладки
                    			}
                    			else{
                    				DEBUG_PRINTLN("Power Off");
                    				digitalWrite(PIN_PWR, LOW); //отключаем питание	
                    				//digitalWrite(PIN_PWR, HIGH); //для отладки
                    			}
                            }
                        }
                    	else if (message.sensor == ID_TIME_SLEEP){
                    		if (message.type == V_VAR5) {
                    			time_sleep = message.getULong(); //получаем значение sleep_time
                    			DEBUG_PRINT("time_sleep = ");DEBUG_PRINTLN(time_sleep);
                    		}
                    	}
                    }
                    //функция отправки RSSI если используем RFM69 радио
                    
                    #if defined(MY_RADIO_RFM69) || defined(MY_RADIO_RFM95)
                    void sendRSSIReport() 
                    {
                    	int16_t rssiVal;
                    	char rssiStr[14];
                        rssiVal = transportGetSignalReport(SR_RX_RSSI); 
                    //    snprintf(rssiStr,10,"rssi: %d%",rssiVal,"dBm");
                    	sprintf (rssiStr, "rssi:%d dBm", rssiVal);
                        send(msg_RSSI.set(rssiStr),true);
                    	DEBUG_PRINTLN(rssiStr);
                    	//DEBUG_PRINT("TxRssi = ");DEBUG_PRINTLN(transportGetSignalReport(SR_TX_RSSI));
                    }
                    #endif
                    //функция отправки отчета состояния батареи
                    void sendBatteryReport() 
                    {
                      float p = vcc.Read_Perc(VCC_MIN, VCC_MAX, true);
                      int batteryPcnt = static_cast<int>(p);
                      sendBatteryLevel(batteryPcnt,true);
                      DEBUG_PRINT("Battery is: ");DEBUG_PRINTLN(batteryPcnt);
                    }
                    

                    I can not find an error yet. I'll look further.

                    J 1 Reply Last reply 7 Feb 2018, 17:28 Reply Quote 0
                    • J Offline
                      jkandasa @wanvo
                      last edited by jkandasa 2 Jul 2018, 22:59 7 Feb 2018, 17:28

                      @wanvo Is this sketch running first time with MyController? Do you have this sketch with the previous version? Did it work with old version?

                      Can you add some minimal delay between,

                      send(msg_S_MOTION.set(false),true);
                      wait(500); // value in milliseconds
                      send(msg_S_MOTION_ARM.set(s_armed),true);
                      
                      W 1 Reply Last reply 7 Feb 2018, 17:29 Reply Quote 0
                      • W Offline
                        wanvo @jkandasa
                        last edited by 7 Feb 2018, 17:29

                        @jkandasa
                        Thanx! I'll try.

                        1 Reply Last reply Reply Quote 0
                        • D Offline
                          Daniele
                          last edited by 8 Feb 2018, 09:52

                          I noticed that when I reboot a node, the sensors names are overwritten with the sketch version (and since I didn't change the sketch and it was not happening in 1.1.0, so I guess this is not an error in the sketch):

                          0_1518083468846_23c5cf2f-372f-4333-8d07-f5c5b621c17f-image.png

                          J 1 Reply Last reply 8 Feb 2018, 10:43 Reply Quote 0
                          • J Offline
                            jkandasa @Daniele
                            last edited by 8 Feb 2018, 10:43

                            @daniele version 1.1.0 also designed the same.
                            When it receives node/sensor name will be replaced with the local(MyController database) one.

                            1 Reply Last reply Reply Quote 0
                            • D Offline
                              Daniele
                              last edited by 8 Feb 2018, 10:47

                              I'm not sure I understood.
                              I had sensor name set up in mycontroller, and not in the Arduino sketch (btw, I don't know a way to set it up in the sketch).
                              But the name in mycontroller has been overwritten with "1.2", which is the sketch version.

                              J 1 Reply Last reply 8 Feb 2018, 11:58 Reply Quote 0
                              • J Offline
                                jkandasa @Daniele
                                last edited by 8 Feb 2018, 11:58

                                @daniele Via sketch you can assign as follows,

                                void presentation() {
                                  sendSketchInfo("NODE_NAME", "NODE_VERSION");
                                  present(SEN_ID, S_CUSTOM, "SENSOR_NAME");
                                }
                                
                                1 Reply Last reply Reply Quote 0
                                • T Offline
                                  Tag MOD
                                  last edited by Tag 2 Nov 2018, 00:07 10 Feb 2018, 18:37

                                  I tested with the ack, it seems to work okay, however i ran into 1 issue.
                                  Once ack is enabled on the serial gateway, the gateway is connected okay, but...
                                  if i disable ack, the serial gateway refuses to connect...

                                  Serial gateway is used, with the mysgw software, radio connected to the gpio header

                                  J 1 Reply Last reply 11 Feb 2018, 04:53 Reply Quote 1
                                  • J Offline
                                    jkandasa @Tag
                                    last edited by jkandasa 2 Nov 2018, 10:42 11 Feb 2018, 04:53

                                    @tag Thank you, I will check this issue and fix it. Have to try to reload the gateway to this issue?

                                    UPDATE: Added some changes to avoid this issue. Changes available on SNAPSHOT version.

                                    https://github.com/mycontroller-org/mycontroller/commit/f557310e831d54cdaa76be62bff62a9ce6788a67

                                    T 1 Reply Last reply 11 Feb 2018, 10:06 Reply Quote 0
                                    • T Offline
                                      Tag MOD @jkandasa
                                      last edited by 11 Feb 2018, 10:06

                                      @jkandasa

                                      Cool!, Thx! will give it a try on the snapshot version.
                                      :thumbs_up:

                                      1 Reply Last reply Reply Quote 1
                                      20 out of 28
                                      • First post
                                        20/28
                                        Last post

                                      1

                                      Online

                                      588

                                      Users

                                      529

                                      Topics

                                      3.4k

                                      Posts
                                      Copyright © 2015-2025 MyController.org | Contributors | Localization