module Tado::History
Constants
- MAPPING
Public Class Methods
get(date = Date.today, home: nil, zone: nil, tado: nil)
click to toggle source
# File lib/tado/history.rb, line 3 def self.get(date = Date.today, home: nil, zone: nil, tado: nil) date = case date when Date then date.strftime('%Y-%m-%d') when /^\d{4}-\d{2}-\d{2}$/ then date else raise ArgumentError end report = if Zone === zone zone.v2_get("dayReport", date: date) elsif Tado === tado && Integer === home && Integer === zone tado.v2_get("homes/#{home}/zones/#{zone}/dayReport", date: date) else raise ArgumentError end self.parse_from_json(report) end
Private Class Methods
parse_from_json(json)
click to toggle source
# File lib/tado/history.rb, line 55 def self.parse_from_json(json) h = {} MAPPING.each {|name:, series:, fields: nil| e = h fields = [ nil ] if fields.nil? || fields.empty? name = Array(name) name[0..-2].each {|n| e = e[n] ||= {} } e[name.last] = History.timeSeries(json.dig(*series), fields) } h end
timeSeries(json, template)
click to toggle source
# File lib/tado/history.rb, line 68 def self.timeSeries(json, template) case type = json.dig('timeSeriesType') when 'slots' json.dig('slots').transform_values {|v| template.map {|fields| v.dig(*fields) } } when 'dataIntervals' json.dig('dataIntervals').map {|v| [ Time.parse(v.dig('from')) .. Time.parse(v.dig('to')) ] + template.map {|fields| v.dig('value', *fields) } } when 'dataPoints' json.dig('dataPoints').map {|v| [ Time.parse(v.dig('timestamp')) ] + template.map {|fields| v.dig('value', *fields) } } else raise ParsingError end end