Git gebruiken

Als ontwikkelaar werk ik mee aan meerdere projecten. In veel gevallen is het nodig om een fork van het stroomopwaartse project te maken en een pull-aanvraag toe te voegen. De eerste stappen (een fork maken) enz. zijn niet moeilijk, en in eerste instantie heb je een up-to-date kloon van de originele website waarop je kunt werken en pull-aanvragen kunt openen voor het stroomopwaartse project. De meeste van deze stappen kunnen worden uitgevoerd met behulp van de web-UI (bijv. bij gebruik van Github). Maar tijdens het werken aan een pull request is het vaak nodig om je gevorkte kloon te synchroniseren, bijvoorbeeld om een nieuwe branch te openen. Dan begint de ellende. Wat kan gebeuren:

  • Je bent een nieuwe branch gestart, maar de hoofd branch liep niet synchroon
  • U moet rebaseen en mogelijk is er een conflict

Mensen beginnen met rebasen, maar halen vaak niet-gerelateerde commits binnen die andere problemen veroorzaken. In dit bericht wil ik enkele methoden delen die ik heb om met dergelijke gevallen om te gaan.

Een nieuwe `branch` openen

Wanneer je een nieuwe pull request wilt openen wil je dat dit correct gebeurt. Ik neem hier aan dat je al een ontwikkelomgeving hebt opgezet met je gekloonde git-repository, klaar om commits te pushen.

Om ervoor te zorgen dat uw fork gesynchroniseerd is, moet u alle upstream-updates ophalen. Dat kunnen we doen met:

git fetch --all

of als het gewoon is upstream, we kunnen gebruiken

git fetch upstream

welke sneller is.

De volgende stap is het uitchecken van de doelvertakking waartegen je de pull request wilt maken. Dit kan zijn main, master of de dev, maar soms kan dit zelfs anders zijn. In ons voorbeeld gebruiken we main.

git checkout main 

Nu willen we resetten main naar dezelfde staat als upstream\main, omdat dit de branch is waar we het pull-verzoek naartoe willen sturen. We moeten ervoor zorgen dat er geen niet-vastgelegde bestanden zijn, aangezien deze zullen worden verwijderd!

git reset --hard upstream/main

Als we de --hard markeer dan zal git niet-vastgelegde bestanden maken voor alle wijzigingen tussen de oude en nieuwe staat. Dit kan handig zijn als we commits willen terugdraaien, maar niet bij het starten van een nieuwe branch.

Vanaf hier kunnen we de lokale vestiging naar onze vork duwen met:

git push

Nu zijn we op hetzelfde niveau als de doelvestiging en kunnen we een nieuwe vertakking openen die synchroon loopt met upstream. We kiezen een nieuwe branchenaam die de naam van ons pull-verzoek weerspiegelt, in dit voorbeeld zal ik gebruiken test-pull-verzoek als filiaalnaam.

git checkout -b test-pull-request

Dit creëert een nieuwe lokale branch, vanaf hier kun je beginnen met coderen en je commits toevoegen. Als je er klaar voor bent, kun je je branch naar je fork publiceren (ik gebruik origin als naam voor de gekloonde repository). Vanaf dat moment wordt elke nieuwe commit gepusht origin ook. Wanneer we onze nieuwe lokale branch publiceren, moeten we ook de stroomopwaartse branch instellen, zodat we later een pull-aanvraag kunnen openen.

git push --set-upstream origin test-pull-request

Wanneer alle commits zijn gedaan en we al onze commits hebben gepusht (git push), dan zijn we klaar om een pull request te openen.

Open een nieuwe pull prequest

Wanneer u Github gebruikt, is het raadzaam om een pull-aanvraag te openen met behulp van de web-UI of met behulp van een plug-in vscode of andere ontwikkelomgeving. In de meeste gevallen is er een sjabloon die moet worden ingevuld. Zorg ervoor dat de juiste commits worden weergegeven en dat u de juiste doeltak hebt geselecteerd!

Rebasen en oplossen van problemen met `mergen`

Soms moeten we `rebasen`. Dit kan gebeuren als de PR te oud is en we moeten synchroniseren met onze target branch. Persoonlijk zou ik de originele commits bovenop de rebased branch willen forceren in plaats van een merge-commit toe te voegen. Force-push maakt het gemakkelijker om de commits in het pull-verzoek bij te houden en vermijdt extra merge-commits. Om correct te kunnen rebasen, moeten we eerst de nieuwste updates ophalen. We kunnen hiervoor gebruiken:

git fetch upstream

Nu zorgen we ervoor dat we bij het juiste filiaal zijn uitgecheckt.

git checkout test-pull-request

Om te rebaseen met onze stroomopwaartse doeltak starten we een rebase-opdracht.

git rebase upstream/dev

Als je de commits wilt selecteren die moeten worden opgenomen (bijvoorbeeld wanneer je sommige commits wilt terugdraaien), zou je moeten overwegen om de -i vlag om interactief rebasen te starten.

git rebase -i upstream/dev

Voor elke commit zal git proberen te rebaseen, als dit niet lukt, dan moet je je bestanden corrigeren, opslaan en stagen om git te vertellen welke wijzigingen moeten worden aangebracht. Na staging kun je doorgaan met rebasen:

git rebase --continue

Zorg ervoor dat je alleen wijzigingen aanbrengt in commits die direct gerelateerd zijn aan de samenvoegconflicten en die de gewenste wijzigingen voor die bepaalde commit weergeven. Herhaal dit voor de andere commits (indien van toepassing) totdat de rebase met succes is voltooid.

Als alles een puinhoop wordt, is er een redding door het `merge` commando af te breken.

git rebase --abort

De volgende stap is dat we niet alleen commits nu pullen en pushen, maar alleen rebased commits forceren. Dit kan onlogisch zijn, maar we willen ervoor zorgen dat we de exacte lokale situatie naar onze hand zetten origin tak.

git push --force

Nu zou onze branch opnieuw moeten worden gebaseerd en in het pull-verzoek zouden we alleen de commits van onze PR moeten zien, of de geselecteerde commits uit het bestand (bij gebruik van de -i keuze).

Nieuwe schone commits maken van eerder werk

Als je een grotere PR hebt met meerdere bestanden en je bestaande commits wilt vervangen of ongedaan wilt maken zonder je werk te verliezen, kun je dit gebruiken git reset.

Met git log we kunnen de commits die we hebben gemaakt bovenop onze branch laten zien. Om deze commits te vervangen moeten we rebaseen naar de commit van waar we opnieuw willen beginnen.

Stel dat we twee commits hebben die we over willen doen. Laat ze zien met git log.

commit 6090d321e3926ad9c5ffdd026f7c2fb046cdbbf2 (HEAD -> test2) Auteur: jij Datum: wo 24 mei 14:19:24 2023 +0000 commit 2 commit a0ad22921fb8f5797aeb4e414cf3403b80027a3d Auteur: jij Datum: wo 24 mei 14:18:03 2023 +0000 commit 1 commit abf08f66a4c7e01955213c228542884951d45a11 (upstream/dev, origin/test2, origin/dev, origin/HEAD, dev) Auteur: gebruiker Datum: wo 24 mei 01:38:16 2023 -0500 Update upstream

Ervan uitgaande dat we geen niet-vastgelegde bestanden hebben, kunnen we rebaseen om vast te leggen abf08f66a4c7e01955213c228542884951d45a11 (upstream/dev, origin/test2, origin/dev, origin/HEAD, dev).

git reset abf08f66a4c7e01955213c228542884951d45a11

Nu zul je zien dat de wijzigingen van de laatste 2 commits nu unstaged bestanden zijn. Je kunt nu de wijzigingen voor je nieuwe commit stagen, of, als je wilt, dit in meer commits doen totdat alle wijzigingen zijn gestaged en vastgelegd. Nu, om de oude commits te vervangen door de nieuwe, kunnen we ze forceren om ze naar onze te pushen origin tak.

git push --force

Nu zijn je commits vervangen door de nieuwe.

Tijdelijk niet opgeslagen werk opslaan

Soms moet je tussen branches wisselen, maar heeft u niet-vastgelegde bestanden. Als pre-commit wordt gebruikt, is het misschien niet mogelijk om te committen. In plaats daarvan kunt u uw wijzigingen op de stapel opslaan. U kunt uw wijzigingen later terugkrijgen door ze uit de stapel te halen. Dit werkt ook als u niet-vastgelegde wijzigingen wilt toepassen op een andere branch.

Om uw niet-toegewijde werk op te bergen:

git stash

Om de wijzigingen terug te laten komen:

git stash pop

Er is veel meer dat je kunt doen met git stash, maar ik zal het hier kort houden.

Voor meer git-commando's gebruik je de online documentatie.

Elro Connects -Home Assistant

Ik ben bezig met een integratie voor Elro Connects. De integratie moet gebruikers met Elro Connects brand-, water- of koolmonoxidemelders in staat stellen deze met Home Assistant te integreren. Als u Elro Connects brandmelders bezit en graag wilt testen, kunt u de Elro Connects integratie met HACS toevoegen aan Home Assistant.

Voeg de volgende repository toe aan HACS https://github.com/jbouwh/ha-elro-connects/. Je moet Home Assistant opnieuw opstarten nadat je de aangepaste integratie hebt gedownload. Na de herstart zou je de integratie aan Home Assistant moeten kunnen toevoegen.

Voor elk alarm wordt een sirene entiteit gecreëerd. Als u deze inschakelt, wordt een testalarmverzoek verzonden. Je kunt de sirene uitzetten om een (test)alarm uit te zetten.

Laat me weten of je deze integratie leuk vindt. Als uw apparaat niet wordt ondersteund of niet correct werkt, laat het me dan weten!

InfluxDB 2-ondersteuning

Omnikdatalogger v1.11.1 heeft nu native ondersteuning voor InfluxDB v2-authenticatie. Het is niet langer nodig om v1-authenticatie-ondersteuning te bieden. Om het in te schakelen, moet u de configuratieparameters org, bucket, en token, configureren. Als u HACS gebruikt via AppDaemon, zorg er dan voor dat u influxdb-client aan de python-packages toevoegt.

Daarnaast kunt u nu gebruik maken van een SSL-verbinding.

Lees meer over de nieuwe release:

https://github.com/jbouwh/omnikdatalogger/releases/tag/v1.11.1-1

Omnik datalogger nieuws update

PIP ondersteuning voor omnikdatalogger en omnikdatalogerproxy

Omnikdatalogger kan vanaf nu worden geïnstalleerd met PIP:

sudo pip3 installeer omnikdatalogger

Om omnikdataloggerproxy te installeren gebruik je sudo pip3 installeer omnikdataloggerproxy

HACS standaard ondersteuning

Omnikdatalogger kon als custom repository binnen HACS worden geïnstalleerd. Een verzoek om Omnik data logger toe te voegen aan de ingebouwde store is aangevraagd en goedgekeurd.

Caching van handmatige invoer voor Home Assistant

Ik vond het vervelend dat Home Assistant de handmatige invoerselecties die ik voor mijn automatiseringen gebruik, herstelt. Om een aanhoudende status mogelijk te maken, heb ik een generieke scrit gemaakt die de status van deze invoer naar schijf verzilvert en deze automatisch herstelt wanneer Home Assistant opnieuw wordt opgestart.

De script is geschreven in Python en is geschreven om mee te werken AppDaemon.

De code laat zien hoe u de Home Assistant-integratie-API gebruikt die bij AppDaemon wordt geleverd.

Nieuwe release Omnik datalogger

Rekening https://GitHub.com/jbouwh/omnikdatalogger voor de nieuwe release (0,91-beta) van Omnik datalogger.

De laatste dagen lag omnikport plat. Ondertussen vond ik een tweede methode om toegang te krijgen tot je gegevens. Tijdens de storing het portaal op https://www.solarmanpv.com/portal was de hele tijd beschikbaar. Hier kunt u ook uw gegevens terugvinden. Dit bewijst dat omnikportal slechts een skin is en dat de gegevens bij solarman PV staan. Ik vond een API en werkende code die toegang geeft tot de realtime informatie. Deze API lijkt nauwkeurigere en tijdige toegang te geven tot de meest recente gegevens die zijn gelogd. Helaas is de API niet TLS-gecodeerd en gebruikt deze een gehashte MD5-wachtwoordlogin. Niet erg veilig. Toch is de alternatieve API voorlopig een goed alternatief. In het hoofdmenu staat nu een speciale pagina voor de omnik datalogger-software.

Inplugbare client

De nieuwe release wordt geleverd met een pluggable client voor logging. Dit maakt het eenvoudig om de logcode te wijzigen door alleen de configuratie te wijzigen.

Nieuwe client in ontwikkeling voor lokale logging

Bij oudere Omnik omvormers is het niet mogelijk om de data rechtstreeks van de omvormer te krijgen. Nieuwere omvormers luisteren op poort 8899 en kunnen direct reageren. De datalogger in de omvormer stuurt ongeveer elke 5 minuten een update naar een vast IP van een logging server in het Solarman datacenter. Het IP-adres waarop de omvormer inlogt is vast en kan niet worden gewijzigd via de interface, maar het is mogelijk om het bericht te onderscheppen door de server te simuleren met behulp van een NAT-regel en een statische route voor het IP-adres in uw netwerk. De code om de gelogde gegevens te ontleden is: al verkrijgbaar te gebruiken, dankzij Woutrrr. De software kan op een TCP-poort luisteren naar de omgeleide datalogger-sessies. De code is gebaseerd op: dit project van t3kpunk. Een tutorial hoe dit te gebruiken zal op deze site verschijnen zodra de code klaar is voor release. Lokale logging geeft meer gedetailleerde informatie dan momenteel beschikbaar is met behulp van de API's. Extra sensoren zijn:

  • AV Spanning* en Stroom en Frequentie (3 fase als uw model dit ondersteunt)
  • DC-spanningen en -stromen voor alle strings (max 2)
  • De temperatuur* van de omvormer

*Deze waarden worden ook naar PVoutput gestuurd. En elke nieuwe sensor komt beschikbaar via de MQTT-plug-in.

DSMR-integratie

Voor ouput naar pvoutput.org heb ik gepland om een integratie te maken voor de Nederlandse Slimme Meter (DSMR). Een adapter van de P1-connector naar een USB seriële interface is algemeen verkrijgbaar. Het integreren van merken is mogelijk om het werkelijke energieverbruik te berekenen. Natuurlijk zal al deze nieuwe sensorinformatie ook beschikbaar zijn voor de MQTT-uitvoerplug-in.

Storing omnik-portaal

De omnik portal en app en API zijn de afgelopen dagen niet beschikbaar geweest. Dus datalogging is op dit moment niet mogelijk. Ik heb ontdekt dat Omnik-dataloggers inloggen in de database van SolarmanPV. Het lijkt erop dat je nog steeds je live-uitvoer en geschiedenis kunt zien.

De URL is https://www.solarmanpv.com/portal/LoginPage.aspx en u kunt uw omnik-portalgegevens gebruiken. Ik ben bezig om de API werkend te krijgen, zodat de software kan worden bijgewerkt. Helaas is er alleen een werkende onbeveiligde API-interface. Er is een veilig alternatief, maar daar is een API-sleutel voor nodig. Ik ben hier mee bezig.

Nog even geduld, ik zal de komende dagen met een werkende update komen.

Groeten,

Jan

Dorst (pre) release voor de omnik datalogger

De eerste pre-release van de nieuwe Omnik datalogger is nu beschikbaar. Ik hoor graag of dit voor jou werkt! Als je opmerkingen of problemen hebt, laat het me weten!

Details vrijgeven

Versie: 0.9-alpha (pre-release)

Deze pre-release biedt een oplossing om de huidige staat van uw Omnik-stroomomvormer te integreren in uw favoriete domoticasysteem. Het script leest omnikportal.com uit met uw inloggegevens en stelt u in staat de realtime gegevens van uw zonne-installatie te verwerken.
De realtime output kan worden doorgestuurd naar pvoutput.com of via MQTT naar uw favoriete Home Automation-project worden gestuurd. De MQTT-implementatie ondersteunt de Home Assistant Automatic MQTT-detectie.

U kunt het script vanaf de opdrachtregel uitvoeren, systemd gebruiken of AppDaemon gebruiken, zodat u rechtstreeks met Home Assistent kunt integreren.

Veel plezier! Laat me je ervaring weten als je problemen hebt.

Je kunt de release downloaden hier.