# Introduction (WIP) An attempt to create a remote weather station hub on the Raspberry Pi. The repository consists on several modules written in C# and an Android application written in Java. Communication between the Raspberry and the Android application is done via [gRPC](https://grpc.io/). **The project is still undergoing development and it's not production ready.** [![CircleCI](https://circleci.com/gh/dnutiu/NucuCar.svg?style=svg)](https://circleci.com/gh/dnutiu/NucuCar) # Architecture TBD # Installing and Developing ## Requirements To build this project you will need to install .Net Core 3.1 and Android Studio. * https://docs.microsoft.com/en-us/dotnet/core/install/ * https://developer.android.com/studio To run this project on the Raspberry Pi you will need dotnet core 3.1. installed. ## Building The following script provides instructions on how to build the whole project and deploy the NucuCar.Sensors module on the Raspberry Pi. #### Manual ```$xslt // Build project dotnet build --runtime linux-arm -p:PublishSingleFile=true --configuration Release // Navigate to desired project directory, for example NucuCar.Sensors. cd NucuCar.Sensors // Create .tar tar -zcvf nh.tar.gz .\bin\Release\netcoreapp3.1\linux-arm\* // Copy onto pi (replace with your ip, user) sftp pi@192.168.0.100 sftp> put nh.tar.gz sftp> exit // SSH into pi ssh pi@192.168.0.100 // Extract the archive and cd into it tarĀ -zxvf nh.tar.gz cd bin/Release/netcoreapp3.1/linux-arm/ // Grant execution permissions chmod +x NucuCar.Sensors // Run the program ./NucuCar.Sensors ``` To make it easier for you to run the project, you may define a SystemD service for it: 1\. Create the SystemD service file with the following command: ```bash sudo nano /etc/systemd/system/nucucar_sensors.service ``` 2\. Paste the following contents and make sure to update the WorkingDirectory and ExecStarts paths: ``` [Unit] Description=NucuCar.Sensors SystemD Service. After=network.target [Service] User=pi Group=pi WorkingDirectory=/home/pi/NucuCar/bin/Release/netcoreapp3.1/linux-arm ExecStart=/home/pi/NucuCar/bin/Release/netcoreapp3.1/linux-arm/NucuCar.Sensors [Install] WantedBy=multi-user.target ``` 3\. SystemD commands ```bash sudo systemctl start nucucar_sensors sudo systemctl stop nucucar_sensors sudo systemctl restart nucucar_sensors sudo systemctl status nucucar_sensors ``` Enable starts the service after the pi has booted, disable undoes what enable does. ```bash sudo systemctl enable nucucar_sensors sudo systemctl disable nucucar_sensors ``` --- #### Docker-Compose To run the project you can take advantage of `docker-compsose` and run it with the following commands: ```bash git clone https://github.com/dnutiu/NucuCar.git cd NucuCar docker-compose up ``` _(This is not recommended as the performance will take a significant hit.)_ ## Directory Structure Overview ### NucuHub.Android Holds the Android application. We are currently targeting Android API 29+. ### NucuCar.Domain Holds common classes and interfaces that are required by the projects, provides all the types that are generated via protocol buffers and some utility classes. ### NucuCar.Telemetry Holds concrete implementation for telemetry publishers and workers. The Telemetry project can be used by other projects such as NucuCar.Sensors to send telemetry into the cloud. This project is not deployed. ### NucuCar.Sensors Manages all the sensors. For more info see the readme file located in the project directory. This module is runnable and is deployed on the Raspberry Pi. ### NucuCar.TestClient Command line utility to play around with the car functionality. You can use it to remotely read data from the sensors via gRPC methods and to publish and read telemetry data. ### Docs Holds project resources and documentation.