Jag har grävt ner mig i API-världen och skapat en första koppling mot Brewfather i syfte att kunna få på hemsidan vad vi håller på med. Kunskap är en lätt börda och här fick jag lära mig en hel del.
Ända sedan vi började med ölbryggning har det alltid varit ett önskemål att få saker automatiskt uppdaterade på hemsidan utan att behöva göra något själv. Så när jag letade verktyg för att använda i dokumentation och planeringssyfte var API-stöd ett viktigt kriterium. Sedan har tiden gått men när vi nu kommit ikapp med uppdateringen av vad vi hittills bryggt kändes det som det var dags att se vad man kunde göra.
Brewfather API
Jag har under åren vi använt det verkligen lärt mig att uppskatta Brewfather. Det fungerar bra och receptmotorn gör att vi får de värden den säger att vi borde få. Det har varit en väg med att justera in bryggverksprofilen rätt men de sista bryggningarna känner vi att vi är riktigt nära. I Brewfather har vi dessutom koll på alla lagervaror vi har hemma och det underlättar inköpet väldigt mycket. Kort sagt har programmet blivit en ovärderlig hjälp för MildasBryggarna. Ska man säga något negativt så är den koppling som finns mot vårt bryggverk (GrainFather G30) inte helt stabilt. Det kan krävas lite försök innan den kopplar upp och den förlorar ibland kontakten under bryggningen. Men recepten är lätta att sända över och under själva bryggningen gör vi allt på bryggverkets panel i vilket fall. Den kopplingen är dock fortfarande i Beta.
Brewfather har ett till synes väldokumenterat REST API. Jag började med att generera en API-nyckel till vårt konto och började testa anropen med hjälp av PostMan. Resultatet såg lovande ut. I detta stadie koncentrerade jag mig på Get-anropen. Det är möjligt att jag vill uppdatera saker i framtiden men i ett första steg var det att hämta data jag ville göra.
Testresultat och kodning
Alla tester såg bra ut och de JSON-objekt jag fick tillbaks verkade innehålla vad de skulle. Det enda jag aldrig fick att fungera var include-parametern till ”Get Batches”. Jag lyckades få den att skicka tillbaks ett fält till men hur jag än försökte kunde jag aldrig komma på hur jag skulle få till flera fält. Jag gick runt det genom att de om alla fält istället via complete=true. Kanske någon har ett tips?
Därefter var det dags att börja koda en php-snutt som hämtar hem det som behövs via APT:t. Jag har rudimentär kunskap i php-programmering men med hjälp av google och Chat GPT gick det ändå förvånansvärt enkelt att få fram den kodsnutt som hämtar data ur Brewfather om planerade bryggningar, pågående bryggningar, jäsningar och flaskjäsningar och spara dem som CSV-filer. Jag vet; en databas hade väl varit snyggare men låt oss ta det stegvis. I det här läget funkar CSV-filer perfekt i vilket fall. Det är data som enbart används för detta och dessutom förnyas till 100% vid varje uppdatering.
Jäskurvor
När det gällde batcher under jäsning ville jag ha en jäskurva på webbsidan. Den skulle visa grunddata om jäsningen samt en kurva lik den som finns inne i programmet. Mätdatat är lätt tillgängligt via API:t men hur får man till ett diagram av det? Jag grävde mig in i tillägg till wordpress men insåg att det var en hel djungel där det mesta dessutom kostade rejält med pengar.
Det jag istället fastnade för var att själv rita diagrammet i php med hjälp av JPGraph. Det lät ju tämligen okomplicerat men var nog den del som tog längst tid i det här projektet. Dokumentationen har, för att uttrycka sig milt, en hel del brister. Dels saknar den viktig info om saker man vill göra och dels är den helt felaktig eller dåligt uppdaterad. Anrop och klasser är omgjorda och saker är borttagna etc.
För att komma runt det hade jag mycket hjälp av Chat GPT får jag väl erkänna. Jag har alltid ansett mig som en bra googlare men Chat GPT var bättre i det här fallet. Jag fick bra tips som för det mesta kom runt problemen jag sprang på. Och till sist hade jag en bild som innehöll det jag ville ha.

Ett exempel på jäskurva ritad med API-data från Brewfather
Nu har det bara att se till att starta upp ett cron-jobb på webbservern som uppdaterade CSV-filer och bilder. Jag satte det på 15 minuters intervall till att börja med. Våra Ferminatorer sänder inte data särskilt ofta så det är meningslöst att uppdatera tätare än så. Dessutom tillåter Brewfather max 500 API-anrop per timme så det är dumt att lägga på för mycket även om det inte blir mer än knappt 10 anrop per uppdatering i dagsläget beroende på antalet batcher under jäsning.
Presentation
Nu återstod ”bara” att presentera det på webbsidan. Med wordpress-pluginen WPCode kan man skriva en kodsnutt i php som man sedan anropar direkt på sidan med hjälp av en textsnutt som man bara skriver direkt i texten eller via ett kodblock. Jag skapade fyra olika kodsnuttar som ritar upp standardtabeller på sidan. Det jag märkte var att WordPress inte automatiskt sänder med de CSS-klasser som hör till standardtabellerna om man inte ritar dit en tabell. Det är väl helt logiskt men habellerna såg inte så snygga ut till att börja med. Jag kom runt det genom att sätta dit en tabell på slutet av sidan helt enkelt.
Det sista som återstod var att göra tabellerna responsiva. Det blir lätt för många kolumner när sidan krymper ner till mobilstorlek. Jag har redan pillat med det när det gäller bloggen för mildasbryggarna. Där blev lösningen att den gör om tabellen till en en-kolumnare via CSS och genom att återanvända och anpassa koden fick jag ett resultat som känns ok just nu.
Slutligen
Detta var ett kul projekt som gav mersmak. Jag känner att det går att utveckla ännu mer men att jag behöver fundera lite mer kring vad som kan göras bättre. Men så här blev resultatet till sist
Lämna ett svar