{"id":23021606,"url":"https://github.com/raupulus/raspberry-solar-controller-client-to-api","last_synced_at":"2026-05-05T07:32:23.214Z","repository":{"id":95712844,"uuid":"450289742","full_name":"raupulus/raspberry-solar-controller-client-to-api","owner":"raupulus","description":"Proyecto para utilizar una raspberry pi como cliente para rs232/ttl/rs485 de un controlador de carga solar desde el que obtener información para subirla a una API REST. Mirror de https://gitlab.com/raupulus/raspberry-solar-controller-client-to-api","archived":false,"fork":false,"pushed_at":"2024-01-02T18:53:37.000Z","size":163,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-02T18:52:43.225Z","etag":null,"topics":["api","controller","python","python3","raspberry","raspberry-pi","solar","solar-controller","solarcontroller"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/raupulus.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,"publiccode":null,"codemeta":null}},"created_at":"2022-01-20T23:25:18.000Z","updated_at":"2023-03-16T16:30:39.000Z","dependencies_parsed_at":"2025-02-08T09:39:16.909Z","dependency_job_id":null,"html_url":"https://github.com/raupulus/raspberry-solar-controller-client-to-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/raupulus/raspberry-solar-controller-client-to-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Fraspberry-solar-controller-client-to-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Fraspberry-solar-controller-client-to-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Fraspberry-solar-controller-client-to-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Fraspberry-solar-controller-client-to-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raupulus","download_url":"https://codeload.github.com/raupulus/raspberry-solar-controller-client-to-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raupulus%2Fraspberry-solar-controller-client-to-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32640533,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"online","status_checked_at":"2026-05-05T02:00:06.033Z","response_time":54,"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":["api","controller","python","python3","raspberry","raspberry-pi","solar","solar-controller","solarcontroller"],"created_at":"2024-12-15T12:18:42.656Z","updated_at":"2026-05-05T07:32:23.199Z","avatar_url":"https://github.com/raupulus.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# raspberry-solar-controller-client-to-api\n\nProyecto para utilizar una raspberry pi como cliente para rs232/ttl/rs485 de un controlador de carga solar desde el que obtener información para subirla a una API REST\n\n\n## Hardware\n\nPara este proyecto solo es necesario una raspberry aunque según el tipo de\ncontrolador de carga y requisitos de la conexión es posible necesitar elementos\npara la conectividad SERIAL o adaptar la transmisión.\n\nPor ejemplo, en mi caso usando un Renogy Rover LI de 20A RS232 he necesitado\npara un correcto funcionamiento un conversor de RS232 a UART TTL. He optado\npor usar un puerto UART TTL por USB ya que en mi caso con la raspberry pi 4 me \nha sido más fácil de conectar sin perder funcionalidades o velocidad al \nobtener los datos.\n\nEstos son los elementos\n- Raspberry pi 4 (2 GB RAM)\n- Puerto Serial USB UART TTL (3,3V o 5v según conversor)\n- Conversor RS232 a UART TTL (MAX23232)\n- Cable RJ11\n\n## Software\n\n- Raspbian (Debian 12)\n- Python 3.10\n- Postgresql\n\n## Módulos python\n\n- python3-serial \n- python3-requests\n- python3-sql\n- python3-postgresql\n- python3-sqlalchemy\n- python3-dotenv\n- python3-smbus\n- python3-rpi.gpio\n- python3-pip\n- python3-psycopg2\n\nPara instalarlos todos en raspbian sería esta línea:\n\n```bash\nsudo apt install python3-dotenv python3-serial python3-requests \\\npython3-sql python3-postgresql python3-sqlalchemy python3-dotenv python3-smbus \\\npython3-rpi.gpio python3-pip python3-psycopg2\n```\n\nDe todas formas, tener en cuenta que los nombres y origen de los paquetes pueden\ncambiar. Tal vez en futuras versiones se necesite algunos instalar desde pip.\n\nEn la versión actual, recomiendo instalar **pymodbus** desde pip en la \nversión \"2.1.0\" ya que al actualizar hay algunos problemas que aún no he\nsolucionado (En lista de correcciones futuras creando virtualenv)\n\n```bash\nsudo pip install pymodbus==2.1.0 --break-system-packages\n```\n\n## Models\n\nHasta el momento he utilizado esto con mi propio cargador solar por lo que solo\ndispone de este modelo:\n\n- RenogyRoverLi\n\nSi tienes un controlador distinto, tendrías que crear un modelo para ese \nheredando los métodos de AbstractModel e instanciarlo en main.py reemplazando\nel modelo de RenogyRoverLi.\n\n## Instalación\n\nA continuación describo los pasos para instalar que he ido usando durante el\ndesarrollo de la aplicación, será necesario adaptar a vuestra situación cada\npaso.\n\nPara el desarrollo trabajo en el directorio **git** dentro del **home** del\nusuario por defecto: **/home/pi/git/raspberry-solar-controller-client-to-api**\n\nEl SGBD que utilizo es Postgresql, si prefieres otro debería funcionar igualmente\nya que para ello utilizo SqlAlchemy intentnado abstraer esa parte.\n\nEn mi caso tengo varias aplicaciones que utilizan PostgreSQL, por lo que he \ndecido seguir usándolo también para esta aplicación en lugar de instalar otro.\n\n### Crear usuario y base de datos solar_controller\n\nCreo el usuario para postgresql\n\n```bash\nsudo -u postgres createuser pi\n```\n\nAl crear el usuario así, tal vez necesitemos cambiar la contraseña del\nusuario recién creado.\n\nPara ello entramos al intérprete de comandos para postgres con **psql**\n\n```bash\nsudo -u postgres psql\n```\n\nUna vez dentro le pedimos cambiar la contraseña del usuario **pi**:\n\n```postgresql\n\\password pi\n```\n\nCreo la base de datos para almacenar las lecturas hasta que sean subidas:\n\n```bash\nsudo -u postgres createdb -O pi -T template1 solar_controller\n```\n\n### Clonar repositorio\n\nCreamos el directorio git y entramos a él, si deseamos otro directorio no\nes inconveniente mientras existan permisos adecuados para el usuario.\n\n```bash\nmkdir /home/pi/git \u0026\u0026 cd /home/pi/git\ngit clone https://gitlab.com/raupulus/raspberry-solar-controller-client-to-api.git\n```\n\n### Asignar tarea cron para ejecutarse automáticamente al iniciar la raspberry.\n\nPodemos hacer que se inicie automáticamente al iniciar nuestra raspberry y\nde esta forma asegurarnos que siempre tomará datos aunque sea reiniciada.\n\nEn el crontab se añade la línea hacia el script indicando que lo ejecute nuestro\nusuario.\n\nAdicionalmente guardo toda la salida en un log temporal dentro de **/tmp**,\nesto tiene el inconveniente de que se pierde al reiniciar. Lo mantengo así\npues solo lo utilizo para depurar la salida y ver errores que pueda ir\ncorrigiendo. Puedes utilizar cualquier directorio para mantener permanente el\nlog.\n\nNótese que al crontab le asigno un retardo de 50 segundos para dejar tiempo a\nterminar de cargar el sistema (no era necesario pero así aseguro que se\nejecuta correctamente ya que inicio bastantes aplicaciones y servicios).\n\nAñadir la siguiente línea a crontab:\n\n@reboot pi sleep 50 \u0026\u0026 python3 /home/pi/git/raspberry-solar-controller-client-to-api/main.py \u003e\u003e /tmp/log-raspberry-solar-controller-client-to-api.log 2\u003e\u003e /tmp/log-raspberry-solar-controller-client-to-api.log\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraupulus%2Fraspberry-solar-controller-client-to-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraupulus%2Fraspberry-solar-controller-client-to-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraupulus%2Fraspberry-solar-controller-client-to-api/lists"}