GithubHelp home page GithubHelp logo

fashberg / wthermostatbeca Goto Github PK

View Code? Open in Web Editor NEW
329.0 37.0 68.0 51.68 MB

Open Source firmware replacement for Tuya Wifi Thermostate from Beca and Moes with Home Assistant Autodiscovery

C++ 92.64% Python 7.36%

wthermostatbeca's Introduction

WThermostat - FAS-Fork

GitHub version GitHub release (latest by date including pre-releases) GitHub download Gitpod ready-to-code Github Actions

Fork of https://github.com/klausahrenberg/WThermostatBeca with some new features.

Replaces original Tuya firmware on Beca/Moes/Qiumi thermostat with ESP8266 WiFi module.

Supported Devices

The firmware has been tested or reported to work with following devices:

  • BHT-002 WiFi Thermostat
    • BHT-002-GALW (Water/Gas heating)
    • BHT-002-GBLW (Electrical floor heating)
    • BHT-002-GCLW (Water/Gas Boiler)
  • BHT-6000 WiFi Thermostat
    • BHT-6000-GALW, BHT-6000-GBLW, BHT-6000-GCLW
  • BHT-3000 WiFi Thermostat
    • BHT-3000-GALW, BHT-3000-GBLW, BHT-3000-GCLW
    • also known as BTH-3000L-ABLW, BTH-3000L-GBLW, BTH-3000L-GCLW
  • BAC-1000-ALW WiFi Thermostat for Conditioning (heating, cooling, ventilation)
    • also known as BAC-002-ALW

homeassistant

Features

  • No Cloud dependencies!
  • Enables thermostat to communicate via MQTT and/or Mozilla WebThings
  • Autodiscovery for WebThings via mDNS
  • Configuration of connection, device parameters and schedules via web interface
  • Provides NTP, time zone handling and Daylight-Saving-Calculation to set the clock of thermostat
  • Provides Fallback to Access Point mode if requested using panel-buttons
  • Reading and setting of all parameters via MQTT
  • Reading and setting of main parameters via WebThings
  • Only BHT-002-GxLW: actualFloorTemperature (external temperature sensor)
  • Only BAC-002-ALW: fanSpeed:auto|low|medium|high; systemMode:cooling|heating|ventilation
  • Reading and setting of time schedules via MQTT
  • Reading and setting of Schedules via Web-GUI
  • Automatic switching back to temperature-scheduling from manual mode next schedule interval (optional)
  • FAS-Fork enhancements
    • RelayStateCalculation - shows current state of heating/cooling - without soldering (fas)
    • Autodiscovery for Home Assistant via MQTT (fas)
    • Logging to MQTT (fas)
    • Logging to WebBrowser using Websockets (fas)
    • Captive Portal support for setup (fas)
    • show password in cleartext for setup (fas)
    • TimeBug Workaround (precicion fixed to 1 sec) (fas)
    • All State Information at status page (fas)
    • GitPod-Support (fas)
    • PlatformIO Direct OTA-Upload to device (fas)
    • Eco-Mode fixed to 20 degrees (fas)
    • RSSI Information (Info-Page, MQTT and Home-Assistant Support) (fas)
    • More detailed Documentation (fas)

(fas): Only available in -fas version

Hardware-Versions

You need the WiFi Version! (W in product name suffix, like -GALW). There are also a versions without WLAN (Offline-Version and ZigBee-Version (-GALZBW)). See Diagnose Can we add WiFi to Non-WiFi Thermostat bac-002.pdf

The BHT Version is for heating only. The BAC-Version has modes Cooling, Heating and Ventilation. The BHT-002-GA/GB/GC versions only differs in relays-wiring.

Difference between GA, GB and GC

  • GA - Water-Heating
    • Two Relays for opening and closing valve
    • Only one Relay will be closed at the same time
    • Closing Relay PIN 1 - PIN 3 (N or L)
    • Opening Relay PIN 2 - PIN 3 (N or L)
    • Product Spec says Max Power: 3 A
  • GB - Electric-Heating
    • Connect Heating between PIN 1 and PIN 2
    • Product Spec says Max Power: 16 A
  • GC - Water/Gas Boiler
    • One Relay - potential free (dry contact)
    • Relay on PIN 1 - PIN 2 (dry contacts)
    • Product Spec says Max Power: 3 A

Hardware Installation

Here a description of how to install the hardware - indepentdent from Open Source WThermostat. No special Hardware installation necessary for Upgrading to this firmware!

Download binaries

Pre-built binaries can be downloaded at releases-page.

Software Installation

⚠️ Nearly all devices are now shipped with a new Firmware which cannot be upgraded Over The Air with non-tuya-servers. In this case you cannot longer use tuya-convert and you have to open the device for soldering or use a 3d-printed pogo-adapter.

You can install the firmware either

  • by using tuya-convert - no Hardware Modifications necessary
  • by soldering cables to the ESP-Modules using an ESP/Arduino-Programmer (3,3 Volt TTL)
  • by using OTA Upgrade on tasmota or other Open Source ESP Firmware

Yoube video of converting to 1.14-fas with tuya-convert: https://youtu.be/fqfghJqnK_8

Follow instructions here: Flashing.md

Initial configuration

  • The devices becomes an Access Point
  • Connect to WiFi Thermostat-xxxxxx with Password 12345678
  • Open http://192.168.4.1 or wait for Captive Portal to be opened on Android
  • Configure your WiFi Settings
  • After initial setup, the device configuration is available at http://<device_ip>/
  • Configure device model, clock and other settings

See Configuration.md for a detailed explanation of the setup.

Upgrading

You can Upgrade over the Air from other versions of WThermostatBeca on the Web-GUI. Please check all settings after Upgrade!

If you upgrade from Klaus-Ahrenberg's version, please note:

  • Only WLAN settings are kept
  • If you get "Not Enough Space" you can use WThermostat_1.xx-fas-minial.bin as interim version.
    • WLAN settings are kept
    • no MQTT, no Beca-control, no Clock in -minimal
    • Then Upgrade to normal version
    • Not necessary when upgrading from fas to fas versions

Screenshots

Main Screen:

setup_main

Network Screen:

setup_network

Schedule Screen:

setup_schedules

Live WebLog Screen:

weblog_screen

Integration in Home Assistant

homeassistant homeassistant hass_discovery

Controlling BAC in HomeAssistant

  • Use Operation to Switch between 'heat', 'cool', 'fan_only' and 'off'
  • Use Preset to switch between 'None' (manual), 'Scheduler' and 'eco'
  • Changing temp disables scheduler and switches to preset 'None'

homeassistant

HASS Autodiscovery

WThermostatBeca supports optional HASS-Autodiscovery since Version 1.08-fas. You must enable it at Thermostat (settings network) and of course it must be enabled in your HASS configuration.yaml file:

mqtt:
  broker: <ip of broker>
  discovery: true
  discovery_prefix: homeassistant

Use a persistent MQTT-Broker

You should use a persistent MQTT-Broker, keeping all retained messages during reboot/restart. HASS integrated MQTT broker is not persistent. Otherwise all autodiscovered messages are getting lost and you must reboot all devices, to send HASS autodiscover messages again! See: https://www.home-assistant.io/docs/mqtt/discovery/

Example for users of mosquitto, file mosquitto.conf:

persistence true
persistence_file mosquitto.db
persistence_location /var/lib/mosquitto/
autosave_interval 1800
# The default if not set is to never expire persistent clients.
persistent_client_expiration 24h

See https://mosquitto.org/man/mosquitto-conf-5.html for more details.

HASS Manual Configuration

For manual Configuration here is an example for your configuration.yaml file:

Heating:

climate:
  - platform: mqtt
    name: Room_Thermostat
    availability_topic: "home/room/tele/LWT"
    payload_available: "Online"
    payload_not_available: "Offline"
    action_topic: "home/room/stat/things/thermostat/properties"
    action_template: "{{value_json.action}}"
    temperature_command_topic: "home/room/cmnd/things/thermostat/properties/targetTemperature"
    temperature_state_topic: "home/room/stat/things/thermostat/properties"
    temperature_state_template: "{{value_json.targetTemperature}}"
    current_temperature_topic: "home/room/stat/things/thermostat/properties"
    current_temperature_template: "{{value_json.temperature}}"
    mode_command_topic: "home/room/cmnd/things/thermostat/properties/mode"
    mode_state_topic: "home/room/stat/things/thermostat/properties"
    mode_state_template: "{{value_json.mode}}"
    modes: [ "heat", "auto", "off" ]
    preset_mode_command_topic: "home/room/cmnd/things/thermostat/properties/preset"
    preset_mode_state_topic: "home/room/stat/things/thermostat/properties"
    preset_mode_value_template: "{{value_json.preset}}"
    preset_modes: ["away"]
    min_temp: 5
    max_temp: 35
    temp_step: 0.5
    precision: 0.5

Air Conditioning:

The BAC-002/BAC-1000 does not support auto mode. The Device (MCU) can not switch automatically between heating, cooling or fan mode.

To Switch between Automatic Scheduling and Manual Mode we use 'holdState' with the following mode: 'scheduler' and 'manual', combined with mode 'eco'. If you choose 'None' it disables 'eco' and device jumps back to last mode (scheduler/manual). Do not use away_mode_ combined with holdState.

climate:
  - platform: mqtt
    name: Bedroom AC Control
    availability_topic: "home/bedroom/tele/LWT"
    payload_available: "Online"
    payload_not_available: "Offline"
    action_topic: "home/bedroom/stat/things/thermostat/properties"
    action_template: "{{value_json.action}}"
    temperature_command_topic: "home/bedroom/cmnd/things/thermostat/properties/targetTemperature"
    temperature_state_topic: "home/bedroom/stat/things/thermostat/properties"
    temperature_state_template: "{{value_json.targetTemperature}}"
    current_temperature_topic: "home/bedroom/stat/things/thermostat/properties"
    current_temperature_template: "{{value_json.temperature}}"
    mode_command_topic: "home/bedroom/cmnd/things/thermostat/properties/mode"
    mode_state_topic: "home/bedroom/stat/things/thermostat/properties"
    mode_state_template: "{{value_json.mode}}"
    fan_mode_command_topic: "home/bedroom/cmnd/things/thermostat/properties/fanMode"
    fan_mode_state_topic: "home/bedroom/stat/things/thermostat/properties"
    fan_mode_state_template: "{{value_json.fanMode}}"
    modes: [ "heat", "cool", "fan_only", "off" ]
    min_temp: 16
    max_temp: 32
    temp_step: 1
    precision: 0.5

If you have several thermostats you can anchor some settings while defining the first device and refer later. Example:

climate:
- platform: mqtt
  name: Wohnzimmer_Thermostat
  availability_topic: "home/wohnzimmer/tele/LWT"
  action_topic: "home/wohnzimmer/stat/things/thermostat/properties"
  temperature_command_topic: "home/wohnzimmer/cmnd/things/thermostat/properties/targetTemperature"
  temperature_state_topic: "home/wohnzimmer/stat/things/thermostat/properties"
  current_temperature_topic: "home/wohnzimmer/stat/things/thermostat/properties"
  mode_command_topic: "home/wohnzimmer/cmnd/things/thermostat/properties/mode"
  mode_state_topic: "home/wohnzimmer/stat/things/thermostat/properties"
  preset_mode_command_topic: "home/wohnzimmer/cmnd/things/thermostat/properties/preset"
  preset_mode_state_topic: "home/wohnzimmer/stat/things/thermostat/properties"
  <<: &commonbeca
    payload_available: "Online"
    payload_not_available: "Offline"
    action_template: "{{value_json.action}}"
    temperature_state_template: "{{value_json.targetTemperature}}"
    current_temperature_template: "{{value_json.temperature}}"
    mode_state_template: "{{value_json.mode}}"
    away_mode_state_template: "{{value_json.ecoMode}}"
    modes: [ "heat", "auto", "off" ]
    preset_mode_value_template: "{{value_json.preset}}"
    preset_modes: ["away"]
    min_temp: 5
    max_temp: 35
    temp_step: 0.5
    precision: 0.5
- platform: mqtt
  name: Flur_Thermostat
  availability_topic: "home/flur/tele/LWT"
  action_topic: "home/flur/stat/things/thermostat/properties"
  temperature_command_topic: "home/flur/cmnd/things/thermostat/properties/targetTemperature"
  temperature_state_topic: "home/flur/stat/things/thermostat/properties"
  current_temperature_topic: "home/flur/stat/things/thermostat/properties"
  away_mode_command_topic: "home/flur/cmnd/things/thermostat/properties/ecoMode"
  away_mode_state_topic: "home/flur/stat/things/thermostat/properties"
  mode_command_topic: "home/flur/cmnd/things/thermostat/properties/mode"
  mode_state_topic: "home/flur/stat/things/thermostat/properties"
  preset_mode_command_topic: "home/flur/cmnd/things/thermostat/properties/preset"
  preset_mode_state_topic: "home/flur/stat/things/thermostat/properties"
  <<: *commonbeca
- platform: mqtt
  name: WC_Thermostat
  availability_topic: "home/wc/tele/LWT"
  action_topic: "home/wc/stat/things/thermostat/properties"
  temperature_command_topic: "home/wc/cmnd/things/thermostat/properties/targetTemperature"
  temperature_state_topic: "home/wc/stat/things/thermostat/properties"
  current_temperature_topic: "home/wc/stat/things/thermostat/properties"
  away_mode_command_topic: "home/wc/cmnd/things/thermostat/properties/ecoMode"
  away_mode_state_topic: "home/wc/stat/things/thermostat/properties"
  mode_command_topic: "home/wc/cmnd/things/thermostat/properties/mode"
  mode_state_topic: "home/wc/stat/things/thermostat/properties"
  preset_mode_command_topic: "home/wc/cmnd/things/thermostat/properties/preset"
  preset_mode_state_topic: "home/wc/stat/things/thermostat/properties"
  <<: *commonbeca

See https://www.home-assistant.io/integrations/climate.mqtt/ for more information.

Integration in WebThings

Since version 0.96 this firmware supports Mozilla WebThings directly. With webthings you can control the thermostat via the Gateway - inside and also outside of your home network. No clunky VPN, dynDNS solutions needed to access your home devices. I recommend to run the gateway in parallel to an MQTT server and for example Node-Red. Via MQTT you can control the thermostat completely and logic can be done by Node-Red. WebThings is used for outside control of main parameters.
Add the device to the gateway via '+' icon. After that you have the new nice and shiny icon in the dashboard:
webthing_icon
The icon shows the actual temperature and heating state.

There is also a detailed view available:

webthing

Device-Functions

JSON structures

The software provides different messages:

  1. Thermostat State report (JSON)
  2. Schedules (JSON)
  3. Device (at start of device to let you know the topics and ip)
  4. Logs (Plain)

1. Thermostat State report

MQTT: State report is provided every 5 minutes, at change of a parameter or at request via message with empty payload to <your_topic>/cmnd/things/thermostat/properties , reports are sent to <your_topic>/stat/things/thermostat/properties. The state report is sent with MQTT-retain-flag enabled.

WebThings: State report can be requested by: http://<device_ip>/things/thermostat/properties

{
  "idx":"thermostat_beca",
  "ip":"192.168.0.xxx",
  "firmware":"x.xx",
  "temperature":21.5,
  "targetTemperature":23,
  "deviceOn":true,
  "schedulesMode":"off|auto",
  "holdMode":"manual|scheduler|eco", // Special Mode for BAC-002 for HASS integration
  "ecoMode":false,
  "locked":false,
  "state":"off|heating", //only_available, if hardware is modified
  "floorTemperature":20, //only_BHT-002-GxLW
  "fanMode":"auto|low|medium|high", //only_BAC-002-ALW
  "systemMode":"cool|heat|fan_only", //only_BAC-002-ALW
  "mode":"off|auto|heat", // BHT-002: combined Mode for better home assistant support.
  "mode":"off|heat|cool|fan_only", // BAC-002-ALW
  "action":"off|idle|heating|cooling|fan" // read only current action, idle only available if hardware is modified, cooling/fan only BAC-002
}

2. Schedules

MQTT: Request actual schedules via message with empty payload to <your_topic>/cmnd/things/thermostat/schedules, answers are reported to to <your_topic>/stat/things/thermostat/schedules

WebThings: State report can be requested by: http://<device_ip>/things/thermostat/schedules

{
  "w1h":"06:00",
  "w1t":20,
  "w2h":"08:00",
  "w2t":15,
  ...
  "w6h":"22:00",
  "w6t":15,
  "a1h":"06:00",
  ...
  "a6t":15,
  "u1h":"06:00",
  ...
  "u6t":15
}

3. Device Report

MQTT: At start of device to let you know the topics and ip to devices/thermostat

WebThings: n.a.

{
  "url":"http://192.168.0.xxx/things/thermostat",
  "ip":"192.168.0.xxx",
  "topic":"thermostat_beca/things/thermostat"
}

4. Logs

If logging is enabled (webgui/mqtt) you will see messages like:

<your_topic>/tele/log trace: sending heartBeatCommand
<your_topic>/tele/log trace: commandCharsToSerial: 55 aa 00 00 00 00

5. Last Will & Testament

WebThings: n.a. MQTT: The retained message at topic '<your_topic>/tele/LWT' is set to the value "Online" if the devices comes up and your MQTT-Broker is requested to set to "Offline" as last will when device goes down.

Modifying parameters via MQTT

Send a json with changed parameters to <your_topic>/cmnd/things/thermostat/properties.
Send a json with changed schedules to <your_topic>/cmnd/things/thermostat/schedules. You also can change single values by sending the value to <your_topic>/cmnd/things/thermostat/properties/parameterName.

Examples:

# set device on
mosquitto_pub -h mqtt -t home/test/cmnd/things/thermostat/properties/deviceOn  -m "true"

# set device to heating
mosquitto_pub -h mqtt -t home/test/cmnd/things/thermostat/properties/mode  -m "heat"

# set target temperature
mosquitto_pub -h mqtt -t home/test/cmnd/things/thermostat/properties/targetTemperature  -m "23.5"

# set target temperature (json)
mosquitto_pub -h mqtt -t home/test/cmnd/things/thermostat/properties -m '{"targetTemperature":23.00}'

# set target temperature and mode (json)
mosquitto_pub -h mqtt -t home/test/cmnd/things/thermostat/properties -m '{"targetTemperature":22.00,"mode":heat}'

# set device to auto (target temperature controlled by MCU-Scheduler)
mosquitto_pub -h mqtt -t home/test/cmnd/things/thermostat/properties/mode -m "auto"

# just request properties
mosquitto_pub -h mqtt  -t home/test/cmnd/things/thermostat/properties -n

# request properties and show answer directly
mosquitto_rr -h mqtt -t home/test/cmnd/things/thermostat/properties  -n -e home/test/stat/things/thermostat/properties


# Change Schedules (here: weekday schedules)
mosquitto_pub -h mqtt -t home/test/cmnd/things/thermostat/schedules -m \
'{"w1h":"06:00","w1t":20.00,"w2h":"08:00","w2t":15.00,"w3h":"11:30","w3t":15.00,"w4h":"13:30","w4t":15.00,"w5h":"17:00","w5t":23.00,"w6h":"23:00","w6t":15.00}'

# disable MQTT logging
mosquitto_pub -h mqtt -t home/test/cmnd/things/logging/properties/logLevel -m "silent"

# set to level trace (available: silent|fatal|error|warning|notice|trace|verbose)
mosquitto_pub -h mqtt -t home/test/cmnd/things/logging/properties/logLevel -m "trace"

# show logs
mosquitto_sub -h mqtt -v -t "home/test/tele/log/#"

# send MCU command by MQTT
mosquitto_pub -t "home/test/cmnd/things/thermostat/mcucommand" -m "55 aa 00 1c 00 08 01 14 09 0c 10 30 0f 06"

MQTT Explorer

For MQTT Troubleshooting i suggest MQTT Explorer, which can be found at https://github.com/thomasnordquist/MQTT-Explorer

How it works

Hardware and serial communication

The Hardware itself has two Microcontrollers:

  • The MCU, the Main Controlling Unit.
    • The software on the MCU gets not upgraded with WThermostat, so no changes are possible here!
    • It controls Temperature, Display, the Relay, Scheduling, has RTC, etc.
    • Sonix SN8F57083 8 bit Microcontroller
  • The ESP8266-based Tuya-WiFi-Module.
    • The Software of ESP can be flashed with this Open Source WThermostat
    • There is a serial connection between MCU and ESP. Via this connection we can control the MCU
    • Only the WiFi-Versions of thermostats have the ESP-Module.

Both devices are communication using a binary serial protocol, called "MCU protocol". See Tuya Cloud Universal Serial Port Access Protocol_Tuya Smart_Docs.pdf

Because ESP8266 runs with 3.3 Volt and Sonix MCU runs with 5.0 Volt the Serial-TTL-Level gets shifted with transistors.

HowItWorks

Can you add xxx as a feature

I have been often asked if I can implement a specific feature. Often the answer is: Because all internal routines (reading temperature, controlling the relay, reading the buttons, controlling the display) are controlled by MCU, which still runs proprietary closed source software, the behavior cannot be changed!

Don't like it or it doesn't work

Flash the original firmware (see installation). Write me a message with your exact model and which parameter was not correct. Maybe your MQTT-server received some unknown messages - this would be also helpful for me. Again: I have tested this only with model BHT-002-GBLW. If you have another device, don't expect that this is working directly.

Build this firmware from source and contributing

For building from sources and coding i suggest VS Code and PlatformIO. You can also use Gitpod.

Visual Studio Code: Install and Prepare to build

  • Install Visual Studio Code and PlatformIO.
  • Type:
git clone https://github.com/fashberg/WThermostatBeca
cd WThermostatBeca
# download dependant library WAdapter
git submodule init
git submodule update
  • Open the folder 'WThermostatBeca' in VS Code
  • Go to PlatformIO Alien Icon on the left
  • Open in Tree "wthermostat" and click General/Build
    • Binary Firmware can be found in build_output/firmware/wthermostat-1.xx-fas.bin (or -debug or -minimal)

All dependant arduino-libraries (DNSServer, EEPROM (for esp8266), ESP8266HTTPClient, ESP8266mDNS, AsyncWebServer, ESP8266WiFi, Hash, NTPClient, Time.) will be downloaded automatically (defined in platform.ini) and the necessary WAdapter library from https://github.com/fashberg/WAdapter (git submodule).

You probably want to specify your own Port-Settings. Copy platformio_override.sample.ini to platformio_override.ini and define your stuff.

Environments wthermostat / wthermostat-minimal / wthermostat-debug and bin.gz

There are 3 environments:

  1. wthermostat: this is the default production environment.

  2. wthermostat-minimal: this is the minimal version. No MQTT and no Thermostat Support, meant for OTA Upgrading when standard is too small. After flashing minimal do an upgrade to normal.

  3. wthermostat-debug: this is the debug/development version. DO NOT FLASH TO THERMOSTAT HARDWARE! There is debugging output to serial interface which will confuse Thermostat-MCU. Upload to USB-Connected development ESP8266 board (Node MCU or Wemos D1 Mini pro) and monitor the output in vscode/pio-monitor.

bin vs bin.gz: You can directly upload a gzipped (compressed) firmware via OTA

Cloud Development using Gitpod

You can open and compile this Project on Gitpod. You need a GitHub account, 50 hours are free per month - don't forget to stop the workspace.

Just click

Open in Gitpod

The fist build starts automatically. You can download the firmware by right-clicking in the Project-Explorer the file located at build_output/firmware/wthermostat-1.xx-fas.bin and then choose Download.

Some commands

  • Build normal firmware: platformio run -e wthermostat
  • Build all firmwares: platformio run
  • Get latest version and dependant libraries. git pull ; git pull --recurse-submodules
  • Upgrade PlatformIO: platformio upgrade --dev
  • Upgrade Dependencies: platformio pkg update ; platformio pkg install
  • Build wthermostat: pio run -e wthermostat
  • Check/Lint wthermostat: pio check -e wthermostat
  • upload wthermostat via ip: python pio/espupload.py -u <IpOfDevice> -f $SOURCE

GitHub Actions, Pull-Requests

After every push or pull-request the code is build automatically on github.

Check out /actions, you can also download the built-firmware for each commit at the bottom of the "Summary" at "Artifacts".

Feel free the request a PR.

wthermostatbeca's People

Contributors

austwhite avatar fashberg avatar henry-sir avatar jressel01 avatar klausahrenberg avatar labodj avatar privatesam avatar radokristof avatar thundergreen avatar zawasp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wthermostatbeca's Issues

Home Assistant graph

Hi @fashberg
Do you have any idea why the HA graph is scattered? There should be a blue line with the desired temperature (as it was before), but now it shows up only on several places. This is the same on both of my thermostats since I updated from v1.00 to v1.11-fas.
Képkivágásgraph

Support for external 6.8Kohm temperature sensor

Hello! Is it possible to add support for an external temperature sensor with a resistance of 6.8 kOhm in the firmware? This sensor has remained from the old thermostat and is walled up in the floor; replacing it with a standard one is very problematic. Thank!

Thermostat changes to Unknown multiple times in Home Assistant

Hi @fashberg
Sorry to be a pain with this.
I have noticed, with that the firmware, when using Home Assistant Auto Discovery, will keep dropping the thermostat to unknown status and messes the history graph up, as well as Home Assistant not being able to access the device when in unknown status.
This only happens when using Auto Discovery, When using Manual MQTT HVAC setup it is fine.
I have tried downgrading, and this happens on 1.09, 1.10 and 1.11 firmware. I do not have 1.08 to try.
As you can see from below, it will do this every 5 minutes and stay unknown for one minute before becoming available again. Below is just a small extract from my Home Assistant log, but it shows it is regular. Again, this only happens with Auto Discovery. Manually added devices are rock solid.

Extract from my log file in Home Assistant:

8:00:07 PM
Central heating changed to heat
7:59:24 PM
Central heating changed to unknown
7:55:07 PM
Central heating changed to heat
7:54:24 PM
Central heating changed to unknown
7:50:07 PM
Central heating changed to heat
7:49:24 PM
Central heating changed to unknown
7:45:07 PM
Central heating changed to heat
7:44:24 PM
Central heating changed to unknown
7:40:07 PM
Central heating changed to heat
7:39:24 PM
Central heating changed to unknown

Thanks for the help

Use the led to report state

This is not a bug, but a request: is it possible to turn off the led if the thermostat is off?
Don't know if the led is connected to the MCU or the ESP, and if it's feasible, but it would be nice

What defines ecoMode Temp

When I switch on ecoMode the mqtt message still shows mode:heat and action:heating.
The lovelace climate card shows Heating-Away and the targetTemp changes to 20.

Can the climate card show Idle-Away if it is no longer heating, above currentTemp.
Can the ecomode target temp be user amended ?

I'd like to be able to set it to 5 for frost protection when house is empty, for example.

Single State Report

Hi,

Single State report is not provided every 5 minutes, just JSON state is reporting

Home Assistant autodiscovery: auto to change some parameters like max-temp? Why is not loaded automatically?

Hi, I am using WThermostatBeca and enabled Autodiscovery. Everything works fine. I have changed the max_temp on the thermostat to 23°C but the WThermostatBeca still puts 35°C. I also checked the payload and in facts sets 35°C. So it seems WThermostatBeca is not loading max temperature from the thermostat.
I could also ovveride it in home assistant but, as the code is not present in configuration.yaml I don't know how to do...

_name: thermostat-22524
unique_id: thermostat-22524_climate
device:
identifiers:
- 'CC:50:E3:22:5E:7C'
name: thermostat-22524
model: WThermostat
sw_version: 1.17-fas
manufacturer: WThermostatBeca
availability_topic: home/pianoterra/tele/LWT
payload_available: Online
payload_not_available: Offline
action_topic: home/pianoterra/stat/things/thermostat/properties
action_template: '{{value_json.action}}'
mode_command_topic: home/pianoterra/cmnd/things/thermostat/properties/mode
mode_state_topic: home/pianoterra/stat/things/thermostat/properties
mode_state_template: '{{value_json.mode}}'
away_mode_command_topic: home/pianoterra/cmnd/things/thermostat/properties/ecoMode
away_mode_state_topic: home/pianoterra/stat/things/thermostat/properties
away_mode_state_template: '{{value_json.ecoMode}}'
temperature_command_topic: home/pianoterra/cmnd/things/thermostat/properties/targetTemperature
temperature_state_topic: home/pianoterra/stat/things/thermostat/properties
temperature_state_template: '{{value_json.targetTemperature}}'
current_temperature_topic: home/pianoterra/stat/things/thermostat/properties
current_temperature_template: '{{value_json.temperature}}'
payload_on: true
payload_off: false
min_temp: '10'
max_temp: '35'
temp_step: '0.5'
modes:

  • heat
  • auto
  • 'off'
    platform: mqtt_

Any help please?

Cryptodome module not found error

Hi,

I'm getting the above error while trying to flash my BHT-002 thermostat.
Please see below.
Any help is much appreciated.

Thanks,
Dan

Starting smart config pairing procedure
Waiting for the device to install the intermediate firmware
Traceback (most recent call last):
File "./smartconfig/main.py", line 15, in
from smartconfig import smartconfig
File "/home/dan/tuya-convert/scripts/smartconfig/smartconfig.py", line 43, in
from multicast import multicast_head, encode_multicast_body
File "/home/dan/tuya-convert/scripts/smartconfig/multicast.py", line 12, in
from Cryptodome.Cipher import AES
ModuleNotFoundError: No module named 'Cryptodome'

Change sensor to floor heating

Hi! How I can change sensor to floor? I need use floor sensor for thermostat and air sensor only for information in HA

Thermostat precision

I've got a BHT-002 and I have the Thermostat precision set to 0.5. On the LCD screen I can change the target temperature by 0.5 at a time which is great.

My question is that I have to set the target temperature to 1.0 above the current temperature before it switches the heating on. Is there a way to change this down to 0.5?

I have noticed that if you switch the unit off, and back on again with the target temp being 0.5 above current temp then the heating is switched on.

The length of the fields Hostname and Topic

I saw that the length of the fields changed in the project:

  • Hostname (16)
  • Topic in the MQTT section (32)
    It's a breaking change in the my installation Home Assistant. I couldn't find where in the source code these restrictions are. Can you tell me where can fix it.

Support for ET61-W

Do you have any plans/interest in adding support for the Jiahong wifi thermostat models (https://www.ahjiahong.com/thermostat/)?

I notice that there is some support for the ET81-W in the parent project but that hasn't been carried across here.

I have a branded ET61-W (purchased as a "ProWarm™ ProTouch-E Wifi" in the UK) that I'd like to get integrated with Home Assistant if possible. I have considered returning it and getting one of the models already supported but the optimum start feature is of sufficient interest to me that I've kept hold of it (assuming it works as advertised - I have yet to actually install and test it as the room it's going in is not yet complete).

Sync Thermostat with climate entity

Hey.. I sucessfully setup this device.. I even added some features not documented like fan_mode to get all function i need for my ac.

now as this thermostat is just like a dummy to control the "real" climate entity I need a setup (automation) to somehow sync those two climate entities. I came up with this:

  - alias: 'AC_bedroom_controller'
    trigger:
      - platform: state
        entity_id: climate.bedroom_ac_control
      - platform: state
        entity_id: climate.air_conditioner_bedroom
    action:
      - service: climate.set_hvac_mode
        entity_id: climate.air_conditioner_bedroom
        data_template:
          hvac_mode: "{{ trigger.to_state.state }}"
      - service: climate.set_hvac_mode
        entity_id: climate.bedroom_ac_control
        data_template:
          hvac_mode: "{{ trigger.to_state.state }}"

But the negative seideffect is that once it triggers from off to any hvac_mode like cool it turn back to off immediately and hangs in this loop without any chance to escape. I am not that familar with all this templating stuff but maybe you have an idea how to sync this climate entity with climate.ac_xxx and vise versa. Because if an automation or manually changed the mode of the "real" ac climate entity i would like it shows up in the thermostat as well.

I already found the custom_component climate group

https://github.com/daenny/climate_group

but this would lead to this error:

2020-05-31 22:50:51 ERROR (MainThread) [homeassistant.core] Error doing job: Task exception was never retrieved
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 314, in _async_write_ha_state
    attr = self.capability_attributes
  File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 196, in capability_attributes
    data[ATTR_FAN_MODES] = self.fan_modes
  File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 372, in fan_modes
    raise NotImplementedError
NotImplementedError
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 284, in async_update_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 314, in _async_write_ha_state
    attr = self.capability_attributes
  File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 196, in capability_attributes
    data[ATTR_FAN_MODES] = self.fan_modes
  File "/usr/src/homeassistant/homeassistant/components/climate/__init__.py", line 372, in fan_modes
    raise NotImplementedError
NotImplementedError

issue raised here:

daenny/climate_group#27

so this genious custom_component can't be used to "sync" or just group those two climate entities.

If you have any idea how to solve this problem, i'd highly appreciate your help. Also i'd then write a post in the forum how to set this up.

Invert relay logic

Hi,

Thank you @fashberg for this work. I flashed on a Bth-3000l-gclw with no problem.

The thing is my water heater has a inverted logic, where when dry contact circuit is closed, the heater is off and when is open the heater runs. My former thermostat had NC and NO connectors, but this thermostats hasn't, just NO logic.

Is there a way to address this with sw or hw mod?

Thanks

Wrong Single Values via MQTT

Hello,

single values are displayed incorrectly, regardless of what you send as cmnd/ via MQTT or set on thermostat single values deviceON,ecoMode and locked are always "true"

Integration in iobroker

Hello, I have 2 BHT-002 GALWs with firmware 1.15-fas running. I also flashed a third one, with version v1.16-beta6-fas which after setting parameters does no longer reports via WLAN. Seems to be damaged, if someone is interested, I would like to make it available for test purposes.
Now my problem: I have integrated both into my iobroker using an MQTT adapter and can read everything. Unfortunately, I cannot write access, regardless of whether it is for individual values or in JSON format. No value can be set.
What am I doing wrong?

Home Assistant Auto Config - only shows heat or off

This is more a feature request I guess.
With Home Assistant, when the thermostat has the hardware mod, there is the option to show Heating or Idle when the device is on and Off when the device is off.
The current implementation only shows Heat and Off and does not indicate the idle time.

Would it be possible for this to be implemented? I do understand this may be tricky given the way the state attribute works in the firmware

I really appreciate the work you've done so far.

As a note, to do this in YAML manually, I had to use a script due to Klaus's firmware only using off and heating for the state. Below is the YAML I had to use to get idle status to show in Home Assistant.

action_topic: 'centralheat/stat/things/thermostat/properties'
action_template: >-
  {% if value_json.state == 'heating' %}
    heating
  {% elif value_json.mode == 'off' %}
    off
  {% else %}
    idle
  {% endif %}

Cannot flash BHT002

Hi
I am trying to implement this great project in my new BHT-002 thermostat. PCB matches exactly with photo (including part number). Setup is with soldered wires. I have added external 3.3V, all grounds (USB, Power supply, ESP) are common.
I am working from a Windows laptop.
When I connect Putty (Serial, COM7, baud rate 78000), and reboot the unit with GP00 pulled down, I get the line:
ets Jan 8 2013, rst cause:2, boot mode (1,6)
Looks good to me. Tells me communication is good (at least the transmit part) and dat de ESP8266 is activated in write mode.
When I try to read firmware (or read chip_id, or flash_id) I always get a time out on the esptool command.
(Using Esptool.py 2.8:
A fatal error occurred: Failed to connect to Espressif device: Time out waiting for packet header.
I played with many baud rates, --no-stub option, I now even added an external pull up resistor to GP02, tried different esptool commands, but nothing seems to help. One of my concerns is that no data arrives from USB to ESP, but I do not know how to check that.

When I connect Putty and perform a normal reset (no pulling down of GP00) I get:

 ets Jan  8 2013,rst cause:2, boot mode:(3,0)

load 0x40100000, len 2592, room 16
tail 0
chksum 0xf3
load 0x3ffe8000, len 764, room 8
tail 4
chksum 0x92
load 0x3ffe82fc, len 676, room 4
tail 0
chksum 0x22
csum 0x22

2nd boot version : 1.7(5d6f877)
SPI Speed : 40MHz
SPI Mode : QIO
SPI Flash Size & Map: 8Mbit(512KB+512KB)
jump to run user1 @ 1000

OS SDK ver: 2.0.0(e8c5810) compiled @ Jan 25 2019 14:26:04
phy ver: 1055_9, pp ver: 10.7

rf cal sector: 121
idle_task_hdl : 40107a90,prio:0, stack:384
tim_task_hdl : 40107bd8, prio:2,stack:512

This should be the original software as I have not managed to write the new firmware.
Any tips, suggestions are welcome.

Mode after switch off and on

Hi, I saw this behavior. I put the thermostat in auto mode. Then switch off (unplug the thermostat from power supply) and switch on again. It goes to manual mode, so it doesn’t remember the last state before switching off.
Could you kindly check? Thanks

MQTT / Network parameters being ignored

Just upgraded to the 1.10-fas 8 thermostats.
In one of them, I noticed MQTT got somehow creazy, sending a message every single second, even in the case I disable MQTT, or change the configuration to i.e. a wrong server that doesn't exists, looks like is ignoring whatever I'm setting at the network configuration, keeping the old values...
Tryied downgrading 1.9, 1.0-minimal... but same effect.
Others seems to work fine.

Can't say if that was also occuring before the upgrade.

BAC-002 auto-mode

https://github.com/fashberg/WThermostatBeca/releases/tag/v1.16.beta3-fas
starts support for HASS Autodiscovery for BAC002.

I currently have 2 problems with BAC-002

  • HASS supports only these modes: [“auto”, “off”, “cool”, “heat”, “dry”, “fan_only”]
    But BAC-002 has no full-auto-mode, you can switch between auto (scheduler) and manual and the mode can be switched between cool/heat/fan_only. How to map this to HASS. Any suggestions?
  • when changing fan-speed mode switches to fan_only

Ideas?

Automatic mode doesn't report temperature

Temperature in auto mode is report from manual mode to Home Assistant. Of course RelayStateCalculation isn't work properly for automatic mode. Also thermostat turns on heating even for 0,5 C difference when powering on by manual button.

Thermostat 1.16.beta5-fas info page does not open

I have been using Thermostat 1.16.beta5-fas and noticed that info page does not open. I use this beta firmware in 9 thermostats and non of them opens info page. I have some WiFi connection issued with one thermostat so that's why I wanted to check if there is sometimes. All other thermostats have been working well but I can't see info page on web from any. I did firmware hack to all and it works great.

Wifi SSID is case sensitive ?

Hi,
a low priority issue, but I discovered that Wifi SSID must match the actual case (I happen to have an uppercase SSID and entered lower case). I got it working, but it cost me some time.
Best regards
Marcel

PC Access point not working for tuya convert

Hi,

I was trying to follow the tuya-convert route and create an access point on my linux ubuntu. I changed the wifi interface name to the right one and no error message but the Access Point is not active.
Any help is appreciated.
Thanks,
Dan

Enhancement ? Floor Temp driven

Is it possible to control the BHT-002GBLW, which has the floor temp sensor, so that it operates the relay operation based upon whether the floor temp has reached the target temperature ?

Eco mode temperature

There's a way to set economy temperature? It can be In the set in the options (holding the 2 left buttons when the thermo is off).
Since it return tu the default value (20 °C) every time you disconnect the thermostat from power, could be useful to set it via MQTT

Refresh problems with Home assistant and overheating.

I flashed the new firmware but I encountered refresh problems with the manual commands. When I turn on and off and off the Home Assistant thermostat does not see the change of state until I send the command from hassio. I went back to the old version. Also when I flashed a GALW thermostat the thermostat overheats up to 30 degrees then freezes, but I don't know if the thermostat has failed. Before it worked with Tuya firmware. Even now it works but until it stops due to too much temperature.

Idle ?

If the target temperature is below the current temperature shouldn't the action payload be "idle" rather than "heating" ?

ECO mode issue

Hello,

I assume, when ECO mode is enable, then target Temperature should be read/only mqtt.

Now when I send ECO mode, my target Temperature set to value defined in firmware (that's correct). And I can't change it using buttons on thermostat (that's also correct), but I still have possibility to update targetTemperature value over mqtt

Ed

From Tasmota to WThermostatBeca

Hi,
I've had a few attempts (using tuya-convert) to flash a BHT-002 and unfortunately when the attempt was successful, I didn't have the bin file into my files section so I ended up with the standard Tasmota (tasmota-wifiman.bin) that was part of the tuya convert.
Is it possible now to flash the WThermostat file over the existing tasmota?
Thanks,
Dan

WiFi connecting to specific BSSID

I have now 9 thermostats running on my house. My house consists of 3 buildings and is made of concrete and I need use 6 Access Points by Ubiquiti Unifi wifi to cover my house. All are using same WiFI name. Sometimes thermostat connects to wrong WiFi Access Point because I use also UAP-AC-LITE and UAP-AC-LR and LR is long range version and sometimes device connects to LR instead of LITE which is closer to thermostat.

This is one of the improvements I have been thinking: For example at esphome.io (https://esphome.io/components/wifi.html?highlight=wifi) you can specity BSSID to connect primarily. Each Access Point has BSSID, which is the MAC address of the AP's radio for that service set. I could be useful to be able to push thermostat to connect to specific Access Point by specifying BSSID.

I don't know if this is possible to implement, but could help my setup to be more stable. I can fine tune with Wifi antenna strenght.

AP Wifi Password

Helo I flashed with tuya method. So far so good but I have now an AP Thermostat-Beca_xxxx and it asks me for a password to connnect. YOuld you mind telling me what password it is?

Thanks in advance

MQTT being flooded with log data from Clock

When running 1.09 firmware, the MQTT Broker is being flooded with data on xxxx/tele/log topic.
Every time the epoch count changes, data is being sent, resulting in floods of data to the MQTT Broker.

Data being sent is on topic xxxxx/tele/log and contains data
verbose: Clock: epoch: xxxxxxxx,timezone_diff: xxxxx, millis, xxxxxxxxx, nextSync: xxxxxx, lastTry: xxxx, lastSync: xxxx

Is there a way to turn this off to stop it flooding the MQTT Broker everytime the epoch time changes?

Thermostat changes to Unknown multiple times in Home Assistant

Hi @fashberg
Sorry to be a pain with this.
I have noticed, with that the firmware, when using Home Assistant Auto Discovery, will keep dropping the thermostat to unknown status and messes the history graph up, as well as Home Assistant not being able to access the device when in unknown status.
This only happens when using Auto Discovery, When using Manual MQTT HVAC setup it is fine.
I have tried downgrading, and this happens on 1.09, 1.10 and 1.11 firmware. I do not have 1.08 to try.
As you can see from below, it will do this every 5 minutes and stay unknown for one minute before becoming available again. Below is just a small extract from my Home Assistant log, but it shows it is regular. Again, this only happens with Auto Discovery. Manually added devices are rock solid.

Extract from my log file in Home Assistant:

8:00:07 PM
Central heating changed to heat
7:59:24 PM
Central heating changed to unknown
7:55:07 PM
Central heating changed to heat
7:54:24 PM
Central heating changed to unknown
7:50:07 PM
Central heating changed to heat
7:49:24 PM
Central heating changed to unknown
7:45:07 PM
Central heating changed to heat
7:44:24 PM
Central heating changed to unknown
7:40:07 PM
Central heating changed to heat
7:39:24 PM
Central heating changed to unknown

Thanks for the help

on off relais not reported

Hi

your bins works very good
except 1 thing,
if the relais switches to on, because of reaching the temp
i do not see anything changing in the mqtt massages
also with Off of course
which value should do that

properties/mode stays on "Heat" regardless of relay switch state
thanks

How to run temperature calibration

It's not a your firmware problem, just maybe you know.

Got another thermostat installed. And room temperature display wrong totally. About +10c (room temp 35.5 :) )
Found in manual that something like temperature calibration have to be run, but can't find a way how do that.

Anybody know way, or device is damaged?

Update:
Found the reason. My factory temperature offset was +9. Changed it, now everything working.

image

State "cooling" on heat only thermostat

I configured the thermostat as Floor heating (BHT-002-GBLW )
I upgraded from 1.03 to 1.06 and now on "state" properties field the thermostat are sending "heating" when the output is on and "cooling" when it's off.
But it should send "off" when the output is off, since this thermostat doesn't have cooling capabilities. Am I wrong?

Working Device - BHT-1000 GBW

Hi

Not an issue as such, justy a note to say I have updated a BHT-1000 GBW with your firmware and so far so good.

It has reported into HomeAssistant and working great

Just trying to change the time as it seems to be1 hour ahead even thought set to Europe/London

Cheers

payload of True ignored

HA sends true and false payloads out capitalised. Capitalised True is not recognised by your software. false and False both work, however.

Enclosing them in quotes in the HA payload is a workaround but then the state_on has to be explicitly added to the entity as the default is to match to the payload and "true" does not match the returned state of true, ie without quotes.
The example below works

switch:
  - platform: mqtt
    unique_id: ensuite_auto_enable
    name: "Ensuite can revert to Auto"
    state_topic: "ensuite/stat/things/thermostat/properties"
    value_template: >
      {{ value_json.switchBackToAuto }}
    command_topic: "ensuite/cmnd/things/thermostat/properties/switchBackToAuto"
    payload_on: "true"
    payload_off: false
# state normally not required to be here as it defaults to following payload values.
# but needed here as payload_on cannot be sent unquoted but state is returned unquoted.!
    state_on: true
    optimistic: false
    qos: 0
    retain: true

Can the Tuya thermostat be used without connecting a heating/cooling system?

Is it possible to use the BAC-1000 for two things only (without actually connecting an HVAC device):

  • letting the end-user view the room temperature
  • letting the end-user set a target temperature (that will be used by a virtual thermostat in home assistant)

I understand that the MCU (which we have no control over) decides what to show on the display. Will an error be displayed if it has nothing to switch on and off? And I assume that modifying the target temp from HASS is not a problem?

not an issue, but a question/request

Hi @fashberg !
I'm just wondering, will you implement the new feature what is debut in @klausahrenberg new (v1.09) fw? I mean the "Switch back to automatic mode".
And the question is still stands, why you guys don't work together? Both of your work are exceptional, and not too easy to make the decision which fw would be better to use. :)
Cheers

Moes BHT GCLW

Hi. I uploaded your fantastic firmware to my BHT Moes, but mine are GCLW. I have some problems with the mqtt sectars to set the minimum and maximum temperatures of the thermostat.
9A6B2B89-5D2A-4A22-B641-AA22F639690C
D2AA6170-11EB-4E6F-A5BC-E3950200CF78

targetTemp wrong on change from scheduleMode to Manual

@fashberg I did note one other little bug. When the thermostat is changed from Auto to Manual and the targetTemp updates, the JSON still sends the old targetTemp until the temperature is changed either in Home Assistant or on the thermostat.
Example:
The current schedule has a temperature of 15 but the manual temperature is set to 26. When changing to manual mode (changing auto to heat) the Thermostat turns on as it is set to 26 now, but the targetTemperature still sends 15.

Originally posted by @austwhite in #6 (comment)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.