Video in OP was good for "beginner" but you very quickly run into other issues. For me it was getting confused by lots of talk about interrupts (in relation to "input" type sensors). All of Build pages for these type of sensors mention about interrupts only being available on pins 2 and 3 (assuming Arduino Pro Mini, etc.). Which only confused me further (at first). However maybe you are smarter than me. But look closely, most (all?) of MySensors code I have seen for "inputs" (door, motion, etc.) actually DO NOT use interrupts! Notice the code runs right in the main loop. Interrupts are only needed when you sleep the node!
Everything I talk about here is for always powered nodes, where you do not need to sleep because you are not on batteries. For batteries you need to sleep to save power, and then we have to do things different. Then you will need to use the hardware interrupts, to wake the node from sleeping. But that I will call "advanced" and beyond the scope of this particular post here, which I am calling "intermediate". So, back to that...
You can use any pin you want (almost) for inputs when you are not sleeping the node. OP video does mention about non blocking code, but he does not go into detail. I don't know why not, as it is not complicated. You simply do wait() instead of sleep(). Or, if you are combining one or more thing(s) that needs to "listen" all the time (lets say, an actuator/relay, and for fun let's add a motion sensor, too!), with something that needs to send() periodically (let's say a temperature sensor) then you just keep looping over and over checking all your inputs, and then only enter the output (temperature) part of the code every so many millis(). An example:
void loop()
{
// put code here to check motion sensor (copy from loop() part of motion sensor sketch)
// now we check if enough time has passed to check temperature, if so we enter this subroutine
if ( millis() > millisLastTemperature + TEMPERATURE_CHECK_INTERVAL )
{
// put code here to check temperature sensor(s)
// Right before we exit temperature subroutine, note current time as last time temperature was sent.
millisLastTemperature = millis();
}
// That's it for main loop()
}
// the relay needs code to receive incoming messages
void receive(const MyMessage &message)
{
// Put code here from receive() part of relay sketch
}
Doing this way, you could even combine multiple sensors (temperature, humidity, light, etc.) to take readings even on different intervals. Just duplicate that subroutine, and give each one their own <SENSOR>_CHECK_INTERVAL variable. Just remember to define all your variables at the top of the sketch, and when dealing with millis() you want to use data type of unsigned long.
Speaking of which, I think you also must have some very basic programming or even logical skills. But there is a lot of information in Internet nowadays, so hopefully you can study and teach yourself enough to get by.
Good luck, and don't hesitate to post if you run into trouble. Don't suffer along in silence and then give up, without saying anything to anyone. Ask me how I know.