update to platformio
A => .hgignore +5 -0
@@ 0,0 1,5 @@ 
+.pioenvs
+.piolibdeps
+.idea
+.DS_Store
+CMakeListsPrivate.txt

          
A => firmware/base_station/CMakeLists.txt +54 -0
@@ 0,0 1,54 @@ 
+cmake_minimum_required(VERSION 3.2)
+project(base_station)
+
+include(CMakeListsPrivate.txt)
+
+add_custom_target(
+    PLATFORMIO_BUILD ALL
+    COMMAND ${PLATFORMIO_CMD} -f -c clion run
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_custom_target(
+    PLATFORMIO_UPLOAD ALL
+    COMMAND ${PLATFORMIO_CMD} -f -c clion run --target upload
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_custom_target(
+    PLATFORMIO_CLEAN ALL
+    COMMAND ${PLATFORMIO_CMD} -f -c clion run --target clean
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_custom_target(
+    PLATFORMIO_TEST ALL
+    COMMAND ${PLATFORMIO_CMD} -f -c clion test
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_custom_target(
+    PLATFORMIO_PROGRAM ALL
+    COMMAND ${PLATFORMIO_CMD} -f -c clion run --target program
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_custom_target(
+    PLATFORMIO_UPLOADFS ALL
+    COMMAND ${PLATFORMIO_CMD} -f -c clion run --target uploadfs
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_custom_target(
+    PLATFORMIO_UPDATE_ALL ALL
+    COMMAND ${PLATFORMIO_CMD} -f -c clion update
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_custom_target(
+    PLATFORMIO_REBUILD_PROJECT_INDEX ALL
+    COMMAND ${PLATFORMIO_CMD} -f -c clion init --ide clion
+    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
+add_executable(${PROJECT_NAME} ${SRC_LIST})

          
A => firmware/base_station/platformio.ini +17 -0
@@ 0,0 1,17 @@ 
+; PlatformIO Project Configuration File
+;
+;   Build options: build flags, source filter
+;   Upload options: custom upload port, speed and extra flags
+;   Library options: dependencies, extra library storages
+;   Advanced options: extra scripting
+;
+; Please visit documentation for the other options and examples
+; http://docs.platformio.org/page/projectconf.html
+
+[env:diecimilaatmega328]
+platform = atmelavr
+board = diecimilaatmega328
+framework = arduino
+lib_deps = 
+https://github.com/jcw/ethercard.git
+;https://github.com/jcw/jeelib.git

          
A => firmware/base_station/src/base_station.cpp +197 -0
@@ 0,0 1,197 @@ 
+#include <Arduino.h>
+
+
+#include <enc28j60.h>
+#include <EtherCard.h>
+#include <net.h>
+
+#include <JeeLib.h>
+#include <RF12.h>
+
+#if 0
+#include <Wire.h>
+
+#endif
+
+#include <avr/wdt.h>
+
+void postData (uint8_t *dip, struct payload * pl);
+static void addPayload (struct payload * data);
+
+#define WX_DATA_PORT 7656
+
+#define gPB ether.buffer
+
+static byte* bufPtr;
+/*
+ struct {
+   uint8_t station_id;
+   int16_t uptime; 
+ int16_t temp; 
+ int32_t pres; 
+ float relhx; 
+ float tempb; 
+ float rainfall;
+ float windspeed; 
+ float maxwindspeed; 
+ char winddira; 
+ char winddirb; word luxa; word luxb; word luxc;} payload;
+ */
+
+struct payload {
+                char cookiea;
+                char cookieb;
+                char cookiec;
+                char cookied;
+                uint8_t station_id;
+                int16_t uptime; 
+                int16_t temp; 
+                int32_t pres; 
+                float relhx; 
+                float tempb; 
+                float rainfall; 
+                float windspeed; 
+                float maxwindspeed; 
+                char winddira; 
+                char winddirb; 
+                word luxa; 
+                word luxb; 
+                word luxc;
+              };
+
+typedef struct payload wx_data;
+
+// typedef struct { int16_t temp; int32_t pres; } Payload;
+int i = 0;
+static byte mymac[] = { 0x74, 0x69, 0x69, 0x2d, 0x30, 0x31 };
+
+byte Ethernet::buffer[700];
+
+static byte dnstid_l; // a counter for transaction ID
+#define DNSCLIENT_SRC_PORT_H 0xD2 
+
+#define soft_reset()        \
+do                          \
+{                           \
+    wdt_enable(WDTO_15MS);  \
+    for(;;)                 \
+    {                       \
+    }                       \
+} while(0)
+
+// Function Pototype
+//void wdt_init(void) __attribute__((naked)) __attribute__((section(".init3")));
+
+// Function Implementation
+/*
+void wdt_init(void)
+{
+    MCUSR = 0;
+    wdt_disable();
+
+    return;
+}
+*/
+void setup() {
+ Serial.begin(57600);
+ Serial.println("\n[bmp085recv]\n");
+ 
+// rf12_initialize(30, RF12_915MHZ, 5);
+ 
+// return;
+  
+  if(ether.begin(sizeof Ethernet::buffer, mymac) == 0)
+  {
+    Serial.println("failed to access Ethernet controller");
+  }
+  if(!ether.dhcpSetup())
+  {
+    Serial.println("DHCP failed");    
+    delay(5000);
+    void (*softReset) (void) = 0; //declare reset function @ address 0
+    softReset();
+   }    
+  ether.printIp("IP: ", ether.myip);
+  ether.printIp("GW: ", ether.gwip);
+  
+  if(!ether.dnsLookup(PSTR("192.168.1.10")))
+  {
+    Serial.println("DNS failed");
+    delay(5000);
+    void (*softReset) (void) = 0; //declare reset function @ address 0
+    softReset();
+  }    
+  ether.printIp("SRV: ", ether.hisip);
+    
+//  ether.registerPingCallback(gotPinged);
+}
+
+void loop() {
+//return; 
+	 if(rf12_recvDone() && rf12_crc == 0)
+// if(rf12_len != sizeof(wx_data)) 
+// else
+ {
+     wx_data * data = (wx_data *) rf12_data;
+     Serial.print((int)data->station_id);
+     Serial.print(" BMP / RHumidity / Rain / Wind / Lux ");
+     Serial.print(data->cookiea);
+     Serial.print(data->cookieb);
+     Serial.print(data->cookiec);
+     Serial.print(data->cookied);
+     Serial.print(' ');
+     Serial.print((int)(data->uptime));
+     Serial.print(": ");
+     Serial.print(data->temp);
+     Serial.print(' ');
+     Serial.print(data->pres);
+     Serial.print(" / ");
+     Serial.print(data->relhx);
+     Serial.print(' ');
+     Serial.print(data->tempb);
+     Serial.print(" / ");
+     Serial.print(data->rainfall);
+     Serial.print(" / ");
+     Serial.print(data->windspeed);
+     Serial.print(" / ");
+     Serial.print(data->winddira);
+//if(data->winddirb)
+     Serial.print(data->winddirb);
+     Serial.print(data->maxwindspeed);
+     Serial.print(" / ");
+     Serial.print(data->luxa);
+     Serial.print(' ');
+     Serial.print(data->luxb);
+     Serial.print(' ');
+     Serial.println(data->luxc);
+    postData(ether.hisip, data);
+ //    i++;
+ } 
+}
+
+ void postData (uint8_t *dip, struct payload * pl) {
+  ++dnstid_l; // increment for next request, finally wrap
+
+  ether.udpPrepare((DNSCLIENT_SRC_PORT_H << 8) | dnstid_l,
+                                                dip, WX_DATA_PORT);
+  memset(gPB + UDP_DATA_P, 1, sizeof(struct payload));
+
+  bufPtr = gPB + UDP_DATA_P;
+  addPayload(pl);
+
+  ether.udpTransmit((bufPtr - gPB) - UDP_DATA_P);
+}
+
+static void addToBuf (byte b) {
+    *bufPtr++ = b;
+}
+
+static void addPayload (struct payload * data) {
+  int len = sizeof(struct payload);
+  byte * d;
+  
+  d = (byte *) data;
+    while (len-- > 0)
+        addToBuf(*d++);
+}
+

          
M libraries/WeatherSensorsI2C/WeatherSensorsI2C.cpp +4 -4
@@ 1,4 1,4 @@ 
-
+#include "Arduino.h"
 #include <inttypes.h>
 #include <Wire.h>
 #include <wiring.h>

          
@@ 136,7 136,7 @@ uint16_t WeatherSensorsI2C::readSensor(u
     uint16_t result;
 
     Wire.beginTransmission(eWeatherSensorAddress);
-    Wire.send(command);
+    Wire.write(command);
     Wire.endTransmission();
 
     delay(readDelay);

          
@@ 147,8 147,8 @@ uint16_t WeatherSensorsI2C::readSensor(u
     }
 
     //Store the result
-    result = Wire.receive();
-    result += ((Wire.receive()) << 8);
+    result = Wire.read();
+    result += ((Wire.read()) << 8);
     return result;
 }