4 reaktion på “Loggning av IVT 490”

  1. Snyggt jobbat med IVT och domoticz.
    Hur löste du så att alla ivt värden fick var sin tempgivare i domoticz?
    Jag håller på att få in alla värden från node-red som ett mqtt sträng till domoticz. Skall jag splitta dem med hjälp av ett script och tilldela dem var sin virtuell tempgivare i domoticz?
    Hälsningar,
    Tommy

    1. Hej!
      Tack. Jag kan posta skripten senare. Just nu är det ett python-script som tar emot datan från pumpen och postar det via en URL GET (Domoticz API). Sen delar ett lua-script upp strängen i delar och placerar ut värdena på virtuella enheter i domoticz.

  2. Hej igen,
    Nu har jag lyckats få in värden till resp. virtuell enhet i Domoticz. Jag löste det med att splittra upp variabel dumpen i Node-red och skicka separata MMQ meddelande till resp. virtuell enhet.
    Jag använde samma bild (planlösning) som du har vilket jag är nöjd med.
    Nästa utmaning är att identifiera alla värden från dumpen. Det är några parametrar kvar som jag inte vet vad de står för och tänkte höra med dig om du har koll på dessa? Det är är parametrarna 20 -29 (ej 23) samt sista nr 37 som jag inte lyckats hitta någon förklaring om vad de betyder. Hoppas du kan hjälpa mig inför det sista finjusteringen 🙂
    Hälsningar,
    Tommy

    1. Tyvärr så vet jag bara det ”alla andra” på nätet vet. Det som finns tillgängligt i diverse forum på nätet. Det saknas information.

      Här är mitt Lua-script i Domoticz.
      Det som börjar med ”pryl_” vet jag inte vad det är. 😉
      pi_temp är temperaturen på den Raspberry Pi som sitter under fronten på pumpen som postar datan till Domoticz via wlan. Jag skickar med den i slutet på strängen som pajen postar till Domoticzpajen. Domoticz har en användarvariabel som heter ”IVTData” som innehåller den senaste strängen som postats från pumpen. Pythonscriptet finns längre ner.

      commandArray = {}
      if uservariablechanged['IVTData'] then

      ivtdata = uservariables["IVTData"]

      function split(str,sep)
      local array = {}
      local reg = string.format("([^%s]+)",sep)
      for mem in string.gmatch(str,reg) do
      table.insert(array, mem)
      end
      return array
      end

      -- A function in Lua similar to PHP's print_r, from http://luanet.net/lua/function/print_r

      function print_r ( t )
      local print_r_cache={}
      local function sub_print_r(t,indent)
      if (print_r_cache[tostring(t)]) then
      print(indent.."*"..tostring(t))
      else
      print_r_cache[tostring(t)]=true
      if (type(t)=="table") then
      for pos,val in pairs(t) do
      if (type(val)=="table") then
      print(indent.."["..pos.."] => "..tostring(t).." {")
      sub_print_r(val,indent..string.rep(" ",string.len(pos)+8))
      print(indent..string.rep(" ",string.len(pos)+6).."}")
      else
      print(indent.."["..pos.."] => "..tostring(val))
      end
      end
      else
      print(indent..tostring(t))
      end
      end
      end
      sub_print_r(t," ")
      end

      local array = split(ivtdata,";")

      lopnr = array[1]
      framled_GT1 = array[2]
      ute_GT2 = array[3]
      tappvarmvatten_GT3_1 = array[4]
      varmvatten_GT3_2 = array[5]
      varmevatten_GT3_3 = array[6]
      rumstemp_GT5 = array[7]
      hetgastemperatur_GT6 = array[8]
      externgivare_temp_GT3_4 = array[9]
      tryckvakt_avfrost_GP3 = array[10]
      tryckvakt_hogtryck_HP = array[11]
      tryckvakt_logtryck_LP = array[12]
      externgivare_semester = array[13]
      kompressor_drift = array[14]
      schunt_oppna_SV1 = array[15]
      schunt_stang_SV1 = array[16]
      cirkpump_P1 = array[17]
      pryl_18 = array[18]
      larm = array[19]
      pryl_20 = array[20]
      pryl_21 = array[21]
      pryl_22 = array[22]
      borvarde_framledning_GT3_1 = array[23]
      pryl_24 = array[24]
      pryl_25 = array[25]
      pryl_26 = array[26]
      pryl_27 = array[27]
      pryl_28 = array[28]
      pryl_29 = array[29]
      extra_varmvatten1 = array[30]
      extra_varmvatten2 = array[31]
      extra_varmvatten3 = array[32]
      pryl_33 = array[33]
      elpatron1 = array[34]
      pryl_35 = array[35]
      elpatron2 = array[36]
      pryl_37 = array[37]
      pi_temp = array[38]

      --print_r(array)

      commandArray[#commandArray+1] = {['UpdateDevice'] = 436 .. '|0|' .. hetgastemperatur_GT6/10}
      commandArray[#commandArray+1] = {['UpdateDevice'] = 437 .. '|0|' .. ute_GT2/10}
      commandArray[#commandArray+1] = {['UpdateDevice'] = 440 .. '|0|' .. tappvarmvatten_GT3_1/10}
      commandArray[#commandArray+1] = {['UpdateDevice'] = 441 .. '|0|' .. varmvatten_GT3_2/10}
      commandArray[#commandArray+1] = {['UpdateDevice'] = 442 .. '|0|' .. varmevatten_GT3_3/10}
      commandArray[#commandArray+1] = {['UpdateDevice'] = 443 .. '|0|' .. framled_GT1/10}
      commandArray[#commandArray+1] = {['UpdateDevice'] = 444 .. '|0|' .. pi_temp}
      commandArray[#commandArray+1] = {['UpdateDevice'] = 815 .. '|0|' .. lopnr}
      --commandArray[#commandArray+1] = {['UpdateDevice'] = 450 .. '|0|' .. ivtdata}
      commandArray[#commandArray+1] = {['UpdateDevice'] = 451 .. '|0|' .. borvarde_framledning_GT3_1/10}
      --commandArray[#commandArray+1] = {['Variable:IVTDataTimestamp'] = tostring(os.time())}

      if (kompressor_drift == '1' and otherdevices['VP kompressor'] == 'Off') then
      commandArray[#commandArray+1]={['VP kompressor']='On'}
      end

      if (kompressor_drift == '0' and otherdevices['VP kompressor'] == 'On') then
      commandArray[#commandArray+1]={['VP kompressor']='Off'}
      end

      if (larm == '0' and otherdevices['VP larm'] == 'On') then
      commandArray[#commandArray+1]={['VP larm']='Off'}
      end

      if (larm ~= '0' and otherdevices['VP larm'] == 'Off') then
      commandArray[#commandArray+1]={['VP larm']='On'}
      end

      if (cirkpump_P1 == '1' and otherdevices['VP cirkulationspump (P1)'] == 'Off') then
      commandArray[#commandArray+1]={['VP cirkulationspump (P1)']='On'}
      end

      if (cirkpump_P1 == '0' and otherdevices['VP cirkulationspump (P1)'] == 'On') then
      commandArray[#commandArray+1]={['VP cirkulationspump (P1)']='Off'}
      end

      if (schunt_oppna_SV1 == '1' and otherdevices['VP schunt öppnar (SV1)'] == 'Off') then
      commandArray[#commandArray+1]={['VP schunt öppnar (SV1)']='On'}
      end

      if (schunt_oppna_SV1 == '0' and otherdevices['VP schunt öppnar (SV1)'] == 'On') then
      commandArray[#commandArray+1]={['VP schunt öppnar (SV1)']='Off'}
      end

      if (schunt_stang_SV1 == '1' and otherdevices['VP schunt stänger (SV1)'] == 'Off') then
      commandArray[#commandArray+1]={['VP schunt stänger (SV1)']='On'}
      end

      if (schunt_stang_SV1 == '0' and otherdevices['VP schunt stänger (SV1)'] == 'On') then
      commandArray[#commandArray+1]={['VP schunt stänger (SV1)']='Off'}
      end

      if (tryckvakt_avfrost_GP3 == '1' and otherdevices['VP tryckvakt avfrostning (GP3)'] == 'Off') then
      commandArray[#commandArray+1]={['VP tryckvakt avfrostning (GP3)']='On'}
      end

      if (tryckvakt_avfrost_GP3 == '0' and otherdevices['VP tryckvakt avfrostning (GP3)'] == 'On') then
      commandArray[#commandArray+1]={['VP tryckvakt avfrostning (GP3)']='Off'}
      end

      if (tryckvakt_hogtryck_HP == '1' and otherdevices['VP tryckvakt högtryck (GP3)'] == 'Off') then
      commandArray[#commandArray+1]={['VP tryckvakt högtryck (GP3)']='On'}
      end

      if (tryckvakt_hogtryck_HP == '0' and otherdevices['VP tryckvakt högtryck (GP3)'] == 'On') then
      commandArray[#commandArray+1]={['VP tryckvakt högtryck (GP3)']='Off'}
      end

      if (tryckvakt_logtryck_LP == '1' and otherdevices['VP tryckvakt lågtryck (GP1)'] == 'Off') then
      commandArray[#commandArray+1]={['VP tryckvakt lågtryck (GP1)']='On'}
      end

      if (tryckvakt_logtryck_LP == '0' and otherdevices['VP tryckvakt lågtryck (GP1)'] == 'On') then
      commandArray[#commandArray+1]={['VP tryckvakt lågtryck (GP1)']='Off'}
      end

      if (elpatron1 ~= '0' and otherdevices['VP elpatron 1'] == 'Off') then
      commandArray[#commandArray+1]={['VP elpatron 1']='On'}
      end

      if (elpatron1 == '0' and otherdevices['VP elpatron 1'] == 'On') then
      commandArray[#commandArray+1]={['VP elpatron 1']='Off'}
      end

      if (elpatron2 ~= '0' and otherdevices['VP elpatron 2'] == 'Off') then
      commandArray[#commandArray+1]={['VP elpatron 2']='On'}
      end

      if (elpatron2 == '0' and otherdevices['VP elpatron 2'] == 'On') then
      commandArray[#commandArray+1]={['VP elpatron 2']='Off'}
      end

      end

      return commandArray

      Pythonscriptet som körs på pajen:

      import requests
      import serial
      import re
      import time
      import os
      requests.packages.urllib3.disable_warnings()

      pattern = re.compile(r'\s+')

      # Return CPU temperature as a character string
      def getCPUtemperature():
      res = os.popen('vcgencmd measure_temp').readline()
      return(res.replace("temp=","").replace("'C\n",""))

      def readlineCR(port):
      rv = ""
      while True:
      ch = port.read()
      rv += ch
      if ch == '\r' or ch == '':
      return rv

      CPU_temp = getCPUtemperature()

      def get(data) :
      payload = {'type': 'command', 'param': 'updateuservariable', 'idx': '18', 'vname': 'IVTData', 'vtype': '2', 'vvalue': data+';'+CPU_temp}
      try :
      r = requests.get("http://192.168.1.xx:xxxx/json.htm", params=payload)

      #print(r.url)
      #print(r.text)
      except Exception as e:
      print "Oops! unable to post result!",e.__doc__,e.message

      port = serial.Serial("/dev/ttyUSB0", baudrate = 9600, timeout = 60)

      while True:
      rcv=''
      try :
      rcv = readlineCR(port)
      except Exception as e:
      print "Oops! problems reading from USB!"
      print e.__doc__
      print e.message
      rcv = re.sub(pattern, '',rcv)
      print(rcv)
      if rcv :
      get(rcv)
      else :
      print "Empty data..."

      Pythonscriptet körs genom /etc/rc.local och startsträngen ser ut så här:
      sudo su - pi -c "screen -dm -S IVTSerialMonitor python ~/IVTSerialMonitor.py"
      Då har jag en screen som jag kan återvända till när som helst i terminalen via ”screen -r” och sen CTRL+a följt av d för att ”detatcha” från screenen.

      På Domoticzpajen har jag också följande Lua-script:
      t1 = os.time()
      s = uservariables_lastupdate['IVTData']
      -- returns a date time like 2013-07-11 17:23:12

      year = string.sub(s, 1, 4)
      month = string.sub(s, 6, 7)
      day = string.sub(s, 9, 10)
      hour = string.sub(s, 12, 13)
      minutes = string.sub(s, 15, 16)
      seconds = string.sub(s, 18, 19)

      t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
      difference = (os.difftime (t1, t2))

      print("IVTData last updated: " .. s .. " (" .. difference .. " seconds)." )

      textDeviceIdx = 461
      commandArray[textDeviceIdx] = {['UpdateDevice'] = textDeviceIdx..'|0|'.. difference}

      if (difference > 300) then
      commandArray['SendNotification']='IVTData!#IVTData saknas sen mer än 5 minuter!'
      end

      return commandArray

      Det meddelar mig så fort datan är äldre än 5 minuter vilket betyder att något har hänt. Oftast så räcker det med att starta om pajen. Jag har också en notifiering på den virtuella enheten som aktiveras vid larm så att jag får ett meddelande om pumpen larmar av någon anledning. ”Motorskydd uppstart” tex…….

Kommentera