Example #1
0
File: jo.c Project: imjerrybao/jo
int json_copy_to_object(JsonNode * obj, JsonNode * object_or_array, int clobber)
{
	JsonNode *node;

	if (obj->tag != JSON_OBJECT && obj->tag != JSON_ARRAY)
		return (FALSE);

	json_foreach(node, object_or_array) {
		if (!clobber & (json_find_member(obj, node->key) != NULL))
			continue;	/* Don't clobber existing keys */
		if (obj->tag == JSON_OBJECT) {
			if (node->tag == JSON_STRING)
				json_append_member(obj, node->key, json_mkstring(node->string_));
			else if (node->tag == JSON_NUMBER)
				json_append_member(obj, node->key, json_mknumber(node->number_));
			else if (node->tag == JSON_BOOL)
				json_append_member(obj, node->key, json_mkbool(node->bool_));
			else if (node->tag == JSON_NULL)
				json_append_member(obj, node->key, json_mknull());
			else
				fprintf(stderr, "PANIC: unhandled JSON type %d\n", node->tag);
		} else if (obj->tag == JSON_ARRAY) {
			if (node->tag == JSON_STRING)
				json_append_element(obj, json_mkstring(node->string_));
			if (node->tag == JSON_NUMBER)
				json_append_element(obj, json_mknumber(node->number_));
			if (node->tag == JSON_BOOL)
				json_append_element(obj, json_mkbool(node->bool_));
			if (node->tag == JSON_NULL)
				json_append_element(obj, json_mknull());
		}
	}
	return (TRUE);
}
Example #2
0
static void createMessage(int id, int unit, int state, int all, int dimlevel, int learn) {
	arctech_dimmer->message = json_mkobject();
	json_append_member(arctech_dimmer->message, "id", json_mknumber(id, 0));

	if(all == 1) {
		json_append_member(arctech_dimmer->message, "all", json_mknumber(all, 0));
	} else {
		json_append_member(arctech_dimmer->message, "unit", json_mknumber(unit, 0));
	}

	if(dimlevel >= 0) {
		state = 1;
		json_append_member(arctech_dimmer->message, "dimlevel", json_mknumber(dimlevel, 0));
	}

	if(state == 1) {
		json_append_member(arctech_dimmer->message, "state", json_mkstring("on"));
	} else {
		json_append_member(arctech_dimmer->message, "state", json_mkstring("off"));
	}

	if(learn == 1) {
		arctech_dimmer->txrpt = LEARN_REPEATS;
	} else {
		arctech_dimmer->txrpt = NORMAL_REPEATS;
	}
}
Example #3
0
static void createMessage(int id, int unit, double temperature, double humidity) {
	ninjablocks_weather->message = json_mkobject();
	json_append_member(ninjablocks_weather->message, "id", json_mknumber(id, 0));
	json_append_member(ninjablocks_weather->message, "unit", json_mknumber(unit, 0));
	json_append_member(ninjablocks_weather->message, "temperature", json_mknumber(temperature/100, 2));
	json_append_member(ninjablocks_weather->message, "humidity", json_mknumber(humidity, 0));
}
Example #4
0
static void createMessage(int id, int unit, int state) {
	arctech_screen_old->message = json_mkobject();
	json_append_member(arctech_screen_old->message, "id", json_mknumber(id, 0));
	json_append_member(arctech_screen_old->message, "unit", json_mknumber(unit, 0));
	if(state == 1)
		json_append_member(arctech_screen_old->message, "state", json_mkstring("up"));
	else
		json_append_member(arctech_screen_old->message, "state", json_mkstring("down"));
}
Example #5
0
static void parseCode(void) {
	int binary[RAW_LENGTH/2];
	int temp1 = 0, temp2 = 0, temp3 = 0;
	int humi1 = 0, humi2 = 0;
	int id = 0, battery = 0;
	int channel = 0;
	int i = 0, x = 0;
	double humi_offset = 0.0, temp_offset = 0.0;
	double temperature = 0.0, humidity = 0.0;

	for(x=1;x<tfa->rawlen-2;x+=2) {
		if(tfa->raw[x] > AVG_PULSE_LENGTH*PULSE_MULTIPLIER) {
			binary[i++] = 1;
		} else {
			binary[i++] = 0;
		}
	}

	id = binToDecRev(binary, 2, 9);
	channel = binToDecRev(binary, 12, 13) + 1;

	temp1 = binToDecRev(binary, 14, 17);
	temp2 = binToDecRev(binary, 18, 21);
	temp3 = binToDecRev(binary, 22, 25);
	                                                     /* Convert F to C */
	temperature = (int)((float)(((((temp3*256) + (temp2*16) + (temp1))*10) - 9000) - 3200) * ((float)5/(float)9));

	humi1 = binToDecRev(binary, 26, 29);
	humi2 = binToDecRev(binary, 30, 33);
	humidity = ((humi1)+(humi2*16));

	if(binToDecRev(binary, 34, 35) > 1) {
		battery = 0;
	} else {
		battery = 1;
	}

	struct settings_t *tmp = settings;
	while(tmp) {
		if(fabs(tmp->id-id) < EPSILON && fabs(tmp->channel-channel) < EPSILON) {
			humi_offset = tmp->humi;
			temp_offset = tmp->temp;
			break;
		}
		tmp = tmp->next;
	}

	temperature += temp_offset;
	humidity += humi_offset;

	tfa->message = json_mkobject();
	json_append_member(tfa->message, "id", json_mknumber(id, 0));
	json_append_member(tfa->message, "temperature", json_mknumber(temperature/100, 2));
	json_append_member(tfa->message, "humidity", json_mknumber(humidity, 2));
	json_append_member(tfa->message, "battery", json_mknumber(battery, 0));
	json_append_member(tfa->message, "channel", json_mknumber(channel, 0));
}
Example #6
0
static void arctechSwOldCreateMessage(int id, int unit, int state) {
	arctech_switch_old->message = json_mkobject();
	json_append_member(arctech_switch_old->message, "id", json_mknumber(id, 0));
	json_append_member(arctech_switch_old->message, "unit", json_mknumber(unit, 0));
	if(state == 1)
		json_append_member(arctech_switch_old->message, "state", json_mkstring("on"));
	else
		json_append_member(arctech_switch_old->message, "state", json_mkstring("off"));
}
Example #7
0
void sartanoCreateMessage(int id, int unit, int state) {
	sartano.message = json_mkobject();
	json_append_member(sartano.message, "id", json_mknumber(id));
	json_append_member(sartano.message, "unit", json_mknumber(unit));
	if(state == 1)
		json_append_member(sartano.message, "state", json_mkstring("on"));
	else
		json_append_member(sartano.message, "state", json_mkstring("off"));
}
Example #8
0
void genWeatherCreateMessage(int id, int temperature, int humidity) {
	generic_weather->message = json_mkobject();
	json_append_member(generic_weather->message, "id", json_mknumber(id));
	if(temperature > -999) {
		json_append_member(generic_weather->message, "temperature", json_mknumber(temperature));
	}
	if(humidity > -999) {
		json_append_member(generic_weather->message, "humidity", json_mknumber(humidity));
	}
}
Example #9
0
static void elroHECreateMessage(int systemcode, int unitcode, int state) {
	elro_he->message = json_mkobject();
	json_append_member(elro_he->message, "systemcode", json_mknumber(systemcode));
	json_append_member(elro_he->message, "unitcode", json_mknumber(unitcode));
	if(state == 0) {
		json_append_member(elro_he->message, "state", json_mkstring("on"));
	} else {
		json_append_member(elro_he->message, "state", json_mkstring("off"));
	}
}
Example #10
0
static void createMessage(int systemcode, int programcode, int state) {
	rsl366->message = json_mkobject();
	json_append_member(rsl366->message, "systemcode", json_mknumber(systemcode, 0));
	json_append_member(rsl366->message, "programcode", json_mknumber(programcode, 0));
	if(state == 1) {
		json_append_member(rsl366->message, "state", json_mkstring("on"));
	} else {
		json_append_member(rsl366->message, "state", json_mkstring("off"));
	}
}
Example #11
0
static void rev3CreateMessage(int id, int unit, int state) {
    rev3_switch->message = json_mkobject();
    json_append_member(rev3_switch->message, "id", json_mknumber(id));
    json_append_member(rev3_switch->message, "unit", json_mknumber(unit));
    if(state == 1) {
        json_append_member(rev3_switch->message, "state", json_mkstring("on"));
    } else {
        json_append_member(rev3_switch->message, "state", json_mkstring("off"));
	}
}
Example #12
0
void impulsCreateMessage(int systemcode, int programcode, int state) {
	impuls->message = json_mkobject();
	json_append_member(impuls->message, "systemcode", json_mknumber(systemcode));
	json_append_member(impuls->message, "programcode", json_mknumber(programcode));
	if(state == 1) {
		json_append_member(impuls->message, "state", json_mkstring("on"));
	} else {
		json_append_member(impuls->message, "state", json_mkstring("off"));
	}
}
Example #13
0
static void createMessage(int systemcode, int unitcode, int state) {
	pollin->message = json_mkobject();
	json_append_member(pollin->message, "systemcode", json_mknumber(systemcode, 0));
	json_append_member(pollin->message, "unitcode", json_mknumber(unitcode, 0));
	if(state == 0) {
		json_append_member(pollin->message, "state", json_mkstring("on"));
	} else {
		json_append_member(pollin->message, "state", json_mkstring("off"));
	}
}
Example #14
0
static void createMessage(int id, int systemcode, int unit, int state) {
	daycom->message = json_mkobject();
	json_append_member(daycom->message, "id", json_mknumber(id, 0));
	json_append_member(daycom->message, "systemcode", json_mknumber(systemcode, 0));
	json_append_member(daycom->message, "unit", json_mknumber(unit, 0));
	if(state == 0) {
		json_append_member(daycom->message, "state", json_mkstring("on"));
	} else {
		json_append_member(daycom->message, "state", json_mkstring("off"));
	}
}
void arctechSwCreateMessage(int id, int unit, int state, int all) {
	arctech_switch.message = json_mkobject();
	json_append_member(arctech_switch.message, "id", json_mknumber(id));
	json_append_member(arctech_switch.message, "unit", json_mknumber(unit));
	if(all == 1)
		json_append_member(arctech_switch.message, "all", json_mknumber(all));
	if(state == 1)
		json_append_member(arctech_switch.message, "state", json_mkstring("on"));
	else
		json_append_member(arctech_switch.message, "state", json_mkstring("off"));
}
Example #16
0
static void cleverwattsCreateMessage(int id, int unit, int state, int all) {
	cleverwatts->message = json_mkobject();
	json_append_member(cleverwatts->message, "id", json_mknumber(id));
	if(all == 0) {
		json_append_member(cleverwatts->message, "all", json_mknumber(1));
	} else {
		json_append_member(cleverwatts->message, "unit", json_mknumber(unit));
	}
	if(state == 0)
		json_append_member(cleverwatts->message, "state", json_mkstring("on"));
	else
		json_append_member(cleverwatts->message, "state", json_mkstring("off"));
}
Example #17
0
void homeEasyOldCreateMessage(int systemcode, int unitcode, int state, int all) {
	home_easy_old->message = json_mkobject();
	json_append_member(home_easy_old->message, "systemcode", json_mknumber(systemcode));
	if(all == 1) {
		json_append_member(home_easy_old->message, "all", json_mknumber(all));
	} else {
		json_append_member(home_easy_old->message, "unitcode", json_mknumber(unitcode));
	}
	if(state == 0) {
		json_append_member(home_easy_old->message, "state", json_mkstring("on"));
	} else {
		json_append_member(home_easy_old->message, "state", json_mkstring("off"));
	}
}
Example #18
0
static void rc101CreateMessage(int id, int state, int unit, int all) {
	rc101->message = json_mkobject();
	json_append_member(rc101->message, "id", json_mknumber(id, 0));
	if(all == 1) {
		json_append_member(rc101->message, "all", json_mknumber(1, 0));
	} else {
		json_append_member(rc101->message, "unit", json_mknumber(unit, 0));
	}
	if(state == 1) {
		json_append_member(rc101->message, "state", json_mkstring("on"));
	} else {
		json_append_member(rc101->message, "state", json_mkstring("off"));
	}
}
Example #19
0
static void arctechSrCreateMessage(int id, int unit, int state, int all) {
	arctech_screen->message = json_mkobject();
	json_append_member(arctech_screen->message, "id", json_mknumber(id));
	if(all == 1) {
		json_append_member(arctech_screen->message, "all", json_mknumber(all));
	} else {
		json_append_member(arctech_screen->message, "unit", json_mknumber(unit));
	}

	if(state == 1) {
		json_append_member(arctech_screen->message, "state", json_mkstring("up"));
	} else {
		json_append_member(arctech_screen->message, "state", json_mkstring("down"));
	}
}
Example #20
0
void arctechContactCreateMessage(int id, int unit, int state, int all) {
  arctech_contact->message = json_mkobject();
  json_append_member(arctech_contact->message, "id", json_mknumber(id));
  if(all == 1) {
          json_append_member(arctech_contact->message, "all", json_mknumber(all));
  } else {
          json_append_member(arctech_contact->message, "unit", json_mknumber(unit));
  }

  if(state == 1) {
          json_append_member(arctech_contact->message, "state", json_mkstring("opened"));
  } else {
          json_append_member(arctech_contact->message, "state", json_mkstring("closed"));
  }
}
Example #21
0
void arctechDimCreateMessage(int id, int unit, int state, int all, int dimlevel) {
	arctech_dimmer->message = json_mkobject();
	json_append_member(arctech_dimmer->message, "id", json_mknumber(id));
	json_append_member(arctech_dimmer->message, "unit", json_mknumber(unit));
	if(dimlevel >= 0) {
		state = 1;
		json_append_member(arctech_dimmer->message, "dimlevel", json_mknumber(dimlevel));
	}
	if(all == 1)
		json_append_member(arctech_dimmer->message, "all", json_mknumber(all));
	if(state == 1)
		json_append_member(arctech_dimmer->message, "state", json_mkstring("on"));
	else
		json_append_member(arctech_dimmer->message, "state", json_mkstring("off"));
}
Example #22
0
static void quiggGT7000CreateMessage(int id, int state, int unit, int all) {
	quigg_gt7000->message = json_mkobject();
	json_append_member(quigg_gt7000->message, "id", json_mknumber(id, 0));
	if(all==1) {
		json_append_member(quigg_gt7000->message, "all", json_mknumber(all, 0));
	} else {
		json_append_member(quigg_gt7000->message, "unit", json_mknumber(unit, 0));
	}

	if(state==1) {
		json_append_member(quigg_gt7000->message, "state", json_mkstring("on"));
	} else {
		json_append_member(quigg_gt7000->message, "state", json_mkstring("off"));
	}
}
Example #23
0
JsonNode* oCharDouble(const char* key, double val)
{
	JsonNode* oRet = json_mkobject();
	json_append_member(oRet, key, json_mknumber(val));

	return oRet;
}
Example #24
0
static void test_number(void)
{
    JsonNode *num;

    num = json_mknumber(5678901234.0);
    should_be(num, "5678901234");
    json_delete(num);

    num = json_mknumber(-5678901234.0);
    should_be(num, "-5678901234");
    json_delete(num);

    num = json_mknumber(0.0 / 0.0);
    should_be(num, "null");
    json_delete(num);
}
static void log_failure_mkjson(void *json, const char *field_name,
    size_t field_namelen, unsigned int field_type, const void *field_value) {
  JsonNode *field = NULL;

  switch (field_type) {
    case LOG_FAILURE_FIELD_TYPE_STRING:
      field = json_mkstring((const char *) field_value);
      break;

    case LOG_FAILURE_FIELD_TYPE_NUMBER:
      field = json_mknumber(*((double *) field_value));
      break;

    case LOG_FAILURE_FIELD_TYPE_BOOLEAN:
      field = json_mkbool(*((bool *) field_value));
      break;

    default:
      (void) pr_log_writefile(log_failure_logfd, MOD_LOG_FAILURE_VERSION,
        "unsupported field type: %u", field_type);
  }

  if (field != NULL) {
    json_append_member(json, field_name, field);
  }
}
Example #26
0
void alectoParseCode(void) {
    int i = 0, x = 0;
    int temperature;
    int id;

    for(i=1; i<alecto->rawlen-1; i+=2) {
        alecto->binary[x++] = alecto->code[i];
    }

    id = binToDecRev(alecto->binary, 0, 11);
    temperature = binToDecRev(alecto->binary, 16, 27);

    alecto->message = json_mkobject();
    json_append_member(alecto->message, "id", json_mknumber(id));
    json_append_member(alecto->message, "temperature", json_mknumber(temperature));
}
Example #27
0
/** @internal Recursive Lua/JSON serialization. */
static JsonNode *l_pack_elem(lua_State *L, int top)
{
	switch(lua_type(L, top)) {
	case LUA_TSTRING:  return json_mkstring(lua_tostring(L, top));
	case LUA_TNUMBER:  return json_mknumber(lua_tonumber(L, top));
	case LUA_TBOOLEAN: return json_mkbool(lua_toboolean(L, top));
	case LUA_TTABLE:   break; /* Table, iterate it. */
	default:           return json_mknull();
	}
	/* Use absolute indexes here, as the table may be nested. */
	JsonNode *node = NULL;
	lua_pushnil(L);
	while(lua_next(L, top) != 0) {
		JsonNode *val = l_pack_elem(L, top + 2);
		const bool no_key = lua_isnumber(L, top + 1);
		if (!node) {
			node = no_key ? json_mkarray() : json_mkobject();
			if (!node) {
				return NULL;
			}
		}
		/* Insert to array/table */
		if (no_key) {
			json_append_element(node, val);
		} else {
			json_append_member(node, lua_tostring(L, top + 1), val);
		}
		lua_pop(L, 1);
	}
	return node;
}
Example #28
0
void *events_clientize(void *param) {
	logprintf(LOG_STACK, "%s(...)", __FUNCTION__);

	unsigned int failures = 0;
	while(loop && failures <= 5) {
		struct ssdp_list_t *ssdp_list = NULL;
		int standalone = 0;
		settings_find_number("standalone", &standalone);
		if(ssdp_seek(&ssdp_list) == -1 || standalone == 1) {
			logprintf(LOG_DEBUG, "no pilight ssdp connections found");
			char server[16] = "127.0.0.1";
			if((sockfd = socket_connect(server, (unsigned short)socket_get_port())) == -1) {
				logprintf(LOG_DEBUG, "could not connect to pilight-daemon");
				failures++;
				continue;
			}
		} else {
			if((sockfd = socket_connect(ssdp_list->ip, ssdp_list->port)) == -1) {
				logprintf(LOG_DEBUG, "could not connect to pilight-daemon");
				failures++;
				continue;
			}
		}
		if(ssdp_list) {
			ssdp_free(ssdp_list);
		}

		struct JsonNode *jclient = json_mkobject();
		struct JsonNode *joptions = json_mkobject();
		json_append_member(jclient, "action", json_mkstring("identify"));
		json_append_member(joptions, "config", json_mknumber(1, 0));
		json_append_member(jclient, "options", joptions);
		json_append_member(jclient, "media", json_mkstring("all"));
		char *out = json_stringify(jclient, NULL);
		socket_write(sockfd, out);
		json_free(out);
		json_delete(jclient);

		if(socket_read(sockfd, &recvBuff, 0) != 0
			 || strcmp(recvBuff, "{\"status\":\"success\"}") != 0) {
				failures++;
			continue;
		}
		failures = 0;
		while(loop) {
			if(socket_read(sockfd, &recvBuff, 0) != 0) {
				break;
			} else {
				events_queue(recvBuff);
			}
		}
	}

	if(recvBuff) {
		FREE(recvBuff);
		recvBuff = NULL;
	}
	socket_close(sockfd);
	return 0;
}
Example #29
0
void relayCreateMessage(int gpio, int state) {
	relay->message = json_mkobject();
	json_append_member(relay->message, "gpio", json_mknumber(gpio));
	if(state == 1)
		json_append_member(relay->message, "state", json_mkstring("on"));
	else
		json_append_member(relay->message, "state", json_mkstring("off"));
}
Example #30
0
GT_INLINE JsonNode* gt_json_int_array(const uint64_t start, const uint64_t len, uint64_t* const data){
  JsonNode* a = json_mkarray();
  uint64_t i= 0;
  for (i=0;i<len;++i) {
    json_append_element(a, json_mknumber((double)data[start + i]));
  }
  return a;
}