Hej hej killingtider!

Killingarnas ankomst är en galen tid på året. Man kastas mellan sötchocker, rädsla, lycka och utmattning. Men vilken känsla det är när allt går bra. När killingen kommer ut, andas och ställer sig upp på vingliga ben. Fortfarande blind av fosterslem men ändå på bestämd jakt efter mjölk. Sen börjar den nyfiket upptäcka omgivningen med spännande höbalar (som går att hoppa på!) och andra getmammor (som också går att hoppa på!). När det blir för läskigt tvärvänder man och springer till mamma för att tröstdia. Efter några dagar är nervositeten som bortblåst och det är zoomies och galna killingstunt för hela slanten. De mer överbeskyddande mammorna springer förtvivlat efter med uppspärrade ögon och kan bara titta på när deras kära barn gör bakåtvolter från fönsterkarmen. Andra pustar ut och lunkar avslappnat iväg till de andra mammorna för att äntligen få lite egentid.

Veckorna innan förlossningarna är de blivande mammorna ordentliga runda och vill helst bara ligga och smaska hö hela dagarna. Då håller vi extra koll på dem, dels genom att vara i stallet oftare men också genom en kamera med ljud som är uppkopplad till mobilen. Det vi är uppmärksamma på är om någon get beter sig annorlunda än vanligt, vissa blir extra pratiga och verkar stressade och andra blir ovanligt tysta och drar sig undan.

När förlossningen börjar vill vi vara närvarande för att kunna ingripa om något går fel, som att killingen är felvänd eller har fastnat, vilket gällde flera av förlossningarna i år. När killingen väl är ute vill vi se att mammans instinkter kickar in och att hon börjar slicka rent killingen, då brukar det inte ta lång tid innan den efter några vingliga försök lyckas ställa sig upp och leta efter spenen. Att hitta den däremot är inte alltid lika lätt så då kan den behöva lite hjälpsam guidning. I de fall där killingen inte lyckas dricka mjölk själv mjölkar vi mamman i en nappflaska och flaskmatar eftersom det är avgörande att den får i sig råmjölken inom en timme. Sen försöker vi lära den att hitta spenen igen. 

Det gäller att hålla koll de första veckorna så att killingen får dia och växer. I vissa fall kan mamman avvisa den eller så fattar den helt enkelt inte galoppen och då måste den givetvis flaskmatas så den får i sig näring. Det händer att en avvisad killing blir adopterad av en annan mamma och det funkar lika bra det! Huvudsaken är att det finns mjölk och kärlek att tillgå.

Nu är nästan alla killingar födda för året (64 killingar, 38 förlossningar) och trots en del ordentliga rysare har allt gått bra. Nu hoppas vi på att hitta nya fina hem till dem när de är leveransklara i april. Bockarna är fantastiska naturvårdare och perfekta för att röja upp sly och övervuxna marker! För att tinga killingar kan ni ringa eller maila oss.

Ost gjord på solljus

Vi kommer inte höja våra priser i år! Tack vare solceller, effektiv energiförbrukning och att vi har nästan hela produktionskedjan på gården.


Det fina med ostystning är att det naturligt följer samma kurva som solljuset och därför är det optimalt att driva mejeriet med energi från solceller. När midsommarsolen står som högst, har getterna som mest mjölk och vi ystar på för glatta livet. Sen när soltimmarna minskar, ja då minskar också mjölkmängden och därmed ystningen och energiförbrukningen.


På vintern använder vi bara el till det allra nödvändigaste. Getterna går på sparlåga i väntan på killingarnas ankomst och istället för mjölkning och ystning passar vi på att riva, fixa, rensa och andra projekt som inte hinns med under högsäsongen. Sen till våren när dagarna ljusnar, ja då drar allt igång igen. Hagarna grönskar, mjölken flödar och solen skiner rätt ner i osten!

Getter för naturvård

Funderar ni på att skaffa getter för naturvård? Nu i början på året är en bra tid att kontakta oss! Killingarna kommer snart och är leveransklara till våren.

Getter är experter på att att rensa sly och restaurera igenväxta naturbetesmarker. De skiljer sig från andra betesdjur på så vis att de äter lite av mycket; allt från löv, knoppar, bark till spröda kvistar.

Getternas matvanor gör att de lämpar sig väl för magra, steniga, skogiga och igenvuxna betesmarker.

Där getterna betar ökar aktiviteten hos växtligheten genom att lövverket glesas ut och solens ljus når längre ned. Samtidigt gödslas magra och svårtillgängliga marker, och en mångfald av arter som idag lever i skymundan får möjlighet att breda ut sig.

En get som äter sin naturligt grova kost är en väldigt klimatsmart idisslare. Den släpper nästan inte ut några växthusgaser, och osmält kol binds i gödsel som återgår till mullagret. 

Kontakta oss om det låter intressant! / Nils & Claire🐐🌿

En karusell med glada getter

När du väljer att handla av dina lokala bönder och producenter är du med och skapar ett litet, men livsviktigt, kretslopp som skapar ett resilient, välmående samhälle där jorden, djuren och vi mår bra.

Det är lätt att bli lockad av de låga priserna på importerade varor. Bra mat är dyrare av en anledning; bra djurhållning och näringsrikt foder kostar mer. För att pressa priserna är budgetalternativen ofta överprocessade (vilket är förödande för näringsinnehållet), man använder tillsatser, kemikalier och djurens välmående försummas i förmån för billigare lösningar.

Börja med att fråga dig själv, finns det ett lokalt alternativ? Kanske är det värt att överväga. Dels minskar vi miljöbelastningen om vi kan undvika onödig transport men det är också viktigt att veta att vi är med och påverkar samhället genom vår konsumtion. När vi köper importerade varor bryts kretsloppet och pengarna försvinner utomlands.

Det är små, vardagliga val som gör stor skillnad. Börja med att prova några närproducerade produkter. Du kanske uppskattar smaken och kvalitén och väljer att prova ett större urval. Kanske märker du att du blir mätt snabbare eftersom kroppen får i sig den näring den behöver.

Helt plötsligt har dina små vardagliga val, som du kanske har trott inte gör någon skillnad, bidragit till att en lokal bonde kan fortsätta sin verksamhet där jorden och djurens välmående står i fokus. Resultatet är bra och näringsrik mat, som ger dig energi och hälsa så att kretsloppet kan fortsätta!

Anna: 1 år som getbonde och mejeriassistent!

1 år som getbonde och mejeriassistent! Vilken tur att jag hittade Claire & Nisse som älskar sina djur lika mycket som jag.

Under året har jag upptäckt att vi har mer gemensamt. Förutom att vi alla tre har en naturlig fallenhet för att skriva om låtar till getrelevanta versioner, så har vi liknande mål och värderingar. Allt ska må bra; djuren ska må bra, vi ska må bra, ni ska må bra, jorden ska må bra. Då blir det bra liksom.

Jag har också träffat många andra likasinnade bland andra små lokala producenter. Det är mäktigt att komma tillbaka till Sverige och upptäcka att folkrörelser som REKO-ringen har uppkommit just för att de här människorna finns, och ännu bättre, folk vill köpa deras varor så att de kan fortsätta.

Djuren mår bra, vi mår bra, ni mår bra, jorden mår bra. Små, sunda kretslopp som gör stor skillnad. Ska bli superspännande att se vad vi kan lyckas åstadkomma under mitt andra år! /Anna

07.14 – Mjölkbordet / Slänsmåla, Blekinge

07.14 – Mjölkbordet
Framtida Bruk, Slänsmåla, Blekinge

Iowa är brunstig och skriker efter bock. Hawaii är gosig och vill kramas massor, Penny försöker i smyg nå torkpappersrullen på väggen medan Apetina är lite nere och vill bli handmatad och Minnie.. ja hon är bara bedårande söt. Det är en vanlig morgon på Framtida Bruk Gårdsmejeri (så vanlig en morgon kan bli när man jobbar med 40 mjölkgetter).

Svansarna viftar förtjust i luften när de första getterna hittar sina frukosthinkar med korn. Mjölkmaskinerna tickar rytmiskt på, fåglarna kvittrar utanför och killingarna leker i morgonsolen. För ett ögonblick fylls vi av total lycka och kan inte bli bli att titta på varandra och säga högt ”asså vi har världens bästa jobb”.

Plötsligt bryts den magiska stunden av att Floridas klöv rappt slår i golvet. Hon vrider sakta på huvudet och ger oss en mörk blick som bara betyder en sak; slut på korn. Rummet fylls för en sekund av en bedövande tystnad, innan alla getter på kommando börjar stampa i ett rungande ”mer korn! mer korn! mer korn!” Vi springer mot hinkarna för påfyllning när vi plötsligt ser något komma svävandes i ögonvrån.

En flygande get. Grevie har tydligen förvandlats till elitgymnast, hoppat över båset och kommer inflygandes över mjölkbordet. Hon ser lika förvånad ut som oss där hon glider genom luften. Den nyfunna smidigheten försvinner samma sekund hennes klövar når i backen. Mjölkmaskinernas sugkoppar flyger all världens väg när hon välter fram i hopp om att hitta en gyllene hink med frukost.

Innan vi hinner reagera exploderar en konfettibomb. Penny har till slut fått tag på torkpappersrullen med tungspetsen och den går snabbt i tusen bitar när alla getter glatt hugger in. Samtidigt har Cher brutit sig in genom dörren och springer exalterat runt våra fötter i hopp om lite gos (att känna av rätt tid och plats har aldrig varit hennes grej). I dörröppningen har katten Kafka satt sig för att titta fascinerat på spektaklet.

Det blir en svettig kamp som kräver kondition, styrka, list och charm. Till slut lyckas vi locka ut Grevie, fånga Cher, fylla på hinkarna, sätta sugkopparna på plats igen och mjölka klart den här omgången. Okej, bara 30 getter kvar…

En timme senare är det dags för dagens första välförtjänta kaffekopp. En njutfull klunk hinner vi med innan vi ser något fara förbi utanför fönstret. Mini-Glenn och Frippe har brutit sig ut ur hagen med bockkillingarna och springer lyckligt över gårdsplanen. Samtidigt börjar mobilen pipa – mjölken i mejerigrytan har nått rätt temperatur och är redo att förvandlas till Eldost.

Nisse & Anna rusar ut för att förhoppningsvis charma bockarna in i hagen igen och Claire springer till mejeriet. Getterna och osten kallar – kaffet får vänta!

Sweet dreams are made of cheese

New babies started arrivning at the farm on Febuary 23rd. Let us take a moment to indulge in their cuteness:

Goat kids means cheese season is soon upon us. We will start weaning the oldest ones in the middle of April, and then we will be milking the goats twice a day until December.

A few of the babies are for sale, since our flock will have reached the size we want it to be (45 milkers) per next season.

Thanks for our first season!

Looking back on 2018, we can truly say it was the year it all began..

The first kids were born on the farm, 27 of them.

We finished building our dairy, we began milking our goats and then making and selling our very own cheese.

We participated in about 10 REKO-rings, several markets and events, and had lots of visitors who came to the farm, interested in seeing our newly started goat-business.

We continued improving the farm buildings by creating a storage place for our cheese.

We had help from friends, neighbors and several awesome WWOOFers.

Sweden experienced maybe the worst summer (for farmers) ever in modern age, with a drought  that lasted for over 3 months and temperatures over 30 degrees most days. We survived that!

We sold a few of our male goat kids and slaughtered 8 of them here on the farm. It was not a pleasant thing to do, we were sad to have to let them go, but take comfort in knowing the had a great life here with us.

We expanded our flock of chickens, from just a few to now having over 20 hens.

We were featured in local magazines, websites, and even got to be live on the local radio station! (see Media & press if you want to have a look or listen)

By the end of the year, we had met and even exceeded our sales goals for 2018.

All in all, it has been a year filled with joy as well as hard work. We are looking forward to 2019 and what we hope it will entail: ca 50-60 goat kids, milking around 30-35 goats, making and selling almost twice as much cheese, expanding our storage, and many other things!

New kids on the blog

Since kidding season is upon us, it is time for a presentation of our new farm inhabitants!

First out to give birth was the oldest goat, Asta, who came to us as a foster mother and leader of all the kids when we bought them. She was a little grumpy in the morning and head-butted a rooster so that he flew all over the barn. Soon after, she gave a cat what he didn’t deserve.  I put her in a box to calm down, but she showed no signs of beginning labour so I went to have breakfast. When I returned half an hour later, a beautiful little goat that we named Athena was delivered, and Asta was happy again.

Athena heating up a little under Nils jacket

After that, it was time for Iowa to take over the show. She went straight into labour, and I had just put her in a separate box before she delivered Glenn. A black and white buck, with a certain Klingon resemblance.

Claire holding the first Glenn
Claire holding the first Glenn

The day after, when we were expecting all the kids to arrive. Nobody showed up. The day after that however, Alabama greeted us in the morning with a brand new daughter by her side. We named her Artemis. She got her own box since Asta and Iowa could move together, and even if we had some problem getting the milk to flow, they soon seemed to enjoy life.

Artemis and Alabama
Artemis and Alabama

Around lunchtime, North Carolina was beginning to show signs of distress, and soon her water broke. I was watching her the entire afternoon and we shared a cup of tea.

5 hours later, she finally delivered a kid, but it had it’s head twisted in a strange way, and was dead. She had been sick a week before, refused to eat and sought solitude. We suspected ketosis/pregnancy poisoning and gave her treatments that eventually started her digestion again. That was probably the moment when the twisted kid died, and her metabolism went into overdrive, providing her with all the energy the kid would have taken.

We cleaned out and went to look after the other goats. When we where about to leave the barn, we heard a strange sound. Like from a cat or a bird. We went to see Northie one more time, and there she was, with a newborn buck who we named Glenn nr 2. That was a very happy moment.

North Carolina with Glenn 2
North Carolina with Glenn 2

The morning after, as soon as we entered the barn, we noticed something was sticking out from Delawares private parts. It turned out to be a kids head, and nothing more. The poor thing had managed to come out head first thus having caught its front legs still inside Delawares uterus. We managed to get her in to a box and then the difficult kidding began. The kid seemed ok at first, already breathing, but it felt firmly wedged in and impossible to get out even though Delaware was pushing hard. It was not looking good, and we feared for the goats life, not to mention the kid (which in this case, comes second in priority, but still, is a sad loss if there is a chance to save it). Finally, when we pretty much had given up hope, Nils managed to pull the kid out, working as a team with Delaware, who seemed to be in a lot of pain.

It turned out to be a buck, Glenn 3, and even though he was weak at first, he gained strength and turned out to be fine. He also turned out to be the largest of the bunch (so far) with a birth weight of 4.5 kg.

Delaware with her newborn buck Glenn 3
Delaware with her newborn buck Glenn 3

A difficult kidding before breakfast, phew! After breakfast, I went out to the barn again only to find Maine with two newborn babies. Unfortunately only one of them was alive and on its feet, a buck. The other one was lying with its head in a strange angle and was not breathing and did not respond to my efforts to animate it. This is very sad of course, but there was nothing more to do then to direct attention toward the living kid and take care of its mother.

So began the twin kiddings. Soon after Maine, South Carolina went in to labour and we helped her just a little as she delivered two female goats which we named Selene (the light brown one) and Spio (the dark one).

South Carolina with Spio and Selene
South Carolina with Spio and Selene

After lunch, one of our dearest and most intelligent goats, Indiana, began telling us it was time for her to have her kids. The whole thing went very smoothly and the kids were very quick to get on their feet and find the teats. She had a super pretty grey buck, Glenn 4, and a light brown goat, Ino, and soon got to move in with Southie and her twins.

Anna, Ino and Glenn 4
Anna, Ino and Glenn 4

So that was a wrap for that day! 10 new kids had arrived in total and about half the goats had given birth.

Sunday morning Oregon went into labour and did a prefect job with two babies, a light brown goat – Oizys, and a dark buck, Glenn 5.

Oregon with Glenn 5
Oregon with Glenn 5

Oizys
Oizys

About an hour later, one of the white goats, Utah, decided it was time to take off into the woods. Since we prefer to watch over the kidding in case of complications, Nils had to lure her back inside with some grain, and after another hour or so, she gave birth to a lovely white little female goat we named Urania and a darker, grey buck – Glenn no 6.

Utah with Urania and Glenn 6
Utah with Urania and Glenn 6

Last one out this day was Arizona who gave life to two female goats, it went well and we named them Asteria (the dark one) and Aphrodite (the light one).

Arizona with Asteria and Aphrodite

GoTo Goat – A GPS goat tracker

As goats are naturally born masters of escaping, we soon realized that the electric fence only should be considered as the first line of defense. Usually, the most clever ones finds their way out, and then calls for the others to follow, and generally, their just heading out to a nearby pasture, where the grass is allegedly greener, or home to the barn. On a few occasions though, they have been spooked by wild boars, and ran off into the forest. When I was tracking them out on a small dirt road, and a neighbor called from his forestry tractor, about 3 km out, and asked if maybe my goats where out hiking, I realized that we have a need for a tracking device. The idea of the GoTo Goat device was born, a GPS-module, transmitting coordinates over the cell network.

wp-1474494088463.jpg
The goats where very happy to see me, and followed me home through the forest.

 

 

Features:

Real-time GPS location

Upload coordinates to a cloud service, or your own server over GPRS

Solar powered

Android locator app

Component list

Microcontroller: Arduino nano 6 euro

GPRS module: SIM800L 5 euro

GPS module: Ublox NEO-6M 7 euro

Power supply: Linocell 3X Solar Powerbank 8000 mAh 50 euro

Step-down regulator: AMS1117 adjustable (5V-3.7V) 1 euro

Sim card (Telia) free

Total cost: 19 euro for the components and 50 for the powerbank, but i bought the powerbank locally in Sweden, and there are much cheaper ones around on ebay. With a little more labour put into sourcing, the cost could probably drop to about 30 euro.

The SIM800L

s-l225

This is a very nice little module. Essentially a complete cell phone, except for user interface, speaker and mic. It’s controlled from the arduino by sending AT commands through serial communication. The SIM800L is supposed to be powered by a 3.7V Li cell, as in a cellphone, and that’s why the buck converter is needed in this setup to bring the current down from 5V.

The only functionality used here is the GPRS device for sending over HTTP, but using SMS or DMTF for controlling the unit are possibilities as well as calling the goat for an occasional chat.

 

 

The NEO-6M

u6

 

 

A neat GPS-module supported by the arduino TinyGPS library. Pretty fast on getting a fix, and supplying coordinates once a second.

 

 

 

The Nano

$_1

I choose an Arduino nano for prototyping, since it has it’s own FTDI, a reasonable size and a friendly number of pins. If the size, power consumption and prize needs to be further tweaked, I can’t see any reason not to use a mini pro though. The SIM800L is rated for max 3.7V to 4.1V so the internal voltage regulators will be useless.

 The SIM

Any sim card that supports GPRS will work, but it’s recommended to use one that not expires too soon after charging. As very little traffic volumes are transmitted, it would be a shame if the card needed to be refueled every 3 months or so. Instead, if you can find one that works for several years, and only using the throttled speed when paid data is depleted, that would be completely sufficient.

 

Connections

SIM800L pin NEO-&M pin AMS1117 pin Arduino pin Powerbank
Net – antenna Usb Port2
Vcc Vout
Rst D5
TX D8
RX D7
Gnd Gnd Gnd Gnd Port1 –
Vcc 5V
Rx D4
Tx D3
Vin Port1 +

31583617682_a1031ba862_o
SIM800 and nano in the center, NEO-6M to the right. Here, the SIM800 is powered by a 3.7V battery

Cloud API

I choose thingspeak.com as cloud service to store the coordinates. Mostly because I already use it for other sensors, so I’m already familiar with the API. Virtually any online API would be suitable, as long as you can send in values through a HTTP GET parameter.

Thingspeak will let you send in 3 000 000 updates / year with their free account, so that will limit you to 5.7 updates / minute. I’ll go for max 1/min, probably less. Since you are putting the API key in the arduino code, you don’t want to use a service that is likely to go off the market, or become ”premium only”, like Xively did. To be sure that the service stays alive, you could host your own thingspeak platform on a raspberry pi or similar.

Code

The NEO-6M is very simple to interface from the Arduino. I used the kitchensink example from the TinyGPS library, and trimmed it down to the bare necessities.

The SIM800L is more complicated to interface, since you need 2-way communication to ensure that the commands have been successfully performed. I found some example code at Cassiopeia that was very helpful. Even if I do not use DMTF functionality as in the example, their approach for communicating with the SIM800L is very convenient.

As both the NEO-6M, the SIM800L and the arduino IDE Serial monitor are using serial communication for interfacing the arduino, there will be issues regarding which ports to use. I kept the hardware serial (Serial) for debugging purposes, and let only the computer interface with it. For the modules, I assigned two SoftwareSerial ports, sim800 on pin 7 and 8 and ss on pin 3 and 4. To keep the communication channels separated, the arduino is instructed on which one to listen, depending on where input is expected.


#include <SoftwareSerial.h>
#include <TinyGPS++.h>
#include <avr/sleep.h>
#include <avr/wdt.h>
//Thingspeak channel
#define CHANNEL 199082 //Not used
//Thingspeak API write key
#define APIKEY "XXXXXXXXX"//Put your own write key here
//SIM800 TX is connected to Arduino D8
#define SIM800_TX_PIN 8
#define RATE 10000 //GPS sampling rate
//SIM800 RX is connected to Arduino D7
#define SIM800_RX_PIN 7
static const int RXPin = 3, TXPin = 4;
static const uint32_t GPSBaud = 9600;
const int sim_rst = 5;
int errors = 0;
//Create software serial object to communicate with SIM800
SoftwareSerial sim800(SIM800_TX_PIN,SIM800_RX_PIN);
SoftwareSerial ss(RXPin, TXPin);
TinyGPSPlus gps;
unsigned long last = 0UL;
// watchdog interrupt
ISR(WDT_vect)
{
wdt_disable(); // disable watchdog
}
void myWatchdogEnable(const byte interval)
{
MCUSR = 0; // reset various flags
WDTCSR |= 0b00011000; // see docs, set WDCE, WDE
WDTCSR = 0b01000000 | interval; // set WDIE, and appropriate delay

wdt_reset();
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
sleep_mode(); // now goes to Sleep and waits for the interrupt
}
void setup() {
//Begin serial comunication with Arduino and Arduino IDE (Serial Monitor)
Serial.begin(9600);
while(!Serial);

//Beging serial communication with Arduino and SIM800
sim800.begin(9600);
delay(1000);
ss.begin(GPSBaud);
delay(1000);
Serial.println("Setup Complete!");
last = millis()-RATE;
}

void loop() {
errors = 0;
// Dispatch incoming characters from GPS
ss.listen();
while (ss.available() > 0)
gps.encode(ss.read());
if (millis() - last > RATE)
{
if (gps.location.isValid())
{
static const double OFFICE_LAT = 56.000, OFFICE_LON = 14.000; //Hard coded reference coordinates if needed in the future
double distanceToOffice =
TinyGPSPlus::distanceBetween(
gps.location.lat(),
gps.location.lng(),
OFFICE_LAT,
OFFICE_LON);
Serial.println(distanceToOffice);
double courseToOffice =
TinyGPSPlus::courseTo(
gps.location.lat(),
gps.location.lng(),
OFFICE_LAT,
OFFICE_LON);
char tmpCourse[10];
char tmpDistance[10];
char tmpLat[10];
char tmpLng[10];
char tmpSpeed[10];
char params[200];
int batteryLevel;
//Convert GPS data to strings
dtostrf(gps.location.lat(),1,6, tmpLat);
dtostrf(gps.location.lng(),1,6, tmpLng);
dtostrf(distanceToOffice/1000, 1,6, tmpDistance);
dtostrf(courseToOffice,1,6, tmpCourse);
dtostrf(gps.speed.kmph(), 1,6, tmpSpeed);
sim800.listen();//Turn to sim800l channel
disconnectGPRS();//Sometimes, the sim800l gets stuck with GPRS activated, and trying to activate it again will naturally fail.
while(!wakeUpSim800());
if(simOK()){
batteryLevel= getBatteryLevel();
Serial.print("Battery level: ");
Serial.println(batteryLevel);
sprintf(params, "apikey=%s&field1=%s&field2=%s&field3=%s&field6=%d", APIKEY, tmpLat, tmpLng, tmpSpeed, batteryLevel);
Serial.println(params);
//Next three stages are sequential. Error handling means that if the sequence is not completed with less than 5 unsuccessful tries on all stages, there is something wrong, and the sequence is aborted.
while(!initGPRS()&&errors++<5);

while(!initHTTP()&&errors++<5);

while(!putDataToThingspeak(params)&&errors++<5);
errors = 0;
while(!disconnectGPRS()&&errors++<5);
while(!powerDownSim800());
delay(200);
Serial.println("Entering watchdog sleep");
delay(100);
myWatchdogEnable (0b100001); // 8 seconds
myWatchdogEnable (0b100001); // 8 seconds
myWatchdogEnable (0b100001); // 8 seconds
myWatchdogEnable (0b100001); // 8 seconds
myWatchdogEnable (0b100001); // 8 seconds
myWatchdogEnable (0b100001); // 8 seconds
myWatchdogEnable (0b100001); // 8 seconds
myWatchdogEnable (0b100001); // 8 seconds

Serial.println("Resuming operations");
}
ss.listen(); //Turn back to GPS channel
}

if (gps.charsProcessed() < 10)
Serial.println(F("WARNING: No GPS data. Check wiring."));

last = millis();

}
}
boolean wakeUpSim800(){
Serial.println(F("Checking for sim800 module..."));

digitalWrite(sim_rst, LOW); // hardware reset after sleep RST
delay(300);
digitalWrite(sim_rst, HIGH);

// time to startup 3 sec
for (int i = 0; i < 6; i++) {
digitalWrite(13, HIGH); // green LED blink after RESET
delay(250);
digitalWrite(13, LOW);
delay(250);
}

sim800.println("AT"); // check if sim800 module responds
delay(100);
if (sim800.find("OK")) {
Serial.println(F("sim800 module awake"));
return true;
}
else{
Serial.println(F("sim800 module not found"));
return false;
}

}
boolean simOK() { // SIM CHECK OK
Serial.println(F("Checking for SIM card.. "));

sim800.println("AT"); // check if sim800 module responds
delay(100);
if (sim800.find("OK")) {
Serial.println(F("sim800 module found"));

delay(100); // wait for sim800 to settle a bit
sim800.println("AT+CFUN=1"); // operation
if (sim800.find("OK"))
Serial.println(F("Function level 1"));
else
return false;
delay(2000);
sim800.println("AT+CSMINS?"); // check if SIM card inserted
delay(100);
if (sim800.find("CSMINS: 0,0")) {
Serial.println(F("no SIM card found, stop here"));
return false;
}
Serial.println(F("SIM card found")); // continue if SIM card found

Serial.println(F("Allow some time for SIM to register on the network.."));
Serial.println();
delay(1000);
return true;
}
else{
Serial.println(F("sim800 module not found, stop here"));
return false;
}
}

void simReply() { // SIM REPLY
delay(500);
while (sim800.available()) {
char c = sim800.read();
if (c != '\n') Serial.write(c); // replace new line with space
else Serial.print(" ");
delay(5);
}
Serial.println();
}

boolean initGPRS(){
boolean noError = true;
sim800.println("AT+CIPSHUT"); //Ensure GPRS PDP is down before init
simReply();
//delay(1000);
sim800.println("AT+CGATT=1");//Attach to GPRS service
simReply();

sim800.println("AT+SAPBR=3,1,CONTYPE,GPRS");//Set(3) bearer connected(1) to Contype GPRS
if (sim800.find("ERROR"))
noError = false;
sim800.println("AT+CGATT=1");//Attach to GPRS service
if (sim800.find("ERROR"))
noError = false;
sim800.println("AT+SAPBR=3,1,APN,online.telia.se");//Set(3) bearer connected(1) to APN
if (sim800.find("ERROR"))
noError = false;
sim800.println("AT+SAPBR=1,1");//Open connected bearer
if (sim800.find("ERROR"))
noError = false;
Serial.print("initGPRS finished with no errors = ");
Serial.println(noError);
return noError;

}

boolean initHTTP(){
boolean noError = true;
sim800.println("AT+HTTPTERM");
if (sim800.find("ERROR"))
noError = false;
sim800.println("AT+HTTPINIT");
if (sim800.find("ERROR"))
noError = false;
sim800.println("AT+HTTPPARA=CID,1");
if (sim800.find("ERROR"))
noError = false;
Serial.print("initHTTP finished with no errors = ");
Serial.println(noError);
return noError;
}
boolean putDataToThingspeak(char params[200]){
boolean noError = true;
char req[250];
sprintf(req, "AT+HTTPPARA=URL,api.thingspeak.com/update?%s", params);
Serial.println(req);
sim800.println(req);
if (sim800.find("ERROR"))
noError = false;
delay(1000);
sim800.println("AT+HTTPACTION = 0");
if (sim800.find("ERROR"))
noError = false;
Serial.print("putDataToThingspeak finished with no errors = ");
Serial.println(noError);
return noError;
}

boolean disconnectGPRS(){
boolean noError = true;
sim800.println("AT+CIPSHUT");
if (sim800.find("ERROR"))
noError = false;
sim800.println("AT+SAPBR=0,1");
if (sim800.find("ERROR"))
noError = false;
sim800.println("AT+CGATT=0");
if (sim800.find("ERROR"))
noError = false;
sim800.println("AT+CFUN=0");
if (sim800.find("ERROR"))
noError = false;
Serial.print("disconnectGPRS finished with no errors = ");
Serial.println(noError);
return noError;

}
int getBatteryLevel(){
sim800.listen();
sim800.println("AT+CBC"); // battery level
delay(500);
String s = sim800.readStringUntil(',');//Grab the value between the commas
String level = sim800.readStringUntil(',');

return(level.toInt());
}

boolean powerDownSim800(){
boolean noError = true;
sim800.println("AT+CPOWD=1");
if (sim800.find("ERROR"))
noError = false;

Serial.print("SIM800l power down = ");
Serial.println(noError);
return noError;

}

 

Here are the latitude results from thingspeak, for more, go to the GoTo goat section on the IoT page.

Android app

The Android app is still just an embryo, but it will find a goat… You can find it on Play: https://play.google.com/apps/testing/com.framtidabruk.gotogoats

You need to enter your own thingspeak.com Api key and channel ID in the settings before it becomes useful.

3766840962902790605-account_id=1