Coder Social home page Coder Social logo

homeassistant's People

Contributors

danielhabenicht avatar jacobdonenfeld avatar mattiapette avatar moohan avatar panhans 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

homeassistant's Issues

Automation timeout if temperature changed manually

If temperature changed by an specified TRV and not by a home assistant related process all other TRVs should be set to this temperature/mode. After that manual change the automation doesn't change the states of the specified TRVs for a certain duration anymore.

Does the calibration adapt to big differences (regulation)

Hi @panhans,

I am looking for a blueprint, that solves a problem with my thermostat's temperature sensor. It is installed in a narrow niche, where it gets warm very quick, such that the thermostat always "thinks" it's much warmer than it's actually is.

I am using an external temperature sensor and see that thers's actually a difference of up to 2°C.

Would your automation be able to compensate for this? Such that it would set the target temperate to a higher value?

Grey background for e.g. room card

Hey man,

thanks for that wonderful theme you have created. I am playing around with it and customizing my rounded dashboard. My question is pretty stupid but as i am not familar with styling cards i couldn't figure it out myself.

How can i set that grey background that you have on your screenshots, for example, your room cards are on? I have copied your rounded.yaml and all templates but it is not showing up.

Again, sorry for that silly question. Thanks.

Best Regards,
Sebastian

Max temp if calibration sensor goes offline

I noticed one of my radiators had set itself to max the other day. On inpection I noticed that my calibration temperature sensor had dropped off the network. I am currently using generic calibration and the temperature sensor in an amazon echo dot using the alexa media player hacs integration.

Upon looking through the blueprint code, I wonder if it is triggering calibration with a value of "unknown" or "unavailable" causing it to go to the max temperature.

I don't currently have any logs available to share, but will test as soon as I can, though I have changed to a different temperature sensor in the meantime and likely won't go back to the sensor in the Echo as it's not reliable enough.

Calibration produces invalid float values

Hey,

I´m having an issue with your blueprint. The calibration does not work properly and produces errors like this:
Invalid value for number.thermostat_wz_local_temperature_calibration: -409364069.6 (range -5.0 - 5.0)

I think somewhere the float is not converted properly.

Best
Stefan

Nav Bar Position Stuck At Top

I really liked your take on the bottom nav bar, however using the code found in your rounded.yaml results in the nice larger buttons, but it is positioned at the top unlike the screenshots that you included.

y5bo44F

Using this section of code below it results in the picture above. Even if I use your entire rounded.yaml, it still stays at the top.

# Move navbar
 card-mod-root-yaml: |
    ha-tabs$: |
      #tabsContent {
        width: 97%;
        display: flex;
      }
      paper-icon-button {
        display: none;
      }
    .: |
      @media (orientation: portrait) {
        a.menu-link[target="_blank"], ha-button-menu, ha-menu-button, [main-title] {
          display: none !important;
        }
      div#view{
        transform: initial;
        padding: 0 !important;
        margin: 0 !important;
        width: 100%;
        padding-bottom: var(--header-height) !important;
      }
      .header {
        top: auto !important;
        bottom: 0; !important
        transform: translate3d(0px, 0px, 0px) !important;
        backdrop-filter: blur(50px);
        -webkit-backdrop-filter: blur(50px);
        -moz-backdrop-filter: blur(50px);
        -o-backdrop-filter: blur(50px);
        -ms-backdrop-filter: blur(50px);
        background-color: var(--contrast0) !important;
      }
      :host([scrolled]) .header {
        box-shadow: none !important;
      }
      .toolbar {
        height: var(--header-height) !important;
        padding: 10px 0px !important;
      }
      #view {
        padding-top: calc(-1 * var(--header-height)) !important;
      }
      ha-tabs {
        --paper-tabs-selection-bar-color: var(--header-tab-indicator-color) !important;
        --mdc-icon-size: 26px;
        display: flex;
        justify-content: space-between !important;
        padding: 20px;
        margin-top:15px;
        height:var(--header-height) !important;
      }
      paper-tab[aria-selected=true] {
        color: var(--header-active-tab-color);
        background-color: var(--header-active-tab-bg-color);
      }
      paper-tab {
        color: var(--header-all-tabs-color);
        border-radius: 17px;
        height:50px;
        padding: 0 20px;
      }

I tried out the section you commented out as well to see what that was, and the commented out code successfully moves the nav bar to the bottom but without the nicer formatting you have achieved in the code that isn't commented out.

Any chance you are able to help me figure out how to get it to show the nav bar like your screenshots show?

persistent state notification - no dismiss

Hi, I tried your blueprint - thank you very much for your work!
Creating the notification by my windows sensor works fine, but when I close the window again, the notificatin is not dismissed.
I am using a sensor which is only online (connects to the home assistant api) when it has changed its state. During the rest of the time it is switched off completely thus saving battery power.

AHC: Guest mode not working?

Hi
Is guest mode not working?
When i'm away I manually enable the guest mode if someone needs to go to my house, when testing the temperature target does not change from 18 to 20.5 (my eco and comfort temps) like it does when I'm home.
Reading the guest mode description I understood that it would emulate a person beeing home so the target should increase to the comfort zone, am I understanding this correctly?

My full automation setting:

alias: 🔥 Bedroom AHC
description: ""
use_blueprint:
  path: panhans/heating_control.yaml
  input:
    input_trvs:
      - climate.bedroom_thermostat
    input_temperature_minimum: input_number.eco_temp_camera
    input_temperature_comfort: input_number.comfort_temp_camera
    input_persons:
      - person.mattia
    input_mode_guest: input_boolean.guest_mode_toggle
    input_windows:
      - binary_sensor.bedroom_balcony_door
      - binary_sensor.bedroom_window_door
    input_temperature_sensor: sensor.bedroom_temp1
    input_calibration_timeout:
      hours: 0
      minutes: 0
      seconds: 30
    input_calibration_delta: 0.1
    input_mode_winter: input_boolean.enable_bedroom_heating

External temperature for arbitrary thermostat

I'm using Aqara E1 Thermostats which unfortunately don't have the required entities by the heating control blueprint. There seems to be some way to set an external sensor on the device but zha doesn't support it at all and zigbee2mqtt only with a few tricks. After looking a bit through the blueprint I thought about adding the calculated offset_new on the calculated temperature setpoint (which is probably what internally happens anyways when a thermostat has an offset entity). This is probably not an ideal solution and might lead to a constant readjustment of the temperature setpoint though.

Advanced Heating Control v4 set to 30°C and boost mode

Hi,
I am new to Hassio and am therefore not sure whether this is a bug or a mistake on my part.
Whenever I deploy the Advanced Heating Control v4, it is always set to 30°C and boost mode.

What is the best way to provide you with good data for analysis?

Sonoff TRV - ValueError: could not convert string to float:

Logger: homeassistant.helpers.event
Source: helpers/event.py:296
First occurred: January 21, 2024 at 4:35:14 PM (183 occurrences)
Last logged: 9:34:23 AM

Error while dispatching event for climate.living_room_trv_sonoff_trvzb_thermostat to <Job track state_changed event {'climate.living_room_trv_sonoff_trvzb_thermostat'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=(sensor: - platform: template sensors: room_temperature_wall_mounted: value_template: "{{ state_attr('climate.living_room_trv_sonoff_trvzb_thermostat', 'current_temperature') | float * 5 }}" unit_of_measurement: °C) renders=440>: <RenderInfo Template<template=(sensor: - platform: template sensors: room_temperature_wall_mounted: value_template: "{{ state_attr('climate.living_room_trv_sonoff_trvzb_thermostat', 'current_temperature') | float * 5 }}" unit_of_measurement: °C) renders=440> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'climate.living_room_trv_sonoff_trvzb_thermostat'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Error while dispatching event for climate.living_room_trv_sonoff_trvzb_thermostat to <Job track state_changed event {'climate.living_room_trv_sonoff_trvzb_thermostat'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=(sensor: - platform: template sensors: room_temperature_wall_mounted: value_template: "{{ state_attr('climate.living_room_trv_sonoff_trvzb_thermostat', 'current_temperature') | float * 5 }}" unit_of_measurement: °C) renders=442>: <RenderInfo Template<template=(sensor: - platform: template sensors: room_temperature_wall_mounted: value_template: "{{ state_attr('climate.living_room_trv_sonoff_trvzb_thermostat', 'current_temperature') | float * 5 }}" unit_of_measurement: °C) renders=442> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'climate.living_room_trv_sonoff_trvzb_thermostat'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Error while dispatching event for climate.living_room_trv_sonoff_trvzb_thermostat to <Job track state_changed event {'climate.living_room_trv_sonoff_trvzb_thermostat'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=(sensor: - platform: template sensors: room_temperature_wall_mounted: value_template: "{{ state_attr('climate.living_room_trv_sonoff_trvzb_thermostat', 'current_temperature') | float * 5 }}" unit_of_measurement: °C) renders=444>: <RenderInfo Template<template=(sensor: - platform: template sensors: room_temperature_wall_mounted: value_template: "{{ state_attr('climate.living_room_trv_sonoff_trvzb_thermostat', 'current_temperature') | float * 5 }}" unit_of_measurement: °C) renders=444> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'climate.living_room_trv_sonoff_trvzb_thermostat'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Error while dispatching event for climate.living_room_trv_sonoff_trvzb_thermostat to <Job track state_changed event {'climate.living_room_trv_sonoff_trvzb_thermostat'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=(sensor: - platform: template sensors: room_temperature_wall_mounted: value_template: "{{ state_attr('climate.living_room_trv_sonoff_trvzb_thermostat', 'current_temperature') | float * 5 }}" unit_of_measurement: °C) renders=446>: <RenderInfo Template<template=(sensor: - platform: template sensors: room_temperature_wall_mounted: value_template: "{{ state_attr('climate.living_room_trv_sonoff_trvzb_thermostat', 'current_temperature') | float * 5 }}" unit_of_measurement: °C) renders=446> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'climate.living_room_trv_sonoff_trvzb_thermostat'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Error while dispatching event for climate.living_room_trv_sonoff_trvzb_thermostat to <Job track state_changed event {'climate.living_room_trv_sonoff_trvzb_thermostat'} HassJobType.Callback <bound method TrackTemplateResultInfo._refresh of <TrackTemplateResultInfo {Template<template=(sensor: - platform: template sensors: room_temperature_wall_mounted: value_template: "{{ state_attr('climate.living_room_trv_sonoff_trvzb_thermostat', 'current_temperature') | float * 5 }}" unit_of_measurement: °C) renders=448>: <RenderInfo Template<template=(sensor: - platform: template sensors: room_temperature_wall_mounted: value_template: "{{ state_attr('climate.living_room_trv_sonoff_trvzb_thermostat', 'current_temperature') | float * 5 }}" unit_of_measurement: °C) renders=448> all_states=False all_states_lifecycle=False domains=frozenset() domains_lifecycle=frozenset() entities=frozenset({'climate.living_room_trv_sonoff_trvzb_thermostat'}) rate_limit=None has_time=False exception=None is_static=False>}>>>
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 644, in state
    numerical_value = float(value)  # type:ignore[arg-type]
                      ^^^^^^^^^^^^
ValueError: could not convert string to float: 'sensor:\n  - platform: template\n    sensors:\n      room_temperature_wall_mounted:\n        value_template: "86.5"\n        unit_of_measurement: °C'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/event.py", line 296, in _async_dispatch_entity_id_event
    hass.async_run_hass_job(job, event)
  File "/usr/src/homeassistant/homeassistant/core.py", line 691, in async_run_hass_job
    hassjob.target(*args)
  File "/usr/src/homeassistant/homeassistant/helpers/event.py", line 1215, in _refresh
    self.hass.async_run_hass_job(self._job, event, updates)
  File "/usr/src/homeassistant/homeassistant/core.py", line 691, in async_run_hass_job
    hassjob.target(*args)
  File "/usr/src/homeassistant/homeassistant/components/template/template_entity.py", line 429, in _handle_results
    self.async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 945, in async_write_ha_state
    self._async_write_ha_state()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1066, in _async_write_ha_state
    state, attr, capabilities, shadowed_attr = self.__async_calculate_state()
                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1003, in __async_calculate_state
    state = self._stringify_state(available)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 951, in _stringify_state
    if (state := self.state) is None:
                 ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 646, in state
    raise ValueError(
ValueError: Sensor sensor.test_template has device class 'temperature', state class 'measurement' unit '°C' and suggested precision 'None' thus indicating it has a numeric value; however, it has the non-numeric value: 'sensor:
  - platform: template
    sensors:
      room_temperature_wall_mounted:
        value_template: "86.5"
        unit_of_measurement: °C' (<class 'str'>)

Different tap_action and / or hold_action for each entity within the "rooms template"

Hi,

first of all, thanks for sharing your dashboard. I'm using and loving it. I am wondering if it is possible to have for each entity (e.g. light entity, climate entity etc.) a seperate tap_action or hold_action.

Only thing i have found is to use the "data:" attribute within the tap_action / hold_action, like this:

tap_action:
  action: call-service
  service: light.toggle
  data:
    entity_id: light.some_light
hold_action:
  action: call-service
  service: light.toggle
  data:
    entity_id: light.some_other_light

With this i am only able to use the tap_action for the whole template and all entity, not seperate. Hope you know what i mean. Thanks

Heating control suggestions

Hi there I don't use your heating control blueprint (yet). I have a combi boiler and ZigBee TRVs.

In my automations I have the following 2 features that I can't live without.

I only trigger TRV temperature changes if the boiler is actually on. Otherwise you drain battery moving the valves when there is no flow.

Before bed I preempt if the heating is going to come on overnight, if it is I open the bedroom TRV valves in anticipation by setting the target temperature high so that I am no woken by the noise of the valves opening in the night.

Make Presence time window in blueprints/automation/panhans/heating_control.yaml optional

Hi panhas,

i recently discovered your heating blueprint. I would like to have the possibility to monitor the presence sensor all day long. So only heat if there really is someone in the monitored room. I currently work around this by the following code removal. So the sensor is permanently disable:

https://github.com/panhans/homeassistant/blob/a20b74bfcc9b8a64b67d94fa8bb86e5ea5bf9341/blueprints/automation/panhans/heating_control.yaml#L339C81-L340C36

I'm on version 2.10 on HA 2023.10

Thanks for your help in advance

Support actions on zone notification

I'm looking for a blueprint that allows me to send a notification when I get back home which asks me whether I want to disable the alarm as action. Overall your zone notification extended bp comes pretty close to this, I'd only need a way to add additional actions to the notification. Any chance this would be possible to add?

Ability to Temporarily Override Schedules for Thermostat Control

I would like to inquire if there's a way to manually override schedules either through the thermostat itself or via inputs through HomeKit or Home Assistant, to temporarily suspend the scheduled settings for a certain period. Currently, when the schedule is set from 3 PM to 6 PM to 21 degrees, and if I manually adjust the temperature to 22 degrees at 5 PM, it often reverts back to 21 degrees after 5-10 minutes. I would appreciate it if you could investigate this behavior.

#Advanced Heating Control

unexpected temperature jumps with eurotronic spirit zigbee trv

Target temperature will set to 30°C for no reason when config changed or automation is reloaded and very often unconditional.
A screen shot says more than words.
Verlauf_05:00-12:00_23 08 2024
Screenshot 2024-03-24 at 21-50-34 Verlauf – Home Assistant
I saw in traces that calibration_aggressive_mode_thermostat_change will be called but i didn't enable that or do i want that.
I created some traces when it happens. I hope this helps.
https://www.dropbox.com/scl/fi/xdszoumtbgno5m32il1yw/spirit_zigbee.zip?rlkey=yy3ktqvorjm386m78r6m36w57&dl=0
I tested the trv with other heating blueprints and it doesn't happen there. So i am shure it has something to do with your blueprint.
I am happy to provide more infos.
Anyway, i use your blueprint with tuya and other trvs, and they works well.
Amazing work.

Cannot add include in ui-lovelace.yaml

The following error occurs if I try to add the line

button_card_templates: !include_dir_merge_named "ui/templates".

When I hit "save", this message pops up:

YAML kann nicht geparst werden: YAMLException: unknown tag !<!include_dir_merge_named> (1:63) 1 | ... _dir_merge_named "ui/templates" -----------------------------------------^ 2 | ... 3 | ...

I edited it in Lovelace Mode RAW config editor.

Create Scene transition time

Is there any way to change the transition speed between scenes? I have 3 scenes for one of my light groups and ranging from high, mid and low. So when I trigger the scene toggle on the light group and it cycles from the lowest setting to the highest setting instantly this is quite jarring. Is there any way to alter the transition time?

Advanced Heating Control - Window open not working

Danfoss TRVs, which are integrated via ZHA, don't support changing the heating mode to off, even though they present the option to do so. Every try to turn the TRV off, results in the error message Failed to write attribute system_mode=<SystemMode.Off: 0>: <Status.INVALID_VALUE: 135>. The TRA just supports setting the minimal temperature. This has already been reported to ZHA.
This behavior makes the blueprint to fail every time, the windows are opened. Even the option to use Eco instead of off didn't work.
The option to force minimum temperature instead of off in the blueprint version 3.x has been working flawlessly.
Reintroducing that option would be appreciated.

Zigbee requests lead to busy network

Hi,

first of all thanks for the great heating blueprint, it covers pretty much all of the use cases I have. However after switching all four of my thermostats to the blueprint I noticed that quite often the temperatures weren't adjusted even though the blueprint itself was executed as expected. After some debugging I found a lot of "NETWORK_BUSY" errors in the logs which meant that HA didn't send the change properly to the devices. This was caused by the automations sending new requests whenever they were executed even if there was no actual change. As I had motion sensors hooked up as presence detection for each room the automation was executed quite often. After removing the presence detection (was nice to have anyways) the automations are executed far less often and therefore don't spam the network anymore. I haven't observed the Zigbee error anymore.

TL;DR: Would it be possible to only call the climate services if actually required?

Heating Control: mode is allways "off"

First of all, great job!
Lots of nice stuff, but these home assistant automations are pretty hard to debug (not your fault at all).
I had the problem that the mode was always set to "off".
After a long time of trying, I found the corresponding bug and have already pointed it out in my comment here:
eddb5e7#r128192969
Keep up the good work.

[feature request] Adding a fix temperature offset

Hello,

first of all i like your blueprint. Nice work.
I have really slow tuya temperature sensors (30min between new values) and tuya trvs with no local temperature calibration.
I tried to use the calibration temperature sensor option in the blueprint and played a lot with the calibration timeout. But nothing works fine for me. For me its the best to calculate the temperature offset manually and change the eco and comfort temperature.
But now the problem: Its a little bit confusing to my family if there is a comfort temperature of 16°C and they rise it every time to hell.
So here my request: Can you add a static offset? Then i can change the comfort temperature back to 21°C and set the static offset till i have 21°C in the room.

regards
Nicolas

Presense sensor not working in combination with Proximity Sensor

My Setup is as follows:

  • Defined location tracker for when i am home or not
  • Defined a Proximity zone
  • Defined a Presence Sensor
  • AC used for coolling and heating
  • CV used for heating

When the proximity zone ( home ) has status ARRIVED, Location tracker is HOME and Presence sensor is off ( or changes to off ) the AC and Radiator are not turned off. When i remove the proximity zone it is working as expected.

H

Comfort Temparture

Hi,

Great blueprint .
But what is the comfort temperature. and how do i define it.
i now get No matching entities found
(i changed this part to a slider also) so this part is (I think) Okay now

But when i try to save the automation i receive the message
Message malformed: Missing input scheduler

Kind regards

Johan

Ignore Scheduler if device is online

Is it possible to ignore the scheduler, if an specific device is online?

Example:
If one specific person is at home, which is working from home, is a specific device online.
If this device is online, the scheduler should be ignore.
If a second person at home, the scheduler is working normally.

Changing temperature isn't possible when automatisation is running

Hi together,

the blueprint works well, except the point that I am not able to change the temperature of the thermostat. No matter if I try to do it physically or in homeassistant(is it necessary to create a new slicer entity to set eco/comfort temp?). The value always jumps back to the current comfort/eco temperature.

The "physical change" detection seems to work, because when I activated the "Start Party Timer On Physical Change" my timer is started within HA. But the temperature always resets.

Is there anyone else with similar problems? I am using this blueprint only for a few days. Many the issue relates to the latest update of HA?

trace automation.zph_felix_autom 2024-02-13T14_17_39.897764+00_00.json

Turn on heat if person at home without scheduler

Hi

Thanks for a great automation!

I have a heater that I would like to come on if there is someone at home, irrespective of the schedule.

It appears that if I don't have a schedule set up then the heating is always returned to minimum temperature even if there is someone home.

Is this expected behaviour?

Thanks in advance.

Glen

heating_control: add input_boolean to input_presence_sensor

I want to control my presence sensor via a automation. For this it would be easier if input_presence_sensor would also allow input_boolean as entity. Locally I've added it to the list of domains with no problem so far. Is there a reason for input_presence_sensor allowing only binary_sensor? If not could you add it or should I open a PR for it? :)

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.