GithubHelp home page GithubHelp logo

iec62056-lora's Introduction

iec62056-lora

  • Periodically read current power, energy consumption and other OBIS-values from a electricity meter that support the IEC 62056-21 protocol.
  • Use LoRa/TTN to send the data to a (public or private) gateway
  • The gateway POST's the data to a Home-Assistant WebHook where the data is applied to several template sensors

State

  • Project is still work in progress (feel free to contribute)

  • In the beginning I was experimenting around with the Heltec lora esp32 micro-controller. That micro-controller is fully Arduino / Platformio compatible and work fine as long as you don't wanna power it by a battery as it consumed a lot of energy even in deep-sleep. Thus I switched to the Heltec CubeCell AB02 series that is specialized for battery operated use-cases.

  • I ran a long dozen of times up and down the staircase (third floor) down to the basement for this project - if you want to avoid that, free to buy me a coffee

    "Buy Me A Coffee"

My Hardware

Micro Controllers

Others

Installation

Heltec Cubecell AB02 (recommended)

Wiring

Pinout Diagramms:

Connect as following:

  • Optical Reading Head: VCC -> VEXT
  • Optical Reading Head: GND -> GND
  • Optical Reading Head: RX -> RX2 (GPIO 29)
  • Optical Reading Head: TX -> TX2 (GPIO 39)

Configuration

  • Rename credentials_example.h to credentials.h and provide your OTAA data
    • I generated random hex values for devEui, appEu and appKey
  • Select the correct board in the Arduino IDE:
    • Tools -> Boards -> CubeCell (in sketchbook) -> HTCC - AB02A
  • Set the LORAWAN values from within in the Arduino IDE:
    • Tools -> LORAWAN_REGION -> your-region (eg. EU_868)
    • Tools -> LORAWAN_CLASS -> A
    • Tools -> LORAWAN_DEVEUI -> CUSTOM
    • Tools -> LORAWAN_NETMODE -> OTAA
    • Tools -> AT_SUPPORT -> ON
  • Check/Adjust the ADJUSTME comments

Debugging / Hints

  • use the serial monitor in Arduino and change the DEFAULT_LOG_LEVEL to debug in the ino file

    • Attention: Make sure once everything works as intended to change it back to Info as too much logging has a negative impact on the power consumption (even if there is not serial monitor connected)
  • The smart meter is not interacted with as long as the LoRaWAN has not been initialized / OTAA-registered

    • uncomment the line deviceState = DEVICE_STATE_SEND in the wakeup procedure to directly read the smart meter data when the on-board user button is pressed without checking/waiting for a successfully LoRaWAN registration
  • Send a LoRaWan downlink message from your gateway to change the sleep time on demand. The message is read the next time the node wakes up.

    Port: 4
    payload: <desired-sleep-time-seconds-in-hex>  // 04B0 = 1200 seconds  = 20 min
    
  • Make sure you have a decent LoRaWAN connectivity where your smart-meter is located or nearby by using an extension cord/antenna. I played around with a simple LoRaWAN example sketch from Heltec to find a good spot with a decent connectivity:

    Examples -> CubeCell -> LoRa -> LoRaWAN -> LoRaWAN

    And then verified in my Lora-Gateway if the messages were received and if so, what their RSSI/SNR data were.

Heltec Wifi LoRA 32 V2 (deprecated)

  • Based on Platformio
  • Not suitable for my use-case as it consumed to much power (even in deep-sleep) and thus couldn't get it to operate by battery

Supported Smart Meters

  • Elster AS3000
    SKIP_CHECKSUM_CHECK
    METER_IDENTIFIER "ELS"
    BAUDRATE_CHANGE_DELAY: 500
    PARITY_SETTING SERIAL_7E1 
    OBIS_VALUE_POWER "1.7.0 "
    OBIS_VALUE_TOTAL_ENERGY "1.8.0"
    INITIAL_BAUD_RATE 300
    SERIAL_IDENTIFICATION_READING_TIMEOUT 2000
    SERIAL_READING_TIMEOUT  500
    MAX_METER_READ_TIME  60
    

Acknowledgements

Home-Assitant Template Sensors

- trigger:
    - platform: webhook
      webhook_id: lorawan-data
      id: lorawan-data
  unique_id: smart_meter
  sensor:
    - name: "Smart Meter Power"
      unique_id: smart_meter_power
      icon: mdi:flash-outline
      unit_of_measurement: W
      device_class: power
      state_class: measurement
      state: >-
        {% set payloadHex = trigger.json.data.payload_hex | default(none) %}
        {% set value = payloadHex[0:4] %}
        {% if value == '0000' %}
          {{ none }}
        {% else %}
          {{ value | int(value,16) }}
        {% endif %}

    - name: "Smart Meter Kwh"
      unique_id: smart_meter_kwh
      icon: mdi:chart-histogram
      unit_of_measurement: "kWh"
      state_class: measurement
      device_class: energy
      state: >-
        {% set payloadHex = trigger.json.data.payload_hex | default(none) %}
        {% set value = payloadHex[4:12] %}
        {% if value == '00000000' %}
          {{ none }}
        {% else %}
          {{ value | int(value,16)/100|float }}
        {% endif %}

    - name: "Smart Meter Battery"
      unique_id: smart_meter_battery
      icon: mdi:battery
      unit_of_measurement: "%"
      device_class: battery
      state: >-
        {% set payloadHex = trigger.json.data.payload_hex | default(none) %}
        {% set value = payloadHex[12:14] %}
        {% if value == '00' %}
          {{ none }}
        {% else %}
          {{ value | int(value,16) }}
        {% endif %}

    - name: "Smart Meter Battery Voltage"
      unique_id: smart_meter_battery_voltage
      icon: mdi:battery
      unit_of_measurement: "mV"
      state_class: measurement
      device_class: voltage
      state: >-
        {% set payloadHex = trigger.json.data.payload_hex | default(none) %}
        {% set value = payloadHex[14:18] %}
        {% if value == '0000' %}
          {{ none }}
        {% else %}
          {{ value | int(value,16) }}
        {% endif %}

    - name: "Smart Meter Up-Counter"
      unique_id: smart_meter_upcounter
      icon: mdi:counter
      unit_of_measurement: "times"
      state: >-
        {% set payloadHex = trigger.json.data.payload_hex | default(none) %}
        {% set value = payloadHex[18:20] %}
        {% if value == '00' %}
          {{ none }}
        {% else %}
          {{ value | int(value,16) }}
        {% endif %}

iec62056-lora's People

Contributors

pavax avatar

Stargazers

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

Watchers

 avatar

iec62056-lora's Issues

Unable to compile

Hi, I'm unable to compile sketch. Arduino 2.2.1.Appimage and CubeCell development framework 1.5.0 is installed. When I try to compile I get this error:

Detecting libraries used...
/home/username/.arduino15/packages/CubeCell/tools/gcc-arm-none-eabi/8-2019-q3/bin/arm-none-eabi-g++ -DREGION_AS923_AS1 -DCubeCell_HalfAA -DARDUINO=10607 -DACTIVE_REGION=LORAMAC_REGION_AS923_AS1 -DLORAWAN_PREAMBLE_LENGTH=8 -DLORAWAN_DEVEUI_AUTO=0 -DLORAWAN_CLASS=CLASS_A -DLORAWAN_NETMODE=true -DLORAWAN_ADR=true -DLORAWAN_UPLINKMODE=true -DLORAWAN_NET_RESERVE=false -DAT_SUPPORT=1 -DLoraWan_RGB=0 -DLoRaWAN_DEBUG_LEVEL=0 -DSOFT_SE -DCY_CORE_ID=0 -DCONFIG_LORA_USE_TCXO -DCONFIG_MANUFACTURER="ASR" -DCONFIG_DEVICE_MODEL="6501" -DCONFIG_VERSION="v4.0" -DARDUINO_ARCH_ASR650X -D__asr650x__ -D__ASR6502__ -DF_CPU=48000000L -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/board/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/board/src/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/board/inc/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/radio/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/device/sx126x/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/loramac -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/loramac/region/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/system/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/system/crypto/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/port/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/port/include/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/projects/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/projects/PSoC4/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/cores/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/Serial/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/Wire/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/SPI/ -mcpu=cortex-m0plus -mthumb -w -Wall -g -gdwarf-2 -Os -mapcs-frame -mthumb-interwork -fno-common -ffat-lto-objects -ffunction-sections -fdata-sections -fno-builtin-printf -fno-builtin-sprintf -fno-builtin-snprintf -fno-builtin-fflush -Wno-strict-aliasing -c -fno-exceptions -fexceptions -fno-rtti -w -x c++ -E -CC -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/variants/CubeCell-HalfAA /tmp/arduino/sketches/942A2AEC68E82C7EDAD59A724D57390F/sketch/heltec_cubecell.ino.cpp -o /dev/nullDetecting libraries used...
/home/username/.arduino15/packages/CubeCell/tools/gcc-arm-none-eabi/8-2019-q3/bin/arm-none-eabi-g++ -DREGION_AS923_AS1 -DCubeCell_HalfAA -DARDUINO=10607 -DACTIVE_REGION=LORAMAC_REGION_AS923_AS1 -DLORAWAN_PREAMBLE_LENGTH=8 -DLORAWAN_DEVEUI_AUTO=0 -DLORAWAN_CLASS=CLASS_A -DLORAWAN_NETMODE=true -DLORAWAN_ADR=true -DLORAWAN_UPLINKMODE=true -DLORAWAN_NET_RESERVE=false -DAT_SUPPORT=1 -DLoraWan_RGB=0 -DLoRaWAN_DEBUG_LEVEL=0 -DSOFT_SE -DCY_CORE_ID=0 -DCONFIG_LORA_USE_TCXO -DCONFIG_MANUFACTURER="ASR" -DCONFIG_DEVICE_MODEL="6501" -DCONFIG_VERSION="v4.0" -DARDUINO_ARCH_ASR650X -D__asr650x__ -D__ASR6502__ -DF_CPU=48000000L -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/board/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/board/src/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/board/inc/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/radio/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/device/sx126x/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/loramac -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/loramac/region/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/system/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/system/crypto/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/port/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/port/include/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/projects/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/projects/PSoC4/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/cores/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/Serial/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/Wire/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/SPI/ -mcpu=cortex-m0plus -mthumb -w -Wall -g -gdwarf-2 -Os -mapcs-frame -mthumb-interwork -fno-common -ffat-lto-objects -ffunction-sections -fdata-sections -fno-builtin-printf -fno-builtin-sprintf -fno-builtin-snprintf -fno-builtin-fflush -Wno-strict-aliasing -c -fno-exceptions -fexceptions -fno-rtti -w -x c++ -E -CC -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/variants/CubeCell-HalfAA /tmp/arduino/sketches/942A2AEC68E82C7EDAD59A724D57390F/sketch/heltec_cubecell.ino.cpp -o /dev/null
Alternatives for LoRaWan_APP.h: [[email protected]]
ResolveLibrary(LoRaWan_APP.h)
  -> candidates: [[email protected]]
/home/username/.arduino15/packages/CubeCell/tools/gcc-arm-none-eabi/8-2019-q3/bin/arm-none-eabi-g++ -DREGION_AS923_AS1 -DCubeCell_HalfAA -DARDUINO=10607 -DACTIVE_REGION=LORAMAC_REGION_AS923_AS1 -DLORAWAN_PREAMBLE_LENGTH=8 -DLORAWAN_DEVEUI_AUTO=0 -DLORAWAN_CLASS=CLASS_A -DLORAWAN_NETMODE=true -DLORAWAN_ADR=true -DLORAWAN_UPLINKMODE=true -DLORAWAN_NET_RESERVE=false -DAT_SUPPORT=1 -DLoraWan_RGB=0 -DLoRaWAN_DEBUG_LEVEL=0 -DSOFT_SE -DCY_CORE_ID=0 -DCONFIG_LORA_USE_TCXO -DCONFIG_MANUFACTURER="ASR" -DCONFIG_DEVICE_MODEL="6501" -DCONFIG_VERSION="v4.0" -DARDUINO_ARCH_ASR650X -D__asr650x__ -D__ASR6502__ -DF_CPU=48000000L -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/board/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/board/src/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/board/inc/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/radio/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/device/sx126x/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/loramac -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/loramac/region/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/system/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/system/crypto/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/port/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/port/include/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/projects/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/projects/PSoC4/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/cores/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/Serial/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/Wire/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/SPI/ -mcpu=cortex-m0plus -mthumb -w -Wall -g -gdwarf-2 -Os -mapcs-frame -mthumb-interwork -fno-common -ffat-lto-objects -ffunction-sections -fdata-sections -fno-builtin-printf -fno-builtin-sprintf -fno-builtin-snprintf -fno-builtin-fflush -Wno-strict-aliasing -c -fno-exceptions -fexceptions -fno-rtti -w -x c++ -E -CC -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/variants/CubeCell-HalfAA -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/libraries/LoRa/src /tmp/arduino/sketches/942A2AEC68E82C7EDAD59A724D57390F/sketch/heltec_cubecell.ino.cpp -o /dev/null
Alternatives for LoRaWan_102.h: [[email protected]]
ResolveLibrary(LoRaWan_102.h)
  -> candidates: [[email protected]]
Alternatives for LoRaWan_APP.h: [[email protected]]
ResolveLibrary(LoRaWan_APP.h)
  -> candidates: [[email protected]]
/home/username/.arduino15/packages/CubeCell/tools/gcc-arm-none-eabi/8-2019-q3/bin/arm-none-eabi-g++ -DREGION_AS923_AS1 -DCubeCell_HalfAA -DARDUINO=10607 -DACTIVE_REGION=LORAMAC_REGION_AS923_AS1 -DLORAWAN_PREAMBLE_LENGTH=8 -DLORAWAN_DEVEUI_AUTO=0 -DLORAWAN_CLASS=CLASS_A -DLORAWAN_NETMODE=true -DLORAWAN_ADR=true -DLORAWAN_UPLINKMODE=true -DLORAWAN_NET_RESERVE=false -DAT_SUPPORT=1 -DLoraWan_RGB=0 -DLoRaWAN_DEBUG_LEVEL=0 -DSOFT_SE -DCY_CORE_ID=0 -DCONFIG_LORA_USE_TCXO -DCONFIG_MANUFACTURER="ASR" -DCONFIG_DEVICE_MODEL="6501" -DCONFIG_VERSION="v4.0" -DARDUINO_ARCH_ASR650X -D__asr650x__ -D__ASR6502__ -DF_CPU=48000000L -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/board/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/board/src/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/board/inc/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/radio/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/device/sx126x/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/loramac -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/loramac/region/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/system/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/lora/system/crypto/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/port/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/port/include/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/projects/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/projects/PSoC4/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/cores/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/Serial/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/Wire/ -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x/SPI/ -mcpu=cortex-m0plus -mthumb -w -Wall -g -gdwarf-2 -Os -mapcs-frame -mthumb-interwork -fno-common -ffat-lto-objects -ffunction-sections -fdata-sections -fno-builtin-printf -fno-builtin-sprintf -fno-builtin-snprintf -fno-builtin-fflush -Wno-strict-aliasing -c -fno-exceptions -fexceptions -fno-rtti -w -x c++ -E -CC -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/cores/asr650x -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/variants/CubeCell-HalfAA -I/home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/libraries/LoRa/src /tmp/arduino/sketches/942A2AEC68E82C7EDAD59A724D57390F/sketch/heltec_cubecell.ino.cpp -o /dev/null
Alternatives for LoRaWan_102.h: [[email protected]]
ResolveLibrary(LoRaWan_102.h)
  -> candidates: [[email protected]]
  
Using library LoRa at version 1.0 in folder: /home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/libraries/LoRa 
Using library LoraMac_102 at version 1.0.2 in folder: /home/username/.arduino15/packages/CubeCell/hardware/CubeCell/1.5.0/libraries/LoraWan102 
exit status 1

Compilation error: exit status 1

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.