This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Rituals Genie
#1
Here my code to control a Rituals Genie.

add a library
Code:
--[[
based on
    - https://community.home-assistant.io/t/restful-or-not-rituals-perfume-genie/167112
    - fibaro rituals genie quickapp
--]]

json = require('json')
https = require('ssl.https')
ltn12 = require('ltn12')
escape = require('socket.url').escape

-- rituals account
ritualsServer = 'https://rituals.sense-company.com'
ritualsUserName = 'xxx@xxxxxxxx.nl'
ritualsPassword = 'xxxxxxxx'

-- hubs
hubWoonkamer = 1  -- get from getHubs()


-- general debug logging
debug = false
function debugLog(iLog)
    if debug then
    log(iLog)
  end
end
 

-- general web request function
function request(endpoint, data, method)
  local url = ritualsServer .. endpoint
  local resp = {}
  local headers = {
    ['Content-Type'] = 'application/json'
  }
  local source

  if data then
    method = method or 'POST'
    source = ltn12.source.string(data)
    headers['Content-Length'] = #data
  else
    method = 'GET'
  end

  local res, code = https.request({
    url = url,
    method = method,
    headers = headers,
    source = source,
    sink = ltn12.sink.table(resp)
  })
  debugLog(res,code,resp)
 
  if res and code == 200 then
    return json.pdecode(table.concat(resp))
  else
    return res, code
  end
end


-- get account hash
function getAccount()
  data = '{\"email\": \"' .. ritualsUserName .. '\", \"password\": \"' .. ritualsPassword .. '\"}'
  resp = request('/ocapi/login', data, 'POST')
  accountHash = resp.account_hash
  return accountHash
end
--getAccount()


-- get hub hash
function getHubs(iHub)
    data = nil
    resp = request('/api/account/hubs/'..getAccount(), data, 'GET')
  if iHub then
      hubHash = resp[iHub].hub.hash
      return hubHash
  else
    debugLog(resp) -- get all hubs
  end
end
--getHubs()
--getHubs(hubWoonkamer)


-- get hub hash
function getHubInfo(iHub)
    data = nil
    resp = request('/api/account/hub/'..getHubs(iHub), data, 'GET')
    debugLog({'power:'..resp.hub.attributes.fanc, 'speed:'..resp.hub.attributes.speedc, 'cardridge:'..resp.hub.sensors.rfidc.title, 'volume:'..resp.hub.sensors.fillc.title})
end
--getHubInfo(hubWoonkamer)


-- set hub state
function setHubState(iHub, iState)
    if iState then oState = 1 else oState = 0 end
  data = '{\"hub\": \"' .. getHubs(iHub) .. '\",\"json\": {\"attr\": {\"fanc\": \"'..oState..'\"}}}'
  resp = request('/api/hub/update/attr', data, 'POST')
end
--setHubState(hubWoonkamer,true)
--setHubState(hubWoonkamer,false)


-- set hub speed (1=low, 2=med, 3=high)
function setHubSpeed(iHub, iSpeed)
  data = '{\"hub\": \"' .. getHubs(iHub) .. '\",\"json\": {\"attr\": {\"speedc\": \"'..iSpeed..'\"}}}'
  resp = request('/api/hub/update/attr', data, 'POST')
end
--setHubSpeed(hubWoonkamer,1)
--setHubSpeed(hubWoonkamer,2)
--setHubSpeed(hubWoonkamer,3)

use this code for example
Code:
require('user.nit_rituals')
setHubState(hubWoonkamer,true)
Reply


Forum Jump: