Import sprinklerd
This commit is contained in:
@@ -3,12 +3,12 @@
|
|||||||
# to the root binary directory of the project as ${HELLO_BINARY_DIR}.
|
# to the root binary directory of the project as ${HELLO_BINARY_DIR}.
|
||||||
cmake_minimum_required (VERSION 2.8.11)
|
cmake_minimum_required (VERSION 2.8.11)
|
||||||
|
|
||||||
#add_subdirectory (wolfssl/builders/cmake)
|
add_subdirectory (wolfssl/builders/cmake)
|
||||||
add_subdirectory (json/builders/cmake)
|
add_subdirectory (json/builders/cmake)
|
||||||
add_subdirectory (jsoncpp/builders/cmake)
|
add_subdirectory (jsoncpp/builders/cmake)
|
||||||
add_subdirectory (libubox/builders/cmake)
|
add_subdirectory (libubox/builders/cmake)
|
||||||
add_subdirectory (ubus/libubus/builders/cmake)
|
add_subdirectory (ubus/libubus/builders/cmake)
|
||||||
add_subdirectory (ubus/ubus/builders/cmake)
|
add_subdirectory (ubus/ubus/builders/cmake)
|
||||||
add_subdirectory (ubus/ubusd/builders/cmake)
|
add_subdirectory (ubus/ubusd/builders/cmake)
|
||||||
#add_subdirectory (civetweb/builders/cmake)
|
add_subdirectory (civetweb/builders/cmake)
|
||||||
#add_subdirectory (wiringPi/)
|
#add_subdirectory (wiringPi/)
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ set(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/build/lib")
|
|||||||
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake-modules/")
|
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake-modules/")
|
||||||
|
|
||||||
add_subdirectory (3P)
|
add_subdirectory (3P)
|
||||||
#add_subdirectory (lib)
|
add_subdirectory (lib)
|
||||||
#add_subdirectory (src)
|
add_subdirectory (src)
|
||||||
|
|
||||||
|
|
||||||
add_custom_target (deploy
|
add_custom_target (deploy
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Acces aux scripts personnels et code metier.
|
# Acces aux scripts personnels et code metier.
|
||||||
PATH=$PATH:/usr/local/bin
|
PATH=$PATH:/usr/local/bin
|
||||||
|
LD_LIBRARY_PATH=/opt/Domo/lib
|
||||||
|
|
||||||
# Prompt indiquant nom d'hote et repertoire courant.
|
# Prompt indiquant nom d'hote et repertoire courant.
|
||||||
PS1='\h[\W]\$ '
|
PS1='\h[\W]\$ '
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ cmake_minimum_required (VERSION 2.8.11)
|
|||||||
#add_subdirectory (alarmd/builders/cmake)
|
#add_subdirectory (alarmd/builders/cmake)
|
||||||
add_subdirectory (domod/builders/cmake)
|
add_subdirectory (domod/builders/cmake)
|
||||||
#add_subdirectory (chacond/builders/cmake)
|
#add_subdirectory (chacond/builders/cmake)
|
||||||
#add_subdirectory (sprinklersd/builders/cmake)
|
add_subdirectory (sprinklersd/builders/cmake)
|
||||||
#add_subdirectory (rf_listenerd/builders/cmake)
|
#add_subdirectory (rf_listenerd/builders/cmake)
|
||||||
#add_subdirectory (restd/builders/cmake)
|
#add_subdirectory (restd/builders/cmake)
|
||||||
#add_subdirectory (ui/builders/cmake)
|
#add_subdirectory (ui/builders/cmake)
|
||||||
|
|||||||
11
src/sprinklersd/Readme.md
Normal file
11
src/sprinklersd/Readme.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
|
||||||
|
exemple de commande du opensprinker PI
|
||||||
|
|
||||||
|
https://github.com/rayshobby/opensprinkler
|
||||||
|
|
||||||
|
|
||||||
|
Bonne appli on peut s'en inspirer
|
||||||
|
|
||||||
|
https://opensprinkler.com/forums/topic/sprinklers_pi-an-alternative-sprinkler-control-program/
|
||||||
|
https://github.com/rszimm/sprinklers_pi/
|
||||||
32
src/sprinklersd/builders/cmake/CMakeLists.txt
Normal file
32
src/sprinklersd/builders/cmake/CMakeLists.txt
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
cmake_minimum_required(VERSION 2.8.11)
|
||||||
|
|
||||||
|
project(sprinklersd)
|
||||||
|
|
||||||
|
include (libubus)
|
||||||
|
include (libubox)
|
||||||
|
include (libubuscpp)
|
||||||
|
include (libjsoncpp)
|
||||||
|
|
||||||
|
include_directories(../../src)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS "-std=c++11 -Wall -Wextra -pedantic -Werror=strict-aliasing")
|
||||||
|
|
||||||
|
file(
|
||||||
|
GLOB_RECURSE
|
||||||
|
source_files
|
||||||
|
../../src/main.cpp
|
||||||
|
../../src/UbusSprinklerModel.cpp
|
||||||
|
../../src/sprinklers.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
add_executable (
|
||||||
|
sprinklersd
|
||||||
|
${source_files}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries (sprinklersd
|
||||||
|
LINK_PUBLIC
|
||||||
|
jsoncpp
|
||||||
|
ubuscpp
|
||||||
|
rt
|
||||||
|
)
|
||||||
172
src/sprinklersd/src/UbusSprinklerModel.cpp
Normal file
172
src/sprinklersd/src/UbusSprinklerModel.cpp
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
/*!
|
||||||
|
* UBusModel.c
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015, NADAL Jean-Baptiste. All rights reserved.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* @Author: NADAL Jean-Baptiste
|
||||||
|
* @Date: 30/04/2015
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------- INCLUDES ---------------------------------*/
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <string>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
#include <jsoncpp/json.h>
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include <libubox/blobmsg_json.h>
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "sprinklers.h"
|
||||||
|
|
||||||
|
#include "UbusSprinklerModel.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
using namespace UBus;
|
||||||
|
|
||||||
|
static ObjectType gSprinklerModelUbus_types(
|
||||||
|
"sprinklers",
|
||||||
|
Method("get", UBUS_CPP(SprinkerModel, Get)),
|
||||||
|
Method("set", UBUS_CPP(SprinkerModel, Set))
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! ----------------------------------------------------------------------------
|
||||||
|
* @fn SprinkerModel
|
||||||
|
*
|
||||||
|
* @brief Constructor of the UBus Mixer Volume.
|
||||||
|
*/
|
||||||
|
SprinkerModel::SprinkerModel (void) :
|
||||||
|
UBusObject (gSprinklerModelUbus_types, "sprinkers")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*! ----------------------------------------------------------------------------
|
||||||
|
* @fn ~SprinkerModel
|
||||||
|
*
|
||||||
|
* @brief Destructor of the UBus Mixer Volume.
|
||||||
|
*/
|
||||||
|
SprinkerModel::~SprinkerModel (void)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*! ----------------------------------------------------------------------------
|
||||||
|
* @fn Get
|
||||||
|
*
|
||||||
|
* @brief Get the State of a Sprinkler Station.
|
||||||
|
*/
|
||||||
|
int SprinkerModel::Get (struct ubus_context *aCtx, struct ubus_request_data *aReq,
|
||||||
|
struct blob_attr *aMsg)
|
||||||
|
{
|
||||||
|
int theResult = 0;
|
||||||
|
struct blob_buf theBuf = {0};
|
||||||
|
char *theString = blobmsg_format_json (aMsg, true);
|
||||||
|
Json::Reader theReader;
|
||||||
|
Json::StyledWriter theWriter;
|
||||||
|
Json::Value theRoot;
|
||||||
|
Json::Value theOutput;
|
||||||
|
uint32_t theStation = 0;
|
||||||
|
bool theState = false;
|
||||||
|
|
||||||
|
if (!theReader.parse (theString, theRoot)) {
|
||||||
|
|
||||||
|
fprintf (stderr, "Failed parse the parameters.\n");
|
||||||
|
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
theStation = theRoot["station"].asInt();
|
||||||
|
|
||||||
|
if (theStation == 0) {
|
||||||
|
|
||||||
|
fprintf (stderr, "Station ID is missing.\n");
|
||||||
|
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
theResult = sprinklers_get_station (theStation, theState);
|
||||||
|
|
||||||
|
if (theResult != 0) {
|
||||||
|
|
||||||
|
fprintf (stderr, "Wrong Station ID (%d).\n", theStation);
|
||||||
|
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf ("aState: %d\n", theState);
|
||||||
|
theOutput ["station"] = theStation;
|
||||||
|
theOutput ["state"] = theState;
|
||||||
|
|
||||||
|
blob_buf_init (&theBuf, 0);
|
||||||
|
|
||||||
|
blobmsg_add_json_from_string (&theBuf, theWriter.write (theOutput).c_str());
|
||||||
|
|
||||||
|
theResult = ubus_send_reply (aCtx, aReq, theBuf.head);
|
||||||
|
|
||||||
|
blob_buf_free (&theBuf);
|
||||||
|
|
||||||
|
return theResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*! ----------------------------------------------------------------------------
|
||||||
|
* @fn Set
|
||||||
|
*
|
||||||
|
* @brief Set a new State for a Sprinkler Station.
|
||||||
|
*/
|
||||||
|
int SprinkerModel::Set (struct ubus_context *aCtx, struct ubus_request_data *aReq,
|
||||||
|
struct blob_attr *aMsg)
|
||||||
|
{
|
||||||
|
int theResult;
|
||||||
|
char *theString = blobmsg_format_json (aMsg, true);
|
||||||
|
Json::Reader theReader;
|
||||||
|
Json::Value theRoot;
|
||||||
|
uint32_t theStation = 0;
|
||||||
|
bool theState = false;
|
||||||
|
|
||||||
|
if (!theReader.parse (theString, theRoot)) {
|
||||||
|
|
||||||
|
fprintf (stderr, "Failed parse the parameters.\n");
|
||||||
|
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
theStation = theRoot["station"].asInt();
|
||||||
|
theState = theRoot["state"].asBool();
|
||||||
|
|
||||||
|
if (theStation == 0) {
|
||||||
|
|
||||||
|
fprintf (stderr, "Station ID is missing.\n");
|
||||||
|
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
theResult = sprinklers_set_station (theStation, theState);
|
||||||
|
|
||||||
|
if (theResult != 0) {
|
||||||
|
|
||||||
|
fprintf (stderr, "Wrong Station ID (%d).\n", theStation);
|
||||||
|
return UBUS_STATUS_INVALID_ARGUMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return theResult;
|
||||||
|
}
|
||||||
49
src/sprinklersd/src/UbusSprinklerModel.h
Normal file
49
src/sprinklersd/src/UbusSprinklerModel.h
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
/*!
|
||||||
|
* UBusModel.h
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015, NADAL Jean-Baptiste. All rights reserved.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* @Author: NADAL Jean-Baptiste
|
||||||
|
* @Date: 30/04/2015
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _UBUS_SPRINKLER_MODEL_H
|
||||||
|
#define _UBUS_SPRINKLER_MODEL_H
|
||||||
|
|
||||||
|
/*------------------------------- INCLUDES ----------------------------------*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#include <ubuscpp/UBusObject.h>
|
||||||
|
|
||||||
|
/*--------------------------------- Define ----------------------------------*/
|
||||||
|
|
||||||
|
/*--------------------------------- CLASS ----------------------------------*/
|
||||||
|
|
||||||
|
class SprinkerModel : public UBusObject {
|
||||||
|
|
||||||
|
public:
|
||||||
|
SprinkerModel (void);
|
||||||
|
~SprinkerModel (void);
|
||||||
|
|
||||||
|
int Get (struct ubus_context*, struct ubus_request_data*, struct blob_attr*);
|
||||||
|
int Set (struct ubus_context*, struct ubus_request_data*, struct blob_attr*);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _UBUS_SPRINKLER_MODEL_H */
|
||||||
120
src/sprinklersd/src/main.cpp
Normal file
120
src/sprinklersd/src/main.cpp
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
/*!
|
||||||
|
* main.c
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015, NADAL Jean-Baptiste. All rights reserved.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* @Author: NADAL Jean-Baptiste
|
||||||
|
* @Date: 30/04/2015
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*-------------------------------- INCLUDES ---------------------------------*/
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include <libubus.h>
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "UbusSprinklerModel.h"
|
||||||
|
|
||||||
|
#include "sprinklers.h"
|
||||||
|
|
||||||
|
/*--------------------------------- GLOBALS ---------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*! ----------------------------------------------------------------------------
|
||||||
|
* @fn setupUbus
|
||||||
|
*
|
||||||
|
* @brief Setup the UBus Mechanism.
|
||||||
|
*/
|
||||||
|
extern "C" {
|
||||||
|
static struct ubus_context *setupUbus (void)
|
||||||
|
{
|
||||||
|
ubus_context *theCtx;
|
||||||
|
|
||||||
|
if (uloop_init () !=0) {
|
||||||
|
|
||||||
|
fprintf (stderr, "Failed to init Uloop.\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
signal (SIGPIPE, SIG_IGN);
|
||||||
|
|
||||||
|
theCtx = ubus_connect (NULL);
|
||||||
|
|
||||||
|
if (!theCtx) {
|
||||||
|
|
||||||
|
fprintf (stderr, "Failed to connect to ubus\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ubus_add_uloop (theCtx);
|
||||||
|
|
||||||
|
return theCtx;
|
||||||
|
}
|
||||||
|
} // SetupUbus.
|
||||||
|
|
||||||
|
|
||||||
|
/*! ----------------------------------------------------------------------------
|
||||||
|
* @fn main
|
||||||
|
*
|
||||||
|
* @brief Main function of Domo Daemon.
|
||||||
|
*/
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
int theRet = 0;
|
||||||
|
SprinkerModel theSprinklersModel;
|
||||||
|
|
||||||
|
struct ubus_context *theCtx = NULL;
|
||||||
|
|
||||||
|
if (setuid (0)) {
|
||||||
|
|
||||||
|
perror ("setuid");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Setup the Ubus context. */
|
||||||
|
theCtx = setupUbus ();
|
||||||
|
if (theCtx == NULL) {
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Setup the sprinklers. */
|
||||||
|
theRet = sprinklers_setup ();
|
||||||
|
if (theRet != 0) {
|
||||||
|
|
||||||
|
fprintf (stderr, "Impossible to Setup the Sprinkers.\n");
|
||||||
|
return theRet;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add the UBus to the model exposed. */
|
||||||
|
ubus_add_object (theCtx, &theSprinklersModel);
|
||||||
|
|
||||||
|
/* Main Event Loop. */
|
||||||
|
uloop_run ();
|
||||||
|
|
||||||
|
ubus_free (theCtx);
|
||||||
|
|
||||||
|
uloop_done ();
|
||||||
|
|
||||||
|
return theRet;
|
||||||
|
}
|
||||||
180
src/sprinklersd/src/sprinklers.cpp
Normal file
180
src/sprinklersd/src/sprinklers.cpp
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
/*!
|
||||||
|
* sprinklers.c
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015, NADAL Jean-Baptiste. All rights reserved.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* @Author: NADAL Jean-Baptiste
|
||||||
|
* @Date: 30/04/2015
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*-------------------------------- INCLUDES ---------------------------------*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <jsoncpp/json.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#include <ubuscpp/UBusCall.h>
|
||||||
|
|
||||||
|
#include "sprinklers.h"
|
||||||
|
|
||||||
|
/*-------------------------------- GLOBALES ---------------------------------*/
|
||||||
|
|
||||||
|
|
||||||
|
/*! ----------------------------------------------------------------------------
|
||||||
|
* @fn sprinklers_setup
|
||||||
|
*
|
||||||
|
* @brief this function setup the OSPI environement.
|
||||||
|
*/
|
||||||
|
int sprinklers_setup (void)
|
||||||
|
{
|
||||||
|
UBusCall theCmd;
|
||||||
|
std::string theResult;
|
||||||
|
int theIDVal;
|
||||||
|
|
||||||
|
fprintf (stderr, "Setup the Gpios used by the Sprinklers.\n");
|
||||||
|
|
||||||
|
if (theCmd.Exec ("domo.capabilities.sprinklers", "get", "", theResult) == 0){
|
||||||
|
|
||||||
|
// We get the the sprinklers. Get the IDs.
|
||||||
|
Json::Reader theReader;
|
||||||
|
Json::Value theRoot;
|
||||||
|
Json::Value theElement;
|
||||||
|
|
||||||
|
if (!theReader.parse (theResult, theRoot)) {
|
||||||
|
|
||||||
|
fprintf (stderr, "Failed parse the List of Sprinklers.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const Json::Value& theElement : theRoot["Sprinkers"]) {
|
||||||
|
|
||||||
|
theIDVal = theElement["id"].asInt();
|
||||||
|
sprinkler_setup_station (theIDVal);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*! ----------------------------------------------------------------------------
|
||||||
|
* @fn sprinkler_setup_station
|
||||||
|
*
|
||||||
|
* @brief This function change the State of an Ospi Station.
|
||||||
|
*/
|
||||||
|
int sprinkler_setup_station (int aStation)
|
||||||
|
{
|
||||||
|
char theCommand[255];
|
||||||
|
|
||||||
|
printf (" Setup the Station: %d\n", aStation);
|
||||||
|
|
||||||
|
// Activate the Gpio
|
||||||
|
sprintf (theCommand, "echo %d > /sys/class/gpio/export", aStation);
|
||||||
|
system (theCommand);
|
||||||
|
|
||||||
|
// Select the Direction of the Gpio
|
||||||
|
sprintf (theCommand, "echo out > /sys/class/gpio/gpio%d/direction", aStation);
|
||||||
|
system (theCommand);
|
||||||
|
|
||||||
|
// Select the Direction of the Gpio
|
||||||
|
sprintf (theCommand, "echo 1 > /sys/class/gpio/gpio%d/value", aStation);
|
||||||
|
system (theCommand);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*! ----------------------------------------------------------------------------
|
||||||
|
* @fn sprinkler_set_station
|
||||||
|
*
|
||||||
|
* @brief This function change the State of an Ospi Station.
|
||||||
|
*/
|
||||||
|
int sprinklers_set_station (uint32_t aStation, bool aState)
|
||||||
|
{
|
||||||
|
FILE *theFp;
|
||||||
|
char theGpioPath[255];
|
||||||
|
|
||||||
|
sprintf (theGpioPath, "/sys/class/gpio/gpio%d/value", aStation);
|
||||||
|
|
||||||
|
theFp = fopen (theGpioPath, "w");
|
||||||
|
|
||||||
|
if (theFp == NULL) {
|
||||||
|
|
||||||
|
fprintf (stderr, "Impossible to open: <%s>\n", theGpioPath);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aState) {
|
||||||
|
|
||||||
|
fwrite ("0", 1, 1, theFp);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
fwrite ("1", 1, 1, theFp);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose (theFp);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*! ----------------------------------------------------------------------------
|
||||||
|
* @fn sprinkler_get_station
|
||||||
|
*
|
||||||
|
* @brief This function change the State of an Ospi Station.
|
||||||
|
*/
|
||||||
|
int sprinklers_get_station (uint32_t aStation, bool &aState)
|
||||||
|
{
|
||||||
|
FILE *theFp;
|
||||||
|
char theGpioPath[255];
|
||||||
|
char theData[5];
|
||||||
|
|
||||||
|
fprintf (stdout, "get station state (%d)\n", aStation);
|
||||||
|
|
||||||
|
sprintf (theGpioPath, "/sys/class/gpio/gpio%d/value", aStation);
|
||||||
|
|
||||||
|
theFp = fopen (theGpioPath, "r");
|
||||||
|
|
||||||
|
if (theFp == NULL) {
|
||||||
|
|
||||||
|
fprintf (stderr, "Impossible to open: <%s>\n", theGpioPath);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fread (theData, 1, 1, theFp);
|
||||||
|
|
||||||
|
//printf ("theData: %s\n", theData);
|
||||||
|
|
||||||
|
if (theData[0] == '0') {
|
||||||
|
aState = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
aState = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose (theFp);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
42
src/sprinklersd/src/sprinklers.h
Normal file
42
src/sprinklersd/src/sprinklers.h
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
/*!
|
||||||
|
* sprinklers.h
|
||||||
|
*
|
||||||
|
* Copyright (c) 2015, NADAL Jean-Baptiste. All rights reserved.
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* @Author: NADAL Jean-Baptiste
|
||||||
|
* @Date: 30/04/2015
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __SPRINKLERS_H
|
||||||
|
#define __SPRINKLERS_H
|
||||||
|
|
||||||
|
/*-------------------------------- INCLUDES ---------------------------------*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/*-------------------------------- METHODS ---------------------------------*/
|
||||||
|
|
||||||
|
int sprinklers_setup (void);
|
||||||
|
|
||||||
|
int sprinkler_setup_station (int aStation);
|
||||||
|
|
||||||
|
int sprinklers_set_station (uint32_t aStation, bool aState);
|
||||||
|
int sprinklers_get_station (uint32_t aStation, bool &aState);
|
||||||
|
|
||||||
|
#endif /* __SPRINKLERS_H */
|
||||||
Reference in New Issue
Block a user