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); }
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; } }
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)); }
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")); }
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)); }
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")); }
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")); }
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)); } }
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")); } }
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")); } }
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")); } }
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")); } }
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")); } }
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")); }
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")); }
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")); } }
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")); } }
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")); } }
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")); } }
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")); }
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")); } }
JsonNode* oCharDouble(const char* key, double val) { JsonNode* oRet = json_mkobject(); json_append_member(oRet, key, json_mknumber(val)); return oRet; }
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); } }
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)); }
/** @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; }
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; }
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")); }
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; }