LogicMachine Forum
communication vbus solar resol - Printable Version

+- LogicMachine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Gateway (https://forum.logicmachine.net/forumdisplay.php?fid=10)
+--- Thread: communication vbus solar resol (/showthread.php?tid=346)

Pages: 1 2 3


RE: communication vbus solar resol - KoBra - 24.01.2023

(09.01.2023, 10:45)KoBra Wrote:
(09.01.2023, 09:29)admin Wrote: You need to remove these lines from the library:
Code:
  for _, searcher in ipairs(package.searchers or package.loaders) do
    name = "cjson"
    local loader = searcher(name)
    if type(loader) == 'function' then
      package.preload[name] = loader
      cjson  = require (name)
      break
    end
    name = "json"
    local loader = searcher(name)
    if type(loader) == 'function' then
      package.preload[name] = loader
      cjson  = require (name)
      break
    end
  end

  for _, searcher in ipairs(package.searchers or package.loaders) do
    name = "vbusprofiles"
    local loader = searcher(name)
    if type(loader) == 'function' then
      package.preload[name] = loader
      vbusprofiles  = require (name)
      break
    end
    name = "user.vbusprofiles"
    local loader = searcher(name)
    if type(loader) == 'function' then
      package.preload[name] = loader
      vbusprofiles  = require (name)
      break
    end
  end

  for _, searcher in ipairs(package.searchers or package.loaders) do
    name = "luavbuspacket"
    local loader = searcher(name)
    if type(loader) == 'function' then
      package.preload[name] = loader
      luavbuspacket  = require (name)
      break
    end
    name = "user.luavbuspacket"
    local loader = searcher(name)
    if type(loader) == 'function' then
      package.preload[name] = loader
      luavbuspacket  = require (name)
      break
    end
  end

now we go to 
Code:
User library vbus:303: bad argument #3 to 'format' (no value)
stack traceback:
[C]: in function 'format'
User library vbus:303: in function 'packetExtract'
User library vbus:205: in function 'waitData'

nobody with a clue?


RE: communication vbus solar resol - admin - 24.01.2023

Most likely that's a "luavbus.log" call. Find the relevant line in the library and add comments before this luavbus.log (--) to disable it:
Code:
-- luavbus.log(...)
But I think that it will fail somewhere else as the original error is caused by a missing variable/value.


RE: communication vbus solar resol - KoBra - 28.02.2026

I finally got it working thanks to AI. For everybody struggeling. Please find my working script below.
Code:
local http = require('socket.http')
local bit = require('bit')

-- CONFIGURATION
local url = 'http://192.168.1.1/current/current_packets.vbus'
local alarm_obj = '0/4/28' -- DPT 1.005: 1 = ALARM, 0 = OK

function parseVBus()
  local response, status = http.request(url)
 
  -- 1. HTTP Connection Check (Network/KM2 Failure)
  if status ~= 200 or not response then
    grp.checkupdate(alarm_obj, true) -- ALARM ON
    log("[SLL ALARM] KM2 unreachable. Network or Power issue.")
    return
  end

  local function getVal(b1, b2)
    if not b1 or not b2 then return 0 end
    local v = (b2 * 256) + b1
    if v > 32767 then v = v - 65536 end
    return v * 0.1
  end

  -- 2. Find the primary SLL Data Header
  local p = response:find('\16\00\113\34\16')
 
  if p then
    -- System is healthy
    grp.checkupdate(alarm_obj, false) -- ALARM OFF (OK)

    -- SENSORS
    local s1 = getVal(response:byte(p+16), response:byte(p+17))
    local s2 = getVal(response:byte(p+18), response:byte(p+19))
    local s3 = getVal(response:byte(p+20), response:byte(p+21))
   
    local s4 = 0
    local p_extra = response:find('\16\00\00\01\76', p)
    if p_extra then
       s4 = getVal(response:byte(p_extra+18), response:byte(p_extra+19))
    end

    -- PWM & RELAYS (Verified Mapping)
    local pwa = response:byte(p+32) or 0 -- PWM A
    local r2  = response:byte(p+33) or 0 -- Relay 2 (Diverting Valve)
    local mask = response:byte(p+40) or 0
    local r1  = (bit.band(mask, 0x01) == 0x01) and 100 or 0 -- Relay 1 (Pump Power)

    -- Safety Cleanup
    if pwa > 100 then pwa = 0 end
    if r1 > 100 then r1 = 100 end
    if r2 > 100 then r2 = 100 end

    -- KNX UPDATES
    grp.checkupdate('0/4/26', s1)
    grp.checkupdate('0/4/20', s2)
    grp.checkupdate('0/4/23', s3)
    grp.checkupdate('0/4/21', s4)
    grp.checkupdate('0/4/24', pwa)
    grp.checkupdate('0/4/27', r1)
    grp.checkupdate('0/4/25', r2)

  else
    -- 3. Data Header Missing (VBus Cable or Controller Mode Failure)
    grp.checkupdate(alarm_obj, true) -- ALARM ON
    log("[SLL ALARM] KM2 online but VBus data stream invalid.")
  end
end

parseVBus()