Hello, i'm making some progress; received the components this week.
Unfortunately it doesn't work... yet
For now i have SanityCheck failure in to logs.
I'm afraid my soldering of all these little components is not good. I tested with a multimeter the 4 pins and i have continuity on one of them but maybe not the others so i guess i will have to try remelting all these small regulators ???
I will answer myself after some testing done today:
How can I change network id for gateway (mysgw)?
It is possible to change MY_RFM69_NETWORKID for mysgw by exporting CPPFLAGS variable with the option set before running ./configure:
example:
export CPPFLAGS='-DMY_RFM69_NETWORKID="101"'
./configure --my-gateway=serial --my-transport=rfm69 --my-rfm69-frequency=868 --my-is-rfm69hw --my-serial-is-pty --my-serial-port=/dev/ttyUSB-MysGW --my-serial-groupname=dialout
make
Is it possible to create another RFM69 network on new hardware, just for the test, while my current RFM69 network keeps running on current gateway/controller?
As soon as I started another RFM69 gateway (mysgw) on new hw, even with different network id (101), most of the sensors connected to my other (production) gateway running on old hw with default network id (100) stopped communicating... so it seems it is not possible to run multiple RFM69 gateways in the same range (on the same freq).
I have success!
(oops, that's suppose to be Timer1)
I only sample for 1/60 of a second. What I did was to back up all the timer registered I used and then resorted them after I was done sampling. (As opposed to initializing the registers in setup and then starting the timer when needed.)
Now I have a Nano sampling the data and sending it to a MySensors Gateway on an RPi3B+ which then sends it to an MQTT broker runing on an old laptop. Also running on the laptop is Home Assistant running inside of VirtualBox.
If MySensors does use Timer1, it appears that restoring the registers allows it to be shared.
//------------------------------------------------------ISR
ISR(TIMER1_OVF_vect){ // interrupt service routine for overflow
TCNT1 = TimerPreloadValue; // must be first line! starts the timer counting again
digitalWrite(TRIGGER_START_SAMPLE_PIN,HIGH);
samplesVolts[--sample]=analogRead(VOLTS_IN_PIN); // decrement before capturing
samplesCurrent[sample]=analogRead(CURRENT_IN_PIN);
digitalWrite(TRIGGER_START_SAMPLE_PIN,LOW);
if (!sample){ // count down to zero
digitalWrite(TRIGGER_START_SAMPLE_PERIOD_PIN,LOW); // indicate that sampling is complete
samplingEnd = micros();
TCCR1B &= 248; // turns off timer
}
}
//------------------------------------------------------sampleOneCycle
void sampleOneCycle(){
// back up timer registers
uint8_t TCNT1_b = TCNT1;
uint8_t TCCR1B_b = TCCR1B;
uint8_t TCCR1A_b = TCCR1A;
uint8_t TIMSK1_b = TIMSK1;
// configure timer which starts the sampling
noInterrupts(); // disable all interrupts
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = TimerPreloadValue; // preload timer
//TCCR1B |= (1 << CS10)|(1 << CS12); // 1024 prescaler
TCCR1B &= 248; // turns off timer?
TIMSK1 |= (1 << TOIE1); // enable timer overflow interrupt ISR
// demark sampling
sample = NUMBER_OF_SAMPLES; // count down to zero
digitalWrite(TRIGGER_START_SAMPLE_PERIOD_PIN,HIGH);
samplingStart = micros();
TCNT1 = 65535; // first trigger right away!
TCCR1B |= 1; // turns on timer
interrupts(); // enable all interrupts
// wait for sampling to be complete
while(digitalRead(TRIGGER_START_SAMPLE_PERIOD_PIN)){};
samplingEnd = micros();
// restore timer registers
TCNT1 = TCNT1_b;
TCCR1B = TCCR1B_b;
TCCR1A = TCCR1A_b;
TIMSK1 = TIMSK1_b;
}