JSON Status Responses - FengtianGu/Sonoff-Tasmota GitHub Wiki

Table of Contents

JSON Changes

temp note: for now (6.0.0a) the statetext overwrites the json power result (e.g. "ON" => "AN" or any other statetext the users enter)

Basic Response

{
  "Status": {
    "Module": 1,
    "FriendlyName": "XXX",
    "Topic": "sonoff",
    "ButtonTopic": "0",
    "Power": 0,
    "PowerOnState": 0,
    "LedState": 1,
    "SaveData": 0,
    "SaveState": 1,
    "ButtonRetain": 0,
    "PowerRetain": 0
  },
  "StatusPRM": {
    "Baudrate": 115200,
    "GroupTopic": "sonoffs",
    "OtaUrl": "XXX",
    "Uptime": "1 02:33:26",
    "Sleep": 150,
    "BootCount": 32,
    "SaveCount": 72,
    "SaveAddress": "FB000"
  },
  "StatusFWR": {
    "Version": "5.12.0a",
    "BuildDateTime": "2018.02.11 16:15:40",
    "Boot": 31,
    "Core": "2_4_0",
    "SDK": "2.1.0(deb1901)"
  },
  "StatusLOG": {
    "SerialLog": 0,
    "WebLog": 4,
    "SysLog": 0,
    "LogHost": "domus1",
    "LogPort": 514,
    "SSId1": "XXX",
    "SSId2": "XXX",
    "TelePeriod": 300,
    "SetOption": "00000001"
  },
  "StatusMEM": {
    "ProgramSize": 457,
    "Free": 544,
    "Heap": 23,
    "ProgramFlashSize": 1024,
    "FlashSize": 1024,
    "FlashMode": 3
  },
  "StatusNET": {
    "Hostname": "XXX",
    "IPAddress": "192.168.178.XX",
    "Gateway": "192.168.178.XX",
    "Subnetmask": "255.255.255.XX",
    "DNSServer": "192.168.178.XX",
    "Mac": "2C:3A:E8:XX:XX:XX",
    "Webserver": 2,
    "WifiConfig": 4
  },
  "StatusTIM": {
    "UTC": "Thu Feb 15 00:00:50 2018",
    "Local": "Thu Feb 15 01:00:50 2018",
    "StartDST": "Sun Mar 25 02:00:00 2018",
    "EndDST": "Sun Oct 28 03:00:00 2018",
    "Timezone": 1
  },
  "StatusSNS": {
    "Time": "2018.02.15 01:00:50",
    "Switch1": "OFF"
  },
  "StatusSTS": {
    "Time": "2018.02.15 01:00:50",
    "Uptime": "1 02:33:26",
    "Vcc": 3.504,
    "POWER": "OFF",
    "Wifi": {
      "AP": 1,
      "SSId": "XXX",
      "RSSI": 100,
      "APMac": "34:31:C4:XX:XX:XX"
    }
  }
}

MQTT

After StatusNET

"StatusMQT": {
    "MqttHost": "192.168.XXX.XX",
    "MqttPort": 1883,
    "MqttClientMask": "DVES_%06X",
    "MqttClient": "DVES_4AXXXX",
    "MqttUser": "admin",
    "MAX_PACKET_SIZE": 1000,
    "KEEPALIVE": 15
  },

Domoticz

idx, nvalue, svalue without array

  ..."StatusTIM": {
    "UTC": "Thu Feb 01 20:29:40 2018",
    "Local": "Thu Feb 01 21:29:40 2018",
    "StartDST": "Sun Mar 25 02:00:00 2018",
    "EndDST": "Sun Oct 28 03:00:00 2018",
    "Timezone": 1
  },
  "idx": 286,
  "nvalue": 0,
  "svalue": "19.7",
  "StatusSNS": {
    "Time": "2018.02.01 21:29:40",
    "DS18B20": {
      "Temperature": 19.7
    },
    "TempUnit": "C"
  },
  "StatusSTS": { ...

POW

After StatusTIM

"StatusPTH": {
    "PowerLow": 0,
    "PowerHigh": 0,
    "VoltageLow": 0,
    "VoltageHigh": 0,
    "CurrentLow": 0,
    "CurrentHigh": 0
  },
  "StatusSNS": {
    "Time": "2018.02.04 23:17:01",
    "ENERGY": {
      "Total": 3.185,
      "Yesterday": 3.058,
      "Today": 0.127,
      "Power": 0,
      "Factor": 0.00,
      "Voltage": 221,
      "Current": 0.000
    }
  },

Back to Top

Sensors

AM2301

"StatusSNS": {
    "Time": "2018.02.01 22:52:09",
    "AM2301": {
      "Temperature": 15.5,
      "Humidity": 50.6
    },
    "TempUnit": "C"
  },

BMP280

{
  "StatusSNS": {
    "Time": "2018-02-10T22:46:34",
    "BMP280": {
      "Temperature": 80.9,
      "Pressure": 984.4
    }
  }
}

DHT11

"StatusSNS": {
    "Time": "2018.02.01 22:48:39",
    "DHT11": {
      "Temperature": 12.0,
      "Humidity": 42.0
    },
    "TempUnit": "C"
  },

DS18B20

  "StatusSNS": {
    "Time": "2018.02.01 21:29:40",
    "DS18B20": {
      "Temperature": 19.7
    },
    "TempUnit": "C"
  },

SHT3X (and DHT11, multiple Sensor example)

{
  "StatusSNS": {
    "Time": "2018-02-07T20:16:19",
    "DHT11": {
      "Temperature": 78.8,
      "Humidity": 27.0
    },
    "SHT3X": {
      "Temperature": 74.8,
      "Humidity": 18.9
    },
    "TempUnit": "F"
  }
}

Sonoff SC

  "StatusSNS": {
    "Time": "2018-02-16T16:18:49",
    "Temperature": 25,
    "Humidity": 83,
    "Light": 10,
    "Noise": 20,
    "AirQuality": 100,
    "TempUnit": "C"
  },

PMS5003 and HTU21

"StatusSNS": {
    "Time": "2018-02-16T16:22:12",
    "HTU21": {
      "Temperature": 24.7,
      "Humidity": 32.1
    },
    "PMS5003": {
      "CF1": 1,
      "CF2.5": 2,
      "CF10": 2,
      "PM1": 1,
      "PM2.5": 2,
      "PM10": 2,
      "PB0.3": 423,
      "PB0.5": 116,
      "PB1": 17,
      "PB2.5": 1,
      "PB5": 0,
      "PB10": 0
    },
    "TempUnit": "C"
  },   

Back to Top

Bugged JSON in <= 5.10.0 (invalid JSON)

Also, before 5.10.0j JSON was translated! (< 5.10.0j)

STATUS = {
  "Status": {
    "Module": 4,
    "FriendlyName": "XXX",
    "Topic": "sonoff",
    "ButtonTopic": "0",
    "Power": 0,
    "PowerOnState": 0,
    "LedState": 0,
    "SaveData": 1,
    "SaveState": 1,
    "ButtonRetain": 0,
    "PowerRetain": 0
  }
}
STATUS1 = {
  "StatusPRM": {
    "Baudrate": 115200,
    "GroupTopic": "sonoffs",
    "OtaUrl": "X",
    "Laufzeit": 8,
    "Sleep": 0,
    "BootZähler": 50,
    "SaveCount": 121,
    "SaveAddress": "F8000"
  }
}
STATUS2 = {
  "StatusFWR": {
    "Version": "5.10.0",
    "BuildDatumUhrzeit": "2018.01.12 17:48:45",
    "Boot": 6,
    "Core": "2_4_0",
    "SDK": "2.1.0(deb1901)"
  }
}
STATUS3 = {
  "StatusLOG": {
    "SerialLog": 2,
    "WebLog": 2,
    "SysLog": 0,
    "LogHost": "XXX",
    "LogPort": 514,
    "SSId1": "YYYY",
    "SSId2": "XXX",
    "TelePeriod": 300,
    "SetOption": "00000009"
  }
}
STATUS4 = {
  "StatusMEM": {
    "ProgramSize": 508,
    "frei": 492,
    "Heap-Größe": 19,
    "ProgramFlashSize": 1024,
    "FlashSize": 1024,
    "FlashMode": 3
  }
}
STATUS5 = {
  "StatusNET": {
    "Hostname": "XXX",
    "IPAddress": "192.168.178.111",
    "Gateway": "192.168.178.1",
    "Subnetmaske": "255.255.255.0",
    "DNSServer": "192.168.178.1",
    "MAC": "XX:XX:XX:XX:XX:XX",
    "Webserver": 2,
    "WifiConfig": 0
  }
}
STATUS6 = {
  "StatusMQT": {
    "MqttHost": "192.168.178.111",
    "MqttPort": 1883,
    "MqttClientMaske": "XXXX",
    "MqttClient": "XXXX",
    "MqttUser": "XXXX",
    "MAX_PACKET_SIZE": 512,
    "KEEPALIVE": 15
  }
}
STATUS7 = {
  "StatusTIM": {
    "UTC": "Mon Jan 22 19:05:14 2018",
    "lokale Zeit": "Mon Jan 22 20:05:14 2018",
    "StartDST": "Sun Mar 25 02:00:00 2018",
    "EndDST": "Sun Oct 28 03:00:00 2018",
    "Timezone": 1
  }
}
in = {
  "idx": 13,
  "nvalue": 0,
  "svalue": "1.5;99.9;3"
}
STATUS10 = {
  "StatusSNS": {
    "Zeit": "2018.01.22 20:05:14",
    "AM2301": {
      "Temperatur": 1.5,
      "Feuchtigkeit": 99.9
    },
    "TempUnit": "C"
  }
}
STATUS11 = {
  "StatusSTS": {
    "Zeit": "2018.01.22 20:05:14",
    "Laufzeit": 8,
    "VCC": 3.476,
    "POWER": "OFF",
    "WLAN": {
      "AP": 1,
      "SSID": "XXXX",
      "RSSI": 18,
      "APMac": "XX:XX:XX:XX:XX:XX"
    }
  }
}

PHP Fix for invalid JSON <= 5.10.0

private function fixJsonFormatV5100( $string ) {
			    			
			$string = substr( $string, strpos( $string, "STATUS = " ) );
			if ( strpos( $string, "POWER = " ) !== FALSE ) {
				$string = substr( $string, strpos( $string, "{" ) );
				$string = substr( $string, 0, strrpos( $string, "}" ) + 1 );
			}
			if ( strpos( $string, "ERGEBNIS = " ) !== FALSE ) {
				$string = substr( $string, strpos( $string, "{" ) );
				$string = substr( $string, 0, strrpos( $string, "}" ) + 1 );
			}
			if ( strpos( $string, "RESULT = " ) !== FALSE ) {
				$string = substr( $string, strpos( $string, "{" ) );
				$string = substr( $string, 0, strrpos( $string, "}" ) + 1 );
			}
			    			
			$remove  = [
				PHP_EOL,
				"\n",
				"STATUS = ",
				"}STATUS1 = {",
				"}STATUS2 = {",
				"}STATUS3 = {",
				"}STATUS4 = {",
				"}STATUS5 = {",
				"}STATUS6 = {",
				"}STATUS7 = {",
				"}in = {",
				"}STATUS8 = {",
				"}STATUS9 = {",
				"}STATUS10 = {",
				"}STATUS11 = {",
				"STATUS2 = ",
			];
			$replace = [
				"",
				"",
				"",
				",",
				",",
				",",
				",",
				",",
				",",
				",",
				",",
				",",
				",",
				",",
				",",
				"",
			];
			
			$string = str_replace( $remove, $replace, $string );
			    			
			return $string;
		}

Back to Top