Scheijgrond.com

Ik Google mijzelf

Update Oktober 2024

Deze maand heb ik een raspberry pi in gebruik genomen om mijn GoodWe omvormer uit te kunnen lezen. Ik gebruikte al een raspberry pi om mijn Omnik omvormer uit te lezen en de resultaten naar https://PVOutput.org te sturen. Deze hebben ook een leuke app waarmee de hoeveelheid opgewekte zonneenergie bekeken kan worden. Met de nieuwe omvormer wilde ik hetzelfde bereiken zodat ik ook de vergelijking met de oude omvormer kon doen. Om dit te realiseren heb ik een hoop nieuwe dingen geleerd.

Raspberry Pi 5 met NVME

Allereerst de hardware, een Raspberry Pi 5 met een NVME hat. Dit was overigens niet de standaard Raspberry Pi NVME hat want deze heeft een aantal nadelen. Deze dekt namelijk de ventilator van de processor af en er passen geen "standaard" nvme drives van 80mm op. Vandaar de NVME Hat van GeekWork de X1001

Geekwork X1001

Op de site van Geekwork staat goed beschreven wat de stappen zijn voor het in gebruik nemen van de NVME hat. Allereerst de Raspberry Pi "gewoon" installeren op de SD kaart. Vervolgens kan de SD kaart gekloont worden naar de NVME drive. Vervolgens wat aanpassingen doen in de de boot config files en de SD kaart is niet meer nodig.

Echter liep ik wel tegen een aantal dingen aan:

  • Check de compatibiliteit van de NVME drive, niet iedere drive doet het.
  • Formateer de NVME drive eerst voordat hij in de Hat gaat via een windows machine of iets anders. Dan wordt hij beter herkend.
  • Er wordt ook beschreven om de PCI snelheid van de poort op 3x te zetten, dit zorgde bij mij voor stabiliteits problemen. Deze parameter dtparam=pciex1_gen=3 had ik eerst toegepast. Hierdoor wordt ook het stroomverbruik van de NVME drive groter wat zorgde voor problemen met het bestandssysteem wat naar readonly ging en de hele pi bevroor. Na het verwijderen van deze parameter ging de stabiliteit omhoog.

2024-11-28 UPDATE: Helaas liet de stabiliteit toch te wensen over en heb ik een iets forsere server neergezet.

Docker op de Raspberry pi

De Raspberry Pi 5 maakt het mogelijk om Docker containers vanaf de Pi te gaan draaien. Dat was de volgende stap in de deployment. Hier zijn wel voldoende handleidingen voor hoe dat het beste te installeren dus die laat ik achterwege.

Het lijstje containers welke ik uiteindelijk op mijn host draai:

  • portainer voor het beheren van de containers en deployment van nieuwe containers handleiding
  • frigate NVR met Google Coral handleiding i.c.m. portainer
  • 2 containers voor het monitoren van de GoodWe omvormer
  • Uptime voor gemakkelijk inzicht of alles draait github
  • Wireguard github

Deployments via Portainer

Het is mogelijk om in Portainer nieuwe container images te bouwen en te deployen wat super makkelijk is.

De stappen hierbij zijn bij images eerst een nieuw image maken waarbij de local files geupload kunnen worden. Daarna kan het image bij containers gebruikt worden voor het runnen van de container. Het alternatief is om de stacks optie te gebruiken waar eigenlijk de docker-compose file gebruikt kan worden. Denk bij het runnen van de container aan de environment variabelen en het openen van de poorten. Voeg ook de environment variabele PYTHONUNBUFFERED=1 toe om logging van Python in de logging van de container terug te zien komen.

Voor het Mounten van een drive naar het windows host systeem moet de /mnt achterwege gelaten worden in portainer. Zie ook op StackOverflow. Dan is het mogelijk om de windows host te benaderen voor het opslaan van bestanden.

GoodWe en PVOutput Pro

De GoodWe omvormer logt standaard naar de SEMS portal toe. Dit wordt ook aangeven op de omvormer, als het gele lampje brandt heeft hij verbinding. Nu zijn er twee manieren om de gegevens van de omvormer bij PVOutput te krijgen.

De eerste manier is het ophalen van de gegevens bij de portal en die vervolgens weer doorsturen. Dit is ook de manier waarop bijvoorbeeld Homewizard gegevens van de GoodWe omvormers kan tonen. Hier zijn standaard containers voor die na invoeren van de portal gegevens en de pvoutput gegevens kunnen zorgen voor de logging zoals bijvoorbeeld het image van Mark Ruys, let wel op dat het image in de dockerhub versie 1.3.0 is welke nog met de oude versie van de Sems portal werkt. Op zijn github staat versie 1.3.6 welke de juiste versie van de SEMS api gebruikt.

De tweede manier is het ophalen van de gegevens direct bij de omvormer via de ModBus van de omvormer. Hiervoor was reeds een mooi python script geschreven dit werkte ook prima in een eigen docker container. Tot de zon onder was gegaan, de volgende ochtend kon er geen verbinding meer gemaakt worden met de omvormer. Bij het starten van de app van de omvormer ging het script het ineens ook weer doen. Dit bleek te maken te hebben met een UDP broadcast met een "magic string" die over het netwerk werd gedaan waardoor de Modbus van Goodwe wakker werd. In het script stond ook een discover methode welke dezelfde broadcast deed, maar een broadcast werd binnen de linux container niet toegestaan en leidde tot een ERRNO 13 en de Modbus bleef slapen. Uiteindelijk een eigen variant van het de broadcast toegevoegd naar een vast IP adres waardoor de modbus ook tot leven gewekt werd. Vervolgens ook nog wel een aantal varianten van dit script en de container gevonden zoals deze, maar dat was een stuk minder leerzaam geweest.

Google Coral op Windows in Docker

Het is ook mogelijk om de Google Coral USB dongle te gebruiken in Docker gehost op Windows maar dan zijn er een paar handige weetjes.

  1. De Google Coral moet zowel binnen Windows als in WSL2 geinstalleerd worden.
  2. De usb poort moet vanuit Windows doorgegeven worden naar WSL2 zie github voor het gebruik van usbipd
  3. De Google Coral maakt zich in WSL pas bekend als hij gebruikt wordt. Als in Linux lsusb uitgevoerd wordt, dan staat er in eerste instantie Global Unicorp.

Via powershell kan onderstaande uitgevoerd worden om te zorgen dat de TPU goed bekend gemaakt wordt. Let op de 1-4 is de poort waar de Google Coral aan hangt te zien via usbipd list

    usbipd unbind -a
    usbipd unbind -a
    usbipd bind --force -b 1-4
    usbipd attach --wsl -b 1-4
    usbipd list