💬 Building a Raspberry Pi Gateway
-
Dec 27 21:12:27 domoticz kernel: [ 2.675918] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null) Dec 27 21:12:27 domoticz kernel: [ 3.109172] gpiomem-bcm2835 3f200000.gpiomem: Initialised: Registers at 0x3f200000 Dec 27 21:12:27 domoticz kernel: [ 3.407342] brcmfmac: F1 signature read @0x18000000=0x1541a9a6 Dec 27 21:12:27 domoticz kernel: [ 3.413382] usbcore: registered new interface driver brcmfmac Dec 27 21:12:27 domoticz kernel: [ 3.601930] brcmfmac: Firmware version = wl0: Aug 7 2017 00:46:29 version 7.45.41.46 (r666254 CY) FWID 01-f8a78378 Dec 27 21:12:27 domoticz kernel: [ 3.602685] brcmfmac: brcmf_c_preinit_dcmds: CLM version = API: 12.2 Data: 7.11.15 Compiler: 1.24.2 ClmImport: 1.24.1 Creation: 2014-05-26 10:53:55 Inc Data: 9.10.41 Inc Compiler: 1.29.4 Inc ClmImport: 1.36.3 Creation: 2017-08-07 00:37:47 Dec 27 21:12:27 domoticz avahi-daemon[327]: Successfully called chroot(). Dec 27 21:12:27 domoticz avahi-daemon[327]: Successfully dropped remaining capabilities. Dec 27 21:12:27 domoticz avahi-daemon[327]: No service file found in /etc/avahi/services. Dec 27 21:12:27 domoticz systemd[1]: Started Avahi mDNS/DNS-SD Stack. Dec 27 21:12:27 domoticz systemd[1]: Reached target System Time Synchronized. Dec 27 21:12:27 domoticz avahi-daemon[327]: Network interface enumeration completed. Dec 27 21:12:27 domoticz avahi-daemon[327]: Server startup complete. Host name is domoticz.local. Local service cookie is 87145466. Dec 27 21:12:27 domoticz systemd[1]: apt-daily.timer: Adding 5h 31min 57.980339s random time. Dec 27 21:12:27 domoticz systemd[1]: Started Daily apt download activities. Dec 27 21:12:27 domoticz systemd[1]: apt-daily-upgrade.timer: Adding 2min 40.737204s random time. Dec 27 21:12:27 domoticz systemd[1]: Started Daily apt upgrade and clean activities. Dec 27 21:12:27 domoticz systemd[1]: Reached target Timers. Dec 27 21:12:27 domoticz systemd[1]: Started triggerhappy global hotkey daemon. Dec 27 21:12:27 domoticz systemd[1]: Started System Logging Service. Dec 27 21:12:27 domoticz systemd[1]: Started Save/Restore Sound Card State. Dec 27 21:12:27 domoticz dhcpcd[339]: wlan0: starting wpa_supplicant Dec 27 21:12:27 domoticz dhcpcd-run-hooks[374]: wlan0: starting wpa_supplicant Dec 27 21:12:27 domoticz systemd[1]: Started Login Service. Dec 27 21:12:27 domoticz dphys-swapfile[329]: Starting dphys-swapfile swapfile setup ... Dec 27 21:12:27 domoticz raspi-config[330]: Checking if shift key is held down:Error opening '/dev/input/event*': No such file or directory Dec 27 21:12:27 domoticz raspi-config[330]: No. Switching to ondemand scaling governor. Dec 27 21:12:27 domoticz systemd[1]: Started LSB: Switch to ondemand cpu governor (unless shift key is pressed). Dec 27 21:12:27 domoticz OWFS[375]: DEFAULT: owlib.c:(208) Cannot open USB bus master Dec 27 21:12:27 domoticz OWFS[375]: DEFAULT: owlib.c:(52) No valid 1-wire buses found Dec 27 21:12:27 domoticz systemd[1]: start1wire.service: Control process exited, code=exited status=1 Dec 27 21:12:27 domoticz systemd[1]: Failed to start LSB: Start OWFS at boot time. Dec 27 21:12:27 domoticz systemd[1]: start1wire.service: Unit entered failed state. Dec 27 21:12:27 domoticz systemd[1]: start1wire.service: Failed with result 'exit-code'. Dec 27 21:12:27 domoticz dphys-swapfile[329]: want /var/swap=100MByte, checking existing: keeping it Dec 27 21:12:27 domoticz kernel: [ 4.979888] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready Dec 27 21:12:27 domoticz kernel: [ 4.979897] brcmfmac: power management disabled Dec 27 21:12:27 domoticz kernel: [ 4.987898] Adding 102396k swap on /var/swap. Priority:-1 extents:1 across:102396k SSFS Dec 27 21:12:27 domoticz dphys-swapfile[329]: done. Dec 27 21:12:27 domoticz systemd[1]: Started LSB: Autogenerate and use a swap file. Dec 27 21:12:27 domoticz dhcpcd[339]: eth0: waiting for carrier Dec 27 21:12:27 domoticz dhcpcd[339]: wlan0: waiting for carrier Dec 27 21:12:27 domoticz dhcpcd[339]: wlan0: carrier acquired Dec 27 21:12:27 domoticz kernel: [ 5.321930] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup Dec 27 21:12:27 domoticz kernel: [ 5.322223] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready Dec 27 21:12:27 domoticz dhcpcd[339]: DUID 00:01:00:01:21:b0:d9:d9:b8:27:eb:81:d4:7f Dec 27 21:12:27 domoticz dhcpcd[339]: wlan0: IAID eb:81:d4:7f Dec 27 21:12:27 domoticz dhcpcd[339]: wlan0: adding address fe80::6bd:3cc7:2b64:c842 Dec 27 21:12:27 domoticz dhcpcd[339]: wlan0: carrier lost Dec 27 21:12:28 domoticz dhcpcd[339]: wlan0: deleting address fe80::6bd:3cc7:2b64:c842 Dec 27 21:12:29 domoticz dhcpcd[339]: eth0: carrier acquired Dec 27 21:12:29 domoticz kernel: [ 6.725223] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready Dec 27 21:12:29 domoticz kernel: [ 6.726375] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1 Dec 27 21:12:29 domoticz dhcpcd[339]: eth0: IAID eb:d4:81:2a Dec 27 21:12:29 domoticz dhcpcd[339]: eth0: adding address fe80::7a80:6e8f:27f0:4005 Dec 27 21:12:29 domoticz dhcpcd[339]: eth0: probing address 192.168.13.5/24 Dec 27 21:12:29 domoticz dhcpcd[339]: eth0: soliciting an IPv6 router Dec 27 21:12:30 domoticz avahi-daemon[327]: Joining mDNS multicast group on interface eth0.IPv6 with address fe80::7a80:6e8f:27f0:4005. Dec 27 21:12:30 domoticz avahi-daemon[327]: New relevant interface eth0.IPv6 for mDNS. Dec 27 21:12:30 domoticz avahi-daemon[327]: Registering new address record for fe80::7a80:6e8f:27f0:4005 on eth0.*. Dec 27 21:12:34 domoticz dhcpcd[339]: eth0: using static address 192.168.13.5/24 Dec 27 21:12:34 domoticz dhcpcd[339]: eth0: adding route to 192.168.13.0/24 Dec 27 21:12:34 domoticz dhcpcd[339]: eth0: adding default route via 192.168.13.1 Dec 27 21:12:34 domoticz avahi-daemon[327]: Joining mDNS multicast group on interface eth0.IPv4 with address 192.168.13.5. Dec 27 21:12:34 domoticz avahi-daemon[327]: New relevant interface eth0.IPv4 for mDNS. Dec 27 21:12:34 domoticz avahi-daemon[327]: Registering new address record for 192.168.13.5 on eth0.IPv4. Dec 27 21:12:34 domoticz dhcpcd[339]: forked to background, child pid 470 Dec 27 21:12:34 domoticz systemd[1]: Started dhcpcd on all interfaces. Dec 27 21:12:34 domoticz systemd[1]: Reached target Network. Dec 27 21:12:34 domoticz systemd[1]: Reached target Network is Online. Dec 27 21:12:34 domoticz systemd[1]: Starting LSB: Home Automation System... Dec 27 21:12:34 domoticz systemd[1]: Starting /etc/rc.local Compatibility... Dec 27 21:12:34 domoticz systemd[1]: Starting Permit User Sessions... Dec 27 21:12:34 domoticz systemd[1]: Starting OpenBSD Secure Shell server... Dec 27 21:12:34 domoticz systemd[1]: Started /etc/rc.local Compatibility. Dec 27 21:12:34 domoticz systemd[1]: Started Permit User Sessions. Dec 27 21:12:34 domoticz systemd[1]: Starting Hold until boot process finishes up... Dec 27 21:12:34 domoticz systemd[1]: Starting Terminate Plymouth Boot Screen... Dec 27 21:12:34 domoticz systemd[1]: Received SIGRTMIN+21 from PID 190 (plymouthd). Dec 27 21:12:34 domoticz systemd[1]: Started Hold until boot process finishes up. Dec 27 21:12:34 domoticz systemd[1]: Started Terminate Plymouth Boot Screen. Dec 27 21:12:34 domoticz systemd[1]: Started Getty on tty1. Dec 27 21:12:34 domoticz systemd[1]: Reached target Login Prompts. Dec 27 21:12:34 domoticz systemd[1]: Started OpenBSD Secure Shell server. Dec 27 21:12:35 domoticz domoticz.sh[471]: 2017-12-27 21:12:35.467 Domoticz V3.8796 (c)2012-2017 GizMoCuz Dec 27 21:12:35 domoticz domoticz.sh[471]: 2017-12-27 21:12:35.467 Build Hash: 2d99bbbc, Date: 2017-12-24 07:06:53 Dec 27 21:12:35 domoticz domoticz.sh[471]: 2017-12-27 21:12:35.468 Startup Path: /home/pi/domoticz/ Dec 27 21:12:35 domoticz domoticz.sh[471]: domoticz: Domoticz is starting up.... Dec 27 21:12:35 domoticz domoticz: Domoticz is starting up.... Dec 27 21:12:35 domoticz domoticz: Domoticz running... Dec 27 21:12:35 domoticz systemd[1]: Started LSB: Home Automation System. Dec 27 21:12:35 domoticz systemd[1]: Reached target Multi-User System. Dec 27 21:12:35 domoticz systemd[1]: Reached target Graphical Interface. Dec 27 21:12:35 domoticz systemd[1]: Starting Update UTMP about System Runlevel Changes... Dec 27 21:12:35 domoticz systemd[1]: Started Update UTMP about System Runlevel Changes. Dec 27 21:12:35 domoticz systemd[1]: Startup finished in 1.510s (kernel) + 11.498s (userspace) = 13.009s. Dec 27 21:12:38 domoticz kernel: [ 15.710546] uart-pl011 3f201000.serial: no DMA platform data Dec 27 21:12:42 domoticz dhcpcd[470]: eth0: no IPv6 Routers available Dec 27 21:12:53 domoticz systemd[1]: Created slice User Slice of pi. Dec 27 21:12:53 domoticz systemd[1]: Starting User Manager for UID 1000... Dec 27 21:12:53 domoticz systemd[1]: Started Session c1 of user pi. Dec 27 21:12:53 domoticz systemd[535]: Listening on GnuPG cryptographic agent and passphrase cache (restricted). Dec 27 21:12:53 domoticz systemd[535]: Listening on GnuPG cryptographic agent and passphrase cache. Dec 27 21:12:53 domoticz systemd[535]: Listening on GnuPG cryptographic agent (access for web browsers). Dec 27 21:12:53 domoticz systemd[535]: Reached target Paths. Dec 27 21:12:53 domoticz systemd[535]: Listening on GnuPG cryptographic agent (ssh-agent emulation). Dec 27 21:12:53 domoticz systemd[535]: Reached target Sockets. Dec 27 21:12:53 domoticz systemd[535]: Reached target Timers. Dec 27 21:12:53 domoticz systemd[535]: Reached target Basic System. Dec 27 21:12:53 domoticz systemd[535]: Reached target Default. Dec 27 21:12:53 domoticz systemd[535]: Startup finished in 48ms. Dec 27 21:12:53 domoticz systemd[1]: Started User Manager for UID 1000. Dec 27 21:13:03 domoticz systemd[535]: Time has been changed Dec 27 21:13:03 domoticz systemd[1]: Time has been changed Dec 27 21:13:03 domoticz systemd-timesyncd[285]: Synchronized to time server 195.189.85.132:123 (2.debian.pool.ntp.org). Dec 27 21:13:03 domoticz systemd[1]: apt-daily.timer: Adding 8h 6min 59.681187s random time. Dec 27 21:13:03 domoticz systemd[1]: apt-daily-upgrade.timer: Adding 32min 42.364143s random time.```@pepson ok, so mysgw does at least log to syslog, as seen here
Dec 27 21:12:27 domoticz mysgw: Starting gateway... Dec 27 21:12:27 domoticz mysgw: Protocol version - 2.2.0-rc.2but nothing else. I expected there to be more information, but maybe I'm just not familiar enough with the raspberry pi gateway.
-
@pepson Just a suggestion, but are you sure the Pi3 is looking at ttyUSB1, ie have you confirmed this is the Gateway serial connection ?
I am using direct serial connection to the pi3 GPIO as ttySO with Domoticz, but when I tried a USB Gateway at one point, the connection was NOT working using the expected ttyUSB quoted. I had to check the tty connections via Putty to establish the actual link... -
I build it as ttySO
./configure --my-transport=rfm69 --my-rfm69-frequency=868 --my-is-rfm69hw --my-gateway=serial --my-serial-is-pty --my-serial-pty=/dev/ttySOand i have and info:
2017-12-28 15:40:21.822 MySensors: Using serial port: /dev/ttyS0
2017-12-28 15:40:21.832 Error: MySensors: Error opening serial port! -
Then build as /dev/serial0 and the same problem. This is show in log Domoticz. One read version and port closed.
2017-12-28 15:48:14.418 MySensors: Using serial port: /dev/serial0
2017-12-28 15:48:14.418 MySensors: Gateway Version: 2.2.0-rc.2
2017-12-28 15:48:14.418 Error: Serial Port closed!... Error: End of file
2017-12-28 15:48:15.418 MySensors: retrying in 30 seconds... -
Then build as /dev/serial0 and the same problem. This is show in log Domoticz. One read version and port closed.
2017-12-28 15:48:14.418 MySensors: Using serial port: /dev/serial0
2017-12-28 15:48:14.418 MySensors: Gateway Version: 2.2.0-rc.2
2017-12-28 15:48:14.418 Error: Serial Port closed!... Error: End of file
2017-12-28 15:48:15.418 MySensors: retrying in 30 seconds...@pepson could you post your hardware settings in Domoticz? This is what works for me:

Could you also try building the gateway without rfm69 support, to check if the problem is generic or related to rfm69. Use this:
./configure --my-transport=none --my-gateway=serial --my-serial-is-pty --my-serial-pty=/dev/ttyUSB42 make && sudo ./bin/mysgw -d -
Hello
Thanks for your help. I start from beginning build DOmoticz on my RPi3 with clean latest image. After run in Sudo raspi-config i enable SPI and Serial , then install DOmoticz and now all works OK. Then build Mysensor Gateway and all is ok with no error in Domoticz. Works on /dev/ttyUSB42 -
And have next problem... i build sketch on version 2.2.0-rc2 but after write to Arduino Mini Pro he is not connected to my Gateway on RPI3.
This is sketch. What is wrong ?
/* Relay with button sketch modified to work with no uplink to gateway and try to maintain sync to controller */ #define MY_DEBUG // Enable debug prints to serial monitor #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY 868 #define MY_IS_RFM69HW #define MY_RFM69_NEW_DRIVER //#define MY_NODE_ID 203 // Node id defaults to AUTO (tries to fetch id from controller) #define MY_TRANSPORT_WAIT_READY_MS 5000 //set how long to wait for transport ready in milliseconds #define MY_REPEATER_FEATURE // Enabled repeater feature for this node #include <MySensors.h> #include <Bounce2.h> #define RELAY_PIN 5 // Arduino Digital I/O pin number for relay #define BUTTON_PIN 3 // Arduino Digital I/O pin number for button #define CHILD_ID 1 // Id of the sensor child #define RELAY_ON 1 #define RELAY_OFF 0 Bounce debouncer = Bounce(); int oldValue = 0; bool uplinkAvailable = true; bool state = false; bool requestState; bool firstStart = true; unsigned long uplinkCheckTime ; // holder for uplink checks unsigned long uplinkCheckPeriod = 30*1000; // time between checks for uplink in milliseconds unsigned long returnWait = 1000; // how long to wait for return from controller in milliseconds.. adjust as needed unsigned long oldTime = 0; unsigned long newTime = 0; MyMessage msg(CHILD_ID, V_STATUS); void setup(){ pinMode(BUTTON_PIN, INPUT_PULLUP); // Setup the button pin, Activate internal pull-up debouncer.attach(BUTTON_PIN); // After setting up the button, setup debouncer debouncer.interval(5); pinMode(RELAY_PIN, OUTPUT); // set relay pin in output mode digitalWrite(RELAY_PIN, RELAY_OFF); // Make sure relay is off when starting up } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("1xRelay & Button", "2.2.0-rc2"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID, S_BINARY); } void loop(){ if (firstStart) { // this code is only run once at startup Serial.println("First run started"); requestTime(); // get time from controller wait (returnWait); // delay to allow time to return if (oldTime == 0){ // check to see if there was a return from the time request Serial.println("uplink not available"); uplinkAvailable = false; // no uplink established uplinkCheckTime = millis(); } else{ Serial.println("uplink available"); request( CHILD_ID, V_STATUS); // get status of switch on controller wait (returnWait); //wait needed to allow request to return from controller Serial.print("controller state --- "); Serial.println(requestState); if (requestState != state) { // check that controller is corectly showing the current relay state send(msg.set(state), false); // notify controller of current state } } firstStart = false; // set firstStart flag false to prevent code from running again } debouncer.update(); int value = debouncer.read(); // Get the update value if (value != oldValue && value == 0) { // check for new button push state = !state; // Toggle the state digitalWrite(RELAY_PIN, state ? RELAY_ON : RELAY_OFF); // switch the relay to the new state requestTime(); wait (returnWait); // delay to allow time to return if (oldTime != newTime){ // if times are different then uplink is available send(msg.set(state), false); oldTime = newTime; } else{ // if times are the same no uplink is available Serial.println("uplink not available"); uplinkAvailable = false; // no uplink available, set flag false uplinkCheckTime = millis(); // start the timer from now } } oldValue = value; if (!uplinkAvailable && (millis() - uplinkCheckTime > uplinkCheckPeriod) ) { // test to see if function should be called uplinkCheck(); // call uplink checking function } } /*-------------------start of functions--------------------------*/ void receive(const MyMessage &message) { if (message.type == V_STATUS) { // check to see if incoming message is for a switch switch (message.getCommand()) { // message.getCommand will give us the command type of the incomming message case C_SET: //message is a set command from controller to update relay state state = message.getBool(); // get the new state digitalWrite(RELAY_PIN, state ? RELAY_ON : RELAY_OFF); // switch relay to new state uplinkAvailable = true; // uplink established /*---- Write some debug info----*/ Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(", New status: "); Serial.println(message.getBool()); break; case C_REQ: // message is a returning request from controller requestState = message.getBool(); // update requestState with returning state break; } } } void uplinkCheck() { requestTime(); wait (returnWait); // wait for time return.. this may need to be varied for your system if (oldTime != newTime){ Serial.println("uplink re-established"); request( CHILD_ID, V_STATUS); wait (returnWait); //wait needed to allow request to return from controller if (requestState != state) { // check that controller is corectly showing the current relay state send(msg.set(state), false); // notify controller of current state no ack uplinkAvailable = true; // uplink established oldTime = newTime; } } uplinkCheckTime = millis(); // reset the checktime Serial.println("uplinkchecktime reset"); } void receiveTime(unsigned long time) { if (firstStart){ oldTime = time; newTime = time; } else{ newTime = time; } Serial.print("time received---- " ); Serial.println(time); }``` -
And have next problem... i build sketch on version 2.2.0-rc2 but after write to Arduino Mini Pro he is not connected to my Gateway on RPI3.
This is sketch. What is wrong ?
/* Relay with button sketch modified to work with no uplink to gateway and try to maintain sync to controller */ #define MY_DEBUG // Enable debug prints to serial monitor #define MY_RADIO_RFM69 #define MY_RFM69_FREQUENCY 868 #define MY_IS_RFM69HW #define MY_RFM69_NEW_DRIVER //#define MY_NODE_ID 203 // Node id defaults to AUTO (tries to fetch id from controller) #define MY_TRANSPORT_WAIT_READY_MS 5000 //set how long to wait for transport ready in milliseconds #define MY_REPEATER_FEATURE // Enabled repeater feature for this node #include <MySensors.h> #include <Bounce2.h> #define RELAY_PIN 5 // Arduino Digital I/O pin number for relay #define BUTTON_PIN 3 // Arduino Digital I/O pin number for button #define CHILD_ID 1 // Id of the sensor child #define RELAY_ON 1 #define RELAY_OFF 0 Bounce debouncer = Bounce(); int oldValue = 0; bool uplinkAvailable = true; bool state = false; bool requestState; bool firstStart = true; unsigned long uplinkCheckTime ; // holder for uplink checks unsigned long uplinkCheckPeriod = 30*1000; // time between checks for uplink in milliseconds unsigned long returnWait = 1000; // how long to wait for return from controller in milliseconds.. adjust as needed unsigned long oldTime = 0; unsigned long newTime = 0; MyMessage msg(CHILD_ID, V_STATUS); void setup(){ pinMode(BUTTON_PIN, INPUT_PULLUP); // Setup the button pin, Activate internal pull-up debouncer.attach(BUTTON_PIN); // After setting up the button, setup debouncer debouncer.interval(5); pinMode(RELAY_PIN, OUTPUT); // set relay pin in output mode digitalWrite(RELAY_PIN, RELAY_OFF); // Make sure relay is off when starting up } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("1xRelay & Button", "2.2.0-rc2"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID, S_BINARY); } void loop(){ if (firstStart) { // this code is only run once at startup Serial.println("First run started"); requestTime(); // get time from controller wait (returnWait); // delay to allow time to return if (oldTime == 0){ // check to see if there was a return from the time request Serial.println("uplink not available"); uplinkAvailable = false; // no uplink established uplinkCheckTime = millis(); } else{ Serial.println("uplink available"); request( CHILD_ID, V_STATUS); // get status of switch on controller wait (returnWait); //wait needed to allow request to return from controller Serial.print("controller state --- "); Serial.println(requestState); if (requestState != state) { // check that controller is corectly showing the current relay state send(msg.set(state), false); // notify controller of current state } } firstStart = false; // set firstStart flag false to prevent code from running again } debouncer.update(); int value = debouncer.read(); // Get the update value if (value != oldValue && value == 0) { // check for new button push state = !state; // Toggle the state digitalWrite(RELAY_PIN, state ? RELAY_ON : RELAY_OFF); // switch the relay to the new state requestTime(); wait (returnWait); // delay to allow time to return if (oldTime != newTime){ // if times are different then uplink is available send(msg.set(state), false); oldTime = newTime; } else{ // if times are the same no uplink is available Serial.println("uplink not available"); uplinkAvailable = false; // no uplink available, set flag false uplinkCheckTime = millis(); // start the timer from now } } oldValue = value; if (!uplinkAvailable && (millis() - uplinkCheckTime > uplinkCheckPeriod) ) { // test to see if function should be called uplinkCheck(); // call uplink checking function } } /*-------------------start of functions--------------------------*/ void receive(const MyMessage &message) { if (message.type == V_STATUS) { // check to see if incoming message is for a switch switch (message.getCommand()) { // message.getCommand will give us the command type of the incomming message case C_SET: //message is a set command from controller to update relay state state = message.getBool(); // get the new state digitalWrite(RELAY_PIN, state ? RELAY_ON : RELAY_OFF); // switch relay to new state uplinkAvailable = true; // uplink established /*---- Write some debug info----*/ Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(", New status: "); Serial.println(message.getBool()); break; case C_REQ: // message is a returning request from controller requestState = message.getBool(); // update requestState with returning state break; } } } void uplinkCheck() { requestTime(); wait (returnWait); // wait for time return.. this may need to be varied for your system if (oldTime != newTime){ Serial.println("uplink re-established"); request( CHILD_ID, V_STATUS); wait (returnWait); //wait needed to allow request to return from controller if (requestState != state) { // check that controller is corectly showing the current relay state send(msg.set(state), false); // notify controller of current state no ack uplinkAvailable = true; // uplink established oldTime = newTime; } } uplinkCheckTime = millis(); // reset the checktime Serial.println("uplinkchecktime reset"); } void receiveTime(unsigned long time) { if (firstStart){ oldTime = time; newTime = time; } else{ newTime = time; } Serial.print("time received---- " ); Serial.println(time); }```@pepson Try walking in little steps trying each stage rather than running into new walls then expressing surprise at broken nose, no offence intended ;)
Gateway and nodes, same platform, same version..... Otherwise they are speaking Chinese and Swedish hoping for somebody to explain the meaning of fubar... -
I use the same version now 2.2.0-rc2 but when i programmed sketch to node it not connection to Gateway... That i want come back to version 2.1.1 gateway but i dont know how ? Or resolved problem Node 2.2.0-rc2 i stay on this.
But when run debug gateway show this:
pi@domoticz:~/MySensors $ sudo ./bin/mysgw -d mysgw: Starting gateway... mysgw: Protocol version - 2.2.0-rc.2 mysgw: MCO:BGN:INIT GW,CP=RPNGL---,VER=2.2.0-rc.2 mysgw: TSF:LRT:OK mysgw: TSM:INIT mysgw: TSF:WUR:MS=0 mysgw: TSM:INIT:TSP OK mysgw: TSM:INIT:GW MODE mysgw: TSM:READY:ID=0,PAR=0,DIS=0 mysgw: MCO:REG:NOT NEEDED mysgw: MCO:BGN:STP mysgw: MCO:BGN:INIT OK,TSP=1 mysgw: !TSF:SAN:FAIL mysgw: TSM:FAIL:CNT=1 mysgw: TSM:FAIL:DIS mysgw: TSF:TDI:TSL mysgw: TSM:FAIL:RE-INIT mysgw: TSM:INIT mysgw: TSM:INIT:TSP OK mysgw: TSM:INIT:GW MODEThis is sketch 2.2.0-rc2
/* Relay with button sketch modified to work with no uplink to gateway and try to maintain sync to controller */ #define MY_DEBUG // Enable debug prints to serial monitor #define MY_RADIO_RFM69 #define RFM69_868MHZ #define MY_IS_RFM69HW #define MY_RFM69_NEW_DRIVER //#define MY_NODE_ID 203 // Node id defaults to AUTO (tries to fetch id from controller) #define MY_TRANSPORT_WAIT_READY_MS 5000 //set how long to wait for transport ready in milliseconds #define MY_REPEATER_FEATURE // Enabled repeater feature for this node #include <MySensors.h> #include <Bounce2.h> #define RELAY_PIN 5 // Arduino Digital I/O pin number for relay #define BUTTON_PIN 3 // Arduino Digital I/O pin number for button #define CHILD_ID 1 // Id of the sensor child #define RELAY_ON 1 #define RELAY_OFF 0 Bounce debouncer = Bounce(); int oldValue = 0; bool uplinkAvailable = true; bool state = false; bool requestState; bool firstStart = true; unsigned long uplinkCheckTime ; // holder for uplink checks unsigned long uplinkCheckPeriod = 30*1000; // time between checks for uplink in milliseconds unsigned long returnWait = 1000; // how long to wait for return from controller in milliseconds.. adjust as needed unsigned long oldTime = 0; unsigned long newTime = 0; MyMessage msg(CHILD_ID, V_STATUS); void setup(){ pinMode(BUTTON_PIN, INPUT_PULLUP); // Setup the button pin, Activate internal pull-up debouncer.attach(BUTTON_PIN); // After setting up the button, setup debouncer debouncer.interval(5); pinMode(RELAY_PIN, OUTPUT); // set relay pin in output mode digitalWrite(RELAY_PIN, RELAY_OFF); // Make sure relay is off when starting up } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("1xRelay & Button", "2.2.0-rc2"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID, S_BINARY); } void loop(){ if (firstStart) { // this code is only run once at startup Serial.println("First run started"); requestTime(); // get time from controller wait (returnWait); // delay to allow time to return if (oldTime == 0){ // check to see if there was a return from the time request Serial.println("uplink not available"); uplinkAvailable = false; // no uplink established uplinkCheckTime = millis(); } else{ Serial.println("uplink available"); request( CHILD_ID, V_STATUS); // get status of switch on controller wait (returnWait); //wait needed to allow request to return from controller Serial.print("controller state --- "); Serial.println(requestState); if (requestState != state) { // check that controller is corectly showing the current relay state send(msg.set(state), false); // notify controller of current state } } firstStart = false; // set firstStart flag false to prevent code from running again } debouncer.update(); int value = debouncer.read(); // Get the update value if (value != oldValue && value == 0) { // check for new button push state = !state; // Toggle the state digitalWrite(RELAY_PIN, state ? RELAY_ON : RELAY_OFF); // switch the relay to the new state requestTime(); wait (returnWait); // delay to allow time to return if (oldTime != newTime){ // if times are different then uplink is available send(msg.set(state), false); oldTime = newTime; } else{ // if times are the same no uplink is available Serial.println("uplink not available"); uplinkAvailable = false; // no uplink available, set flag false uplinkCheckTime = millis(); // start the timer from now } } oldValue = value; if (!uplinkAvailable && (millis() - uplinkCheckTime > uplinkCheckPeriod) ) { // test to see if function should be called uplinkCheck(); // call uplink checking function } } /*-------------------start of functions--------------------------*/ void receive(const MyMessage &message) { if (message.type == V_STATUS) { // check to see if incoming message is for a switch switch (message.getCommand()) { // message.getCommand will give us the command type of the incomming message case C_SET: //message is a set command from controller to update relay state state = message.getBool(); // get the new state digitalWrite(RELAY_PIN, state ? RELAY_ON : RELAY_OFF); // switch relay to new state uplinkAvailable = true; // uplink established /*---- Write some debug info----*/ Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(", New status: "); Serial.println(message.getBool()); break; case C_REQ: // message is a returning request from controller requestState = message.getBool(); // update requestState with returning state break; } } } void uplinkCheck() { requestTime(); wait (returnWait); // wait for time return.. this may need to be varied for your system if (oldTime != newTime){ Serial.println("uplink re-established"); request( CHILD_ID, V_STATUS); wait (returnWait); //wait needed to allow request to return from controller if (requestState != state) { // check that controller is corectly showing the current relay state send(msg.set(state), false); // notify controller of current state no ack uplinkAvailable = true; // uplink established oldTime = newTime; } } uplinkCheckTime = millis(); // reset the checktime Serial.println("uplinkchecktime reset"); } void receiveTime(unsigned long time) { if (firstStart){ oldTime = time; newTime = time; } else{ newTime = time; } Serial.print("time received---- " ); Serial.println(time); }``` -
I use the same version now 2.2.0-rc2 but when i programmed sketch to node it not connection to Gateway... That i want come back to version 2.1.1 gateway but i dont know how ? Or resolved problem Node 2.2.0-rc2 i stay on this.
But when run debug gateway show this:
pi@domoticz:~/MySensors $ sudo ./bin/mysgw -d mysgw: Starting gateway... mysgw: Protocol version - 2.2.0-rc.2 mysgw: MCO:BGN:INIT GW,CP=RPNGL---,VER=2.2.0-rc.2 mysgw: TSF:LRT:OK mysgw: TSM:INIT mysgw: TSF:WUR:MS=0 mysgw: TSM:INIT:TSP OK mysgw: TSM:INIT:GW MODE mysgw: TSM:READY:ID=0,PAR=0,DIS=0 mysgw: MCO:REG:NOT NEEDED mysgw: MCO:BGN:STP mysgw: MCO:BGN:INIT OK,TSP=1 mysgw: !TSF:SAN:FAIL mysgw: TSM:FAIL:CNT=1 mysgw: TSM:FAIL:DIS mysgw: TSF:TDI:TSL mysgw: TSM:FAIL:RE-INIT mysgw: TSM:INIT mysgw: TSM:INIT:TSP OK mysgw: TSM:INIT:GW MODEThis is sketch 2.2.0-rc2
/* Relay with button sketch modified to work with no uplink to gateway and try to maintain sync to controller */ #define MY_DEBUG // Enable debug prints to serial monitor #define MY_RADIO_RFM69 #define RFM69_868MHZ #define MY_IS_RFM69HW #define MY_RFM69_NEW_DRIVER //#define MY_NODE_ID 203 // Node id defaults to AUTO (tries to fetch id from controller) #define MY_TRANSPORT_WAIT_READY_MS 5000 //set how long to wait for transport ready in milliseconds #define MY_REPEATER_FEATURE // Enabled repeater feature for this node #include <MySensors.h> #include <Bounce2.h> #define RELAY_PIN 5 // Arduino Digital I/O pin number for relay #define BUTTON_PIN 3 // Arduino Digital I/O pin number for button #define CHILD_ID 1 // Id of the sensor child #define RELAY_ON 1 #define RELAY_OFF 0 Bounce debouncer = Bounce(); int oldValue = 0; bool uplinkAvailable = true; bool state = false; bool requestState; bool firstStart = true; unsigned long uplinkCheckTime ; // holder for uplink checks unsigned long uplinkCheckPeriod = 30*1000; // time between checks for uplink in milliseconds unsigned long returnWait = 1000; // how long to wait for return from controller in milliseconds.. adjust as needed unsigned long oldTime = 0; unsigned long newTime = 0; MyMessage msg(CHILD_ID, V_STATUS); void setup(){ pinMode(BUTTON_PIN, INPUT_PULLUP); // Setup the button pin, Activate internal pull-up debouncer.attach(BUTTON_PIN); // After setting up the button, setup debouncer debouncer.interval(5); pinMode(RELAY_PIN, OUTPUT); // set relay pin in output mode digitalWrite(RELAY_PIN, RELAY_OFF); // Make sure relay is off when starting up } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("1xRelay & Button", "2.2.0-rc2"); // Register all sensors to gw (they will be created as child devices) present(CHILD_ID, S_BINARY); } void loop(){ if (firstStart) { // this code is only run once at startup Serial.println("First run started"); requestTime(); // get time from controller wait (returnWait); // delay to allow time to return if (oldTime == 0){ // check to see if there was a return from the time request Serial.println("uplink not available"); uplinkAvailable = false; // no uplink established uplinkCheckTime = millis(); } else{ Serial.println("uplink available"); request( CHILD_ID, V_STATUS); // get status of switch on controller wait (returnWait); //wait needed to allow request to return from controller Serial.print("controller state --- "); Serial.println(requestState); if (requestState != state) { // check that controller is corectly showing the current relay state send(msg.set(state), false); // notify controller of current state } } firstStart = false; // set firstStart flag false to prevent code from running again } debouncer.update(); int value = debouncer.read(); // Get the update value if (value != oldValue && value == 0) { // check for new button push state = !state; // Toggle the state digitalWrite(RELAY_PIN, state ? RELAY_ON : RELAY_OFF); // switch the relay to the new state requestTime(); wait (returnWait); // delay to allow time to return if (oldTime != newTime){ // if times are different then uplink is available send(msg.set(state), false); oldTime = newTime; } else{ // if times are the same no uplink is available Serial.println("uplink not available"); uplinkAvailable = false; // no uplink available, set flag false uplinkCheckTime = millis(); // start the timer from now } } oldValue = value; if (!uplinkAvailable && (millis() - uplinkCheckTime > uplinkCheckPeriod) ) { // test to see if function should be called uplinkCheck(); // call uplink checking function } } /*-------------------start of functions--------------------------*/ void receive(const MyMessage &message) { if (message.type == V_STATUS) { // check to see if incoming message is for a switch switch (message.getCommand()) { // message.getCommand will give us the command type of the incomming message case C_SET: //message is a set command from controller to update relay state state = message.getBool(); // get the new state digitalWrite(RELAY_PIN, state ? RELAY_ON : RELAY_OFF); // switch relay to new state uplinkAvailable = true; // uplink established /*---- Write some debug info----*/ Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(", New status: "); Serial.println(message.getBool()); break; case C_REQ: // message is a returning request from controller requestState = message.getBool(); // update requestState with returning state break; } } } void uplinkCheck() { requestTime(); wait (returnWait); // wait for time return.. this may need to be varied for your system if (oldTime != newTime){ Serial.println("uplink re-established"); request( CHILD_ID, V_STATUS); wait (returnWait); //wait needed to allow request to return from controller if (requestState != state) { // check that controller is corectly showing the current relay state send(msg.set(state), false); // notify controller of current state no ack uplinkAvailable = true; // uplink established oldTime = newTime; } } uplinkCheckTime = millis(); // reset the checktime Serial.println("uplinkchecktime reset"); } void receiveTime(unsigned long time) { if (firstStart){ oldTime = time; newTime = time; } else{ newTime = time; } Serial.print("time received---- " ); Serial.println(time); }```@pepson Let's try the baby steps I referred to earlier.
The current stable version of MySensors is 2.1. Those using 2.2 tend to be experienced people versed in programming and experimenting and problem solving, hence it is not an official release.... yet you are using it and asking for solutions... Hello ?
I am and have been for the last few months using a Pro-Mini with RFM69 as nodes and gateway using 2.1 attached to a Pi3 running Domoticz.... No problems, but slowly coming to understand most of what I am doing...
I am still on baby steps, I don't mind at all, it works.....
-
Ok but i dont know how build Gateway on version 2.1.1 because when i do step by step as show on mysensors.org it default build me version gateway 2.2.0-rc2
-
Ok but i dont know how build Gateway on version 2.1.1 because when i do step by step as show on mysensors.org it default build me version gateway 2.2.0-rc2
@pepson As in this page? 2.1.1 - Latest Release ?
https://www.mysensors.org/download