• stoy@lemmy.zip
    link
    fedilink
    arrow-up
    15
    ·
    10 days ago

    I built a water temp monitoring system together with my dad.

    It monitors the water temperature at a local swimming hole and publishes it on a website so you can check it before heading down.

    I did all of the coding, and had never done anything like that before, but breaking it down into five parts made it decently simple.

    We use a raspberry pi zero, a DS18B20 temperature probe, and a webhotel with php and MySQL.

    Breaking it down into five parts, the code had to accomplish the following.

    1. Get the raw data from the sensor.
    2. Format and clean the data to be useful.
    3. Error check and possible retry if needed.
    4. Send the data to the website.
    5. Display the data on the website.

    1. Was fairly easy, there are plenty of guides on the internet.
    2. This was interesting, the data is sent back from the probe in a variable length, depending on how close to zero C it is, if it reads a negative temp it also shifts where the data is read, I remember it being super annoying to consistently format the data close to zero C so after several attempts I just made the script pretend that the temp was 0c when it got too close to bother with it.
    3. Here I remember building an install script that would prepare a database for the system, then I wrote a test submission page for manual testing and proper submission page for the real thing, these were written in PHP. The data was sent from the Raspberry Pi with curl.
    4. This took the longest, we went through several versions before settling on the current version.

    The script on the Raspberry Pi is written in bash, as we are powering the RPi with a battery through a timer, I configured a systemd service to run on start, run the script, and wait 30 sec then shutdown.

    This is to give me time to stop the script if I need to perform maintenance, normally it runs the script, shuts down, and the timer cuts power shortly thereafter.

    I didn’t want to consistently cut the power as that might corrupt the file system over time, so we made sure that the Pi shuts down gracefully.

    To save power we only run it every 30 min, the power source is a motorcycle battery which lasts about six months.

    The internet connection is provided by a kind neighbor who has allowed this probe to connect through their WiFi.

      • stoy@lemmy.zip
        link
        fedilink
        arrow-up
        3
        ·
        9 days ago

        Thank you, I do have the bash code, I have thought about putting it on github or codeberg.

        One thing is missing from it however.

        I have zero authentication to add data to the database.

        I have thought about adding an API key or so just to make it slightly more secure