Add "TARGET_RZ_A1H"as target of using Ethernet IF.
Fork of Milkcocoa_EthernetIF by
Milkcocoa.cpp@0:23e533c4b1ec, 2015-12-15 (annotated)
- Committer:
- jksoft
- Date:
- Tue Dec 15 09:56:32 2015 +0000
- Revision:
- 0:23e533c4b1ec
- Child:
- 1:4a634c06c5dc
??; Subscribe?1?????; ?Milkcocoa::on???????????????????????
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jksoft | 0:23e533c4b1ec | 1 | #include "Milkcocoa.h" |
jksoft | 0:23e533c4b1ec | 2 | |
jksoft | 0:23e533c4b1ec | 3 | #if 1 |
jksoft | 0:23e533c4b1ec | 4 | #include "SoftSerialSendOnry.h" |
jksoft | 0:23e533c4b1ec | 5 | extern SoftSerialSendOnry pc; |
jksoft | 0:23e533c4b1ec | 6 | #define DBG(x) x |
jksoft | 0:23e533c4b1ec | 7 | #else |
jksoft | 0:23e533c4b1ec | 8 | #define DBG(x) |
jksoft | 0:23e533c4b1ec | 9 | #endif |
jksoft | 0:23e533c4b1ec | 10 | |
jksoft | 0:23e533c4b1ec | 11 | DataElement::DataElement() { |
jksoft | 0:23e533c4b1ec | 12 | json_msg[0] = '\0'; |
jksoft | 0:23e533c4b1ec | 13 | strcpy(json_msg,"{\"params\":{"); |
jksoft | 0:23e533c4b1ec | 14 | } |
jksoft | 0:23e533c4b1ec | 15 | |
jksoft | 0:23e533c4b1ec | 16 | DataElement::DataElement(char *json_string) { |
jksoft | 0:23e533c4b1ec | 17 | json_msg[0] = '\0'; |
jksoft | 0:23e533c4b1ec | 18 | strcpy(json_msg,json_string); |
jksoft | 0:23e533c4b1ec | 19 | } |
jksoft | 0:23e533c4b1ec | 20 | |
jksoft | 0:23e533c4b1ec | 21 | void DataElement::setValue(const char *key, const char *v) { |
jksoft | 0:23e533c4b1ec | 22 | char json_string[64]; |
jksoft | 0:23e533c4b1ec | 23 | if( json_msg[strlen(json_msg)-1] != '{' ) |
jksoft | 0:23e533c4b1ec | 24 | { |
jksoft | 0:23e533c4b1ec | 25 | strcat(json_msg,","); |
jksoft | 0:23e533c4b1ec | 26 | } |
jksoft | 0:23e533c4b1ec | 27 | sprintf(json_string,"\"%s\":\"%s\"",key,v); |
jksoft | 0:23e533c4b1ec | 28 | strcat(json_msg,json_string); |
jksoft | 0:23e533c4b1ec | 29 | } |
jksoft | 0:23e533c4b1ec | 30 | |
jksoft | 0:23e533c4b1ec | 31 | void DataElement::setValue(const char *key, int v) { |
jksoft | 0:23e533c4b1ec | 32 | char json_string[64]; |
jksoft | 0:23e533c4b1ec | 33 | if( json_msg[strlen(json_msg)-1] != '{' ) |
jksoft | 0:23e533c4b1ec | 34 | { |
jksoft | 0:23e533c4b1ec | 35 | strcat(json_msg,","); |
jksoft | 0:23e533c4b1ec | 36 | } |
jksoft | 0:23e533c4b1ec | 37 | sprintf(json_string,"\"%s\":\"%d\"",key,v); |
jksoft | 0:23e533c4b1ec | 38 | strcat(json_msg,json_string); |
jksoft | 0:23e533c4b1ec | 39 | } |
jksoft | 0:23e533c4b1ec | 40 | |
jksoft | 0:23e533c4b1ec | 41 | void DataElement::setValue(const char *key, double v) { |
jksoft | 0:23e533c4b1ec | 42 | char json_string[64]; |
jksoft | 0:23e533c4b1ec | 43 | if( json_msg[strlen(json_msg)-1] != '{' ) |
jksoft | 0:23e533c4b1ec | 44 | { |
jksoft | 0:23e533c4b1ec | 45 | strcat(json_msg,","); |
jksoft | 0:23e533c4b1ec | 46 | } |
jksoft | 0:23e533c4b1ec | 47 | sprintf(json_string,"\"%s\":\"%f\"",key,v); |
jksoft | 0:23e533c4b1ec | 48 | strcat(json_msg,json_string); |
jksoft | 0:23e533c4b1ec | 49 | } |
jksoft | 0:23e533c4b1ec | 50 | |
jksoft | 0:23e533c4b1ec | 51 | char *DataElement::getString(const char *key) { |
jksoft | 0:23e533c4b1ec | 52 | static char _word[64]; |
jksoft | 0:23e533c4b1ec | 53 | char *p; |
jksoft | 0:23e533c4b1ec | 54 | int i=0; |
jksoft | 0:23e533c4b1ec | 55 | |
jksoft | 0:23e533c4b1ec | 56 | strcpy(_word , "\"\0"); |
jksoft | 0:23e533c4b1ec | 57 | strcat(_word , key ); |
jksoft | 0:23e533c4b1ec | 58 | strcat(_word , "\"" ); |
jksoft | 0:23e533c4b1ec | 59 | |
jksoft | 0:23e533c4b1ec | 60 | p = strstr( (char*)json_msg , _word ) + 2 + strlen(_word); |
jksoft | 0:23e533c4b1ec | 61 | |
jksoft | 0:23e533c4b1ec | 62 | while( (p[i] != ',')&&(p[i] != '\n')&&(p[i] != '\"') ) |
jksoft | 0:23e533c4b1ec | 63 | { |
jksoft | 0:23e533c4b1ec | 64 | _word[i] = p[i]; |
jksoft | 0:23e533c4b1ec | 65 | i++; |
jksoft | 0:23e533c4b1ec | 66 | } |
jksoft | 0:23e533c4b1ec | 67 | _word[i] = '\0'; |
jksoft | 0:23e533c4b1ec | 68 | |
jksoft | 0:23e533c4b1ec | 69 | return _word; |
jksoft | 0:23e533c4b1ec | 70 | } |
jksoft | 0:23e533c4b1ec | 71 | |
jksoft | 0:23e533c4b1ec | 72 | int DataElement::getInt(const char *key) { |
jksoft | 0:23e533c4b1ec | 73 | return atoi(getString(key)); |
jksoft | 0:23e533c4b1ec | 74 | } |
jksoft | 0:23e533c4b1ec | 75 | |
jksoft | 0:23e533c4b1ec | 76 | float DataElement::getFloat(const char *key) { |
jksoft | 0:23e533c4b1ec | 77 | return atof(getString(key)); |
jksoft | 0:23e533c4b1ec | 78 | } |
jksoft | 0:23e533c4b1ec | 79 | |
jksoft | 0:23e533c4b1ec | 80 | char *DataElement::toCharArray() { |
jksoft | 0:23e533c4b1ec | 81 | if( json_msg[strlen(json_msg)-1] != '{' ) |
jksoft | 0:23e533c4b1ec | 82 | { |
jksoft | 0:23e533c4b1ec | 83 | strcat(json_msg,"}"); |
jksoft | 0:23e533c4b1ec | 84 | } |
jksoft | 0:23e533c4b1ec | 85 | strcat(json_msg,"}"); |
jksoft | 0:23e533c4b1ec | 86 | |
jksoft | 0:23e533c4b1ec | 87 | return(json_msg); |
jksoft | 0:23e533c4b1ec | 88 | } |
jksoft | 0:23e533c4b1ec | 89 | |
jksoft | 0:23e533c4b1ec | 90 | Milkcocoa::Milkcocoa(MQTTESP8266 *ipstack, const char *host, uint16_t port, const char *_app_id, const char *client_id) : client(MQTT::Client<MQTTESP8266, Countdown>(*ipstack)) { |
jksoft | 0:23e533c4b1ec | 91 | |
jksoft | 0:23e533c4b1ec | 92 | _ipstack = ipstack; |
jksoft | 0:23e533c4b1ec | 93 | strcpy(servername,host); |
jksoft | 0:23e533c4b1ec | 94 | portnum = port; |
jksoft | 0:23e533c4b1ec | 95 | app_id = _app_id; |
jksoft | 0:23e533c4b1ec | 96 | strcpy(_clientid,client_id); |
jksoft | 0:23e533c4b1ec | 97 | strcpy(username,"sdammy"); |
jksoft | 0:23e533c4b1ec | 98 | strcpy(password,app_id); |
jksoft | 0:23e533c4b1ec | 99 | |
jksoft | 0:23e533c4b1ec | 100 | } |
jksoft | 0:23e533c4b1ec | 101 | |
jksoft | 0:23e533c4b1ec | 102 | Milkcocoa::Milkcocoa(MQTTESP8266 *ipstack, const char *host, uint16_t port, const char *_app_id, const char *client_id, char *_session) : client(MQTT::Client<MQTTESP8266, Countdown>(*ipstack)) { |
jksoft | 0:23e533c4b1ec | 103 | |
jksoft | 0:23e533c4b1ec | 104 | _ipstack = ipstack; |
jksoft | 0:23e533c4b1ec | 105 | strcpy(servername,host); |
jksoft | 0:23e533c4b1ec | 106 | portnum = port; |
jksoft | 0:23e533c4b1ec | 107 | app_id = _app_id; |
jksoft | 0:23e533c4b1ec | 108 | strcpy(_clientid,client_id); |
jksoft | 0:23e533c4b1ec | 109 | strcpy(username,_session); |
jksoft | 0:23e533c4b1ec | 110 | strcpy(password,app_id); |
jksoft | 0:23e533c4b1ec | 111 | |
jksoft | 0:23e533c4b1ec | 112 | } |
jksoft | 0:23e533c4b1ec | 113 | |
jksoft | 0:23e533c4b1ec | 114 | Milkcocoa* Milkcocoa::createWithApiKey(MQTTESP8266 *ipstack, const char *host, uint16_t port, const char *_app_id, const char *client_id, char *key, char *secret) { |
jksoft | 0:23e533c4b1ec | 115 | char session[60]; |
jksoft | 0:23e533c4b1ec | 116 | sprintf(session, "k%s:%s", key, secret); |
jksoft | 0:23e533c4b1ec | 117 | return new Milkcocoa(ipstack, host, port, _app_id, client_id, session); |
jksoft | 0:23e533c4b1ec | 118 | } |
jksoft | 0:23e533c4b1ec | 119 | |
jksoft | 0:23e533c4b1ec | 120 | void Milkcocoa::connect() { |
jksoft | 0:23e533c4b1ec | 121 | |
jksoft | 0:23e533c4b1ec | 122 | if(client.isConnected()) |
jksoft | 0:23e533c4b1ec | 123 | return; |
jksoft | 0:23e533c4b1ec | 124 | |
jksoft | 0:23e533c4b1ec | 125 | if(_ipstack->connect(servername, portnum)!=0) { |
jksoft | 0:23e533c4b1ec | 126 | DBG(pc.printf("Network connect err\r\n");) |
jksoft | 0:23e533c4b1ec | 127 | return; |
jksoft | 0:23e533c4b1ec | 128 | } |
jksoft | 0:23e533c4b1ec | 129 | |
jksoft | 0:23e533c4b1ec | 130 | MQTTPacket_connectData data = MQTTPacket_connectData_initializer; |
jksoft | 0:23e533c4b1ec | 131 | data.keepAliveInterval = 20; |
jksoft | 0:23e533c4b1ec | 132 | data.cleansession = 1; |
jksoft | 0:23e533c4b1ec | 133 | data.MQTTVersion = 4; |
jksoft | 0:23e533c4b1ec | 134 | data.clientID.cstring = _clientid; |
jksoft | 0:23e533c4b1ec | 135 | data.username.cstring = username; |
jksoft | 0:23e533c4b1ec | 136 | data.password.cstring = password; |
jksoft | 0:23e533c4b1ec | 137 | |
jksoft | 0:23e533c4b1ec | 138 | if (client.connect(data) != 0) { |
jksoft | 0:23e533c4b1ec | 139 | DBG(pc.printf("Milkcocoa connect err\r\n");) |
jksoft | 0:23e533c4b1ec | 140 | return; |
jksoft | 0:23e533c4b1ec | 141 | } |
jksoft | 0:23e533c4b1ec | 142 | } |
jksoft | 0:23e533c4b1ec | 143 | |
jksoft | 0:23e533c4b1ec | 144 | bool Milkcocoa::push(const char *path, DataElement dataelement) { |
jksoft | 0:23e533c4b1ec | 145 | char topic[100]; |
jksoft | 0:23e533c4b1ec | 146 | char *buf; |
jksoft | 0:23e533c4b1ec | 147 | MQTT::Message message; |
jksoft | 0:23e533c4b1ec | 148 | |
jksoft | 0:23e533c4b1ec | 149 | sprintf(topic, "%s/%s/push", app_id, path); |
jksoft | 0:23e533c4b1ec | 150 | |
jksoft | 0:23e533c4b1ec | 151 | message.qos = MQTT::QOS0; |
jksoft | 0:23e533c4b1ec | 152 | message.retained = 0; |
jksoft | 0:23e533c4b1ec | 153 | message.dup = false; |
jksoft | 0:23e533c4b1ec | 154 | buf = dataelement.toCharArray(); |
jksoft | 0:23e533c4b1ec | 155 | message.payload = (void*)buf; |
jksoft | 0:23e533c4b1ec | 156 | message.payloadlen = strlen(buf); |
jksoft | 0:23e533c4b1ec | 157 | if(client.publish(topic, message)!=0) |
jksoft | 0:23e533c4b1ec | 158 | return(false); |
jksoft | 0:23e533c4b1ec | 159 | |
jksoft | 0:23e533c4b1ec | 160 | return true; |
jksoft | 0:23e533c4b1ec | 161 | } |
jksoft | 0:23e533c4b1ec | 162 | |
jksoft | 0:23e533c4b1ec | 163 | bool Milkcocoa::send(const char *path, DataElement dataelement) { |
jksoft | 0:23e533c4b1ec | 164 | char topic[100]; |
jksoft | 0:23e533c4b1ec | 165 | char *buf; |
jksoft | 0:23e533c4b1ec | 166 | MQTT::Message message; |
jksoft | 0:23e533c4b1ec | 167 | |
jksoft | 0:23e533c4b1ec | 168 | sprintf(topic, "%s/%s/send", app_id, path); |
jksoft | 0:23e533c4b1ec | 169 | message.qos = MQTT::QOS0; |
jksoft | 0:23e533c4b1ec | 170 | message.retained = 0; |
jksoft | 0:23e533c4b1ec | 171 | message.dup = false; |
jksoft | 0:23e533c4b1ec | 172 | buf = dataelement.toCharArray(); |
jksoft | 0:23e533c4b1ec | 173 | message.payload = (void*)buf; |
jksoft | 0:23e533c4b1ec | 174 | message.payloadlen = strlen(buf); |
jksoft | 0:23e533c4b1ec | 175 | if(client.publish(topic, message)!=0) |
jksoft | 0:23e533c4b1ec | 176 | return false; |
jksoft | 0:23e533c4b1ec | 177 | |
jksoft | 0:23e533c4b1ec | 178 | return true; |
jksoft | 0:23e533c4b1ec | 179 | } |
jksoft | 0:23e533c4b1ec | 180 | |
jksoft | 0:23e533c4b1ec | 181 | void Milkcocoa::loop() { |
jksoft | 0:23e533c4b1ec | 182 | connect(); |
jksoft | 0:23e533c4b1ec | 183 | client.yield(RECV_TIMEOUT); |
jksoft | 0:23e533c4b1ec | 184 | } |
jksoft | 0:23e533c4b1ec | 185 | |
jksoft | 0:23e533c4b1ec | 186 | bool Milkcocoa::on(const char *path, const char *event, GeneralFunction cb) { |
jksoft | 0:23e533c4b1ec | 187 | static char topic[100]; |
jksoft | 0:23e533c4b1ec | 188 | |
jksoft | 0:23e533c4b1ec | 189 | sprintf(topic, "%s/%s/%s", app_id, path, event); |
jksoft | 0:23e533c4b1ec | 190 | |
jksoft | 0:23e533c4b1ec | 191 | if (client.subscribe(topic, MQTT::QOS0, cb) != 0) { |
jksoft | 0:23e533c4b1ec | 192 | DBG(pc.printf("Milkcocoa subscribe err\r\n");) |
jksoft | 0:23e533c4b1ec | 193 | return false; |
jksoft | 0:23e533c4b1ec | 194 | } |
jksoft | 0:23e533c4b1ec | 195 | return true; |
jksoft | 0:23e533c4b1ec | 196 | } |
jksoft | 0:23e533c4b1ec | 197 |