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
TmasterT

Tmaster

@Tmaster
About
Posts
154
Topics
22
Shares
0
Groups
0
Followers
0
Following
0

Posts

Recent Best Controversial

  • CHATGPT My new best friend!
    TmasterT Tmaster

    It's not tested because i didn't finish the hardware yet ,but should be pretty close from what i want ..and clean..

    #include <MySensors.h>
    
    #define CHILD_ID_LEVEL 1
    #define CHILD_ID_DIRECTION 2
    
    #define TOTAL_SENSORS 16
    #define TOTAL_HEIGHT_CM 150.0  // for internal reference only, we won't send cm
    
    // Pins for the CD74HC4067 multiplexer
    const int S0 = 4;
    const int S1 = 5;
    const int S2 = 6;
    const int S3 = 7;
    const int SIG_PIN = A0;
    
    MyMessage msgLevel(CHILD_ID_LEVEL, V_LEVEL);
    MyMessage msgDirection(CHILD_ID_DIRECTION, V_STATUS);
    
    float lastReportedPosition = -1;
    float previousReading = -1;
    int confirmationCounter = 0;
    const int CONFIRMATION_THRESHOLD = 3;
    
    unsigned long lastReadTime = 0;
    const unsigned long readInterval = 5000; // 5 seconds (adjust as needed)
    
    void before() {
      pinMode(S0, OUTPUT);
      pinMode(S1, OUTPUT);
      pinMode(S2, OUTPUT);
      pinMode(S3, OUTPUT);
    }
    
    void presentation() {
      sendSketchInfo("Interpolated Water Level Sensor 49E", "1.1");
      present(CHILD_ID_LEVEL, S_LEVEL);
      present(CHILD_ID_DIRECTION, S_INFO);
    }
    
    void setup() {}
    
    void loop() {
      unsigned long now = millis();
      if (now - lastReadTime < readInterval) return;
      lastReadTime = now;
    
      int readings[TOTAL_SENSORS];
      for (int i = 0; i < TOTAL_SENSORS; i++) {
        selectMuxChannel(i);
        delay(5);
        readings[i] = analogRead(SIG_PIN);
      }
    
      // Find the pair of consecutive sensors with the highest sum of readings
      int maxSensor = -1;
      int maxValue = -1;
      for (int i = 0; i < TOTAL_SENSORS - 1; i++) {
        int sum = readings[i] + readings[i + 1];
        if (sum > maxValue) {
          maxValue = sum;
          maxSensor = i;
        }
      }
    
      if (maxSensor < 0) return;
    
      float v1 = readings[maxSensor];
      float v2 = readings[maxSensor + 1];
      float frac = (v1 + v2 == 0) ? 0 : (float)v1 / (v1 + v2);
    
      // Relative position [0, TOTAL_SENSORS-1], inverted (top = 100%)
      float sensorPosition = maxSensor + (1.0 - frac);
    
      // Calculate level as percentage [0..100%]
      float levelPercent = (1.0 - sensorPosition / (TOTAL_SENSORS - 1)) * 100.0;
    
      // Hysteresis with 0.5% margin
      if (abs(levelPercent - previousReading) < 0.5) {
        confirmationCounter++;
      } else {
        confirmationCounter = 1;
      }
      previousReading = levelPercent;
    
      if (confirmationCounter >= CONFIRMATION_THRESHOLD && abs(levelPercent - lastReportedPosition) > 0.5) {
        send(msgLevel.set(levelPercent, 1)); // send percentage with 1 decimal place
    
        int direction = (levelPercent < lastReportedPosition) ? 1 : 0; // 1 = rising, 0 = falling
        send(msgDirection.set(direction));
    
        Serial.print("Level (%): ");
        Serial.print(levelPercent, 1);
        Serial.print(" - Direction: ");
        Serial.println(direction == 1 ? "RISING" : "FALLING");
    
        lastReportedPosition = levelPercent;
      }
    }
    
    void selectMuxChannel(int channel) {
      digitalWrite(S0, bitRead(channel, 0));
      digitalWrite(S1, bitRead(channel, 1));
      digitalWrite(S2, bitRead(channel, 2));
      digitalWrite(S3, bitRead(channel, 3));
    }
    
    

    And theres more.... i asked for he..she..it.. explain me the behavior of the code and this is what it explain:

    
    🎯 Purpose of the Code
    This Arduino sketch reads analog values from 16 linear Hall effect sensors (49E) connected via a CD74HC4067 16-channel analog multiplexer to measure the position of a floating magnet (e.g., on water). It calculates the water level as a percentage (0% = bottom, 100% = top) and detects the direction of change (rising or falling water level). The data is then sent via MySensors to a gateway/controller.
    
    🔌 Hardware Involved
    16 Hall Effect Sensors (49E) arranged vertically to detect a magnet's position.
    
    CD74HC4067 multiplexer to connect all 16 sensors to a single analog pin (A0).
    
    MySensors library for wireless communication (e.g., with an MQTT or home automation gateway).
    
    ⚙️ Main Code Behavior
    1. Initialization
    before(): Configures the multiplexer select lines S0 to S3 as outputs.
    
    presentation(): Sends node and sensor info to the MySensors controller.
    
    setup(): Empty in this version (can be used for future initialization).
    
    2. Main Loop (loop())
    Runs every 5 seconds (readInterval = 5000 ms):
    
    a. Read Sensor Values
    Iterates through all 16 channels of the multiplexer.
    
    For each channel, selects the sensor via selectMuxChannel(i) and reads its analog value from pin A0.
    
    Stores all values in the readings[] array.
    
    b. Find Position of the Magnet
    Finds the pair of consecutive sensors with the highest combined reading (indicating proximity of the magnet).
    
    Uses those two sensors to calculate a more accurate interpolated position (sensorPosition), including fractional values.
    
    c. Convert to Water Level Percentage
    Translates the sensor position to a percentage level, with 100% at the top sensor and 0% at the bottom.
    
    Uses:
    
    cpp
    Copiar
    Editar
    float levelPercent = (1.0 - sensorPosition / (TOTAL_SENSORS - 1)) * 100.0;
    d. Hysteresis Filtering
    Uses a confirmation counter to avoid sending data for small noise fluctuations.
    
    Only reports new data if the level has changed significantly (by more than 0.5%) and remains stable for 3 readings.
    
    e. Send Data (if changed significantly)
    Sends the level as a float with 1 decimal point.
    
    Sends the direction:
    
    1 for rising water level
    
    0 for falling water level
    
    Prints this info to the serial monitor as debug output.
    
    🧠 Smart Features in the Code
    Interpolation: Instead of picking a single sensor, it uses interpolation between the two strongest sensors to increase resolution.
    
    Noise Filtering: Uses hysteresis and confirmation logic to avoid spamming updates due to noise.
    
    Direction Detection: Reports whether the water is rising or falling.
    
    📤 Output (via MySensors & Serial)
    V_LEVEL message: Water level percentage (e.g., 72.5%)
    
    V_STATUS message: Direction (1 = up/rising, 0 = down/falling)
    
    Serial example output:
    
    mathematica
    Copiar
    Editar
    Level (%): 72.5 - Direction: RISING
    🧪 Use Cases
    Smart water tank monitoring
    
    Sump pit level monitoring
    
    Reservoir or hydroponics water level sensing
    
    Any linear position tracking using a magnet + Hall sensors
    
    Let me know if you’d like a diagram or simulation example of how this works!
    
    General Discussion

  • CHATGPT My new best friend!
    TmasterT Tmaster

    Hello guys.
    Years after MySensors release , and we still here talking here about, on on my electronic engineer opinion ,the best/usefull open source library ever!!! i say that because all my outdoor appliances, work with this stable library . Water heating solar panels, irrigation systems , outdoor light , main gate and basement gate can report status and command, water level from the irrigation system etc etc. Even for save water because i have timeouts and safe features for not water water or forget plants watering.... i only don't use the inside because my hardware don't fit inside concrete wall boxes....
    Now since i had to debug one of my sensors and realize the power of chatgpt now i just got lazy and don't program my sensors myself. I just explain what i want and the AI do it.
    have you tried it? Amazing .
    This morning i did a water level sensor to replace my sonar one. Asked one mysensors code for 16 hall effect sensors connected to a mux cd74hc4067 and it suggest ; why no use interpolation,why not use sensor
    hysteresis? hyster... what? i didn't its called like that. want cms or percentage....- DO it!! . 10 minutes later i had a hell of compacted code that do what i want WITHOUT BUGS and compile errors!!! yes,it's amazing because i'm not programmer and i can program c++ on arduino code but not much more than this....
    So don't stop your creativity because you are not very good programmer and you don't even know how to start you project. mysensors library it's well known from AI . .thank you my sensors team :+1: :muscle:

    General Discussion

  • hlk-pm01 are to noisy for rfm69?
    TmasterT Tmaster

    Maybe you are right and it's the proximity to a switching tranformer like this hlk-pm01 .They are all on same protoboard aprox 50x60mm. i could build a sheld on it but....now its working with the rfm69version W ok for a few days.
    The strange part is this combo was very used a few years now on made pcbs the on forum wher they had the maker/developer contest and never seen a line of this problem...

    Hardware

  • hlk-pm01 are to noisy for rfm69?
    TmasterT Tmaster

    i believe this problem has to be with rfm69CW and not the rfm69W . i have boot versions 868mhz and normally always the CW cause me this issues if is not batery powered even with 100uf +100nf caps filtering on transformer out, caps on the rfm60 power etc... maybe they are fake or have any problem. . i just ordered new rfm69W board and let me see if get better. right now i have like 10 nodes running outdoor on irrigation ,controlling relays and lights ,and metering temperatures. all with RFM69W ans HW ,this CW always give problems...

    Hardware

  • hlk-pm01 are to noisy for rfm69?
    TmasterT Tmaster

    Hello . it's the 3rd node that i build with the combo arduino promini 3.3v + hlk-pm01 + rfm69 and all need wire ground to earth (on wallsocket) to let rfm69 comunicate.
    otherwise will fail on every comunication even near Gateway...
    Personally i only think in noise.but everyone say that hlk-pm01 are low noise.
    I'm not using any cap after hlk-pm01 for snooth voltage but i already try it before without better result.
    rfm69 is powered by the pro mini integrated regulator.
    Any one had this problem?

    Hardware

  • #define DEFAULT_RFM69_IRQ_PIN
    TmasterT Tmaster

    Now is working. so what i did is call to children 0 and 1 and #define MY_NODE_ID 101 ,so next node appear on harware/mysensors gw ,and apear on devices as IDX 99 and 100... The auto node idx from domoticz shoud have caused some issue.... now is working

    General Discussion mysensors

  • #define DEFAULT_RFM69_IRQ_PIN
    TmasterT Tmaster

    this is my gw . in fact i never understud very well the child thing. last one is "tanque"( tank) is ths node that we talk and is showing as 13 ?? why?

    normally what i do is go to devices ,see what next id is available and atribute it to children..worked until now but i think its wrong
    f822faf0-b88a-40a5-b65c-0402bc01db48-image.png

    General Discussion mysensors

  • #define DEFAULT_RFM69_IRQ_PIN
    TmasterT Tmaster

    @zboblamont said in #define DEFAULT_RFM69_IRQ_PIN:

    ode sketch to print locally over serial t

    this is local log already. thal last line: 11233 TSF:MSG:SEND,4-4-0-0,s=99,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:36.5
    is the message sending 36.5 degrees to gateway.

    domoticz log report message received from this node...but is not even on devices...

    General Discussion mysensors

  • #define DEFAULT_RFM69_IRQ_PIN
    TmasterT Tmaster

    this is the log. everything appear be fine with presetation of gyro termometer .But never show on devices. someting wrong with my gateway...

    1282 TSF:MSG:READ,7-7-4,s=255,c=3,t=8,pt=1,l=1,sg=0:1
    2050 TSM:FPAR:OK
    2050 TSM:ID
    2052 TSM:ID:OK
    2054 TSM:UPL
    2062 TSF:MSG:SEND,4-4-0-0,s=255,c=3,t=24,pt=1,l=1,sg=0,ft=0,st=OK:1
    2101 TSF:MSG:READ,0-0-4,s=255,c=3,t=25,pt=1,l=1,sg=0:1
    2107 TSF:MSG:PONG RECV,HP=1
    2111 TSM:UPL:OK
    2113 TSM:READY:ID=4,PAR=0,DIS=1
    2326 TSF:MSG:SEND,4-4-0-0,s=255,c=3,t=15,pt=6,l=2,sg=0,ft=0,st=OK:0100
    2353 TSF:MSG:READ,0-0-4,s=255,c=3,t=15,pt=6,l=2,sg=0:0100
    2572 TSF:MSG:SEND,4-4-0-0,s=255,c=0,t=17,pt=0,l=5,sg=0,ft=0,st=OK:2.3.2
    2791 TSF:MSG:SEND,4-4-0-0,s=255,c=3,t=6,pt=1,l=1,sg=0,ft=0,st=OK:0
    2828 TSF:MSG:READ,0-0-4,s=255,c=3,t=6,pt=0,l=1,sg=0:M
    3250 TSF:MSG:SEND,4-4-0-0,s=255,c=3,t=11,pt=0,l=6,sg=0,ft=0,st=OK:TANQUE
    3469 TSF:MSG:SEND,4-4-0-0,s=255,c=3,t=12,pt=0,l=3,sg=0,ft=0,st=OK:2.3
    3688 TSF:MSG:SEND,4-4-0-0,s=98,c=0,t=35,pt=0,l=0,sg=0,ft=0,st=OK:
    3905 TSF:MSG:SEND,4-4-0-0,s=99,c=0,t=6,pt=0,l=0,sg=0,ft=0,st=OK:
    3911 MCO:REG:REQ
    4124 TSF:MSG:SEND,4-4-0-0,s=255,c=3,t=26,pt=1,l=1,sg=0,ft=0,st=OK:2
    4151 TSF:MSG:READ,0-0-4,s=255,c=3,t=27,pt=1,l=1,sg=0:1
    4157 MCO:PIM:NODE REG=1
    4159 MCO:BGN:STP
    10801 MCO:BGN:INIT OK,TSP=1
    11014 TSF:MSG:SEND,4-4-0-0,s=98,c=1,t=37,pt=2,l=2,sg=0,ft=0,st=OK:49
    11233 TSF:MSG:SEND,4-4-0-0,s=99,c=1,t=0,pt=7,l=5,sg=0,ft=0,st=OK:36.5
    
    
    
    General Discussion mysensors

  • #define DEFAULT_RFM69_IRQ_PIN
    TmasterT Tmaster

    @zboblamont said in #define DEFAULT_RFM69_IRQ_PIN:

    So long as these are set before including the MySensors library it should indeed override the defaults.

    OMG. this is the problem! i was defining AFTER Including Mysensors library. well i should knew that if i know more about programing:confounded: :face_palm:

    this code now is working comunicating well.

    I still having an issue. termometer doesn't appear on domoticz. i think it's well presented... i'm not sure whats happen. but the axel for angle, that i need is , working good already .

    The corret statement is .
    #define MY_RFM69_IRQ_PIN 3
    #define MY_RFM69_IRQ_NUM 1

    /*
     ->  __  __       ____
     -> |  \/  |_   _/ ___|  ___ _ __  ___  ___  _ __ ___
     -> | |\/| | | | \___ \ / _ \ `_ \/ __|/ _ \| `__/ __|
     -> | |  | | |_| |___| |  __/ | | \__ \  _  | |  \__ \
     -> |_|  |_|\__, |____/ \___|_| |_|___/\___/|_|  |___/
     ->         |___/                      2.3.2
    */
    
    #define MY_DEBUG
    #include <basicMPU6050.h> 
    #define MY_RADIO_RFM69
    #define MY_RFM69_IRQ_PIN 3 //!< DEFAULT_RFM69_IRQ_PIN
    #define MY_RFM69_IRQ_NUM 1
    #include <MySensors.h>
    #include <RunningMedian.h>
    RunningMedian samples = RunningMedian(100);
    
    #define CHILD_ID 98
    #define CHILD_ID_TEMP 99
    
    
    
    MyMessage msg(CHILD_ID, V_LEVEL);
    MyMessage msg1(CHILD_ID_TEMP,V_TEMP);
    // Create instance
    basicMPU6050<> imu; //credits:https://github.com/RCmags/basicMPU6050
     float incl;
     
      static uint8_t sentValue;
    void presentation()
    {
      // Send the sketch version information to the gateway and controller
      sendSketchInfo("TANQUE", "2.3");
    
      // Register all sensors to gw (they will be created as child devices)
        present(CHILD_ID, S_MOISTURE);
         present(CHILD_ID_TEMP,S_TEMP);
    }
    
     
    void setup() {
      // Set registers - Always required
      imu.setup();
    
      // Initial calibration of gyro
      imu.setBias();
    
      
    }
    
    void loop() { 
      // Update gyro calibration 
       imu.updateBias();
      
       incl= imu.ay();
    
       int val = ((incl+1)*50);
    
       int x = val;
      
      samples.add(x); 
     
     //long m = samples.getAverage(); 
      int m = samples.getMedian();
      delay (200);
    
            
      if (m != sentValue)
       {
       
     
       send(msg.set(m));
       float temp = imu.temp();
      send(msg1.set(temp,1));
      sentValue = m;
      delay (5000);
      
       }
    }   
    
    
    General Discussion mysensors

  • #define DEFAULT_RFM69_IRQ_PIN
    TmasterT Tmaster

    not working.same result .... lets think again.. out of the box... is it possible use same pin form both rfm69 and mpu6050 ? or even not using the int pin on mpu6050... maybe that is the solution...

    _IRQ_NUM 1 shoud be the interrupt pin 1. 0 is D2

    General Discussion mysensors

  • #define DEFAULT_RFM69_IRQ_PIN
    TmasterT Tmaster

    @zboblamont said in #define DEFAULT_RFM69_IRQ_PIN:

    #define MY_RFM69_IRQ_PIN DEFAULT_RFM69_IRQ_PIN

    sory, i couldn't understand, to move it to pin 3 shoud be that?:
    #define DEFAULT_RFM69_IRQ_PIN 3
    #define DEFAULT_RFM69_IRQ_NUM 1

    ?
    i will try and tell if it works. thankyou

    General Discussion mysensors

  • Moisture penetrates my outdoor enclosures...
    TmasterT Tmaster

    i use the simplest boxes that you find,that suface mount with 4 screws and ruber on door.
    But be carefull with wall mount screws. if you drill the back of the box ,water come in beind this box. so this ones,the scrfew holes are outside the encosure an box is sealed...
    another tip is drill on bottom for pass cables but put some neutral silicone. hot glue let water come in with time because expansion coeficient is diferent that the plastic box and open gaps

    4c9e3f72-078c-46a9-9750-e0f495712c7c-image.png

    General Discussion enclosure

  • #define DEFAULT_RFM69_IRQ_PIN
    TmasterT Tmaster

    Good morning . I have a sensor that have an MPU6050 that uses pin 2 for interrupt ,and i need wire the rfm69 for the radio that uses the same pin 2.
    i read that i shoud use #define MY_RFM69_IRQ_PIN 3 and #define MY_RFM69_IRQ_NUM 1 , for move interrupt pin for pin D3 ,but isn't working .
    Always log that on sensor side and stops:

     16 MCO:BGN:INIT NODE,CP=RRNNA---,FQ=8,REL=255,VER=2.3.2
     28 TSM:INIT
     28 TSF:WUR:MS=0 */
    

    already try :#undef MY_RFM69_IRQ_PIN first but the same.. . unce i can't move the pin 2 from mpu6050 library what can i do? thank you

    General Discussion mysensors

  • 2021 EU customs regulatory changes — where should I buy now?
    TmasterT Tmaster

    These extra taxes of 5€ or 7.5€ that you talk doesn't make sense. There in Portugal ,if we buy from ebay,or other similar website ,we pay vat(iva) on website and up to 150€ , we don't pay nothing else.when the goods arrive won't stop on costoms . What sense makes pay 5€ on a arduino promini that cost 1.5€?

    We only pay costoms (mail company) taxes if we do mot pay Vat(iva) on website.

    That extra taxes shoud be for you order more stuff toguether in the same order...and the mail companies don't deal with so many small packages

    General Discussion

  • domoticz motion(type)sensors don't show battery level
    TmasterT Tmaster

    On a new card i updated OS to Raspian Buster and installed latest domoticz V 2.2020. BUT the problem still the same . no battery value present soon as this sensor report a new "data" AND it's as motion sensor and not as any other type of sensor. If it works to others i really don't understand what happens...:confounded:

    Domoticz

  • domoticz motion(type)sensors don't show battery level
    TmasterT Tmaster

    My version it's V4.11207 .I can't upgrade more without upgrade Os from "strecht"to new raspbian Os. Shouldn't be the sensor update frequency because if i go to domoticz now and just change sensor type to" on/off switch" ,battery level just appears there on debices.
    I think that i have to upgrade everyting...Os and domoticz but its a pain,because i have to pair zwave devices from shutters again...and probably new bugs appear.... My thought is;linux that work...don't touch 😝

    Domoticz

  • domoticz motion(type)sensors don't show battery level
    TmasterT Tmaster

    hello. i build an motion sensors that works great but if i select sensor type on domoticz like "motion sensor", the battery level from "devices" disappear. That only happens on "motion sensor type", if i select other like on/off type ,the level appears but than i can't use the "disable after x seconds" feature present only on motion sensor type.
    any one have this problem? i can't find if its an domoticz bug or mysensors , or what what happens
    code is bellow but i think it's ok because if i select other type of sensor ,on domoticz, battery status work good. .thanks.

    06443cd0-18a3-4171-bbc8-5304ac5372cf-image.png

    void setup()
    {
    	pinMode(DI_SENSOR1, INPUT);
    	//pinMode(DI_SENSOR2, INPUT); // sets the motion sensor digital pin as input
      analogReference(INTERNAL);
    }
    
    void presentation()
    {
    	// Send the sketch version information to the gateway and Controller
    	sendSketchInfo("Motion Sensor", "1.0");
    
    	// Register all sensors to gw (they will be created as child devices)
    	present(CHILD_ID, S_MOTION);
    }
    void loop()
    {
      int sensorValue = analogRead(BATTERY_SENSE_PIN);
     float vBat  = static_cast<float>(sensorValue * (8.2/1023));
      
      #ifdef MY_DEBUG
        Serial.print("A0: ");
        Serial.println(sensorValue);
        Serial.print("Battery Voltage: ");
        Serial.println(vBat);
      #endif
        delay(500);
        int batteryPcnt =  static_cast<int>(((vBat-6)/(8.4-6))*100.);
        delay(500);
    
      // ((1e3+150)/150)*1.1 = Vmax = 8.43 Volts
       // 8.43/1023 = Volts per bit = ~0.00804
    
      #ifdef MY_DEBUG
           Serial.print("Battery percent: ");
        Serial.print(batteryPcnt);
        Serial.println(" %");
      #endif
       if (oldBatteryPcnt != batteryPcnt)  {
            // Power up radio after sleep
            
            sendBatteryLevel(batteryPcnt);
            oldBatteryPcnt = batteryPcnt;
            }
    
     //motion 
    
        bool tripped = digitalRead(DI_SENSOR1) == HIGH;
    
    
          Serial.println(tripped);
         send(msg.set(tripped?"1":"0"));
    
        sleep(digitalPinToInterrupt(DI_SENSOR1), RISING, 0);
    }
    
    Domoticz

  • RFM69 Range issues
    TmasterT Tmaster

    The best antena that i tried on rfm69 is the dipole. Direct solder to the rfm69 board. One wire 0.8mm with 8.2cm long on Ant pin,and other in ground in oposite Direction,same size.thos for 868mhz.
    I have the gate sensor at 50m outdoor and never seen a miss comunication.

    I tried spring antenna and same dipole with an coax cable and didn't work at that range. And a mono-pole without ground plane(wire) have more lost packets( i just try communicate directly,dont have any signal scanner).

    Troubleshooting

  • Simple irrigation controller
    TmasterT Tmaster

    @markjgabb said in Simple irrigation controller:

    hey @Tmaster

    are you still using this solution?
    have you made any improvements or come across any issues with using it over time?

    Hello.still working good exept on winter that was disabled.
    Last summer worked until october without any fail.

    My Project
  • Login

  • Don't have an account? Register

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