{"id":15172774,"url":"https://github.com/pl063/weather-station","last_synced_at":"2026-02-18T03:02:15.257Z","repository":{"id":201055052,"uuid":"706303992","full_name":"pl063/weather-station","owner":"pl063","description":"Weather station for home","archived":false,"fork":false,"pushed_at":"2024-04-19T09:10:07.000Z","size":446,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-14T02:36:37.252Z","etag":null,"topics":["bme280","javascript","mongodb","python","raspberry-pi-4","raspberrypi","weather-station"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pl063.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-10-17T17:22:46.000Z","updated_at":"2024-07-11T18:33:11.000Z","dependencies_parsed_at":"2023-11-02T20:23:08.160Z","dependency_job_id":"be20c046-cc27-45b0-8d81-5fa16e80138c","html_url":"https://github.com/pl063/weather-station","commit_stats":null,"previous_names":["pl063/weather-station"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/pl063/weather-station","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pl063%2Fweather-station","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pl063%2Fweather-station/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pl063%2Fweather-station/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pl063%2Fweather-station/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pl063","download_url":"https://codeload.github.com/pl063/weather-station/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pl063%2Fweather-station/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29566646,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T00:47:08.760Z","status":"online","status_checked_at":"2026-02-18T02:00:09.468Z","response_time":162,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bme280","javascript","mongodb","python","raspberry-pi-4","raspberrypi","weather-station"],"created_at":"2024-09-27T10:04:18.868Z","updated_at":"2026-02-18T03:02:15.238Z","avatar_url":"https://github.com/pl063.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Maintainability](https://api.codeclimate.com/v1/badges/c1713fd96a5aaa62b9a5/maintainability)](https://codeclimate.com/github/pl063/weather-station/maintainability)\n\n# Weather station\nYou can remotely monitor the state of temperature, humidity, air pressure in your home using this Weather station, built with Raspberry Pi 4 and sensors. Thanks to its GUI this system, you can always view the logs in the database. \n\n## Wiring up the stations components\n\u003ca href=\"url\"\u003e\u003cimg src=\"https://github.com/pl063/weather-station/blob/main/media/weather_station_beta_bb.png\" align=\"center\" height=\"450px\" width=\"300px\" \u003e\u003c/a\u003e\n\n| Device | Device Pins    | Raspberry Pins    |\n| :--   | :-- | :-- |\n|BME280|   |   |\n|  | VCC  | GPIO 17   |\n|  | GND  | GND   |\n|  | SDA  | SDA   |\n|  | SCL  | SCL   |\n|YL-83 control board|   |   |\n|  | VCC  | +5V   |\n|  | GND  | GND   |\n|  | AO  | x   |\n|  | DO  | GPIO 18   |\n|RGB led|   |   |\n|  | Cathode  | GND   |\n|  | Red  | GPIO 13   |\n|  | Blue  | GPIO 12   |\n|  | Green  | GPIO 19   |\n|RTC|   |   |\n|  | VCC  | +3.3V   |\n|  | GND  | GND   |\n|  | SDA  | SDA   |\n|  | SCL  | SCL   |\n|  | NC  | x   |\n|EEPROM|   |   |\n|  | VCC  | +5V   |\n|  | GND  | GND   |\n|  | SDA  | ID_SC   |\n|  | SCL  | ID_SD   |\n|  | WP  | GND   |\n\n\n# Database setup\nFor this project, I use the MongoDB cluster. It consists of several collections: \"current-days\", \"current_weeks\" and \"current_months\". \nThe collection names follow Mongo convention for naming.\n\nThis current version of Viper - v.0.0 - uses only \"current-days\" for storing entries for the day and \"current-weeks\" for migrating data objects from \"current-days\" at 0.00hrs his every day.\n\nThe data schema has the following properties: \n- temperature - type Number, rounded up\n- humidity  - type Number, rounded up\n- pressure - as the above\n- rain -  type Number 1 or 0. representing true or false \n- created_at - timestamp\n\n# Reading sensors\n\nBME280 uses the I^2C  protocol for communication. The default address may be 0x77 or 0x76. The protocol must to be enabled on the Raspberry Pi 4. To check the used addresses, run the terminal command tools \"sudo i2cdetect -y 1\". You may need to install  I^2C tools first.\n\nI use the open-source Python library \"bme280pi\" to retrieve the sensors output.\n\nSince this sensor sometimes may disappear from I²C addresses, it has to restart occasionally. That is why its power source is connected to a GPIO pin.\n\nYL-83 control board returns digital output, it is connected to a GPIO pin.\n\nCron jobs are important for the station's functionality. To use them, add these to “crontab -e” (*WITHOUT* sudo):\n\n@reboot python3 /path_to/main_weather.py \n\n0 1 * * * sudo reboot\n\n# Web GUI \nIt is based on ExpressJS and HandlebarsJS. It consists of server-side services and web client. You need to start the \"index.js\" file with node. For the best performance, use the \"nodemon” package. The \"Morgan\" logger logs into the terminal each request to the server, the time for the response, and the response code.\n\nThe Web GUI is *not* ran on the microcontroller, only the code in the directory, named \"reading-sensors\".\n\n# Viper HAT\nI used utils (https://github.com/raspberrypi/utils) eeptools for flashing the eeprom image.\n\n# Gallery\n\u003ca href=\"url\"\u003e\u003cimg src=\"https://res.cloudinary.com/weather-station-viper/image/upload/v1713517195/Screenshot_2024-04-19_at_11-59-33_Weather_station_Viper_v9eioc.png\" align=\"center\" height=\"568px\" width=\"1366px\" \u003e\u003c/a\u003e\n\n\u003ca href=\"url\"\u003e\u003cimg src=\"https://res.cloudinary.com/weather-station-viper/image/upload/v1713517305/Screenshot_2024-04-19_at_12-00-10_Weather_station_Viper_fptn31.png\" align=\"center\" height=\"568px\" width=\"1366px\" \u003e\u003c/a\u003e\n\n\u003ca href=\"url\"\u003e\u003cimg src=\"https://res.cloudinary.com/weather-station-viper/image/upload/v1713517305/Screenshot_2024-04-19_at_12-00-10_Weather_station_Viper_fptn31.png\" align=\"center\" height=\"568px\" width=\"1366px\" \u003e\u003c/a\u003e\n\n\n\u003ca href=\"url\"\u003e\u003cimg src=\"https://res.cloudinary.com/weather-station-viper/image/upload/v1713517381/Screenshot_2024-04-19_at_12-00-47_Weather_station_Viper_i9pn8u.png\" align=\"center\" height=\"568px\" width=\"1366px\" \u003e\u003c/a\u003e\n# This project comes with NO WARRANTY.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpl063%2Fweather-station","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpl063%2Fweather-station","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpl063%2Fweather-station/lists"}